一.大模型初步了解

LLM(GPT、LLaMA、Gemini 等)已经在理解、生成、推理上表现很强,被广泛用在搜索、问答、推荐、聊天机器人等信息检索场景中。但它们会产生“看起来一本正经、实际瞎编”的内容,也就是“幻觉”,而且因为回答很像人说的话,非常难被普通用户识别,这直接影响现实决策(比如医疗、法律问答)。

LLM的训练流程包括预训练+对齐

预训练:在海量文本上做自回归/语言建模,学一般语言规律 + 世界知识。

对齐(Alignment):

SFT(监督微调):用人类标注的 “指令—回答” 样本,让模型学会听指令。

RLHF / 其它对齐方法:让模型更符合人类偏好,不瞎说、有礼貌、更有用。

RHLF例子讲解:

第1步:收集人类偏好数据

向微调后的模型输入一个问题,让它生成多个不同的回答(例如A、B、C、D)。

请人类标注员对这些回答进行排序或打分。标注员不需要写出好答案,只需要判断哪个更好。例如:“A比B好,C比D差”。

关键:这里收集的不是“答案”,而是人类的“比较性偏好”。

第2步:训练一个“奖励模型”

目标:训练一个单独的、相对较小的神经网络,作为“人类偏好模拟器”。

方法:用上一步的人类偏好数据训练它。输入一个“问题-回答”对,RM输出一个标量分数(奖励值)。训练目标是让RM对高质量回答的打分,高于低质量回答。

结果:这个RM就学会了量化“人类喜欢什么”。它替代了耗时的人类,可以快速给任何回答打分。

第3步:使用强化学习优化语言模型

设定环境:

运动员:我们需要优化的语言模型(称为“策略”)。

教练/评分裁判:上一步训练好的“奖励模型”。

游戏规则:模型生成一个回答,RM就给它打一个分。

训练过程:

模型尝试生成各种回答,目标是使RM给出的期望奖励分数最大化。

为了避免模型“钻空子”(比如只生成一些讨好RM但无意义的短句),通常会加入一个“惩罚项”,让生成的回答不要过分偏离原始的基座模型(即保持原有知识和语言能力)。

结果:通过大量试错,语言模型自我调整其内部参数,逐渐学会生成那些能获得RM高分的回答,也就是更符合人类偏好的回答。

二.幻觉分类

第一大类:Factuality Hallucination(事实幻觉):输出的内容与现实世界事实不一致,或者无法被任何事实验证,是 LLM 最典型、最危险的幻觉类型。

1.实体错误(Entity Error)

与真实世界的实体不一致。

例:

问:“Who invented the telephone?”

答:“Thomas Edison.”

而真实答案是:Alexander Graham Bell

2.关系错误(Relation Error)

实体对了,但实体之间的关系错了。

例:

“Edison invented the light bulb.”

实际上:他是“改良者”,不是“发明者”。

3.不可验证幻觉(Unverifiable Hallucination)

模型编造了不存在、不可查证的内容。

4.过度主张(Overclaim)

模型把不确定的内容说成确定的。

例:

“某偏方一定能治病”

“某未证实事件确实发生过”

5.错误归因(Incorrect Attribution)

例如:

把某观点归到错误的作者

错给错误的年份、错误的会议

6.错误来源引用(Incorrect Citation)

生成不存在的 DOI、书籍、期刊号等。

第二大类:Contextual Hallucination(上下文幻觉)

模型输出与“输入上下文 / 检索资料 / 指令要求”不一致。

7.不遵循指令(Instruction Inconsistency)

模型没有按指令做。

例:

指令:“Translate the sentence.”

LLM 却直接回答问题而没有翻译。

8.上下文矛盾(Context Contradiction)

LLM 输出的内容与输入给定文档矛盾。

例:

给文档:Nile 河来源于 Great Lakes

模型总结成:来源于 mountain ranges

9.未使用必要上下文(Context Omission)

模型忽略了输入中的关键信息,导致错误生成。

例:

文档明确写了结论,但模型自己编了另一个结论。

10.无关上下文混入(Context Intrusion)

模型使用了不应使用的上下文,添加额外错误信息。

例:

问 A 文档内容,却引用了 B 文档的信息。

11.任务形式错误(Task Format Error)

任务要求输出 JSON

模型输出自然语言段落

任务要求 “只输出数字”

模型却解释一大段

第三大类:Logical Hallucination(逻辑幻觉):LLM 的推理过程不一致、自相矛盾、逻辑错误。在 CoT(Chain-of-Thought)中非常常见。

12.步骤逻辑不一致(Step Inconsistency)

推理链前后矛盾。

例:

Step 1:2x = 8

Step 2:x = 3

13.无效推理步骤(Invalid Deduction)

步骤之间没有逻辑联系,却得出了结论。

例:

“因为巴黎是法国首都,所以它的 GDP 大于东京。”

14.推理跳步(Reasoning Jump)

模型跳过关键推理步骤直接得出结论,导致错误。

例:

数学推理没有列式子直接输出错误答案。

15.自我矛盾(Self-Contradiction)

同一次回答中出现相互矛盾的陈述。

例:

第一句:“The capital of Australia is Canberra.”

下一句:“Sydney is the capital of Australia.”

三.幻觉产生的原因

幻觉不是一个点出问题,而是整个流水线:数据 → 训练 → 推理

1.来自数据

1.1错误信息 & 社会偏见(Misinformation & Biases)

1.2知识边界(Knowledge Boundary)

对“没见过的事实”“最新事件”“长尾领域”(冷门实体、小语种术语等),模型只能“根据统计模式瞎猜”。

1.3对齐数据质量差(Bad Alignment Data)

2.来自训练

2.1预训练阶段:单向自回归(unidirectional)

只能看左边预测右边,长距离依赖不容易捕获,容易在复杂推理中“丢条件”。Soft attention 的“注意力稀释”:序列很长时,注意力摊得很散,重要信息被稀释,引发推理幻觉。Exposure bias(暴露偏差):训练时看真答案,推理时看自己前面预测 → 一旦前面错了,后面全跟着错,像滚雪球。

2.2预训练本身有“能力边界”。

SFT 如果让模型去“装懂边界之外的东西”,会显著提高幻觉。论文的一个结论:SFT 新增知识学得并不好,但却会让模型更爱瞎编。

2.3RLHF / Alignment 阶段:

如果奖励模型偏好“流畅、肯定、乐于回答”,会诱导模型在不确定时编造。

3.来自推理

3.1Prompt / 指令设计

诱导性问题、暗含错误前提、过于复杂的问题都能明显提高幻觉率。

3.2解码策略

高温度、top-k / nucleus 采样会更“有创造力”,但也更容易产生事实错误。

3.3不确定性处理(uncertainty)

模型往往“过度自信”,即使概率不高,也说得很肯定。(4)长上下文问题(lost in the middle):使用 RoPE 的 LLM 容易对“上下文中间的信息”注意力变弱,导致只看前几段 or 最后几段。

四.幻觉检测办法

1.基于外部知识 / 检索的对比

把 LLM 输出拿去对照

知识库(Wikipedia、KG)和检索到的网页,然后用一些“事实一致性 / NLI 模型”判断是否支持该回答(如 SummaC、FEQA 系列)。

2.基于不确定性的检测

看模型的概率分布、多个采样结果是否一致、多模型 ensemble 一致性;如果模型自己都“犹豫”,就标记为有潜在幻觉。

3.LLM 自评 & LLM-as-a-judge

让同一个或者另一个 LLM 来判断:“这个回答是不是可信 / 是否有幻觉?”也可以让模型执行“自我批评 + 修改”(self-critique, verify-and-edit)。

4.专门训练一个小模型当“幻觉检测器”

输入是“问题 + 文档 + LLM 输出”,输出是“是否有幻觉 / 属于哪一类幻觉”。优点:推理快、易部署;缺点:需要标注数据。

五.幻觉缓解方法

1.数据相关缓解

1.1数据过滤 / 清洗

过滤假新闻、低质量文本;构建高质量的专业数据集(比如法律领域的 Pile of Law)。

1.2偏见缓解

在训练前后做 bias filtering、对敏感属性做去偏、平衡。

1.3更好的对齐数据

更高质量的人类指令 & 回答;引入“拒绝答复”的示例,让模型学会说“不知道”。

2.训练阶段缓解

2.1 改模型架构 / 训练目标

使用 双向自回归架构 BATGPT,让模型在预测下一个 token 时更好利用上下文。对自注意力加 regularizer,做“attention sharpening”,避免注意力太散 → 减少推理幻觉。

2.2调整 SFT & RLHF

分析发现:SFT 注入的新事实越多,越容易幻觉 → 需要控制 SFT 的“知识更新方式”。RLHF 可以设计“更重视真实性”的 reward,比如对事实错误严厉惩罚。有工作提出 “Self-Alignment for Factuality”,通过自评 + 自改的方式,把 factuality 写入对齐过程。

2.3模型编辑(Model Editing)

在不重训大模型的情况下,编辑某些参数来修正错误知识。优点:针对性强;缺点:难以大规模更新,多次编辑会损害全局知识。

3.推理阶段缓解(Inference-level)

常见思路:

3.1Prompt 设计

要求模型:先列出推理步骤,再验证每一步;

使用 context-faithful prompting,明确要求“答案必须仅来源于上面的文档”。

3.2自我一致性 / 多样化采样 + 投票

多次采样 CoT,然后做投票,减少随机幻觉。

3.3自我验证(Self-Verification / Chain-of-Verification)

代表作:Chain-of-Verification、Verify-and-Edit 等。

流程:先生成一个答案 + 推理链、再让同一个或另一个 LLM 针对关键事实提问 / 检索、最后修正原来的推理链和答案

3.4不确定性驱动的“拒答/求助”

如果置信度低,就“拒绝回答”或“去查资料”。

4.RAG(Retrieval-Augmented Generation)缓解

核心思想:把“外部知识”从模型参数中解耦出来,问问题时再去检索。

常见三种模式:

One-time Retrieval:先检索一次,把结果拼接到 prompt 里,一起喂给 LLM。

Iterative Retrieval:在生成过程中多次检索,每一步推理都可以查文献。

Post-hoc Retrieval:先给出答案,再根据答案去检索 & 校对,必要时修正。

优点:很适合补 知识边界 的洞;

缺点:一旦检索错/召回噪声,反而把模型带偏;检索与生成的交互还比较浅,有待更紧密结合。

六.RAG 里的幻觉(Retrieval Failure + Generation Bottleneck)

1.Retrieval Failure(检索阶段的问题)

三大来源:

1.1用户 Query 本身有问题

盲目检索:明明是常识题(“海平面水的沸点”),硬要去检索,结果检索到“高海拔 95°C”,模型就答错了。

歧义 Query:比如“the fastest mile run on track”,到底是人跑得快,还是车跑得快?检索可能拉来赛车纪录。

复杂 Query:文档只写了“弗莱明发现青霉素”,没写“在哪里毕业”,模型无法从文档中找到信息,就开始瞎编。

1.2检索源的问题

知识库本身不全 / 含有错误信息 / 没更新。

1.3检索器本身的问题

embedding 不准、召回不完善、排序不理想,导致没把最相关文档找出来。

2.Generation Bottleneck(生成阶段的问题)

即使检索到对的文档,也可能因为 LLM 利用上下文的方式有问题而幻觉。

2.1Lost-in-the-middle

文档太长时,模型忽略中间的信息,只看开头和结尾。RoPE 的长距离衰减是重要原因之一。

2.2Contextual Alignment(上下文对齐)问题

没有做到“从上下文中忠实生成”,而是混入了自身 parametric knowledge;Source Attribution 做不好:模型说了一些事实,却不知道到底来自哪个文档。

七.参考文献

A Survey on Hallucination in Large Language Models: Principles, Taxonomy, Challenges, and Open QQestions

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐