自相矛盾的LLM幻觉:评估、检测、缓解
- 摘要
- 引言
- 相关工作
- 定义和激励自我矛盾
- 4 触发、检测和减轻自相矛盾的行为
- 5 实例化到开放文本生成
- 6 实验
摘要
大型语言模型(Large LMs)容易产生包含虚构内容的文本。其中一个重要问题是自相矛盾,即LM在同一上下文中生成两个相互矛盾的句子。在这项工作中,对各种经过指导的LM进行了全面的自相矛盾调查,包括评估、检测和缓解。揭示了当LM为开放领域的主题生成文本时,自相矛盾的普遍性,例如ChatGPT生成的所有句子中有17.7%存在自相矛盾。自相矛盾还可以作为基于检索的方法的补充,因为其中有很大一部分(例如ChatGPT的35.8%)无法通过维基百科进行验证。然后,提出了一种基于提示的新型框架,旨在有效地检测和缓解自相矛盾。检测器在提示ChatGPT时可以达到很高的准确性,例如约80%的F1得分。缓解算法迭代地改进生成的文本,去除矛盾信息,同时保留文本的流畅性和信息性。重要的是,整个框架适用于黑盒LM,不需要外部基础知识。
引言
大型语言模型在大规模文本语料库上进行预训练,并进行精调以遵循人类指令。指令调整的语言模型,如ChatGPT,在解决自然语言任务方面展示了卓越的零样本能力。因此,它们越来越多地融入到日常生活的各个方面,包括在线搜索和专业环境。然而,即使是像ChatGPT和GPT-4这样广泛采用的LM,也容易产生荒谬或不准确的内容,通常称为幻觉。这引发了对LM的可信度的重大关切。检测和缓解幻觉仍然是一个尚未解决的挑战,尤其是对于只能作为黑盒子访问的最先进的专有LM。
关于自相矛盾幻觉的推理
本研究专注于一种重要的幻觉类型,称为自相矛盾,当LM在相同的语境下生成两个逻辑上不一致的句子时会出现这种情况。关键见解是,解决自相矛盾是对抗非事实模型输出的一个便捷的途径。检测到自相矛盾必然揭示了LM的非事实性,因为这两个句子不能同时正确。此外,从一对矛盾句子中去除冲突信息严格减少了非事实性。重要的是,无论是矛盾检测还是去除,都可以通过对这两个句子进行逻辑推理来完成,而不依赖于检索外部基础知识或比较大量样本,这在实践中可能过于昂贵。
基于上述洞察,本文提出了一个三步骤的流程来推理自相矛盾。
为了引发自相矛盾,采用适当的约束条件来生成相关的句子对。然后,使用各种现有的提示策略来检测自相矛盾。最后,开发了一个迭代的缓解过程,对文本进行局部编辑,去除矛盾信息,同时保留其他重要的文本质量,如流畅性和信息性。由于本框架通过提示进行操作,因此可以直接应用于黑盒LM。
自相矛盾的意义
对四个现代语言模型进行了全面评估:GPT-4、ChatGPT、Llama2-70B-Chat和Vicuna-13B。重点关注开放领域的文本生成,这是一个使用LM内部知识生成长文本的任务,在这个任务中,可信度非常重要,但也很具有挑战性。
本文的评估凸显了自相矛盾的重要性。具体而言,自相矛盾在评估的LM中普遍存在,例如ChatGPT生成的所有句子中有17.7%存在自相矛盾。此外,相当大一部分的自相矛盾(例如ChatGPT的35.8%)无法通过维基百科进行验证,维基百科是一个全面的知识库用于检索。换句话说,本文的工作作为检索方法的有价值补充。
有效的检测和缓解
本文提出的框架在检测(例如,约80%的F1分数)和缓解自相矛盾(例如,最多减少89.5%的自相矛盾,同时保持文本的信息性和流畅性)方面非常有效。在表1(绿色部分是正确的,红色部分是错误的)中展示了两个ChatGPT生成的自相矛盾实例,这些实例通过本文的方法成功地触发、检测和缓解。在附录C中,提供了更多的长篇例子,涵盖了句子和文本级别。
实用工具
高准确性和高效性凸显了我们框架的实用性。我们开发了一个用户友好的工具,用于在与语言模型的交互过程中生成幻觉的警告,并自动进行缓解。我们的代码和数据集也是公开可用的。
相关工作
大型语言模型
训练现代语言模型通常需要两个步骤:预训练和指导微调。商业指导微调的语言模型通常是专有的,只提供黑盒访问。从Alpaca开始,出现了开源的指导微调语言模型,如Vicuna和Llama2。指导微调的语言模型在日常生活中的应用越来越广泛,因为它们在文本推理方面具有强大的能力。综合性的基准测试,如MMLU和HELM,已经提出来全面评估语言模型的整体能力。本文的工作在这些评估之外,专注于评估语言模型解决幻觉问题的能力。
自然语言生成中的幻觉
根据Ji等人的调查,幻觉是不同自然语言生成任务中的一个常见问题,包括翻译、摘要和对话。最近,提高用于事实问题回答的语言模型的能力引起了越来越多的关注。这些问题通常围绕个别事实展开,简短的回答就足够了。相比之下,开放领域文本生成任务面临更大的挑战,因为它需要语言模型生成包含数十个事实的长文本。另外两项研究探索了开放领域文本生成中的幻觉问题。而Lee等人需要访问训练和推理的内部,本文的工作设计成适用于黑盒语言模型。与Manakul等相比,本文的框架在幻觉检测方面更准确,并且能够进行缓解幻觉。
定义和激励自我矛盾
语言模型 考虑一个语言模型,它生成由一系列句子组成的文本:x=[x1,…,x|x|]。通常文本生成过程以指定要完成的任务的用户提示符p为条件。对于生成多个句子x,将这个过程表示为x ~ LM(·|p)。类似地,对于单个句子x,使用x ~ LM(·|p)。
语言模型的自我评估 检查语言模型生成的一对句子(x,x’)。为了使x和x’矛盾,它们必须描述相同的主题。因此,通过提供一个上下文c来限制它们的生成,形式上是一个提示。也就是说,x ∼ LM(· | c),x’ ∼ LM(· | c)。当两个句子在逻辑上不一致时,将(x,x’)定义为LM的自相矛盾。与之前使用现有句子评估LM的幻觉的研究不同,本文定义要求这两个句子都是从同一个LM生成的。与在CoT-SC的定义相对应,本定义更加广泛地涵盖了更多背景下的事实陈述。
自相矛盾与非事实性 当x和x’相互矛盾时,它们中至少有一个被保证是事实上不正确的。根据给出的注释,ChatGPT生成的自相矛盾中,在63.1%的情况下,甚至两个句子都是非事实的。由于x和x’都来自同一个语言模型,它们的矛盾必然暴露了语言模型的非事实性。进一步利用这一观点,从一对相互矛盾的句子中删除冲突信息严格减少了非事实性。这些关键特性使能够通过自相矛盾检测和缓解非事实性,每次仅使用两个抽样的句子。
删除冲突信息的过程可以通过以下示例说明:
例子:
句子1:今天是周一,我要去上班。
句子2:今天是周一,我要放假去旅行
这两个句子相互矛盾,一个说要去上班,另一个说要放假去旅行。为了删除冲突信息,我们可以执行以下步骤:
1.识别冲突点:冲突点在于句子1中强调要去上班,而句子2中强调要放假去旅行。
2.分析语境:在这个例子中,我们可以考虑工作日的常规情况,通常在周一是要去上班的,而不是放假去旅行。
3.删除冲突信息:根据分析的结果,我们可以删除句子2中的冲突信息,使其与句子1保持一致。修改后的句子2可以是:“今天是周一,我要去上班。”
与本文的方法类似,相关工作利用基于抽样的方法来检测非事实性。然而,他们并没有从上述关于非事实性和自相矛盾之间联系的洞见中获益。因此,他们需要大量样本才能达到合理的检测准确性,并且无法进行缓解操作。
自相矛盾与知识检索
解决幻觉的一种常见方法是依赖外部基于实际知识的检索,以识别非事实内容或指导事实文本生成。然而,实际上获得高质量的外部知识通常是具有挑战性和昂贵的。相比之下,自相矛盾可以在不依赖外部知识的情况下进行处理,因为它只需要逻辑推理,这正是最新的语言模型的一项特殊优势,甚至可以以零样本的方式进行。此外,语言模型的生成是灵活的,并且可以产生甚至在用于检索的综合知识库中都无法获取的信息。相反,这些情况可以通过自相矛盾来捕捉,使本工作成为基于检索方法的有价值的补充。事实上,评估结果显示,实际世界中大部分的自相矛盾无法使用维基百科进行验证,例如ChatGPT为35.8%。
4 触发、检测和减轻自相矛盾的行为
考虑两个语言模型,gLM用于生成文本x = [x1,x2,…,x|x|],aLM是一个分析器语言模型。
在本节中,描述了触发gLM自相矛盾的算法,以及使用aLM检测和减轻自相矛盾的算法。从这些算法中,分解出四个涉及解决不同文本推理任务的重要实用函数。以下是这些实用函数的通用定义。第5节将讨论它们的具体实现。
- extract_contexts(xi,x):提取句子xi的上下文列表,可能使用来自x的元数据信息,如x的主题。
- gLM.gen_sentence©:查询gLM以生成与上下文c兼容的新句子x’i。
- aLM.detect(xi,x’i,c):调用aLM来预测xi和x’i在上下文c中是否相互矛盾。
- aLM.revise(xi,x’i,c):接收一对在上下文c中相互矛盾的句子(xi,x’i)。它调用aLM生成xi的修订版本,其中删除了xi和x’i之间的冲突信息。修订后的句子还应尽可能保留非冲突信息,并与上下文c保持连贯。
触发 通常情况下,gLM只会生成每个句子一次。为了触发自相矛盾,需要适当地查询gLM,以生成第二个句子来形成一对。开发了算法1来实现这个目的。在第2行,它迭代gLM生成的文本x的句子。对于每个句子xi,它调用extract_contexts来获取上下文列表(第3行)。然后,在第4行,它运行gLM.gen_sentence,返回与上下文c对齐的替代句子x’i。在第5行,使用yield返回生成的句子对(xi,x’i)及其上下文c,遵循标准的Python语义。上下文c在生成x’i时起着关键作用。我们的目标是使c有效地约束x’i具有与xi相同的范围。同时,我们希望c提供适当的自由度,以触发gLM生成与xi相矛盾的x’i。我们将在第5节详细讨论实现这一双重目标的方法。
检测 通过在算法1的输出上调用aLM.detect来检测自相矛盾。这个过程与自然语言推理(NLI)密切相关,涉及预测前提和假设之间的关系:蕴含、中立或矛盾。检测与一般的NLI有所不同:
(i)要求两个句子都是由同一个语言模型生成的;
(ii)考虑检测过程中两个句子出现的上下文;
(iii)检测结果是二元的:矛盾或非矛盾。
缓解 缓解方法采用了对x进行局部修订的方式,以消除自相矛盾的信息。不会更改未检测到自相矛盾的句子,这对于保持x的其他重要文本特征(如流畅性和信息量)非常重要。修订一个句子的过程如算法2所示,该算法适用于x的所有句子。如果aLM.detect预测到自相矛盾,使用aLM.revise来消除句子对中的矛盾信息。否则,句子xi保持不变。
为了进一步减少自相矛盾,在更新后的x上重复上述步骤,创建了算法3中概述的迭代过程。在每次迭代中,针对所有句子对(xi,x’i)和上下文c(第6行)调用算法2中的mitigate_one。mitigate_one的输出重新赋值给xi,并最终写回到x的文本中。经过一定数量的迭代(例如,在实验中为3次),预期减轻过程会收敛,即使aLM.detect可能仍然会识别出一些剩余的自相矛盾。在这种情况下,选择删除相应的句子。通过这一步骤,所有预测的自相矛盾都被消除了。这通常不会影响结果文本的质量,如附录B的表7所示。
5 实例化到开放文本生成
在开放域文本生成上实例化了本框架,其中要求语言模型生成包含数十个事实的长文本,涵盖各种主题。专注于这个任务具有三个关键优势:
(i)它与现代语言模型在生成跨领域文本方面的实际应用密切相关;
(ii)它非常适合分析自相矛盾,因为它要求语言模型解开其内部知识的纠结;
(iii)它提供了超出回答关于个别事实的问题的有价值的见解。
本文的方法基于提示,因此非常适合专有的、只能通过API访问的最先进的语言模型。
生成初始文本 首先,查询gLM以根据特定领域的给定主题t生成文本x。向gLM提供提示语“请告诉我关于t的信息”,指示它以百科全书的风格生成一系列反映其对t的内部知识的句子。重要的是,这个方法除了主题t之外不需要其他输入。
定义文本 定义上下文给定由gLM生成的文本x和x中的一个句子xi,使用符号x<i来表示xi之前的句子,即x<i= [x1, x2, . . . , xi−1]。定义xi的上下文c为一个包含三个元素的元组。前两个元素是x的主题t和前缀x<i。第三个元素是从xi中使用信息抽取(IE)系统提取的关系三元组(s,r,o)。选择CompactIE因为它适用于开放领域,并从输入句子的片段构建三元组元素。需要注意的是,不同句子的三元组数量可能会有所不同。
触发 为了实例化gLM.gen_sentence©,将c格式化为一个提示语。在图1中展示了一个示例提示(为了演示目的进行了缩短;完整的提示可以在附录D中找到)。它包括c的元素,如主题t(来自MIT EECS的教授William T. Freeman),前缀x<i和关系三元组的前两个项目(s:He和r:was born)。这些元素用于限定输出句子x’i的范围。重要的是,省略了关系三元组的第三个元素o,为gLM的生成过程引入了一定的自由度。然后,提示类似于一个填空测试,LM根据其内部知识填充空白。为了使gLM生成严格的一个句子,更改了系统消息并提供了少量的示范。根据提示,gLM(在本例中为ChatGPT)成功生成了与上下文相符的句子,用红色突出显示。在附录B的表5中,对gLM.gen_sentence运行了替代的提示策略,如改写(过度约束)和要求继续(不足约束)。提示明显优于所有基线,因为它强制执行了适当的约束水平。
检测 利用一个零样本提示来实例化aLM.detect(xi,x’i,c)。这个提示包括主题t、前缀x<i和句子对(xi,x’i)。应用了思维链提示(Chain-of-Thought Prompting) ,要求aLM首先提供一个解释,然后提供一个结论。图2中演示了这样一个提示的例子。两个gLM生成的句子给出了William T. Freeman的不同出生年份,明显表明存在矛盾。aLM(ChatGPT)对于这种情况正确地预测了不一致性。根据Freeman的维基百科页面 ,他的出生年份是1957年,因此这两个句子在事实上都是不正确的。在附录B的表6中,考察了其他提示策略 ,发现思维链提示的效果优于它们。
修正 为了实例化aLM.revise(xi,x’i,c),坚持使用零样本提示。给定主题t和前缀x<i,提示指示aLM删除xi和x’i之间的冲突信息。还在提示中提供具体的指示,以使输出信息丰富并与上下文连贯。图3展示了一个例子。aLM(ChatGPT)成功地修订了句子,消除了问题的出生日期,并返回了一个忠实而流畅的句子。