大模型幻觉(LLM Hallucination)面试总结
来源:AiGC面试宝典 作者:宁静致远 日期:2023年09月29日
一、什么是大模型幻觉?
在语言模型的背景下,幻觉指的是模型“一本正经地胡说八道”:看似流畅自然的表述,实则不符合事实或者是错误的。
📝 通俗解释:就像一个记忆力不太好但很会讲故事的人,能把故事讲得头头是道,但细节往往是编的。大模型就是这样,它很会“组织语言”,但说的话不一定是真的。
二、为什么LLM会产生幻觉?
LLM产生幻觉的原因主要有以下几类:
2.1 数据相关原因
| 原因 | 说明 |
|---|---|
| 源与目标的差异 | 训练数据中源内容与目标内容存在偏差,这种差异可能是在数据收集过程中不经意间产生的,有时则是故意为之 |
| 无意识的源-目标差异 | 数据基于某种经验法则编制,目标信息并不总是完全依赖源信息。例如,从两家不同新闻网站获取相同事件的报道,目标报道可能包含源报道没有的信息 |
| 有意识的源-目标差异 | 某些任务不追求源与目标的严格一致,尤其是在需要多样性输出的情境下 |
| 训练数据的重复性 | 训练数据存在大量重复,导致模型过于偏好某些高频短语 |
| 数据噪声的影响 | 使用充斥噪声的数据进行训练,是导致幻觉的关键因素之一 |
📝 通俗解释:这就像让学生从互相抄作业的同学们那里学习知识——抄来抄去,错误会被放大,最后学到的东西可能和原始正确答案相去甚远。
2.2 模型与解码相关原因
| 原因 | 说明 |
|---|---|
| 解码过程中的随机性 | top-k采样、top-p方法、温度调节等增加多样性的解码策略,会引入随机性,导致模型选择非最优词汇 |
| 模型的参数知识偏向 | 模型更依赖预训练阶段积累的知识,忽略实时提供的上下文信息 |
| 训练与应用的解码差异 | 训练时基于真实数据预测下一个词,但应用时是根据自己生成的内容预测,这种差异在长文本生成中会导致幻觉 |
📝 通俗解释:这类似于“传话游戏”——第一个人说一句话,第二个人根据自己理解的传给第三个人,传到第十个人时可能完全变样了。模型也是这么一代一代“传”出自己的回答的。
2.3 本质原因
生成模型只是学会了文本中词汇间的统计规律,它们生成内容的准确性仍然是有限的。
📝 通俗解释:大模型本质上是一个“超级文字接龙”高手,它知道在“天空是”后面最可能接“蓝色的”,但它不知道天空实际上是什么颜色。
三、为什么需要解决LLM的幻觉问题?
LLMs的幻觉可能产生严重后果:
- 传播错误信息
- 侵犯隐私
- 在医疗应用中,对患者生成的报告如果存在幻觉可能导致错误诊断,甚至影响生命安全
- 幻觉影响模型的可靠性和可信度
📝 通俗解释:如果医生用AI辅助诊断,AI把“肺炎”说成“肺癌”,或者把“没有病”说成“有病”,后果将不堪设想。这就是为什么幻觉问题必须解决。
四、幻觉一定是有害的吗?
不一定。 幻觉的容忍度取决于具体应用场景:
| 应用场景 | 幻觉的影响 |
|---|---|
| 需要准确性的场景(医疗诊断、法律文书、新闻报道) | 有害,必须避免 |
| 需要创造力的场景(写小说、电影剧情、广告文案) | 有益,可以带来奇思妙想,使生成的文本充满想象力 |
📝 通俗解释:就像画画一样,写实派需要准确(不能有“幻觉”),但抽象派恰恰需要想象力带来的“幻觉”。AI也是同理——要看用在什么地方。
五、幻觉有哪些不同类型?
| 类型 | 定义 | 例子 |
|---|---|---|
| 内在幻觉 | 生成的内容与源内容相矛盾 | 源:“今天下雨” → 生成:“今天晴天” |
| 外在幻觉 | 生成的内容不能从源内容中得到验证,既不支持也不反驳 | 源:“今天下雨” → 生成:“小明考上了清华大学” |
📝 通俗解释:
- 内在幻觉 = “睁眼说瞎话”(和原文直接矛盾)
- 外在幻觉 = “答非所问”(和原文没关系,也无法验证对错)
六、如何度量幻觉?
6.1 人工评估
最有效可靠的方式,但成本太高。
6.2 自动化评估指标
| 指标 | 说明 |
|---|---|
| 命名实体误差(Named Entity Error) | 利用NE匹配计算生成文本与参考资料之间的一致性。如果模型生成了不在原始知识源中的命名实体,视为幻觉 |
| 蕴含率(Entailment Rate) | 被参考文本所蕴含的句子数量与生成输出总句子数量的比例,可使用成熟的蕴含/NLI模型计算 |
| 基于模型的评估 | 应对复杂的句法和语义变化 |
| 利用问答系统(QA-based) | 如果生成文本与参考材料一致,对同一问题的答案应与参考材料相似。流程:问题生成 → 用参考文本回答 → 计算答案相似性 |
| 利用信息提取系统(IE-based) | 使用IE模型将知识简化为关系元组(如<主体,关系,对象>),比较生成文本与原始材料提取的元组 |
📝 通俗解释:就像检查学生作业一样,可以用“对照答案”(命名实体匹配)、“问问题看看回答是否一致”(QA方法)、或者“提取关键知识点比对”(信息提取)。
七、如何缓解LLM幻觉?
7.1 数据层面
与幻觉有关的数据问题可以通过创建高质量无噪声的数据集来解决。但验证和清理数百GB的文本语料库难度太大。
📝 通俗解释:这相当于“从小给孩子正确的教育”——理论上可行,但实际操作中很难保证所有教材都是准确无误的。
7.2 方法一:外部知识验证(主动检测和减轻)
论文:《A Stitch in Time Saves Nine: Detecting and Mitigating Hallucinations of LLMs by Validating Low-Confidence Generation》
核心发现:
- 幻觉会传播:一句话出现幻觉,后续生成的文本可能更严重
- logit输出值可作为信号:概率得分很低时,模型更容易产生幻觉
实现流程:
输入指令 → 模型生成句子 → 识别关键概念 → 计算不确定性 →
验证问题生成 → 检索知识 → 修复幻觉句子 → 附加到提示继续生成具体步骤:
- 检测阶段:提取生成句子的重要概念,利用logit输出值计算模型对它们的不确定性
- 验证阶段:针对高不确定性概念生成验证问题,通过搜索或LM查找相关知识
- 修复阶段:利用检索到的知识修复幻觉句子,将修复后的句子附加到输入继续生成
📝 通俗解释:就像老师在批改学生作文时,看到不确定的“事实”(比如年份、地点),就让学生去查资料核实,发现错误就改正后再继续写下面的内容。
7.3 方法二:事实核心采样(Factuality Enhanced Sampling)
论文:《Factuality Enhanced Language Models for Open-Ended Text Generation》
核心思想:采样的“随机性”在句子开头影响小,但在句子后半部分对事实性的损害更大。
原因:
- 句子开头没有前文,只要语法和上下文正确,LM可以生成任何内容
- 随着生成进行,前提变得更确定,只有更少的单词选择可以使句子成为事实
算法:动态调整每个句子生成时的"核心"概率 $p_t$,公式为: $$p_t = \max(\lambda^t \cdot p_0, \omega)$$
其中 $\lambda$ 是top-p概率的衰减因子,$\omega$ 是概率的下限衰减。
📝 通俗解释:这就像写文章——开头可以随便写(反正没上下文限制),但写到后面就不能乱来了(上下文越来越多,限制也越来越多)。事实核心采样就是让模型在开头稍微“放飞”一点,越往后越“保守”。
7.4 方法三:SelfCheckGPT(一致性检查)
论文:《SelfCheckGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models》
核心思想:
- 如果模型真的掌握某个事实,多次生成的结果应该相似且事实一致
- 如果模型在胡扯,随机采样多次的结果会发散甚至矛盾
实现流程:
原始Passage → 生成问题(QG模块) →
多次随机采样生成不同Passages →
用QA模块判断答案一致性 → 输出Do answers agree?信息一致性计算方法:
- 神经方法:BERTScore计算语义等价
- IE/QA-based方法:基于信息提取或问答
📝 通俗解释:就像考试时检查自己答案的方法——如果不确定某个知识点,可以换一种问法多问自己几次。如果真的懂,怎么问都能答对;如果是在胡扯,不同问法就会答出不同的结果。
7.5 其他方法
| 方法 | 说明 |
|---|---|
| 利用外部知识验证 | 通过检索增强(RAG)获取真实知识进行验证 |
| 修改解码策略 | 调整采样参数,减少随机性 |
| 采样多个输出并检查一致性 | 类似SelfCheckGPT,多生成几个答案对比 |
📝 通俗解释:解决幻觉的方法可以总结为三类:
- 查资料(外部知识验证)
- 别乱猜(修改解码策略)
- 多检查(一致性检查)
八、LLMs什么时候最容易产生幻觉?
| 场景 | 说明 |
|---|---|
| 数值混淆 | 处理与数字有关的文本时,如日期或数值,容易产生幻觉 |
| 处理长文本 | 需要解读长期依赖关系的任务中,如文档摘要或长对话历史,模型可能生成自相矛盾的内容 |
| 逻辑推断障碍 | 若模型误解源文本信息,可能产生不准确的结论 |
| 上下文与内置知识的冲突 | 过度依赖预训练知识,忽略实际上下文,导致输出不准确 |
| 错误的上下文信息 | 给定的上下文包含错误信息时(如“为什么高尔夫球比篮球大?”),模型可能无法识别错误并产生幻觉 |
📝 通俗解释:大模型最怕的情况就是:
- 算错数(比如把2023年说成2024年)
- 记混了(长文章写到后面忘了前面)
- 抬杠(你给个错误前提,它还顺着你说)
- 太自信(明明不知道还要编)
总结
大模型幻觉是当前LLM面临的重要挑战之一。理解幻觉的成因、类型、评估方法和缓解策略对于构建更可靠的语言模型至关重要。在实际应用中,需要根据具体场景权衡幻觉的利弊,选择合适的解决方案。