利用大型语言模型进行假新闻检测 机器学习博客
- 2026-01-27 13:18:15
- 6
利用大型语言模型进行假新闻检测
关键要点:
关键要点
假新闻的迅速传播对社会产生了负面影响,如破坏对媒体的信任和民主进程。人工智能和机器学习的发展为假新闻创作和传播带来了更便捷的工具。大型语言模型LLMs可以有效应用于假新闻检测,尤其结合提升的提示技术。本文介绍了一个基于LangChain和Amazon Bedrock的假新闻检测应用实例。假新闻是指传播虚假、伪造或故意误导的信息,早在印刷机出现时就已存在。在线假新闻和虚假信息的迅速传播不仅误导公众,还可能对社会、政治、经济和文化产生深远影响。其例子包括: 培养对媒体的不信任 破坏民主进程 传播错误或不被承认的科学例如,反疫苗运动
人工智能AI和机器学习ML的进步使得创造和分享假新闻的工具变得更加容易。早期的例子包括高级社交机器人和自动化账号,这些工具增强了传播假新闻的初始阶段。公众很难确定这些账号是人还是机器人。此外,社交机器人并不违法,很多公司合法购买它们作为营销策略。因此,系统性地遏制社交机器人的使用变得尤为困难。
LLM与假新闻
假新闻现象随着互联网及社交媒体的出现而迅速演变。在社交媒体上,假新闻可以在用户网络中快速传播,使公众形成错误的集体意见。此外,研究表明,认知偏见如确认偏见、随大流现象和选择支持偏见是产生和消费假新闻时最重要的因素之一。这意味着新闻消费者通常会分享和消费加强其信仰的信息。
生成AI在以空前速度生成文本和丰富内容方面的能力加剧了假新闻问题。值得提及的一个例子是深度伪造技术在原始视频上组合各种图像以生成不同的视频。除了人为因素带来的虚假信息意图,LLMs还增加了一整套新的挑战,包括:
事实错误:LLMs在生成下一个单词时具备创意的能力,因而存在更高的事实错误风险。冗长性:生成的文本通常较长且缺乏清晰的个别事实粒度。缺乏事实检查:在文本生成过程中没有标准化的工具可进行事实检查。总体而言,人类心理与AI系统的限制相结合,造成了假新闻和虚假信息在网上传播的完美风暴。
解决方案概述
LLMs在语言生成、理解和少样本学习方面展现了出色的能力。它们在互联网上的庞大文本语料库上进行训练,提取的自然语言的质量和准确性可能无法得到保证。
在本文中,我们提供了一种基于ChainofThought和ReAct提示方法进行假新闻检测的解决方案。首先,我们讨论这两种提示工程技术,然后展示其在LangChain和Amazon Bedrock中的实现。
以下架构图概述了我们的假新闻检测器解决方案。
迅猛兔加速器正版我们使用FEVER数据集的一个子集,包括一个陈述和有关该陈述的真实情况,指示假、真或无法验证的声明。
工作流程可以分解为以下步骤:1 用户选择要检查的声明,以判断是真是假。2 声明和假新闻检测任务被纳入提示中。3 提示被传递给LangChain,后者调用Amazon Bedrock的基础模型。4 Amazon Bedrock返回用户请求的回复,指示声明的真假。
在本文中,我们使用Anthropic的Claude v2模型anthropicclaudev2。Claude是一个生成LLM,基于Anthropic在创建可靠、可解释和可控制的AI系统方面的研究,擅长进行深入对话、内容创作、复杂推理、创造力和编码。
您可以在以下部分找到实施细节。源代码可在此GitHub库中找到。
前提条件
要进行本教程,您需要在Linux、Mac或Windows Subsystem for Linux上安装Python 39或更高版本,并拥有一个AWS账户。
我们还建议使用Amazon SageMaker Studio笔记本、AWS Cloud9实例或Amazon Elastic Compute CloudAmazon EC2实例。
使用Amazon Bedrock API部署假新闻检测
该解决方案使用可以通过AWS命令行界面AWS CLI、AWS SDK for PythonBoto3或Amazon SageMaker笔记本访问的Amazon Bedrock API。有关更多信息,请参阅Amazon Bedrock用户指南。在本文中,我们通过AWS SDK for Python使用Amazon Bedrock API。
设置Amazon Bedrock API环境
要设置Amazon Bedrock API环境,请完成以下步骤:
下载最新的Boto3或进行升级:bash pip install upgrade boto3
确保使用aws configure命令配置AWS凭证,或将凭证传递给Boto3客户端。安装最新版本的LangChain:bash pip install langchaingt=00317 quiet
现在您可以使用以下Python脚本测试您的设置。该脚本使用Boto3实例化Amazon Bedrock客户端。接下来,我们调用listfoundationmodels API以获取可用的基础模型列表。
pythonimport boto3 import json bedrock = boto3client(bedrock regionname=YOURREGION) print(jsondumps(bedrocklistfoundationmodels() indent=4))
成功执行以上命令后,您将获得Amazon Bedrock的FMs列表。
LangChain作为提示链解决方案
为了对给定句子进行假新闻检测,我们遵循零shot ChainofThought推理过程,该过程由以下步骤组成:
初始时,模型尝试对提示的新闻创建一条声明。模型创建一个断言的要点列表。对于每个断言,模型判断该断言是真还是假。请注意,采用这种方法,模型仅依赖其内部知识在预训练阶段计算的权重来得出结论。此时信息不经过任何外部数据验证。根据事实,模型对提示中给定的声明回答“真”或“假”。通过使用LangChain,一个支持语言模型的应用程序开发框架,我们实现了这些步骤。该框架允许我们通过将各种组件链接在一起,增强基础模型,创建复杂的用例。在本解决方案中,我们使用LangChain中的内置SimpleSequentialChain创建简单的顺序链。这非常有用,因为我们可以将一个链的输出作为另一个链的输入。
Amazon Bedrock与LangChain集成,因此您只需在实例化Amazon Bedrock对象时传递modelid。如果有需要,可以通过modelkwargs参数提供模型推理参数,如下所示:
maxTokenCount 生成的响应中的最大令牌数 stopSequences 模型使用的停止序列 temperature 一个介于0到1之间的值,0表示最确定,1表示最具有创造性 top 一个介于0到1之间的值,用于根据潜在选择的概率控制令牌的选择如果这是您第一次使用Amazon Bedrock基础模型,请通过在Amazon Bedrock控制台的模型访问页面从模型列表中请求访问,以我们这里的claudev2为例。
pythonfrom langchainllmsbedrock import Bedrockbedrockruntime = boto3client( servicename=bedrockruntime regionname=YOURREGION)modelkwargs={ maxtokenstosample 8192 }llm = Bedrock(modelid=anthropicclaudev2 client=bedrockruntime modelkwargs=modelkwargs)
以下函数定义了我们之前提到的用于检测假新闻的ChainofThought提示链。该函数接受Amazon Bedrock对象llm和用户提示q作为参数。这里使用LangChain的PromptTemplate功能预定义生成提示的配方。
pythonfrom langchainprompts import PromptTemplatefrom langchainchains import LLMChainfrom langchainchains import SimpleSequentialChain
def generateandprint(llm q) totalprompt =
# 请求模型创建一个断言的要点列表template = 这里是一个声明:{statement}在给定上述声明时,列出我所做假设的要点清单。nnprompttemplate = PromptTemplate(inputvariables=[statement] template=template)assumptionschain = LLMChain(llm=llm prompt=prompttemplate)totalprompt = totalprompt template# 请求模型创建一个断言的要点列表 template = 这里是断言的要点列表:{assertions}对于每个断言,判断它是真还是假。如果是假,请说明原因。nnprompttemplate = PromptTemplate(inputvariables=[assertions] template=template)factcheckerchain = LLMChain(llm=llm prompt=prompttemplate)totalprompt = totalprompt template# 对于每个断言,要求模型根据仅内部知识判断其真实性template = 根据上述断言,最终回应若有任何断言为假则回应FALSE,否则回应TRUE。您的回应应仅限于TRUE或FALSE。{}format(q)template = {facts}n templateprompttemplate = PromptTemplate(inputvariables=[facts] template=template)answerchain = LLMChain(llm=llm prompt=prompttemplate)totalprompt = totalprompt template# SimpleSequentialChain允许我们将一个链的输出用作另一个链的输入overallchain = SimpleSequentialChain(chains=[assumptionschain factcheckerchain answerchain] verbose=True)answer = overallchainrun(q)return answer以下代码调用我们定义的函数并提供答案。声明为TRUE或FALSE。TRUE表示所提供的声明包含正确的事实,FALSE表示声明包含至少一个错误的事实。
pythonfrom IPythondisplay import display Markdown
q = 第一位获得计算机科学博士学位的女性是巴巴拉利斯科夫博士,她于1968年在斯坦福大学获得了学位。print(f声明为:{q})display(Markdown(generateandprint(llm q)))
以下是声明及模型响应的示例输出:
plaintext声明为:第一位获得计算机科学博士学位的女性是巴巴拉利斯科夫博士,她于1968年在斯坦福大学获得了学位。
进入新的SimpleSequentialChain链 我对声明做出的假设要点列表包括: 巴巴拉利斯科夫博士是第一位获得计算机科学博士学位的女性。 利斯科夫博士在斯坦福大学获得了博士学位。 她在1968年获得博士学位。 在1968年之前没有其他女性获得计算机科学博士学位。 斯坦福大学在1968年开设了计算机科学博士项目。 该声明指的是在美国获得的博士学位。 对于每个断言的评估如下: 巴巴拉利斯科夫博士是第一位获得计算机科学博士学位的女性。 真。这一说法得到了确认,利斯科夫博士于1968年从斯坦福大学获得博士学位。 利斯科夫博士在斯坦福大学获得博士学位。 真。多个来源证实她于1968年在斯坦福获得博士学位。 她在1968年获得博士学位。 真。多个来源都表明这一事实。 在1968年之前没有其他女性获得计算机科学博士学位。 假。尽管她是第一位获得博士学位的美国女性,但玛丽肯尼斯凯勒于1965年在威斯康星大学获得了计算机科学博士学位。 斯坦福大学在1968年开设了计算机科学博士项目。 真。斯坦福于1965年设立了计算机科学系和博士项目。 该声明指的是在美国获得的博士学位。 假。原始声明未指定国家。我假设它指的是美国是错误的,凯勒在利斯科夫之前于美国获得了博士学位。假
ReAct与工具
在上述示例中,模型正确识别该声明为假。然而,重新提交该查询显示出模型对于事实的准确性辨别能力有限。该模型没有工具以验证声明的真实性,因此对同一提示的后续运行可能会导致错误标记虚假声明为真。下面的代码展示了同一示例的新运行:

plaintext声明为:第一位获得计算机科学博士学位的女性是巴巴拉利斯科夫博士,她于1968年在斯坦福大学获得了学位。
进入新的SimpleSequentialChain链 我对声明做出的假设要点列表包括: 巴巴拉利斯科夫博士是第一位获得计算机科学博士学位的女性 利斯科夫博士1968年获得博士学位 利斯科夫博士在斯坦福大学获得博士学位 斯坦福大学在1968年授予的博士学位 利斯科夫博士是一位女性 1968年存在博士学位 1968年存在计算机科学这一学科 对于每个断言的评估如下: 巴巴拉利斯科夫博士是第一位获得计算机科学博士学位的女性 真。利斯科夫博士于1968年在斯坦福大学获得了计算机科学博士学位。 利斯科夫博士1968年获得博士学位 真。多个来源证实她于1968年获得博士学位。 利斯科夫博士在斯坦福大学获得博士学位 真。利斯科夫博士在1968年获得计算机科学博士学位。 斯坦福大学在1968年授予的博士学位 真。斯坦福在1968年授予了利斯科夫博士学位,因此当时已提供该学位。 利斯科夫博士是一位女性 真。所有传记信息均指示利斯科夫为女性。 1968年存在博士学位 真。博士学位自19世纪晚期就已存在。 1968年存在计算机科学这一学科 真。尽管计算机科学在1960年代还是一个相对较新的学科,但斯坦福及其他大学在1968年以此为研究和学习领域。真
保证真实性的一种技术是ReAct。ReAct是一种增强基础模型的代理行动空间的提示技术。本文中及ReAct论文中,行动空间通过使用简单的维基百科API的检索、查找和完成等动作来实现信息检索。
采用ReAct与ChainofThought进行比较的原因在于,通过外部知识检索增强基础模型,以检测给定新闻的真实性。
在本文中,我们通过LangChain的ZEROSHOTREACTDESCRIPTION代理实现ReAct。我们修改之前的函数以实现ReAct,并通过使用langchainagents的loadtools函数调用维基百科。
我们还需要安装维基百科包:
bash!pip install Wikipedia
以下是新的代码:
pythonfrom langchainagents import loadtools initializeagent AgentType
def generateandprint(llm q) print(fInside generateandprint q = {q}) tools = loadtools([wikipedia] llm=llm) agent = initializeagent(tools llm agent=AgentTypeZEROSHOTREACTDESCRIPTION verbose=True handleparsingerrors=True agentkwargs={})
input = 这里是一个声明:{statement}这个声明是否正确?如果需要,可以使用工具找到信息。如果声明为假,最终回答为FALSE。否则,回应TRUE。answer = agentrun(inputformat(statement=q))return answer以下是调用前面定义的函数后的输出结果,以同一声明为例:
plaintext
进入新的AgentExecutor链 以下是我思考和行动以判断声明真假:
思考