对应 Maps to:CMU 17-630 Prompt Engineering(Prof. Travis Breaux),第 4 周的第一个主题 · Alignment: Hallucinations。原课 Schedule 对这一讲的说明(意译):介绍对齐,重点是幻觉的类型与来源、校准良好的模型有什么好处,以及减少幻觉的策略。 依据说明:原课的 slides 和阅读清单不公开。Schedule 点名的四个方面——对齐的概念、幻觉的类型与来源、校准的好处、减少幻觉的策略——分别在 §1、§2–§3、§4–§5 和 §6–§7 展开。材料来自 Askell et al.(2021)、Lin et al.(2022,TruthfulQA)、Maynez et al.(2020)、Ji et al.(2023)与 Huang et al.(2023)两篇综述、Kandpal et al.(2023)、Mallen et al.(2023)、Kalai & Vempala(2024)、Guo et al.(2017)、Kadavath et al.(2022)、Gekhman et al.(2024)、Manakul et al.(2023)等;引用时按原文的说法转述结论,具体数字以原文为准。全部实验是本讲义自己设计的,不代表课堂上讲了什么。 配套代码 Code:
code/lecture05/(PyTorch CPU;1 个模块 + 5 个脚本;不需要 API key;第一次运行会训练一个”长尾”迷你 GPT 约 50 秒、3 个指令微调模型各约 5 秒,之后读缓存;每个脚本都在 20 秒以内) 预计阅读时间:4 小时(含运行代码)
0. 本讲导航 · How to read this lecture
0.1 学习目标 Learning goals
学完这一讲,你应该能够:
- 说清楚对齐(alignment)在讲什么,以及幻觉为什么是”诚实”这一维的问题。
- 区分幻觉的几种类型:事实性 vs 忠实性,内在 vs 外在;能把一个具体的错误归进去。
- 解释幻觉的主要来源:长尾知识、训练目标(“写出最像样的续写”)、微调数据里的新知识、评测的激励方式、解码的随机性、不会用上下文。
- 用可靠性图、ECE、Brier、AUROC 描述一个模型的置信度,知道”校准”和”区分对错”是两回事;会用温度缩放修正校准。
- 用选择性预测(风险—覆盖率)和按代价定阈值设计一个”会说不知道”的系统,知道校准为什么是这种设计的前提。
- 理解几种减少和检测幻觉的方法——允许弃权、训练弃权、多次采样的一致性检测、检索、验证——以及它们各自的盲点。
0.2 先修与本讲范围 Prerequisites & scope
| 默认你已经会 Assumed | 本讲只给直觉,后面再展开 Previewed only |
|---|---|
| 第 1 讲:知识的跨格式迁移、反转诅咒、温度 | 检索增强生成的工程(第 7 讲) |
| 第 3 讲:指令微调(本讲直接复用它的方法)、RLHF 的流程 | 偏见与谄媚(第 6 讲)——同样是”后训练的副作用” |
| 第 4 讲:self-consistency、系统性错误 vs 随机错误、“忠实地错” | 验证链(CoVe)与自我纠正(第 10 讲) |
| 前置讲 P3:Wilson 区间、开发集 / 测试集 | 对抗性提示与过度拒答(第 12 讲) |
0.3 本讲地图 Map
§1 什么是对齐:helpful / honest / harmless;幻觉在哪里
§2 幻觉的类型:事实性 vs 忠实性;内在 vs 外在
§3 幻觉从哪里来:长尾知识;"校准良好的模型必然幻觉";微调、评测与解码 ← 代码 01
§4 校准:可靠性图、ECE、AUROC;温度缩放;后训练怎样改变校准 ← 代码 02
§5 让模型说"不知道":选择性预测、按代价定阈值、训练弃权、提示里给退路 ← 代码 03、05(可选)
§6 检测幻觉:多问几遍(SelfCheckGPT、语义熵)和它的盲点 ← 代码 04
§7 减少幻觉的策略总览与评测
§8 小结 §9 常见误区 §10 练习 §11 延伸阅读 §12 下一讲预告
0.4 记号与术语 Notation & terms
| 术语 | 本讲义里的意思 |
|---|---|
| 幻觉(hallucination) | 模型生成的、看起来合理但没有依据或与事实 / 给定资料不符的内容 |
| 置信度(confidence) | 模型对自己答案的把握。本讲的迷你模型直接用”答案 token 的概率”;chat API 通常只能用口头报告或多次采样来估计 |
| 校准(calibration) | 置信度和实际正确率一致:说”80% 把握”的答案,应该有 80% 是对的。注意:第 2 讲的”校准”是另一个意思(修正标签偏向) |
| ECE | 期望校准误差:把置信度分段,各段”平均置信度”和”准确率”之差的加权平均 |
| AUROC | 置信度区分”答对”和”答错”的能力:随机挑一对对 / 错样本,对的那个置信度更高的概率 |
| 选择性预测(selective prediction) | 允许模型在没把握时弃权;覆盖率 = 回答的比例,风险 = 回答了的里面答错的比例 |
| 出现次数 | 一个事实在预训练语料里被陈述的次数(本讲的长尾实验的自变量) |
0.5 本讲的实验装置 · The setup
第 1 讲的世界里,24 个国家每个都有 36 篇百科词条,知识是”均匀”的,模型几乎全知道。真实语料不是这样:少数实体被反复提到,大多数实体很少被提到。本讲造了一个长尾世界(hallu_lab.py):
- 60 个国家,每个国家的百科词条篇数服从齐普夫分布:最热门的 384 篇,14 个国家只有 1 篇,12 个国家只有 2 篇;还有 6 个国家只出现在题目列表里——名字见过,事实一次都没出现过。
- 其余配方和第 1 讲一样(问答页、题目列表、评论、故事);问答页按热门程度抽国家,所以热门国家被”问答”得更多。
- 240 个事实(60 个国家 × 首都、语言、出口、领导人)按在语料里被陈述的次数分档:0 次 24 个、1 次 24 个、2 次 29 个、3–5 次 64 个、6–20 次 58 个、21 次以上 41 个。
- 在这份语料上训练一个和第 1 讲结构、超参数、步数都相同的迷你 GPT(“长尾模型”)。
后半讲还用第 3 讲的方法在长尾模型上做指令微调,比较三种数据配方:只用模型知道的事实、也教它不知道的事实(给正确答案)、不知道的事实回答 unknown。
1. 什么是对齐 · What is alignment
“对齐”(alignment)粗略地说是:让模型做我们真正想让它做的事。Askell et al.(2021)提出了一个被广泛采用的框架:一个对齐的助手应该是
- 有帮助的(helpful):尽力完成用户的任务,问清楚不明确的地方;
- 诚实的(honest):只说它相信是真的话,准确地表达自己的不确定性,不欺骗;
- 无害的(harmless):不帮助造成伤害,不冒犯,不歧视。
三者经常冲突:一个”尽力帮忙”的模型在不知道答案时,最”有帮助”的样子就是编一个答案——这恰恰违反了”诚实”。Evans et al.(2021)把”诚实”进一步拆成几个部分:真实(不说假话)、校准(把握的程度和实际一致)、透明(不隐瞒)、不欺骗。
幻觉主要是”真实”和”校准”这两部分的失败:模型说了没有依据的话,而且说得很有把握。原课把幻觉放在”对齐”的第一讲,是因为它不只是”模型知识不够”的技术问题,而是”模型被训练成什么样”的问题。一个典型的证据来自 TruthfulQA(Lin et al. 2022):这个基准专门收集了人们常有误解的问题(“打碎镜子会怎样?”),他们发现模型会模仿训练数据里流行的错误说法(“imitative falsehoods”),而且在他们测试的模型里,越大的模型往往越不真实——越大越会模仿人类的说法,包括人类的错误。
本讲沿着这条线走:幻觉是什么(§2)、从哪里来(§3)、怎样知道模型有没有把握(§4)、怎样让它在没把握时说出来(§5)、怎样从外面检测(§6)、整体上怎样减少(§7)。
2. 幻觉的类型 · Types of hallucination
两篇综述(Ji et al. 2023;Huang et al. 2023)给出了两个常用的分法。
事实性 vs 忠实性(Huang et al. 2023):
- 事实性幻觉(factuality):说的话和世界上的事实不符,或者无法验证。例如问一个冷门人物的生平,模型编了一段经历。
- 忠实性幻觉(faithfulness):说的话和给定的输入不符——不按指令做、和提供的资料矛盾、自相矛盾。例如让它总结一篇文章,它加进了文章里没有的内容。
内在 vs 外在(Maynez et al. 2020 在摘要任务上提出):
- 内在(intrinsic):和资料矛盾(文章说 A,摘要说非 A);
- 外在(extrinsic):资料里没有、无法从资料验证的内容(可能碰巧是真的,但没有依据)。
前几讲的实验里已经出现过几种:
| 例子 | 类型 |
|---|---|
| 第 4 讲:用领导人做桥的两跳题,模型编一个国家,然后”忠实地”按它答下去 | 事实性(编造实体) |
| 第 3 讲 04 号脚本:反查首都的完整句子”visis is the capital of thenania .”——格式漂亮、内容错误 | 事实性(编造关系) |
| 本讲 01 号脚本演示 2:问从没见过的国家的首都,模型答了另一个国家的首都 | 事实性(张冠李戴) |
| 本讲 01 号脚本演示 4:资料里写着首都是什么,模型不看,答它记忆里的那个 | 忠实性(无视上下文) |
分类有实际的用处:不同类型的幻觉要用不同的办法对付。事实性幻觉要靠检索、弃权、验证;忠实性幻觉要靠让模型更好地读上下文(检索增强的前提)、引用来源、检查输出和资料是否一致。
3. 幻觉从哪里来 · Where hallucinations come from
配套代码:
01_longtail.py
3.0 一个思想实验:只按”答对了没有”计分的考试
想象一场考试:每道题答对得 1 分,答错得 0 分,空着不答也是 0 分。一个理性的考生会怎么做?——每道题都写点什么。哪怕只有 10% 的把握,写了期望得 0.1 分,空着必然是 0 分。在这种计分规则下,“诚实地留空”永远是劣势策略。
语言模型的预训练很像这场考试。它的目标是给”真实的下一个词”尽可能高的概率(交叉熵损失)。语料里,“the capital of volel is” 后面跟着的永远是一个首都名,从来不是”我不知道”——所以模型学到的最优策略是:无论有没有把握,都给出一个首都名,把概率分给最像样的那几个候选。它不是在”撒谎”,它只是在做训练目标要求它做的事。
指令微调和 RLHF 有机会改变这一点(教它说”不知道”),但也可能加重它:如果评测和人类偏好都奖励”具体、自信”的回答,模型就学会了更自信地猜(§3.4)。这个思想实验贯穿本讲:幻觉是”计分规则”的产物——要减少它,就要改变规则:让”不知道”不再是零分(§5),或者让编造更容易被发现(§6)。
3.1 长尾知识
在长尾模型上,用问答页格式问每一个事实(240 个),按它在预训练里出现的次数分档:
| 出现次数 | 事实数 | 准确率 [95% CI] | 平均置信度 | 答错时的平均置信度 |
|---|---|---|---|---|
| 0 次 | 24 | 4.2% [0.7, 20.2] | 0.25 | 0.25 |
| 1 次 | 24 | 20.8% [9.2, 40.5] | 0.30 | 0.23 |
| 2 次 | 29 | 96.6% [82.8, 99.4] | 0.44 | 0.16 |
| 3–5 次 | 64 | 100.0% | 0.79 | – |
| 6–20 次 | 58 | 100.0% | 0.94 | – |
| 21 次以上 | 41 | 100.0% | 0.99 | – |
知识随出现次数的变化非常陡:见过一次,多半记不住;见过两三次,就记住了。真实的大模型有同样的形状:Kandpal et al.(2023)发现,模型回答一个问题的准确率随”相关文档在预训练数据里出现的次数”急剧变化;Mallen et al.(2023,PopQA)按实体的流行程度看,结论一样——大模型对热门实体几乎全对,对冷门实体错得很多,而且把模型变大对冷门知识的帮助很小。
3.2 不知道的时候,它说了什么
24 个从没见过的事实,模型一次也没有说”不知道”——base 模型的输出里根本没有这个选项,它只会写出”最像样的下一个词”。24 个回答全都是别的国家的同类属性:问 londor 的首都,它答 thunum(zondova 的首都);问 londor 的语言,它答 ralish(ziltia 的语言)。被借用的国家大多也是冷门国家(中位数只有 2 篇百科):模型把几个它都不太熟的国家混在了一起。
这就是幻觉最典型的样子:流畅、格式正确、内容真实存在但属于别处。它不是程序出错,而是”写出最可能的续写”这个训练目标在知识缺失时的自然结果。
3.3 “校准良好的模型必然幻觉”
Kalai & Vempala(2024)给出了一个很有启发性的理论结果。考虑一类”任意的”事实(例如某个人的生日——没有规律可以从别的事实推出来)。用 Good–Turing 估计的思路:训练数据里”只出现过一次”的事实所占的比例(单次事实率,monofact rate),估计了”从没出现过的事实”的总概率。他们证明:一个在这类事实上校准良好的语言模型,它的幻觉率大致不会低于单次事实率(减去它的校准误差)。
直觉是:模型无法区分”只见过一次的真事实”和”从没见过、但看起来同样合理的假事实”。要对前者给出合理的概率,就必须也给后者分概率——也就是会编。
在我们的语料里:至少出现一次的 216 个事实中,单次事实占 11.1%;从没出现过的占全部 240 个的 10.0%;模型在单次事实上的错误率是 79.2%。
这个结果的推论是:幻觉不只是”没训练好”,而是”从有限的样本里学会生成”这件事的统计后果。减少幻觉要靠训练目标之外的东西:让模型能说”不知道”、检查一致性、去外部查证。
3.4 微调、评测与解码
除了预训练数据的长尾,还有几个来源:
- 用模型不知道的事实做微调。Gekhman et al.(2024)发现,指令微调数据里如果有模型在预训练里没学到的新知识,这些例子学得很慢,而一旦被学会,模型在其他问题上的幻觉也增加了。直觉是:微调教会了它”对这类问题要给一个确定的答案”,而不是那些新事实本身的规律(任意事实没有规律)。本讲 02–04 号脚本在迷你模型上复现了这个现象(§4.3、§5.3、§6.2)。
- 评测和偏好的激励。Kalai et al.(2025)指出,大多数基准只按”答对了没有”打分,答”不知道”和答错一样得零分——于是一个会猜的模型总是比一个老实的模型分高。RLHF 的人类偏好也可能奖励”自信、具体”的回答。我们怎样评价模型,就在怎样训练它。
- 解码。温度越高,越可能抽到低概率的词(第 1 讲 §8.7);对一个本来就没把握的问题,采样会让编造的答案更多样。
- 不会用上下文。即使把正确的资料放进提示,模型也可能不用它——这在迷你模型上是极端的(下一节)。
3.5 资料就在提示里,它也不看
01 号脚本演示 4:在问题前面加一句百科,“the capital of X is K .”——给正确的或错误的资料,看模型答什么:
| 国家 | 提示 | 答出真正的首都 | 答出资料里写的首都 |
|---|---|---|---|
| 热门(≥ 3 篇) | 不给资料 | 100.0% | – |
| 热门 | 给错误的资料 | 100.0% | 0.0% |
| 冷门(0–1 篇) | 不给资料 | 45.0% | – |
| 冷门 | 给正确的资料 | 45.0% | 45.0% |
| 冷门 | 给错误的资料 | 45.0% | 0.0% |
给冷门国家正确的资料,准确率还是 45%,和不给一样:资料就在上一句,模型没用上。原因和第 2 讲 §8.6 一样:这个迷你模型没有归纳头,不会”照抄前文”。检索增强生成的前提是模型会读上下文——第 7 讲用真实的大模型讲 RAG。
真实的大模型会读上下文,但会遇到另一个问题:资料和记忆冲突时听谁的。Longpre et al.(2021)、Xie et al.(2024)发现,模型对热门事实更”固执”(坚持记忆),对冷门事实更容易被资料说服;Mallen et al.(2023)发现检索对冷门事实帮助最大,对热门事实有时反而有害,于是提出只在问题涉及冷门实体时才检索(自适应检索)。
4. 校准 · Calibration
配套代码:
02_calibration.py
4.1 为什么要关心校准
如果模型的置信度是可信的,我们就能:只在它有把握时用它的答案(§5)、按”答错的代价”决定要不要回答、把不确定性告诉用户、把没把握的问题转给更强的模型或人。这一切都要求置信度和实际正确率一致——这就是校准。
一个模型被称为完美校准,如果对任意 ,
4.2 可靠性图与几个指标
把 240 个事实按置信度分成 10 段,每段比较”平均置信度”和”准确率”:
| 置信度区间 | 事实数 | 平均置信度 | 准确率 | 准确率 − 置信度 |
|---|---|---|---|---|
| (0.0, 0.1] | 5 | 0.08 | 0.00 | −0.08 |
| (0.1, 0.2] | 22 | 0.15 | 0.27 | +0.13 |
| (0.2, 0.3] | 16 | 0.25 | 0.44 | +0.19 |
| (0.3, 0.4] | 14 | 0.34 | 0.36 | +0.01 |
| (0.4, 0.5] | 7 | 0.43 | 0.86 | +0.42 |
| (0.5, 0.6] | 4 | 0.52 | 0.50 | −0.02 |
| (0.6, 0.7] | 14 | 0.65 | 1.00 | +0.35 |
| (0.7, 0.8] | 22 | 0.76 | 1.00 | +0.24 |
| (0.8, 0.9] | 26 | 0.86 | 1.00 | +0.14 |
| (0.9, 1.0] | 110 | 0.96 | 0.99 | +0.03 |
把这张表画成图(横轴平均置信度、纵轴准确率),完美校准就是对角线。四个常用的指标:
- ECE(期望校准误差):这里是 0.110。 一个小例子:10 个回答,4 个的置信度是 0.9(其中 3 个对),6 个的置信度是 0.6(其中 3 个对)。第一段的差是 |0.75 − 0.9| = 0.15, 第二段 |0.5 − 0.6| = 0.10,ECE = 0.4 × 0.15 + 0.6 × 0.10 = 0.12——平均来说,模型报的把握比实际高了约 12 个百分点。
- Brier 分数 :同时惩罚”不准”和”不诚实的把握”,这里是 0.084。
- AUROC:置信度区分对错的能力,这里是 0.949——随机挑一个答对的和一个答错的,95% 的时候答对的那个置信度更高。
- 可靠性图本身:看偏差的方向。
这个模型的置信度很会排序(AUROC 高),但数值偏低:有 6 个区间的准确率比平均置信度高出 0.1 以上——它说”我有 40% 的把握”时,实际上大多是对的。这些主要是只出现两三次的事实:它记住了,却”不太相信自己”。置信度不到 0.3 的 43 个事实准确率只有 30%,大多是在瞎猜。
校准和区分是两回事:一个模型可以排序很好但数值不准(这里),也可以数值平均起来准、却分不清对错(例如对所有问题都说 80%,而准确率恰好是 80%——ECE 为 0,AUROC 为 0.5)。看置信度的质量要同时看两者。
Kadavath et al.(2022,《Language Models (Mostly) Know What They Know》)在大模型上发现:只要题目的格式合适(多选、判断),大模型的 token 概率大体是校准的;还可以让模型评估自己写的答案是否正确(P(True)),或者训练它预测”我知不知道这道题”(P(IK))。
4.3 温度缩放
最简单的事后校准方法是温度缩放(temperature scaling,Guo et al. 2017):找一个温度 ,用 代替 ,在一小份带标签的数据上让正确答案的负对数概率最小。它只有一个参数,不改变 argmax——准确率不变,只改置信度。
在一半事实上拟合、另一半上检验:
| 准确率 | ECE | Brier | AUROC | |
|---|---|---|---|---|
| 测试集 · 原始(T = 1) | 80.8% | 0.133 | 0.087 | 0.960 |
| 测试集 · 温度缩放(T = 0.80) | 80.8% | 0.049 | 0.063 | 0.964 |
拟合出的温度小于 1:把分布变尖,让偏低的置信度升上来。ECE 从 0.133 降到 0.049。AUROC 几乎不变:温度缩放是单调变换,不改变排序。它的局限也在于只有一个参数:这个模型在冷门事实上偏自信、在半冷门事实上偏不自信,一个温度没法同时修好两头。
4.4 后训练怎样改变校准
在长尾模型上做三种指令微调,在没进过任何微调数据的国家上(144 个事实)比较:
| 模型 | 准确率 | ECE | AUROC | 答错时的平均置信度 | 从没见过的事实上的平均置信度 |
|---|---|---|---|---|---|
| base(问答页格式) | 84.0% | 0.123 | 0.963 | 0.24 | 0.26 |
| SFT · 只用知道的事实 | 72.9% | 0.094 | 0.878 | 0.35 | 0.42 |
| SFT · 也教它不知道的事实 | 60.4% | 0.184 | 0.662 | 0.65 | 0.92 |
| SFT · 不知道就答 unknown(只算没弃权的) | 72.4% | 0.099 | 0.811 | 0.57 | 0.60 |
- 只用知道的事实:ECE 略好(0.123 → 0.094),可准确率、AUROC 都下降了,答错时的置信度从 0.24 升到 0.35。ECE 一个数字掩盖了这些变化。
- 也教它不知道的事实:在别的它不知道的事实上,它变得自信地错:对从没见过的事实,平均置信度高达 0.92。这是 Gekhman et al.(2024)的发现在迷你模型上的样子。
- 真实模型上也有相关的观察:GPT-4 技术报告(OpenAI 2023)展示,预训练模型在 MMLU 上的置信度相当校准,经过后训练(RLHF)之后明显变差。
口头报告的置信度。chat API 大多不给概率,于是人们让模型用文字报告把握(“confidence: 85”)。Tian et al.(2023)发现,对 RLHF 之后的模型,口头置信度常常比 token 概率校准得更好;Xiong et al.(2024)则发现口头置信度普遍偏高,而且集中在 80、90、95 这几个整数上。05 号脚本(可选)可以在真实模型上测这一点。
5. 让模型说”不知道” · Abstention
配套代码:
03_abstention.py;05_real_llm.py(可选)
5.1 选择性预测:用覆盖率换可靠性
按置信度从高到低排序,只回答前一部分、其余弃权:
| 覆盖率 | 置信度阈值 | 风险(回答了的里面答错) | 随机弃权时的风险 |
|---|---|---|---|
| 100% | 0.07 | 17.9% | 17.9% |
| 90% | 0.18 | 11.1% | 17.9% |
| 80% | 0.33 | 5.7% | 17.9% |
| 70% | 0.64 | 0.6% | 17.9% |
只回答最有把握的 80%,风险就从 17.9% 降到 5.7%——用少量的覆盖率,换来大量的可靠性。前提是置信度能区分对错(AUROC 高);随机弃权毫无用处。这叫选择性预测(El-Yaniv & Wiener 2010);在问答系统里,Kamath et al.(2020)训练一个额外的”校准器”来决定何时弃权,特别是在测试分布和训练分布不一样时。
5.2 阈值怎样定
按目标风险:在开发集上找”风险不超过 5% 的最低阈值”,在测试集上验证:
| 定法 | 阈值 | 开发集:覆盖率 / 风险 | 测试集:覆盖率 / 风险 |
|---|---|---|---|
| 原始置信度 | 0.33 | 77% / 4.3% | 82% / 5.1% |
| 温度缩放后(T = 0.75) | 0.57 | 77% / 4.3% | 81% / 3.1% |
测试集的结果和开发集有出入(每边只有 120 个事实)。阈值要在独立的数据上验证,并且要定期复查——问题的分布一变,阈值就可能失效。
按代价:弃权的代价记为 1,答错的代价记为 。回答的期望代价是 ,所以只有当置信度 时才应该回答。这个规则把置信度当成了真实的正确率,所以只在校准良好时才是最优的:
| 答错的代价 c | 阈值 | 原始置信度:平均代价 | 温度缩放后:平均代价 | 全部回答 |
|---|---|---|---|---|
| 2 | 0.50 | 0.283 | 0.250 | 0.300 |
| 4 | 0.75 | 0.375 | 0.292 | 0.600 |
| 10 | 0.90 | 0.617 | 0.392 | 1.500 |
校准之后,同样的规则代价更低——校准决定了”按代价定阈值”是否可信。答错的代价越高(医疗、法律),阈值越高、弃权越多。弃权率是一个产品决策,不是一个技术常数。
5.3 直接训练模型说 “unknown”
除了在外面加阈值,还可以训练模型自己弃权。R-Tuning(Zhang et al. 2024)的思路:先用模型自己的回答找出它不知道的问题,再把这些问题在微调数据里的目标回答改成”我不确定”。在长尾模型上比较三种配方(测试用的国家都没进过微调数据;base 模型知道其中 121 个事实、不知道 23 个):
| 微调配方 | 知道的事实:答对 | 知道的:过度弃权 | 不知道的:弃权 | 不知道的:幻觉 |
|---|---|---|---|---|
| 只用知道的事实 | 86.0% | 0.0% | 0.0% | 95.7% |
| 也教它不知道的事实 | 71.9% | 0.0% | 0.0% | 100.0% |
| 不知道就答 unknown | 69.4% | 15.7% | 39.1% | 60.9% |
- 只用知道的事实微调,它从没见过”unknown”这个回答,也就从不弃权。
- 教它”背”没有依据的事实,幻觉更多,连知道的事实也答得更差。
- 训练弃权:不知道的事实里 39.1% 弃权、幻觉降到 60.9%;代价是知道的事实里 15.7% 也弃权了(过度弃权)。幻觉减少了,但没有消失:弃权的能力要从”模型自己的知识边界”上学,而这条边界本身是模糊的(见过两次的事实它知道,但没把握)。
真实的 chat 模型也被训练成在一些情况下说”我不知道”,但过度拒答本身也是一种失败——一个什么都说”不确定”的助手没有用(第 6、12 讲会讨论过度拒答)。
5.4 最便宜的办法:在提示里给它一条退路
很多模型默认被训练成”尽量给出答案”。在提示里明确允许它说不知道——“If the information is not in the provided document, say ‘unknown’.”——常常能大幅减少幻觉。05 号脚本(可选)在真实的 Claude 上测这一点:资料卡故意只写每个国家 4 个事实中的 2 个,问全部 4 个,比较”只说根据资料回答""允许说 unknown""再要求口头置信度”三种提示下的幻觉率。编写这份讲义的环境里没有安装 anthropic SDK,没有真实模型的结果可以报告;--toy 模式用一个显式旋钮的模拟器检查代码能跑通。
写这类提示的几条经验:
- 给退路:明确说没有依据时可以说”不知道”,并规定说法(便于程序识别)。
- 限定依据:要求只根据提供的资料回答(“Use only the document”),并要求引用出处(第 7 讲)。
- 让不确定性可见:要求标出没把握的部分,或给出置信度——但别把口头置信度当成精确的概率。
- 评测时奖励诚实:评分规则里把”不知道”和”答错”区分开(例如 SimpleQA 把回答分成”正确""错误""未作答”三类),否则你在激励模型去猜(Kalai et al. 2025)。
6. 检测幻觉:多问几遍 · Detecting hallucinations by sampling
配套代码:
04_selfcheck.py
6.1 一致性:没有概率时的置信度
很多 API 不给 token 概率。SelfCheckGPT(Manakul et al. 2023)的想法是:对同一个问题采样好几次——模型真知道的事,每次都说一样的;编出来的,每次编得不一样。在长尾模型上(240 个事实,温度 1):
| 方法 | 每个问题的生成次数 | AUROC |
|---|---|---|
| 概率(需要 logprobs) | 1 | 0.949 |
| 采样一致性,k = 2 | 3 | 0.905 |
| 采样一致性,k = 5 | 6 | 0.940 |
| 采样一致性,k = 10 | 11 | 0.951 |
只采样 2 次,一致性就有 0.905;10 次就追上了概率。原因很直接:一致性是在用采样估计下一个词的分布有多集中——和概率是同一个信息,只是更贵、更粗。
长回答比单个词复杂:同一个意思有很多种说法,字面不同不等于意思不同。SelfCheckGPT 对长篇回答逐句检查它和其他样本是否一致;语义熵(Kuhn et al. 2023;Farquhar et al. 2024)先把”意思相同”的回答归为一类(用一个判断蕴含关系的模型),再算类别的熵——熵高,说明模型在几个不同的意思之间摇摆,很可能在编。
6.2 盲点:稳定的幻觉
| 一致性(k = 20) | 事实数 | 其中答错 | 错误率 |
|---|---|---|---|
| 高(≥ 0.8) | 164 | 1 | 0.6% |
| 中(0.4–0.8) | 30 | 8 | 26.7% |
| 低(< 0.4) | 46 | 34 | 73.9% |
在这个 base 模型上,一致性是一个很好的信号。但高一致性的那一档里仍有错误答案:模型每次都编同一个。这种”自信的、稳定的”幻觉在一致性上和真知识看起来一模一样——第 4 讲的系统性错误:投票修不好它,一致性也查不出它。
base 模型上它很少;可某些微调会让它大量增加(对话格式、没进过微调数据的国家):
| 微调配方 | 准确率 | AUROC(概率) | AUROC(一致性,k = 10) | 稳定的幻觉 / 全部错误 |
|---|---|---|---|---|
| 只用知道的事实 | 72.9% | 0.878 | 0.849 | 4 / 39 |
| 也教它不知道的事实 | 60.4% | 0.662 | 0.633 | 32 / 57 |
用没有依据的事实做微调,让模型在不知道的问题上也给出稳定的答案。幻觉越稳定,靠模型自己的信号(概率、一致性)就越难发现。要发现它们,需要模型之外的信息:检索资料来核对(第 7 讲)、用另一个独立的模型交叉检查、或者让模型逐条验证自己说的每个事实(第 10 讲的验证链 CoVe,Dhuliawala et al. 2024)。
7. 减少幻觉的策略总览 · Mitigation strategies
把本讲和前后几讲的方法放在一起:
| 方法 | 原理 | 修什么 | 盲点 / 代价 | 讲次 |
|---|---|---|---|---|
| 检索增强(RAG) | 把相关资料放进上下文,让模型据此回答 | 长尾、过时的知识 | 要求模型会读上下文;检索错了会误导;资料与记忆冲突 | 第 7 讲 |
| 提示里允许”不知道” | 给模型一条退路 | 被迫编造 | 可能过度弃权;依赖模型是否听话 | §5.4 |
| 阈值弃权 | 置信度低就不回答 | 没把握的回答 | 需要可信的置信度(校准);牺牲覆盖率 | §5.1–§5.2 |
| 训练弃权(R-Tuning 等) | 不知道的问题,目标回答是”不确定” | 默认就编的习惯 | 知识边界模糊;过度弃权 | §5.3 |
| 微调数据只用已知知识 | 不教模型”对任意问题都给确定答案” | 微调带来的新幻觉 | 新知识要靠预训练或检索 | §4.4 |
| 一致性检测(SelfCheckGPT、语义熵) | 编造的内容在多次采样间不一致 | 随机的编造 | 稳定的幻觉;k 倍成本 | §6 |
| 验证链(CoVe) | 列出说法 → 逐条独立核查 → 修改 | 长回答里的错误事实 | 核查本身也可能出错 | 第 10 讲 |
| 引用与可溯源 | 要求每个说法给出处 | 无依据的说法;方便人工核查 | 引用也可能编造 | 第 7 讲 |
| 解码策略 | 低温度;DoLa(Chuang et al. 2024)等对比层的方法 | 采样带来的随机编造 | 多样性下降 | – |
| 事实性微调 | 用自动的事实性评分构造偏好数据(Tian et al. 2024) | 长文本的事实错误 | 需要可靠的事实性评分器 | – |
评测幻觉的常用基准:TruthfulQA(模仿性的错误)、FActScore(Min et al. 2023:把长回答拆成原子事实,逐条对照资料核查)、HaluEval(模型能否识别幻觉)、SimpleQA(短问答;区分”正确 / 错误 / 未作答”)。设计自己的评测时,记住 §5.4 的那一条:把”不知道”和”答错”分开计分,并且同时报告覆盖率和风险。
8. 小结 · Summary
- 对齐 = helpful + honest + harmless;幻觉是”诚实”里”真实”和”校准”的失败,而且三者常常冲突:“尽力帮忙”在不知道时最容易变成编造。
- 幻觉的类型:事实性(违背世界)vs 忠实性(违背输入);内在(矛盾)vs 外在(无依据)。不同类型要用不同的办法。
- 长尾:迷你模型对出现 0 次的事实 4.2%、1 次 20.8%、2 次 96.6%;不知道时从不说”不知道”,而是借别的国家的答案。真实大模型的冷门知识同样薄弱,变大也帮助不大。
- 理论下界:校准良好的模型在”任意事实”上的幻觉率大致不低于单次事实率(这里 11.1%)。幻觉是从有限样本学习生成的统计后果。
- 校准:用可靠性图、ECE、Brier 看数值准不准,用 AUROC 看能不能区分对错——两者不同。温度缩放把 ECE 从 0.133 降到 0.049,不改变准确率。
- 后训练改变把握:用不知道的事实做微调,模型在别的未知事实上变得自信地错(从没见过的事实平均置信度 0.92)。
- 说”不知道”:只回答最有把握的 80%,风险从 17.9% 降到 5.7%;按代价定阈值要求校准;训练弃权减少了幻觉(95.7% → 60.9%),也带来过度弃权(15.7%)。提示里给退路是最便宜的办法。
- 检测:多次采样的一致性几乎能替代概率(AUROC 0.951 vs 0.949),但查不出稳定的幻觉;微调会让稳定的幻觉变多(4 → 32)。这时需要模型之外的信息:检索、交叉验证、逐条核查。
9. 常见误区 · Common pitfalls
| 误区 | 实际情况 |
|---|---|
| “幻觉是模型的 bug,换个更大的模型就好了” | 长尾知识上,变大帮助很小;校准良好的模型也必然幻觉;更大的模型更会模仿人类的错误说法(TruthfulQA) |
| “模型说它有 90% 的把握,那就是 90%” | 需要校准;口头置信度常常偏高、集中在整数上;后训练会改变校准 |
| “ECE 小就说明置信度好用” | 还要看 AUROC:一个总说 80% 的模型 ECE 可以是 0,却完全分不清对错 |
| “把正确的资料放进提示,模型就会用” | 要求模型会读上下文;资料和记忆冲突时,模型可能坚持记忆 |
| “微调时把模型不知道的事实教给它,它就知道了” | 这些例子学得慢,学会后别的幻觉反而增加(Gekhman et al. 2024) |
| “多采样几次、看一致不一致就能查出幻觉” | 查不出稳定的幻觉(每次都编同一个);成本是 k 倍 |
| “让模型多弃权总是更安全” | 过度弃权让助手没用;弃权率是在代价之间权衡的产品决策 |
| “评测只看准确率就够了” | 这等于奖励猜测;要把”不知道”和”答错”分开计分 |
10. 练习 · Exercises
练习 1(分类) 把下面每个错误归类(事实性 / 忠实性;内在 / 外在):(a)让模型总结一篇说”公司利润下降”的新闻,它写”利润上升”;(b)总结里多了一句文章没提到的 CEO 的名言;(c)问”爱因斯坦哪年获得诺贝尔奖”,它答 1925 年;(d)让它”用三个要点回答”,它写了五段。
参考答案:(a)忠实性、内在(和资料矛盾);(b)忠实性、外在(资料里没有,无法从资料验证,即使碰巧是真的);(c)事实性(实际是 1921 年度的诺贝尔物理学奖,1922 年才宣布并颁发);(d)忠实性(不按指令),通常不叫”幻觉”而叫”不遵循指令”,但在 Huang et al. 的分类里属于对指令的不忠实。
练习 2(读表) §3.1 的表里,出现 2 次的事实准确率 96.6%,平均置信度只有 0.44。(a)这是过度自信还是信心不足?(b)对一个按”置信度 > 0.5 才回答”的系统,这意味着什么?(c)怎样修?
参考答案:(a)信心不足(准确率远高于置信度)。(b)这些几乎全对的答案大多会被弃权,白白损失覆盖率。(c)温度缩放(T < 1,把分布变尖)能整体提高置信度;但它同时会让 0 次、1 次的瞎猜也更自信,所以如果不同档的偏差方向不同,可以考虑更细的校准方法(例如按某个特征分组校准,或用一个小模型把原始置信度映射成校准后的值,如保序回归 isotonic regression)。
练习 3(计算) 一个系统里,答错的代价是弃权的 5 倍。(a)应该在置信度高于多少时回答?(b)如果模型系统性地过度自信(实际正确率比置信度低 0.1),按(a)的阈值会发生什么?
参考答案:(a)回答的期望代价 (1 − p) × 5 < 1,即 p > 0.8。(b)置信度 0.8 的答案实际只有 70% 对,期望代价 0.3 × 5 = 1.5 > 1,回答它们比弃权更糟;系统会回答太多、代价超出预期。应该先在开发集上校准(或者把阈值提高到实际正确率达到 0.8 的那个置信度)。
练习 4(解释) 用 Kalai & Vempala(2024)的论证解释:为什么即使一个模型在训练数据上完美地学到了分布、并且校准良好,它仍然会在冷门事实上产生幻觉?这对”只要数据足够好、训练足够久,幻觉就会消失”的看法意味着什么?
参考答案:对于没有规律可循的”任意事实”,模型无法区分”只见过一次的真事实”和”从没见过的、同样合理的假事实”。校准要求它给前者合理的概率,于是也必须给后者分配概率——生成时就会以相应的频率说出假事实。单次事实率估计了”未见事实”的总概率,所以构成了幻觉率的下界。这意味着:只靠”把语言模型训练得更好”(更好地拟合分布)不能消除这类幻觉;需要模型之外的机制——弃权、检索、核查——或者在训练和评测中明确奖励”不知道”。
练习 5(设计) 为一个回答公司内部政策问题的助手设计一套”减少幻觉”的方案和评测。至少包括:提示怎样写、什么时候弃权、怎样检测、怎样评测。
参考答案(一种可能):提示:只根据检索到的政策文档回答,要求引用条款编号;文档里没有时回答”文档中没有找到,请联系 HR”。弃权:用检索相似度和答案的口头置信度(或多次采样的一致性)作为信号,在开发集上按”答错的代价”定阈值。检测:把回答拆成原子说法,检查每条是否能在引用的条款里找到依据(FActScore 的思路);对不一致的样本做人工抽查。评测:一组有标准答案的问题(包括故意问文档里没有的),分开统计”正确 / 错误 / 弃权”,报告风险—覆盖率曲线和过度弃权率(本来能答却弃权的比例)。
练习 6(动手) 修改 hallu_lab.build_sft 的 “abstain” 配方:不是”base 模型答错就标 unknown”,而是”base 模型的置信度低于 0.5 就标 unknown”。重新训练并和原来的比较过度弃权率和幻觉率。你预期会怎样?
参考答案:按置信度标注会把”答对但没把握”的事实(例如出现两次、置信度 0.44 的那些)也标成 unknown,于是过度弃权更多;但它也会把”答错但比较自信”的少数事实保留为正常回答。预期:过度弃权率上升,不知道的事实上的弃权率也上升,幻觉率可能下降。这体现了一个权衡:按”对不对”标注更准确,按”有没有把握”标注更保守。实际结果要运行才知道(在
build_sft里把条件换成probe返回的conf < 0.5,并给缓存键加一个新的变体名)。
练习 7(批判) 有人提出”让模型对每个回答都附上 0–100 的置信度,低于 70 就不显示”。分析这个方案的优点和风险。
参考答案:优点:不需要 logprobs,任何 API 都能用;简单透明。风险:口头置信度常常偏高、集中在少数几个整数上(Xiong et al. 2024),阈值 70 可能几乎过滤不掉任何东西;不同模型、不同提示下数值的含义不同,换模型要重新标定;它对”稳定的幻觉”同样无能为力。改进:在开发集上测量口头置信度的可靠性图和 AUROC,据此定阈值;结合多次采样的一致性;对高风险问题做外部核查。
练习 8(联系) 第 4 讲发现 self-consistency 修不了”系统性错误”,本讲发现一致性检测查不出”稳定的幻觉”。这两件事是同一个现象吗?为什么用没有依据的事实做微调会让它更严重?
参考答案:是同一个现象的两面:当模型的错误在多次采样之间保持一致时,“多次采样”这个工具——无论用来投票还是用来检测——都看不到它,因为它只能观察到模型输出分布的形状,而分布本身集中在错误答案上。用没有依据的事实做微调,训练模型”对这类问题给出一个确定的答案”,把原本分散的、不确定的分布(容易被一致性检测发现)变成了集中在某个错误答案上的分布——随机的幻觉变成了稳定的幻觉。
11. 延伸阅读 · Further reading
对齐与诚实
- Askell, A. et al. (2021). A General Language Assistant as a Laboratory for Alignment. arXiv:2112.00861.
- Evans, O. et al. (2021). Truthful AI: Developing and Governing AI that Does Not Lie. arXiv:2110.06674.
- Lin, S., Hilton, J., & Evans, O. (2022). TruthfulQA: Measuring How Models Mimic Human Falsehoods. ACL.
幻觉的分类与来源
- Maynez, J., Narayan, S., Bohnet, B., & McDonald, R. (2020). On Faithfulness and Factuality in Abstractive Summarization. ACL.
- Ji, Z. et al. (2023). Survey of Hallucination in Natural Language Generation. ACM Computing Surveys.
- Huang, L. et al. (2023). A Survey on Hallucination in Large Language Models: Principles, Taxonomy, Challenges, and Open Questions. arXiv:2311.05232.
- Kandpal, N., Deng, H., Roberts, A., Wallace, E., & Raffel, C. (2023). Large Language Models Struggle to Learn Long-Tail Knowledge. ICML.
- Mallen, A. et al. (2023). When Not to Trust Language Models: Investigating Effectiveness of Parametric and Non-Parametric Memories. ACL.
- Kalai, A. T., & Vempala, S. S. (2024). Calibrated Language Models Must Hallucinate. STOC.
- Kalai, A. T., Nachum, O., Vempala, S. S., & Zhang, E. (2025). Why Language Models Hallucinate. arXiv:2509.04664.
- Gekhman, Z. et al. (2024). Does Fine-Tuning LLMs on New Knowledge Encourage Hallucinations? EMNLP.
- Xie, J. et al. (2024). Adaptive Chameleon or Stubborn Sloth: Revealing the Behavior of Large Language Models in Knowledge Conflicts. ICLR.
校准
- Guo, C., Pleiss, G., Sun, Y., & Weinberger, K. Q. (2017). On Calibration of Modern Neural Networks. ICML.
- Kadavath, S. et al. (2022). Language Models (Mostly) Know What They Know. arXiv:2207.05221.
- Tian, K. et al. (2023). Just Ask for Calibration: Strategies for Eliciting Calibrated Confidence Scores from Language Models Fine-Tuned with Human Feedback. EMNLP.
- Xiong, M. et al. (2024). Can LLMs Express Their Uncertainty? An Empirical Evaluation of Confidence Elicitation in LLMs. ICLR.
弃权与检测
- El-Yaniv, R., & Wiener, Y. (2010). On the Foundations of Noise-free Selective Classification. JMLR.
- Kamath, A., Jia, R., & Liang, P. (2020). Selective Question Answering under Domain Shift. ACL.
- Zhang, H. et al. (2024). R-Tuning: Instructing Large Language Models to Say “I Don’t Know”. NAACL.
- Manakul, P., Liusie, A., & Gales, M. J. F. (2023). SelfCheckGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models. EMNLP.
- Kuhn, L., Gal, Y., & Farquhar, S. (2023). Semantic Uncertainty: Linguistic Invariances for Uncertainty Estimation in Natural Language Generation. ICLR.
- Farquhar, S., Kossen, J., Kuhn, L., & Gal, Y. (2024). Detecting Hallucinations in Large Language Models Using Semantic Entropy. Nature.
减少与评测
- Min, S. et al. (2023). FActScore: Fine-grained Atomic Evaluation of Factual Precision in Long Form Text Generation. EMNLP.
- Chuang, Y.-S. et al. (2024). DoLa: Decoding by Contrasting Layers Improves Factuality in Large Language Models. ICLR.
- Tian, K., Mitchell, E., Yao, H., Manning, C. D., & Finn, C. (2024). Fine-tuning Language Models for Factuality. ICLR.
- Dhuliawala, S. et al. (2024). Chain-of-Verification Reduces Hallucination in Large Language Models. Findings of ACL.(第 10 讲细讲)
- Wei, J. et al. (2024). Measuring Short-Form Factuality in Large Language Models (SimpleQA). arXiv:2411.04368.
12. 下一讲预告 · Next lecture
这一讲看到,后训练会改变模型”有多大把握”:教它背没有依据的事实,它就变得自信地错。第 6 讲继续原课第 4 周的第二个主题:对齐(二):偏见、毒性与谄媚——另外三种后训练前后都要面对的失败。
- 偏见和毒性从哪里来(数据分布、标注者、表征伤害);评测基准 BBQ、WinoBias、StereoSet、CrowS-Pairs、RealToxicityPrompts、ToxiGen 的设计思路和局限,特别是”歧义上下文 vs 消歧上下文”这个关键设计;
- 谄媚(sycophancy):顺着用户的观点说话、被质疑就改口(Perez et al. 2023;Sharma et al. 2024)——为什么 RLHF 会奖励它;
- 对齐税:对齐让模型在别的能力上付出的代价;提示层面的缓解(去偏提示、“先独立判断再看用户意见”)和它的边界;
- 动手:一个带偏好的模拟评审者和模拟模型,测量谄媚率怎样从”人类偏好”里长出来;构造一个歧义 / 消歧两种上下文的偏见基准,看去偏提示的效果和副作用。