写在前面
- 这是翻译自 Lilian Weng 关于外部幻觉的文章
- Lilian Weng 2018 年加入 OpenAI 团队
- 提出了 Agent = 大模型+记忆+主动规划+工具使用
- 原文 2 万字,参考了 24 篇文章
- 文章介绍了近年来关于幻觉的各种研究成果
- 幻觉的定义有逐步泛化的情况
- 在文章中限定了幻觉的定义,只针对外部幻觉
- 文章介绍了幻觉多个方面
- 幻觉产生的原因
- 幻觉的检测
- 抑制幻觉的方法
在大型语言模型 (LLM) 中,幻觉通常指的是模型生成不忠实、捏造、不一致或无意义的内容。作为术语,“幻觉”的含义已经扩展到模型犯错的情况。本文将重点讨论模型输出是捏造的,并且没有根据 (grounded) 提供的上下文或世界知识的情况,我们称之为外部幻觉。
幻觉主要分为两种类型:
- 上下文内幻觉:模型输出应该与上下文中的源内容一致。
- 外部幻觉:模型输出应该基于 (grounded) 预训练数据集,也就是说,输出内容应该与预训练数据中的知识相符。然而,由于预训练数据集的规模非常庞大,每次生成都去检索和识别冲突的成本太高。如果我们将预训练数据语料库视为世界知识的代表,我们实际上是在努力确保模型输出是事实的,并且可以通过外部世界知识进行验证。同样重要的是,当模型不知道某个事实时,它应该明确表示出来。
本文重点关注外部幻觉。为了避免幻觉,LLM 需要 (1) 输出符合事实的内容,并且 (2) 在适用时承认不知道答案。
什么导致幻觉 ?
一个标准的可部署 LLM 通常会经历预训练和微调两个阶段,前者是为了让模型学习语言的规律,后者是为了让模型更好地适应特定任务或提升性能。让我们分别看看这两个阶段可能导致幻觉的原因。
预训练数据问题
预训练数据语料库的规模通常非常庞大,因为它需要尽可能地涵盖所有可用的书面形式的世界知识。从公共互联网爬取的数据是最常见的选择,因此其中 inevitably 包含一些过时、缺失或不正确的信息。由于模型可能会错误地记住这些信息,我们预计模型会犯错。
微调新知识
通过监督微调和 RLHF (基于人类反馈的强化学习) 微调预训练的 LLM 是一种改进模型某些能力(例如遵循指令)的常用技术。在微调阶段引入新知识是不可避免的。
由于微调通常消耗的计算资源少得多,因此模型是否可以通过小规模的微调可靠地学习新知识仍然存在争议。 Gekhman et al. 2024 研究了在关于新知识的微调 LLM 是否会加剧幻觉的问题。他们发现:(1) LLM 学习包含新知识的微调示例的速度比学习包含与模型已有知识一致的知识的示例要慢;(2) 一旦模型最终学习了包含新知识的示例,它们就会增加模型产生幻觉的可能性。
给定一个闭卷问答数据集(例如 EntityQuestions),D=(q, a),让我们将 P Correct ( q , a ; M , T ) P_{\text{Correct}}(q, a; M, T) PCorrect(q,a;M,T) 定义为模型 M 在被提供随机的少样本示例并使用解码温度 T 的情况下,能够准确生成问题 q 的正确答案 a 的概率估计。他们根据
P Correct ( q , a ; M , T ) P_{\text{Correct}}(q, a; M, T) PCorrect(q,a;M,T)
的不同条件将示例分为 4 个类别:包含 3 个子组(HighlyKnown
、MaybeKnown
和 WeaklyKnown
)的 Known
组和 Unknown
组。
图 1: 基于模型输出正确答案的可能性对闭卷问答示例进行知识分类。(图片来源: Gekhman et al. 2024)
在将开发集准确率作为幻觉指标的实验中,有一些有趣的观察结果:
Unknown
示例的拟合速度明显慢于Known
。- 当 LLM 拟合大多数
Known
训练示例但仅拟合少数Unknown
示例时,可以获得最佳的开发性能。当模型学习了大部分Unknown
示例时,它就开始产生幻觉。 - 在
Known
示例中,MaybeKnown
案例比HighlyKnown
案例更重要,因为它可以带来更好的整体性能。
图 2:在对一半 Known
和一半 Unknown
示例进行微调时,训练和开发性能随时间的变化。Unknown
示例的学习速度要慢得多,并且当模型学习了大部分 Known
案例但仅学习了少数 Unknown
案例时,可以获得最佳的开发结果。这些经验结果指出了使用监督微调来更新 LLM 知识的风险。(图片来源: Gekhman et al. 2024)
幻觉检测
检索增强评估
为了量化模型幻觉,Lee et al. (2022) 引入了一个新的基准数据集,FactualityPrompt,它由事实和非事实提示组成。这个数据集使用维基百科文档或句子作为事实性基础的知识库。维基百科文档是来自 FEVER 数据集的已知事实,而句子是根据 TF-IDF (词频-逆文档频率) 或基于句子嵌入 (Sentence Embedding) 的相似性选择的。
图 3:FactualityPrompt 基准的评估框架。(图片来源: Lee, et al. 2022)
给定模型的输出文本和配对的维基百科文本,我们考虑以下两个用于评估幻觉的指标:
- 幻觉 NE(命名实体)错误: 使用预训练的实体检测模型和文档级 grounding,这个指标衡量在生成文本中检测到的,但没有出现在对应维基百科文档中的命名实体的比例。
- 蕴涵率: 使用在 MNLI (多体自然语言推理) 数据集上微调的 RoBERTa 模型和句子级 grounding,这个指标计算被蕴涵模型判定为与配对的维基百科句子相关的生成句子的比例。
高 NE 错误率和低蕴涵率表明模型的输出更符合事实。研究发现,这两个指标都与人类的标注结果相关,并且模型规模越大,在这项基准测试中的表现就越好。
FActScore (原子性分数中的事实精度; Min et al. 2023) 将长格式的文本生成分解成多个原子事实,并针对知识库(例如维基百科)分别验证每个事实的准确性。然后,我们可以计算每个模型生成结果中,有多少句子的内容是被知识源所支持的(即准确率),而 FActScore 则是一组提示下模型生成结果的平均准确率。该论文在人物传记生成任务中实验了多种事实验证方法,发现使用检索的方法始终比不使用上下文的 LLM 方法表现更好。在检索增强方法中,最佳的评估方法取决于具体的模型。
- 非上下文 LLM:直接使用
<atomic-fact> True or False?
提示 LLM,不提供额外的上下文。 - 检索→LLM:使用从知识源检索到的 k 个相关段落作为上下文进行提示。
- 非参数概率 (NP):通过 Masked LM (掩码语言模型) 计算原子事实中每个 Token 的平均似然,并使用它进行预测。
- 检索→LLM + NP:两种方法的组合。
关于模型幻觉行为的一些有趣的观察:
- 在传记生成任务中,较罕见实体的错误率较高。
- 在生成后期提到的事实的错误率较高。
- 使用检索来 grounding 模型生成内容可以显著降低幻觉发生的概率。
Wei et al. (2024) 提出了一种用于检查 LLM 生成的长文本的事实性的评估方法,名为 SAFE (搜索增强事实性评估器; 代码)。与 FActScore 的主要区别在于,对于每个独立的原子事实,SAFE 使用语言模型作为智能体,在多步骤过程中迭代地发出 Google 搜索查询,并推理搜索结果是否支持该事实。在每一步中,智能体都会根据给定的待验证事实以及先前获得的搜索结果生成一个搜索查询。经过若干步骤后,模型会进行推理,以确定搜索结果是否支持该事实。根据实验结果,SAFE 方法比人类标注员的效率更高,尽管成本低了 20 倍:与人类的 соглашение 率为 72%,当与人类意见不一致时,胜率为 76%。
图 4:SAFE 概述,用于长格式 LLM 生成的真实性评估。 (图片来源: Wei et al. 2024)
SAFE 评估指标是 F1 @ K。它的目的是评估模型在生成长文本时的 factual accuracy (事实准确性),理想情况下,模型的输出应该既准确又完整,也就是说,既要保证输出内容的真实性,又要尽可能地涵盖所有相关的事实。具体来说, F1@K 评估了以下两个方面:
- Factual (事实性): 通过 Precision (准确率) 衡量,指的是在模型输出的所有事实中,有多少是被支持的 (即被验证为真实的)。
- Long (完整性): 通过 Recall (召回率) 衡量,指的是在所有应该出现在输出中的相关事实中,有多少是被模型提供的。因此,我们需要考虑最多 K 个被支持的事实。
给定模型的输出文本 y,指标 F 1 @ K 的计算公式如下:
S (y) = 被支持的事实的数量
N (y) = 未被支持的事实的数量
Prec ( y ) = S ( y ) S ( y ) + N ( y ) \text{Prec}(y) = \frac{S(y)}{S(y) + N(y)} Prec(y)=S(y)+N(