什么是大模型幻觉?
你可能遇到过这种情况:问大模型一个问题,它答得头头是道,参考文献都给你凑齐了,结果一查——论文不存在、作者是虚构的、引用页码压根对不上。这就是"大模型幻觉"(LLM Hallucination)。
为什么会幻觉
大语言模型本质上是一个条件概率生成器:给定前面的词,预测下一个最可能的词。它并不"知道"事实,只是学会了"什么样的词序列看起来很合理"。
训练语料里充斥着大量合乎逻辑的文本片段,模型学到的是这些片段的风格和结构,而不是底层的真实性。所以当你问一个它不熟悉的细节,它会沿着"一个看起来像答案的答案"的方向继续生成——语法正确、语气自信、结构完整,但内容可能是彻底捏造的。
换句话说:模型的 loss 函数优化的是"流畅度"和"分布一致性",没有一个信号告诉它"你说的这句话是不是真的"。
典型表现
幻觉大致可以分成三类:
事实性幻觉
最常见的一类。模型给出具体但错误的信息——某个函数实际上不存在、某个库的 API 签名是编造的、某位历史人物的生卒年月错了。代码场景里尤其明显:模型经常会自信地调用根本不存在的方法。
引用幻觉
模型编造出不存在的论文、书籍、网页链接。早期 ChatGPT 生成的参考文献列表几乎一半是幻觉——标题像、作者像、期刊像,但整条引用是虚构的。
指令偏离幻觉
明明让模型做 A,它回答了"看起来像 A 但实际上是 B"的内容。比如你让它总结一段文字,它可能在总结里悄悄加入原文里没有的论点。
为什么这件事很难解决
根本原因在模型的生成范式本身:生成时是一个词一个词吐出来的,没有机制去回头检查自己说的对不对。人类写作时会停下来查资料、怀疑、修改;模型只会沿着概率分布一路往前冲。
此外:
训练语料本身带噪
互联网抓来的数据里有大量相互矛盾的内容,模型被迫从中"学出"一个看起来最 plausible 的平均版本,这个版本本身就可能偏离事实。
RLHF 对齐偏向"自信"
人类标注者通常更喜欢自信、条理清晰的回答。为了拿高分,模型学会了"哪怕不确定也要装作很确定"——这在对齐过程中被进一步强化。
知识边界不清晰
模型不知道自己"不知道什么"。对于训练集里没覆盖或覆盖很少的冷门知识,它没有一个明确的"不知道"信号,于是继续生成看起来合理的内容。
缓解思路
完全消除幻觉目前做不到,但有几条主流路线能显著降低发生率:
检索增强生成(RAG)
让模型在回答前先去一个权威数据源(向量数据库、搜索引擎、文档库)里检索相关段落,把检索结果塞进上下文再生成。本质是把"记忆"外包给一个可验证的来源。代价是延迟更高、需要维护索引。
工具调用(Tool Use / Function Calling)
让模型调用计算器、SQL 查询、代码执行等确定性工具来获取事实,而不是自己脑补。GPT-4 接 Python 后算数准确率飞升就是这个道理。
反思与自我批判
让模型生成答案后,再用另一个 prompt 自己检查一遍"这个回答里哪些部分可能是编造的"。成本翻倍但对高风险场景有效。
明确的不确定性表达
通过 prompt 工程或者 fine-tuning 让模型在不确定时说"我不知道"或者给出置信度。这需要在训练时故意注入"拒绝回答"的样本。
对开发者的启示
在产品里用大模型一定要记住:模型的输出是有概率的,不是确定性的。
幻觉不是 bug,是大模型生成范式的副作用。跟它共存,把它关进笼子里用,比期待它彻底消失更实际。