AI 文摘

再谈大模型的事实性幻觉如何评估:事实性评估的界定及FACTOOL事实性检测框架原理介绍





作者: 老刘说NLP 来源: 老刘说NLP

今天是7月27日,周四,晚间下雨。

在前面的文章《引证生成让大模型问答结果更为可信:也看大型语言模型生成带引证的文本方法与评估基准ALCE》​地址:https://mp.weixin.qq.com/s/HFuerrV5l7h7YB7y_HzY9w,中我们介绍了知识可信的评估方法。

我们再来看关于大模型评估的工作,这次来讲讲如何验证模型事实性也就是幻觉的话题。

实际上,以GPT-4为代表的生成式人工智能(AI)技术将自然语言处理中的各种任务整合为一个单一的序列生成问题。这种统一的架构使用户能够通过自然语言交互界面完成多种任务(如问题解答、代码生成、数学问题求解和科学文献生成,并具有前所未有的性能和交互性。

然而,这种生成范式也带来了一些独特的挑战 由于大型语言模型(LLMs)的能力有限,自动生成的内容可能会出现不准确或偏离事实的情况,大型语言模型很容易产生看似可信但实际上可能与事实不符或不准确的内容。这种局限性限制了生成式人工智能在一些高风险领域的应用,如医疗保健、金融和法律。

因此,必须系统地识别这些错误,以提高生成内容的实用性和可靠性。

实际上,目前关于检测和减少模型产生事实错误的工作已经有一些,但主要集中在单个特定任务上,例如,用于质量保证的检索增强验证模式、用于文本摘要的幻觉检测模型以及基于执行的代码评估。

虽然这些方法在各自的领域都取得了成功,但鉴于 LLMs 所负责的任务和领域具有显著的多样性,该工作认为建立一个类似的更全面的事实性检测和验证框架也很重要。

那么,什么是事实性检测,在目前的文献中,事实性检测任务通常被简化为:给定一个主张(claim,我在这里翻译为主张),确定它在事实方面是否正确;或给定证据,确定生成的主张是否得到支持。但很显然的是,这种任务定义并不适合用户在与生成模型(如 ChatGPT)交互时通常参与的写作任务,在这种情况下,通常需要验证没有明确主张和证据的长格式生成的事实性。

针对上述问题,最近的工作FACTOOL 生成式人工智能中的事实性检测用于多任务和多领域场景的工具增强框架 《FACTOOL: Factuality Detection in Generative AI A Tool Augmented Framework for Multi-Task and Multi-Domain Scenarios》被提出,该框架旨在消除 LLM 生成文本中的事实错误。其思想在于,将 “工具使用 “的概念与 “事实性检测 “联系起来,并证明在 LLM 中使用工具的能力对于事实性检测至关重要。

具体来说,FACTOOL 利用各种工具,包括谷歌搜索、谷歌学术、代码解释器、Python 甚至 LLM 本身,来收集生成内容的真实性证据,并利用 LLM 的推理能力,根据收集到的证据评估内容的真实性。

在结果上,在四种不同任务(基于知识的质量保证、代码生成、数学推理和科学 科学文献综述)的实验表明了所提方法的有效性。

地址:https://github.com/GAIR-NLP/factool

这个工作的思路很清晰,数据构造方式和评估机制都有说明,尤其是对事实性的扩展,值得关注,本文对该工作进行介绍,供大家一起参考。

一、生成式模型事实检测任务定义

在之前的大多数工作中,事实性被定义为文本中的主张是否可以从一个独立的、可信的知识库中获得证据支持,并应用于事实检查(其中知识库是维基百科这样的大型来源)和总结(其中知识库是一个或多个输入文档)。

该工作将这一定义扩展到生成的信号(可以是文本、代码或数学示例等)中的主张是否能在特定规则下得到证据支持。

具体来说,这些规则可以是与维基百科知识库的一致性,也可以是 Python 库中指定的验证规则,还可以是源自数学的运算规则。

通过采用这一更广泛的定义,能够建立一个统一的框架,用于解决生成式人工智能中的事实性问题,而不仅仅局限于文本领域。

因此,该框架构成结构上,可以定义为以下概念的组合,即给定一个提示(如查询或指令)和相应的模型生成的回复,事实性检测任务涉及以下概念:

提示(p)用户向生成模型提出的询问或指令。

回复 (r) 由生成模型生成的一段文本(通常为长篇)。

主张 (c) 从模型回复中推断出的陈述,其粒度由自然语言文本定义。

证据 (e) 支持或证明主张的真实性或有效性的可用信息(如知识库、预定义规则)。

利用上述任务定义,可以定义出四种不同应用场景中的实际情况,如下表所示:

首先,基于知识(KB)的问答场景。旨在使用给定的知识库或开放域数据源(如维基百科)回答问题。在这项任务中,将事实性定义为生成答案中的每个主张在多大程度上得到了知识库的支持。

其次,代码生成场景。 代码生成任务涉及根据给定查询生成可执行代码,将代码生成中的事实性定义为生成的代码作为一个整体在特定编程语言(如 Python)中正确执行并满足所提供要求的程度。这一定义的基础是基于执行的代码评估方法,即通过针对某些测试用例输入执行生成的代码,并将其输出与预期输出进行比较,来衡量生成代码的正确性。

然后,数学问题求解场景。数学问题求解任务涉及使用自动化方法解决数学问题。在主张层面,数学问题求解的事实性被定义为生成的语句在多大程度上符合计算规则。在回答层面,数学解题中的事实性是指整个数学解决方案如何有效地解决给定的问题。

最后,科学文献综述写作场景。在这项任务中,事实性定义为所生成的科学文献综述是否正确引用了现有的科学文献,包括是否正确提及了作者和发表年份。

二、事实性检测具体实现框架

FACTOOL 利用各种工具,包括谷歌搜索、谷歌学术、代码解释器、Python 甚至 LLM 本身,来收集生成内容的真实性证据,并利用 LLM 的推理能力,根据收集到的证据评估内容的真实性。

其使用工具的动机有两个方面。一方面,每个工具都体现了该领域的专业知识,可以帮助我们有效地收集证据来验证主张的正确性。另一方面,LLM 利用多种工具的能力为多种工具增强的事实性检测铺平了道路。

例如,通过直接使用 ChatGPT 插件,可以将多种工具整合到聊天机器人中。

该框架如图 1 所示,由五个主要部分组成:主张提取、查询生成、工具查询、证据收集和一致性验证。

具体的执行样例如图2所示。

1、主张提取

由于不同任务和场景下的权利要求定义不一致,因此从不同任务设置下的回复中提取主张具有挑战性。

这种不一致性阻碍了诸如文本摘要评估和事实性检测等应用的开发。为了解决这个问题,该工作使用 ChatGPT 作为基础 LLM,并在四个任务中应用了不同的主张文本定义,最后使用如下所示的prompt进行生成。

具体地,

对于基于知识库的问答场景, 利用 ChatGPT4来提取基于两个条件的主张: (i) 每个主张不应超过 15 个字;(ii) 应清楚地描述一个事实。

对于代码生成场景, 提取所有用括号括起来的代码片段作为主张。

对于数学问题场景,我们将逐步数学解决方案中的每个请求定义为在已知实数之间执行的算术运算。每个运算都包含两个部分:计算和计算出的答案。

对于科学文献综述场景,生成的综述中的每个主张都被定义为包含在生成的综述中的”(论文标题、年份、作者)“元组。

2、查询生成

在完成提取后,将每个主张转换成一个查询列表,用于查询外部工具,如搜索引擎、Python 解释器或 Google scholar。

具体地,

针对基于知识库的问答场景, 提示 ChatGPT 或 GPT-4 为每个主张生成两个搜索引擎查询。这些查询旨在帮助人类验证 ci 的真实性。提示词如下:

针对代码生成场景, 对于每个主张,生成模拟测试案例输入和潜在解决方案两种不同的查询。模拟测试用例输入是为给定代码片段生成的函数调用,而潜在解决方案则是 ChatGPT 根据用户提示 p 生成的重复生成解决方案。

针对数学问题 场景,会提示 ChatGPT 或 GPT-4 将所有数学运算转换为可执行的 Python 代码片段。这些代码段的目的是在计算结果与计算答案一致时返回 “真”,不一致时返回 “假”。

针对科学文献综述场景,使用所提取主张元组中论文标题作为 Google Scholar 的查询条件。其逻辑在于:如果论文存在,那么当使用论文标题作为查询时,它应该出现在谷歌学术的第一个搜索结果中。

3、工具查询和证据收集

在完成查询后,使用查询来查询各种工具,以收集相关的证据语句 。

具体地,

对于基于知识库的问答场景, 使用谷歌搜索 API 这一外部工具来帮助验证生成文本的事实性,该工具使用从 LLM 生成文本中提取的声明生成的查询来查询互联网上的知识。

具体的,使用 Serper提供的谷歌搜索 API 搜索顶部页面,并检索 API 响应中包含的最相关搜索片段。然后对回复进行解析,以获取不同类型的片段,如答案框、知识图谱和有机搜索结果。

对于代码生成场景,对于每个测试用例输入 ti 和生成的潜在解决方案 sj,使用 ti 作为输入执行 sj,并收集每个 (ti,sj) 对的执行结果(输出)。输入输出对作为测试用例,用于验证聊天机器人生成的未验证解决方案。

针对数学问题场景, 收集了代码片段的执行结果,如图 2 所示,数学问题 GPT-4 提取出 “30 /3 = 10 “这样的数学问题,然后将其转化为 Python 可执行代码,例如,“print(round(30/3, 7)==10)"。

对于科学文献综述场景,使用从文本中提取的每篇论文的标题作为查询条件,通过 Scholarly Python 软件包提供的 Google Scholar API 获取相关信息,如此一来,可以能检索到每篇论文的关键信息,包括论文标题、作者列表和出版年份。

4、一致性验证

最后一步是一致性验证,其根据收集到的证据对每个主张的支持程度,每个主张都会被打上事实性标签 Li∈{TRUE, FALSE}。

具体地,

对于基于知识库的问答场景, 提示 ChatGPT 或 GPT-4 根据检索到的证据片段列表判断索赔的真实性,具体实现时采用 “0-shot Chain-of-Thought"的推理过程,即先模型会尝试推理主张是否符合事实,如果发现错误,则要求它解释并尝试纠正错误。

对于代码生成场景,首先对每个测试用例的所有解决方案进行多数表决,并为该特定测试用例生成伪标结果,并对每个测试用例重复这一过程。然后,将正在验证的解决方案的执行结果与所有测试用例的伪标结果进行比较。如果结果一致,就将正在验证的解决方案归类为 “真”。反之,则视为错误。

对于数学问题场景,编译每个代码片段的执行结果。如果任何代码片段返回 “假”,则将相关生成的文本 x 归为假。反之,如果所有代码片段都返回 “真”,则将相应生成的文本 x 归为 “真”。

对于科学文献综述场景, 将提取的主张”(论文标题、年份、作者)“与 从谷歌学术 API 获取的”(论文标题、年份、作者)“进行比较。具体的,对于论文标题和发表年份,进行精确的、不区分大小写的字符串匹配。至于作者的匹配,提示 ChatGPT 或 GPT-4,以判断提取的作者列表是否是检索到的作者列表的子集。所有信息必须匹配才能被归类为 “真”,否则为 “假”。

三、框架有效性的评估

为了验证该方法的有效性,该工作进行了实际的效果验证,我们先看看****在提示和回复数据的构建问题。

1、测试数据的构造

对于基于知识库的问答场景,使用 RoSE和 FactPrompts 进行评估。RoSE 是一个文本摘要数据集,可为每个参考摘要提供细粒度的 ACU。FactPrompts 是一个数据集,由来自不同平台和数据集(如 Quora 和 TruthfulQA)的真实世界提示以及 ChatGPT 生成的相应回复组成。

实际操作上,使用来自 RoSE 的 100 个参考摘要和来自 FactPrompts 的 50 个回复来构建数据集。

对于代码生成 场景,使用 HumanEval进行评估。HumanEval 是一个编程问题数据集,每个问题都包含若干单元测试。使用 ChatGPT 根据HumanEval提供的经过处理的提示生成回复,这些提示仅包含提示指令,没有输入输出演示。

对于数学问题场景,使用 GSM-Hard进行评估。GSM-Hard 是根据 GSM8K构建的数据集,该工作从 GSM-Hard 中抽取了 100 个目标解值为正的提示。

对于 科学文献综述场景, 按照self instruct的方法创建了 100 个不同的提示,涉及计算机科学、商业、法律、医学和物理学。每条提示都要求做出技术或研究导向的回答,其中至少包含一条相关文献引用。然后,再使用 ChatGPT 生成这些提示的回复。

2、实验评估结果

首先是主张提取阶段评估, 使用 4 个指标来评估之间的相似性:,也就是常用的ROUGE-1、ROUGE-2、ROUGE-L和 BERTScore,如下表所示,对比了GPT4等4个模型的相似度平均值。

根据 ROUGE 和 BERTScore 指标的评估,可以发展,GPT-4、ChatGPT 和 Flan-T5 提取的主张与人类标注的 ACU 非常吻合。请

其次,在 框架评估 上,根据每个场景构建的数据集上对 FACTOOL 和两个 Self-Check 基线进行了评估,并使用准确度、召回率、精确度和 F1 分数指标,如表所示:

可以看到,在所有场景下,采用 GPT-4 的 FACTOOL 均优于所有自检基线,FACTOOL 在科学文献综述中的表现明显优于所有自校验基线。与 LLM 本身相比,Google Scholar 在执行其指定的查找引文任务方面具有很强的鲁棒性。

总结

大模型的事实性检验是个有趣且重要的话题,本文主要介绍了 FACTOOL事实错误检测框架这一工作。

该工作可以给我们一些启发:

首先,对于什么是事实性,这个定义需要突破并扩展传统定义,并侧重于审核生成式人工智能模型的能力,因为LLM 生成的文本往往很冗长,而且缺乏明确定义的单个事实的粒度,而且在事实检查过程中可用的明确证据很少。这实际上是事实性验证所面临的挑战。

其二,针对不同的生成任务,我们可以使用不同的数据构造方式以及检验方法进行执行,也就是采用分治的思想。

例如,FACTOOL 构建为一个由 5 个步骤组成的工具增强框架,包括主张提取、查询生成、工具查询、证据收集和验证, 通过在基于知识的质量保证、代码生成、数学问题求解和科学文献综述写作等不同任务中进行实验,并将谷歌搜索、谷歌学术、代码解释器、Python 甚至大模型本身等工具纳入事实错误检测。这种思路其实是个很好的借鉴。

说到最后,地铁到站,也正在下雨,该收笔了。

大模型的事实性问题很有趣,文中讲了很多数据和评估的事情,感兴趣的可以多看看原文。

参考文献

1、https://github.com/GAIR-NLP/factool

关于我们

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。

对于想加入更优质的知识图谱、事件图谱实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。

更多AI工具,参考Github-AiBard123国内AiBard123

可关注我们的公众号:每天AI新工具