利用大型语言模型进行假新闻检测

运用大型语言模型检测假新闻

伪新闻被定义为传递或融入虚假、捏造或故意误导信息的新闻,早在印刷机的出现之初就存在。虚假新闻和谣言在网络上迅速传播,不仅欺骗公众,还可能对社会、政治、经济和文化产生深远影响。例如:

  • 培养对媒体的不信任
  • 破坏民主过程
  • 传播虚假或被质疑的科学(例如反疫苗运动)

人工智能(AI)和机器学习(ML)的进步使得创建和传播虚假新闻的工具变得更加容易。早期的例子包括先进的社交机器人和自动账户,它们可以加速传播虚假新闻的初始阶段。一般而言,公众很难确定这些账户是真实人物还是机器人。此外,社交机器人并非非法工具,许多公司合法购买它们作为营销策略的一部分。因此,想要系统地遏制社交机器人的使用并不容易。

最近在生成式人工智能领域的新发现使得通过大语言模型(LLMs)帮助以前所未有的速度产生文字内容成为可能。LLMs是具有超过10亿个参数的生成式AI文本模型,它们在高质量文本的合成中起到了促进作用。

在本文中,我们将探讨如何使用LLMs来解决检测虚假新闻这一普遍问题。我们建议,特别是在与信息检索工具结合使用改进的提示技术,例如 Chain-of-ThoughtReAct

我们通过创建一个LangChain应用来说明这一点,该应用会在给定一篇新闻后,使用自然语言通知用户文章的真实性或虚假性。该解决方案还使用Amazon Bedrock,这是一个完全托管的服务,通过AWS管理控制台和API可访问Amazon和第三方模型提供商提供的基础模型(FMs)。

LLMs和虚假新闻

随着互联网的出现,尤其是社交媒体的普及,虚假新闻现象正迅速演变(Nielsen et al., 2017)。在社交媒体上,虚假新闻能够快速在用户的网络中传播,导致公众形成错误的共同观点。此外,如果新闻与个人的价值观相吻合,人们通常会冲动地传播虚假新闻,忽视内容的真实性(Tsipursky et al. 2018)。社会科学的研究表明,认知偏见(确认偏见、盲从效应和选择性支持性偏见)是在创建和消费虚假新闻方面做出非理性决策的最关键因素之一(Kim, et al., 2021)。这也意味着新闻消费者只会在加强他们的信念方向上分享和消费信息。

生成式AI的强大能力以前所未有的速度产生文字和丰富内容,加剧了虚假新闻问题。一个值得一提的例子是深度伪造技术——将不同的图像组合到原始视频中,生成另一个视频。除了人类参与其中的故意误导,LLMs还带来了一系列全新的挑战:

  • 事实错误 – 由于LLMs的训练方式和在生成句子的下一个词时具有创造性的能力,它们包含事实错误的风险增加。LLMs的训练是基于不断向模型提供不完整的输入,然后使用机器学习训练技术,直到正确填补空白,从而学习语言结构和基于语言的世界模型。因此,尽管LLMs非常善于模式匹配和重组(”概率鹦鹉”),但它们在一些需要逻辑推理或数学推导的简单任务上失败,并且可能会产生幻觉式答案。此外,温度是LLM输入参数之一,它控制模型在生成句子的下一个词时的行为。通过选择较高的温度,模型将使用较低概率的词,提供更随机的回应。
  • 冗长性 – 生成的文本往往冗长,并且缺乏明确定义的个别事实。
  • 缺乏事实核查 – 在文本生成过程中没有标准化的可用工具来进行事实核查。

总的来说,人类心理学和AI系统的限制共同为网络上的假新闻和错误信息的扩散创造了一个完美的风暴。

解决方案概述

LLMs在语言生成、理解和少样本学习方面展示出了出色的能力。它们接受了来自互联网的大量文本语料训练,其中提取到的自然语言的质量和准确性可能无法保证。

在本文中,我们提供了一种基于”链式思维”和”反思和行动”的方法来检测假新闻的解决方案。首先,我们讨论这两种提示工程技术,然后展示它们在LangChain和亚马逊Bedrock中的实现。

下面的架构图概述了我们的假新闻检测器的解决方案。

假新闻检测的架构图。

我们使用包含陈述和关于陈述真假或不可验证的真相的子集FEVER数据集Thorne J. et al., 2018)。

工作流程可以分解为以下步骤:

  1. 用户选择一个陈述以检查其真假。
  2. 将陈述和假新闻检测任务合并到提示中。
  3. 提示被传递给LangChain,然后调用亚马逊Bedrock中的FM。
  4. 亚马逊Bedrock返回一个响应,将陈述标记为真或假。

在本文中,我们使用Anthropic的Claude v2模型(anthropic.claude-v2)。Claude是一种基于Anthropic研究的生成性LLM,专注于创建可靠、可解释和可操纵的AI系统。Claude使用了宪法AI和无害训练等技术,在思想性对话、内容创作、复杂推理、创造力和编码方面表现出色。然而,通过使用亚马逊Bedrock和我们的解决方案架构,我们还可以在亚马逊AI21labs、Cohere和Stability.ai提供的其他FM之间进行选择。

您可以在以下章节中找到实现细节。源代码可在GitHub存储库中找到。

先决条件

对于本教程,您需要在Linux、Mac或Windows Subsystem for Linux上安装了Python 3.9或更高版本的bash终端以及一个AWS账户。

我们还建议使用Amazon SageMaker Studio笔记本、AWS Cloud9实例或Amazon Elastic Compute Cloud(Amazon EC2)实例。

使用亚马逊Bedrock API部署假新闻检测

该解决方案使用亚马逊Bedrock API,可以通过AWS命令行界面(AWS CLI)、AWS SDK for Python (Boto3)Amazon SageMaker笔记本访问。更多信息请参阅Amazon Bedrock用户指南。在本文中,我们使用AWS SDK for Python通过亚马逊Bedrock API。

设置Amazon Bedrock API环境

要设置您的Amazon Bedrock API环境,请完成以下步骤:

  1. 下载最新的Boto3或升级它:

    pip install --upgrade boto3
  2. 确保使用aws configure命令配置AWS凭证,或将它们传递给Boto3客户端。

  3. 安装最新版本的LangChain

    pip install “langchain>=0.0.317” --quiet

您现在可以使用以下Python脚本测试您的设置。该脚本使用Boto3实例化Amazon Bedrock客户端。接下来,我们调用list_foundation_models API来获取可供使用的基础模型列表。

import boto3 import json bedrock = boto3.client( 'bedrock', region_name=YOUR_REGION) print(json.dumps(bedrock.list_foundation_models(), indent=4))

成功运行上述命令后,您应该会得到Amazon Bedrock中的FM列表。

LangChain作为提示链解决方案

为了检测给定句子的虚假新闻,我们遵循零-shot思维链推理过程(Wei J. et al., 2022),该过程由以下步骤组成:

  1. 首先,模型尝试创建关于提示新闻的陈述。
  2. 模型创建一个断言的项目符号列表。
  3. 对于每个断言,模型确定该断言是真还是假。请注意,在使用此方法时,模型仅依赖于其内部知识(在预训练阶段计算的权重)来达成决定。此时,信息没有与任何外部数据进行验证。
  4. 根据事实,模型对提示中给定的陈述回答TRUE或FALSE。

为了实现这些步骤,我们使用LangChain,这是一个由语言模型驱动的应用程序开发框架。该框架允许我们通过将各种组件串联起来创建高级用例来增强FM。在此解决方案中,我们使用LangChain中的内置SimpleSequentialChain来创建一个简单的顺序链。这非常有用,因为我们可以将一条链的输出作为另一条链的输入。

Amazon Bedrock与LangChain集成,您只需要在实例化Amazon Bedrock对象时传递model_id即可。如果需要,模型推断参数可以通过model_kwargs参数提供,例如:

  • maxTokenCount – 生成的响应中的最大标记数
  • stopSequences – 模型使用的停止序列
  • temperature – 介于0-1之间的值,其中0表示最确定性,1表示最有创造性
  • top – 介于0-1之间的值,用于根据潜在选择的概率控制标记的选择

如果这是您第一次使用Amazon Bedrock基础模型,请确保通过在Amazon Bedrock控制台上的模型访问页面中从模型列表中进行选择来请求访问模型,我们的案例中是来自Anthropic的claude-v2。

from langchain.llms.bedrock import Bedrockbedrock_runtime = boto3.client(    service_name='bedrock-runtime',    region_name= YOUR_REGION,)model_kwargs={        'max_tokens_to_sample': 8192    }llm = Bedrock(model_id=" anthropic.claude-v2", client=bedrock_runtime, model_kwargs=model_kwargs)

以下函数定义了我们之前提到的用于检测假新闻的思维链提示链。该函数将Amazon Bedrock对象(llm)和用户提示(q)作为参数。在这里,LangChain的PromptTemplate功能用于预定义生成提示的配方。

从 langchain.prompts 导入 PromptTemplate
从 langchain.chains 导入 LLMChain
从 langchain.chains 导入 SimpleSequentialChain
def generate_and_print(llm, q):
    total_prompt = """"""    # the model is asked to create a bullet point list of assertions
    template = """这是一个陈述:{statement}根据上述陈述,请列出您做出的假设。\n\n"""
    prompt_template = PromptTemplate(input_variables=["statement"], template=template)
    assumptions_chain = LLMChain(llm=llm, prompt=prompt_template)
    total_prompt = total_prompt + template    # the model is asked to create a bullet point list of assertions
    template = """这是一个陈述的重要观点列表:{assertions}对于每个观点,请确定其真实性(True)或错误性(False)。如果是错误的,请解释原因。\n\n"""
    prompt_template = PromptTemplate(input_variables=["assertions"], template=template)
    fact_checker_chain = LLMChain(llm=llm, prompt=prompt_template)
    total_prompt = total_prompt + template    #for each assertion, the model is askded to determine if the assertion is true or false, based on internal knowledge alone
    template = """根据上述观点,如果其中一个观点是假的,那么最终答案是错误(False)。否则,最终答案是正确(True)。请仅回答TRUE或FALSE。'{}'""".format(q)
    template = """{facts}\n""" + template
    prompt_template = PromptTemplate(input_variables=["facts"], template=template)
    answer_chain = LLMChain(llm=llm, prompt=prompt_template)
    total_prompt = total_prompt + template
    #SimpleSequentialChain allows us to take the output from one chain and use it as the input to another
    overall_chain = SimpleSequentialChain(chains=[assumptions_chain, fact_checker_chain, answer_chain], verbose=True)
    answer = overall_chain.run(q)
    return answer

以下代码调用我们之前定义的函数并提供了答案。声明是TRUEFALSETRUE表示提供的声明包含正确的事实,而FALSE表示声明中至少包含一个不正确的事实。

从IPython.display导入display,Markdown q="第一个获得计算机科学博士学位的女性是Barbara Liskov博士,她于1968年从斯坦福大学获得该学位。"print(f'声明是:{q}')display(Markdown(generate_and_print(llm, q)))

以下输出提供了一个陈述和模型的响应示例:

声明是:第一个获得计算机科学博士学位的女性是Barbara Liskov博士,她于1968年从斯坦福大学获得该学位。>进入新的SimpleSequentialChain链... 这是我对该陈述所做的一系列假设的观点列表:- Barbara Liskov博士是第一个获得计算机科学博士学位的女性。 - Liskov博士在美国斯坦福大学获得了博士学位。- 她在1968年获得博士学位。 - 在1968年之前,没有其他女性获得计算机科学博士学位。- 斯坦福大学在1968年设立了计算机科学博士学位项目。 - 该陈述指的是美国获得的博士学位。 这里是我对每个观点的评估:- Barbara Liskov博士是第一个获得计算机科学博士学位的女性。  - 真实。Liskov博士是第一个获得计算机科学博士学位的美国女性,她于1968年从斯坦福大学获得该学位。- Liskov博士在斯坦福大学获得了博士学位。  - 真实。多个来源确认她在1968年从斯坦福大学获得了博士学位。- 她在1968年获得了博士学位。  - 真实。这在各个来源中是一致的。- 在1968年之前,没有其他女性获得计算机科学博士学位。  - 错误。虽然她是第一个美国女性,但Mary Kenneth Keller在1965年从威斯康星大学获得了计算机科学博士学位。不过,Keller也是在美国获得该学位的。- 斯坦福大学在1968年设立了计算机科学博士学位项目。  - 真实。斯坦福大学在1965年设立了计算机科学系和博士学位课程。- 该陈述指的是美国获得的博士学位。  - 错误。原始陈述并未指定国家。我的假设认为它指的是美国是错误的。 Keller在Liskov之前在美国获得了博士学位。 False

ReAct和工具

在上面的例子中,模型正确地识别出该陈述是错误的。然而,再次提交查询显示了模型无法区分事实是否正确的能力。模型没有工具来验证陈述的真实性,超出了其自己的训练记忆,因此同一提示的后续运行可能会导致它将假陈述错误地标记为真实。在下面的代码中,您可以运行同一个例子的不同运行:

该陈述是:第一个获得计算机科学博士学位的女性是Barbara Liskov博士,她于1968年从斯坦福大学获得了学位。> 输入新的SimpleSequentialChain链...这是我对该陈述做出的一些假设的简要顺序列表:- Barbara Liskov博士是第一个获得计算机科学博士学位的女性- Liskov博士在1968年获得了博士学位- Liskov博士在斯坦福大学获得了博士学位- 斯坦福大学在1968年授予了计算机科学博士学位- Liskov博士是一个女性- 1968年存在博士学位- 1968年存在计算机科学作为一门学科以下是我对每个断言的评估:- Barbara Liskov博士是第一个获得计算机科学博士学位的女性    - 真实。Liskov博士是第一个在1968年从斯坦福大学获得计算机科学博士学位的女性。- Liskov博士在1968年获得了博士学位    - 真实。多个来源证实她于1968年从斯坦福大学获得了计算机科学博士学位。- Liskov博士从斯坦福大学获得了博士学位     - 真实。Liskov博士在1968年从斯坦福大学获得了计算机科学博士学位。- 斯坦福大学在1968年授予了计算机科学博士学位    - 真实。斯坦福大学在1968年授予了Liskov博士计算机科学博士学位,所以他们当时提供了这个学位。- Liskov博士是一个女性    - 真实。所有的传记资料都表明Liskov博士是女性。- 1968年存在博士学位    - 真实。博士学位从19世纪末就存在了。- 1968年存在计算机科学作为一门学科    - 真实。虽然计算机科学在20世纪60年代是一个相对新的领域,但斯坦福大学和其他大学在1968年已经将其作为一门学科和研究领域提供。真实

保证真实性的一种技术是使用ReAct。 ReAct(Yao S. et al., 2023)是一种通过增加代理行为空间来增强基本模型的提示技术。在本文和ReAct论文中,行为空间实现了使用简单的维基百科网络API进行信息检索、查找和完成操作。

与思维链相比,使用ReAct的原因是使用外部知识检索来增强基本模型,以检测给定新闻的真假。

在本文中,我们使用LangChain的ReAct实现,通过代理ZERO_SHOT_REACT_DESCRIPTION。我们修改之前的函数,实现ReAct,并使用维基百科,使用langchain.agents中的load_tools函数。

我们还需要安装维基百科软件包:

!pip install Wikipedia

以下是新代码:

from langchain.agents import load_tools, initialize_agent, AgentType, generate_and_print(llm, q):    print(f'Inside generate_and_print: q = {q}')    tools = load_tools(["wikipedia"], llm=llm)    agent = initialize_agent(tools, llm,                              agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,                              verbose=True,                             handle_parsing_errors=True,                             agent_kwargs={})    input = """Here is a statement:    {statement}    Is this statement correct? You can use tools to find information if needed.    The final response is FALSE if the statement is FALSE. Otherwise, TRUE."""    answer = agent.run(input.format(statement=q))        return answer

以下是给定相同陈述的上述函数的输出:

> 进入新的AgentExecutor链…以下是我思考和采取的行动,以确定陈述的真假:思考:为了验证关于计算机科学领域第一位获得博士学位的女性的陈述是否属实,我应该查阅可靠的信息来源,如维基百科。行动:维基百科行动输入:第一位获得计算机科学博士学位的女性观察结果:页面:赋泛滥基金工程与应用科学学院摘要:赋泛滥基金工程与应用科学学院(俗称SEAS或哥伦比亚工程学院;之前称为哥伦比亚矿业学院)是哥伦比亚大学的工程与应用科学学院。它成立于1863年,之后经历了矿业学院、矿业、工程和化学学院等阶段,最后成为工程与应用科学学院。1997年10月1日,该学院以中国商人傅增湘的名字更名,傅增湘为该学院捐赠了2600万美元。赋泛滥基金工程与应用科学学院与包括NASA、IBM、MIT和地球研究所在内的其他机构保持密切的研究联系。该学院的专利每年为大学带来超过1亿美元的收入。SEAS的教师和校友负责诸多技术成就,包括FM广播和激光器的发展。该学院的应用数学、生物医学工程、计算机科学和运筹学中的金融工程项目非常有名并在排名上位。目前SEAS的教师中包括27名工程院院士和一位诺贝尔奖获得者。总体而言,哥伦比亚工程学院的教师和校友在物理学、化学、医学和经济学领域共获得了10项诺贝尔奖。该学院每届约有300名本科生,并与其本科文理学院姊妹学院哥伦比亚学院保持密切联系,两校学生共用住房。目前,该学院的院长是张世富,他于2022年被任命为院长。页面:科学博士学位摘要:科学博士学位(拉丁文:Scientiae Doctor;通常缩写为DSc或ScD)是世界上许多国家授予的学术研究博士学位。在一些国家,科学博士学位是科学领域标准博士学位;而在其他国家,科学博士学位是授予对科学知识做出重要而持久贡献的人士的“高级博士学位”,其要求超出了哲学博士学位(博士学位)。页面:科学界女性时间表摘要:这是一个关于科学界女性的时间表,涵盖古代至21世纪。尽管时间表主要关注自然科学(如天文学、生物学、化学和物理学)领域的女性,但它也包括社会科学(例如社会学、心理学)和形式科学(例如数学、计算机科学)领域的女性,以及值得注意的科学教育家和医学科学家。时间表中列出的时间事件既涉及科学成就,也涉及科学领域内的性别平等。思考:根据维基百科页面的信息,该陈述似乎是错误的。维基百科的“科学界女性时间表”页面表明,Adele Goldstine是第一位于1964年从密歇根大学获得计算机科学博士学位的女性,而不是Barbara Liskov于1968年从斯坦福大学获得的。因此,我的最终答案是:最终答案:错误

清理工作

为了降低成本,删除教程中部署的所有资源。如果您启动了AWS Cloud9或EC2实例,可以通过控制台或使用AWS CLI删除它。同样,您可以通过SageMaker控制台删除您可能创建的SageMaker笔记本。

虚假新闻检测领域在科学界得到广泛研究。在本文中,我们使用了Chain-of-Thought和ReAct技术,并在评估技术时,我们只关注了提示技术分类的准确性(即给定陈述是否为真或假)。因此,我们没有考虑其他重要方面,如响应速度,也没有将解决方案扩展到维基百科以外的其他知识库来源。

尽管本文集中讨论了Chain-of-Thought和ReAct这两种技术,但在扩展性的研究中,已经有大量工作探索了LLM如何检测、消除或减轻虚假新闻。Lee等人提出了使用NER(命名实体识别)的编码器-解码器模型,通过掩盖命名实体来确保所屏蔽的标记实际上使用了语言模型中编码的知识。Chen等人开发了FacTool,它使用思维链原理从提示中提取要点,并相应地收集有关要点的相关证据。然后,LLM根据检索到的证据清单判断要点的真实性。Du等人提出了一种补充方法,多个LLM在多轮中提出和辩论各自的回答和推理过程,以达成共同的最终答案。

根据文献,我们发现当LLMs与外部知识和多代理对话能力相结合时,其检测假新闻的有效性会增加。但是,这些方法在计算上更加复杂,因为它们需要多次模型调用和交互、更长的提示和冗长的网络层呼叫。最终,这种复杂性会导致整体成本增加。我们建议在部署类似解决方案到生产环境之前,先评估成本与性能的比值。

结论

在本文中,我们探讨了如何使用LLMs来解决当今社会面临的流行假新闻问题,这是我们社会的主要挑战之一。我们首先概述了假新闻带来的挑战,重点强调其可能影响公众情绪并导致社会动荡。

然后,我们介绍了LLMs的概念,它是基于大量数据训练的先进AI模型。由于经过了广泛的训练,这些模型在语言理解方面表现出色,使它们能够生成类似人类的文本。利用这种能力,我们演示了如何通过使用Chain-of-Thought和ReAct两种不同的提示技术来利用LLMs在对抗假新闻方面发挥作用。

我们强调了LLMs如何能够在无与伦比的规模上提供事实核查服务,因为它们能够迅速处理和分析大量的文本。这种实时分析的潜力可以实现对假新闻的早期检测和控制。我们通过创建一个Python脚本来说明这一点,该脚本可以根据给定的陈述,向用户显示文章是真实还是虚假。

最后,我们强调了当前方法的局限性,并以希望的口吻结束,强调在正确的保护措施和持续改进的情况下,LLMs可能成为对抗假新闻的不可或缺的工具。

我们很想听听您的意见。请在评论部分告诉我们您的想法,或使用GitHub存储库的问题论坛。

免责声明:本文所提供的代码仅供教育和实验目的使用。请勿依赖此代码在真实的生产系统中检测假新闻或误导信息。使用这些代码来检测假新闻的准确性或完整性不提供任何保证。用户在在敏感应用中使用这些技术之前,应谨慎行事并进行尽职调查。

要开始使用Amazon Bedrock,请访问Amazon Bedrock控制台。