背景
问大模型”明朝第一位皇帝是谁”,它会回答”朱元璋”。但问”朱元璋的第三任妻子叫什么名字”,它可能回答”马皇后”。马皇后是朱元璋的正妻,不是第三任妻子,模型在这里编了一个看似合理实则错误的答案。这就是大模型的幻觉(Hallucination):生成内容时语气自信,但事实层面是错的。面试中如果只说”因为它是概率模型”,面试官不会满意。概率模型并不意味着必然会编造内容,需要拆开来看具体是哪几个环节出了问题。
训练目标就不是说真话
大模型的训练目标从一开始就不是说真话,而是预测下一个最可能的 token。这两件事听起来接近,实际差别很大。模型在训练过程中从未接受过这样的监督信号:这句话是事实、那句话是编的。它接收到的信号只有一个,给定前面的词,下一个词最可能是什么。比如输入是”明朝开国皇帝是”,训练目标是让模型输出”朱”,然后基于”朱”输出”元”,再基于”朱元”输出”璋”。模型学到的是语言的统计规律,不是世界的真实知识。
从训练目标出发,模型追求的是流畅连贯,不是事实正确。大多数情况下,流畅连贯的文本恰好也是真实的,所以大部分场景下模型看起来在说真话。但一旦”说得通”和”说得对”发生冲突,幻觉就出现了。比如有人问”林黛玉倒拔鲁智深的故事发生在哪一回”,这个问题本身就是荒谬的,但模型不会指出问题有误,它会生成一个符合语言规律的回答,比如”发生在《红楼梦》第X回”,编造了一个完全不存在的情节。
不知道自己不知道什么
人类面对不确定的问题会有自知之明,被问到完全不懂的领域,可以直接说”我不确定,这个我不太懂”。但大模型没有这个能力。模型在训练时被要求必须生成一段通顺的回答,而不是可以选择放弃。训练数据里极少出现这种模式:面对一个问题,回答是”我不知道”或”这个问题我无法回答”。即使有,比例也极低,模型从中学到的规律是有问题必有回答。
所以哪怕模型对问题毫无头绪,它也会生成一段看似合理的内容。比如问”《三体》中章北海的第四个孩子叫什么”,模型可能给出一个具体的人名,语气自信,但章北海根本没有四个孩子。越是不确定的问题,模型越可能编造,因为它的训练过程里没有提供”我不确定”这个选项。
知识存储方式是压缩而非精确
大模型不是把所有知识像数据库一样一字不差存下来,而是把海量文本压缩成参数中的统计模式。这两种存储方式的差异决定了模型在事实精确度上的先天不足。
| 存储方式 | 特点 |
|---|---|
| 数据库存储 | 精确、可检索、一字不差 |
| 模型参数存储 | 模糊、统计性、细节易混淆 |
这和人类记东西的方式有相似之处:人记一件事只会记个大概,细节会模糊、会混淆,模型也一样。它学到的是模糊的关联和大概的规律,不是精确的事实。比如模型可能学到”朱元璋关联明朝、开国皇帝、南京、马皇后”这样的模糊知识网络,以及某些事件发生在某个大致时间段内的概率规律,但对于”朱元璋的第三任妻子具体叫什么名字”或”某个事件的精确日期”这类精准细节,它很难准确记住。一旦需要输出这些精准信息,模型就容易张冠李戴或凭空脑补。
训练数据本身有质量问题
模型的知识全部来自训练数据,而互联网数据本身就充满各种问题。
| 问题类型 | 例子 |
|---|---|
| 错误信息 | 谣言、虚假新闻 |
| 偏见信息 | 带倾向性的观点 |
| 过时信息 | 2023年的新闻放到2026年已经不对 |
| 随意编造 | 网友在论坛里随口编的段子 |
这些都是模型的教材,模型分不清对错,只会把学到的错误规律当作正确输出。假设训练数据中有一条网友编的段子”诸葛亮发明了原子弹”,模型可能从中提取到”诸葛亮”和”发明”之间的统计关联,当被问到”诸葛亮发明了什么”时,它有可能把段子当事实输出。这不是模型本身蠢,而是训练数据里就有这些问题,模型忠实地反映了数据的质量。
概率采样会逐步放大偏差
大模型生成答案的过程不是逻辑推理,而是按概率一步步猜下一个词。每一步都选当前最可能的词,但一步偏了,后面就基于错误的上下文继续生成,偏差会逐步放大。
| 生成步骤 | 状态 | 结果 |
|---|---|---|
| 第1步 | 选对了 | 上下文正常 |
| 第2步 | 选对了 | 继续正常 |
| 第3步 | 选了次优选项 | 出现小偏差 |
| 第4步 | 基于偏差上下文继续 | 偏差被放大 |
| 第5步 | 偏差累积 | 输出严重偏离事实 |
这种偏差放大效应在概率分布混乱的情况下更加明显。常见问题对应的概率分布比较集中,模型选对的概率高;冷门问题对应的概率分布分散,选错的概率增加;模糊问题中多个候选词的概率接近,模型容易选到错误的那个。小偏差逐步累积,最终就变成大错误。
五层原因的叠加
幻觉不是单一原因造成的,而是五层因素叠加在一起。训练目标追求流畅而非正确,这是基础设定的偏离。模型没有自知之明,不知道自己知识的边界在哪里,所以会硬着头皮回答任何问题。知识以压缩方式存储,精确信息天然容易出错。训练数据本身包含错误和噪音,模型学到了这些错误规律。生成过程中的概率采样让前面的小偏差逐步累积成大错误。这五层叠加在一起,一本正经胡说八道就成了必然结果。
缓解幻觉的手段
从用户层面,有一些实用技巧可以降低被幻觉误导的概率。追问细节可以让模型在不确定的地方暴露问题,要求引用来源会逼迫模型承认不知道出处,将温度参数设为0能减少随机性让模型更保守,明确告知模型”如果不知道就说不知道”等于给它一个放弃的选项。
| 层面 | 方法 | 原理 |
|---|---|---|
| 用户层 | 追问细节 | 让模型暴露不确定的地方 |
| 用户层 | 要求引用来源 | 逼迫模型承认不知道出处 |
| 用户层 | 温度参数设为0 | 减少随机性,输出更保守 |
| 用户层 | 明确允许说不知道 | 给模型一个放弃的选项 |
| 技术层 | RAG 检索增强生成 | 先检索真实资料,再基于资料回答 |
| 技术层 | 知识图谱 grounding | 将回答锚定到可验证的知识节点 |
| 技术层 | 多模型交叉验证 | 多个模型回答同一问题,对比差异 |
| 技术层 | 事实核查模块 | 对模型输出做二次验证 |
这些方案的核心思路一致:引入外部真实信息,弥补模型内部的知识缺陷。
大模型本质上是一个流畅的语言生成器,不是精准的事实数据库。把它当作能快速整理思路、启发想法的助手来用,关键事实还是要自己去核实。
参考资源: