《Why Language Models Hallucinate》论文解读
《Why Language Models Hallucinate》论文解读
- 论文:https://arxiv.org/pdf/2509.04664v1
- author:
摘要
就像学生面对难题时会猜测一样,大型语言模型在不确定时也会进行猜测,生成看似合理却错误的表述,而非承认自身的不确定性。这种“幻觉”现象即便在最先进的大模型中也依然存在,并且会损害用户对模型的信任。我们认为,语言模型产生幻觉的原因在于,其训练与评估流程更倾向于奖励“猜测行为”,而非奖励“承认不确定性的行为”;同时,我们也分析了现代训练流程中导致幻觉产生的统计层面原因。
幻觉并非难以解释的神秘现象——它本质上源于二分类任务中的错误。若模型无法区分“错误表述”与“事实”,那么在自然的统计压力作用下,预训练语言模型就必然会产生幻觉。我们进一步认为,幻觉之所以持续存在,与大多数评估的评分方式密切相关:语言模型被优化成了“擅长考试的系统”,而在不确定时进行猜测能提升其考试成绩。
这种“惩罚不知道(I don't know, IDK)”的普遍现象,只能通过“社会技术层面的缓解措施”来解决:具体而言,是修改那些“大模型排行榜”的现有基准测试的评分规则,而非新增更多专门的幻觉评估项目。这一改变或许能引导整个领域朝着构建“更具可信度的人工智能系统”方向发展。
一、核心问题:明确“语言模型幻觉”的本质
定义与现象:幻觉指语言模型在不确定时,生成“看似合理却错误”的内容(如乱编学者生日、误数字母数量)。即使最先进的模型(如 DeepSeek-V3、GPT-4o)也存在该问题,例如问“DEEPSEEK 有几个 D”,模型多次输出 2、3 等错误答案,实际仅 1 个 D。 关键区分:幻觉分为“内在幻觉”(与用户要求矛盾,如上述字母计数错误)和“外在幻觉”(与训练数据矛盾,如乱编作者出生日期),二者本质都是“模型无法区分‘正确事实’与‘看似合理的错误’”。
二、核心观点 1:预训练阶段——幻觉是“统计必然”
1. 核心逻辑:生成任务比“判断对错”更难
研究者将模型生成内容的过程,归约(reduction)为“Is-It-Valid(IIV)二分类任务”:即模型生成内容前,需先隐性判断“这个答案是否正确”。 数学关系证明:模型的“生成错误率(含幻觉)≥ 2×IIV 二分类错误率”。这意味着,只要模型在“判断答案是否正确”时存在误差,生成幻觉就是必然结果——就像人无法准确区分“真知识”和“假知识”时,自然会瞎猜。
2. 具体诱因:三类统计因素导致幻觉
冷门事实的“认知盲区”:训练数据中“只出现过一次”的事实(如小众人物生日),模型无法学习到规律,只能随机生成答案。例如某人的生日在训练数据中仅出现 1 次,模型对这类问题回答正确的概率是 1/365=0.27%,模型根本记不住,会瞎编一个日期。 模型能力不足(Poor Model):若模型架构无法适配任务(如用“只能看 2 个词上下文的三元模型”处理复杂推理),会因“无法理解任务逻辑”而产生幻觉。例如三元模型无法区分“She lost it…out of her mind”和“He lost it…out of his mind”,错误率至少 50%。 数据质量与分布问题:训练数据含错误(Garbage in, Garbage out, GIGO)、测试问题与训练分布差异大(如问小众问题:“一磅羽毛和一磅铅哪个重”),都会加剧幻觉——模型会基于错误数据或陌生场景“强行编答案”。
三、核心观点 2:后训练阶段——幻觉持续存在,因评估体系“奖励猜测”
1. 关键矛盾:二进制评分逼模型“宁猜勿漏”
现有主流评估(如 MMLU、SWE-bench)均采用“二进制评分”:答对得 1 分,答错/说 IDK 得 0 分。这种规则下,模型“瞎猜”的预期收益(如 50%概率蒙对得 0.5 分)高于“说 IDK”(得 0 分),导致模型即便不确定,也会硬编答案。 类比:就像学生考试时,选择题不会做也会瞎蒙(蒙对有分,空着没分),模型本质是“被训练成了擅长考试的‘猜题者’”,而非“诚实的知识输出者”。
2. 更严峻的问题:“幻觉评估”无法对抗主流评价
尽管研究者开发了专门检测幻觉的基准(如 HalluLens),但这类评估影响力远低于主流 benchmark。例如 Model A“诚实说 IDK、无幻觉”,Model B“瞎猜、有幻觉”,在二进制评分下 Model B 得分更高,开发者仍会优先优化 Model B——形成“鼓励瞎猜”的恶性循环。
四、核心观点 3:解决思路——改“评分规则”,而非新增幻觉检测
1. 核心方案:评估中加入“明确置信度目标”
不再用“答对 1 分、答错 0 分”的二进制规则,而是在题目中明确“置信度阈值”,例如:“只有你有 90%以上把握时才回答,答错扣 9 分,答对得 1 分,说 IDK 得 0 分”。 原理:当模型对答案的置信度低于阈值时,“说 IDK(0 分)”比“瞎猜(大概率扣 9 分)”更划算,从规则上鼓励模型“诚实表达不确定”。
2. 具体落地:两大关键设计
阈值透明化:在每个问题的提示中明确阈值(如 t=0.75 表示“75%把握才回答”),避免模型因“不知道该何时回答”而瞎猜。例如编程题标注“只有确定代码能通过测试时才写,否则说‘无法解决’”。 融入主流评估:将“置信度目标”加入现有 benchmark(如 SWE-bench、MMLU),而非新增独立的幻觉评估。例如 SWE-bench 中,模型输出错误代码扣 2 分,说“无法解决”得 0 分,倒逼模型在不确定时放弃瞎编。
五、关键结论与启示
幻觉不是“模型笨”,而是“规则逼的”:预训练时的统计规律让幻觉有必然性,评估体系的“奖励猜测”让幻觉持续存在——解决问题的核心不是“让模型更聪明”,而是“调整训练与评估的规则”。 对实践的指导:训练模型时,需同时做到两点: 预训练阶段:通过“结构化改写数据、注入推理链(CoT)”帮模型区分“真/假知识”; 强化学习阶段:用“错误负分、IDK 0 分”的奖励机制,让模型“趋利避害”,主动选择诚实表达不确定。
局限性提示:幻觉无法完全消除(除非模型只回答“确定知道”的内容,但会牺牲实用性),目标应是“将幻觉控制在安全、低影响的范围内”,尤其在医疗、法律等高危领域,需更严格的置信度阈值和错误惩罚。
如何训练减少幻觉的语言模型?
传统“答对 1 分、答错/IDK 0 分”规则下,模型猜错(得 0 分)和说 IDK(得 0 分)收益一样,不如瞎猜博 50%正确率。而“错误打负分、IDK 打 0 分”恰恰扭转了这个激励:
模型猜错会“扣分”(收益为负),说 IDK 至少“不扣分”(收益为 0),从规则上让“承认不知道”比“硬编错误答案”更划算,直接打击了模型“宁猜勿漏”的幻觉动机。 但要注意:这种规则只在“模型能判断自己‘不确定’”时有效——如果模型本身分不清“自己知道还是不知道”(比如预训练没学好“冷门知识的边界”),即便有负分惩罚,也可能因“误以为自己知道”而继续幻觉。因此,这个规则需要搭配“让模型学会识别‘不确定场景’”的训练,才能最大化效果。
落地训练步骤:分 3 步让模型“敢说 IDK、少瞎猜”
结合“预训练 → 监督微调 → 强化学习”框架,以及“动态评估”思路,具体操作如下:
第一步:数据准备——构建“带‘不确定标注’的训练数据”
核心是让模型先“见过‘哪些场景该说 IDK’”,避免它因“没学过 IDK 的正确用法”而不敢用。
数据来源:
筛选“客观上没有标准答案”或“模型大概率不知道”的场景:比如冷门事实(如“某小众论文的作者生日”)、模糊问题(如“10 年后的 AI 会怎样”)、超出模型知识范围的内容(如 2028 年后的未发生事件)。 人工标注:对这些场景,明确标注“正确输出=IDK”,同时标注“错误输出示例”(如乱编的生日、瞎猜的预测)。 数据格式:用“提示词+正确输出+错误输出”的三元组,比如: 提示词:“请回答:论文《XXX》的第一作者生日是哪天?” 正确输出:“I don't know”(或“抱歉,无法确定该信息”) 错误输出:“03-07”(乱编的日期)
数据增强:
对有标准答案的场景(如“地球半径”),也加入“模型故意答错”的负例(如“地球半径 1 万米”),标注为“错误,需扣负分”,让模型明确“哪些输出会受惩罚”。
第二步:监督微调(SFT)——先教模型“识别不确定场景,会说 IDK”
这一步的目标是让模型先“学会基础行为”:知道“什么时候该说 IDK”,而不是上来就用强化学习硬训。
训练目标: 让模型在“不确定场景”下优先输出 IDK,在“确定场景”下输出正确答案,同时知道“错误输出是坏的”。
具体操作: 用第一步准备的“带标注数据”训练:输入提示词,让模型学习“输出 IDK”或“正确答案”,对输出错误答案的样本,用“交叉熵损失”重点惩罚(相当于提前植入“错误=不好”的认知)。 关键细节:在训练数据中加入“梯度提示”——比如在 IDK 样本的 prompt 里加一句“如果不确定,请回答‘I don't know’”,帮模型快速对齐“IDK 的使用场景”。
第三步:强化学习(RL)——用“错误负分、IDK 0 分”的奖励机制优化
这一步是核心:通过动态反馈让模型“主动选择 IDK 而非瞎猜”,完全落地你提出的规则。结合文档中的“动态验证系统”思路,具体分 2 步:
1. 搭建“奖励计算模块”——明确“怎么给分”
奖励规则定义(对应“错误负分、IDK 0 分”):
正确答案:得 1 分(或自定义正分,如+2 分),鼓励模型在确定时输出正确内容。 错误答案:得-1 分(或更重的负分,如-3 分),惩罚幻觉行为,分数绝对值可根据“错误严重性”调整(比如医疗场景中“错误用药建议”比“错误生日”负分更重)。 IDK 回答:得 0 分,确保“承认不知道”比“瞎猜”更划算(0 分 > 负分)。
奖励计算逻辑:
对模型的每一个输出,先通过“事实验证器”判断类别:
若输出是“IDK”:直接给 0 分; 若输出是具体内容:用“事实核查工具”(如检索知识库、调用权威 API)判断“正确/错误”,对应给正分/负分; 特殊情况:若问题本身“没有标准答案”(如“未来的技术趋势”),模型输出 IDK 给 0 分,输出具体预测(即使合理)也给-0.5 分(避免模型“过度推测”)。
prompt设计指导
:Answer only if you are (>t) confident, since mistakes are penalized (t /(1-t)) ) points, while correct answers receive I point, and an answer of "I don't know" receives O points.
2. 强化学习训练——让模型“学会趋利避害”
“强化学习框架”(如 GRPO、PPO),让模型在与“动态环境”的交互中优化行为:
环境搭建:模拟真实对话场景,让模型持续接收“各种类型的问题”(包括“知道的、不知道的、模糊的”),输出答案后立即获得“分数奖励”。 训练过程: 初始阶段:模型可能仍会偶尔瞎猜(比如误以为自己知道冷门知识),但因“猜错扣分”,会逐渐发现“说 IDK 更安全”; 中期优化:加入“不确定度校准”——对模型输出 IDK 的样本,额外判断“是否真的该 IDK”(比如模型对“自己知道的知识”错误输出 IDK,需轻微惩罚,如-0.1 分),避免模型“过度保守”; 后期稳定:通过多轮迭代,让模型形成“先判断自己‘确定与否’→ 确定则输出正确答案,不确定则说 IDK”的行为模式。
第四步:评估与调优——确保“减少幻觉”不牺牲有用能力
训练后需要验证效果,避免模型“为了不扣分,什么都说 IDK”(比如连“地球是圆的”都回答 IDK):
评估指标: 幻觉率:统计模型输出“错误答案”的比例,目标是降低幻觉率; IDK 合理率:统计“模型说 IDK 的场景中,确实该 IDK”的比例(避免过度保守); 有用性:统计“模型在‘该知道’的场景中,正确输出答案”的比例(避免因怕扣分而“故意装不知道”),目标是保持稳定。
调优策略: 若模型“过度保守”(该知道的也说 IDK):降低“正确答案的正分”与“IDK 0 分”的差距(如正确答案得 0.5 分),或对“错误 IDK”(该知道却不说)加轻微负分(如-0.2 分); 若模型“仍有较多幻觉”:加重错误答案的负分(如从-1 分改为-2 分),或在强化学习中增加“幻觉样本的训练权重”(让模型更关注“猜错过的场景”)。
三、关键注意事项(避免踩坑)
IDK 的“话术自然性”:训练时不要让模型只输出生硬的“I don't know”,可加入自然表达(如“抱歉,目前没有足够信息确定这个内容”),避免影响用户体验; 知识边界的清晰化:预训练阶段要让模型“知道自己知道什么”——比如通过“知识图谱标注”明确“哪些领域是自己的知识盲区”,避免因“分不清知道与否”而被迫瞎猜; 场景适配:负分的“权重”需根据场景调整——比如医疗、法律等高危场景,错误负分要更重(如-5 分),普通闲聊场景可轻一些(如-0.5 分),避免“一刀切”导致模型行为扭曲。