AI 幻觉(Hallucination)指大语言模型生成看似合理、实则错误的内容——虚构事实、张冠李戴、自信地给出错误答案。例如:问「某位学者的博士论文标题是什么」,模型可能自信地给出三个不同答案,却全部错误;问「他的生日是哪天」,同样可能编造三个日期,无一正确。要理解幻觉从何而来,需要从模型与文本交互的底层机制入手。本文从 Token、BPE、Context Window、压缩算法等环节,梳理幻觉的来源与成因。(关于 Token、Context Window 等基础概念,可参考 LLM 与 AI 应用核心概念科普。)
一、Token 与 LLM 的通信原理
1.1 文本如何进入模型
人类输入的是自然语言,模型内部处理的是数字。Token 是二者之间的桥梁:文本先被切分成 Token 序列,再映射为向量(Embedding),才能参与计算。
用户输入:「今天天气很好」
↓ Tokenizer(如 BPE)
Token 序列:[今, 天, 天, 气, 很, 好]
↓ Embedding 层
向量序列:[[0.1, -0.3, ...], [0.2, 0.5, ...], ...]
↓ 注意力 + 前向传播
下一个 Token 的概率分布
↓ 采样 / 贪心
输出 Token → 解码为文本
1.2 核心流程简述
- Tokenization:将文本拆成 Token(词、子词或字符级)
- Embedding:每个 Token 映射为高维向量,携带语义信息(例如「猫」和「狗」的向量较接近,「猫」和「汽车」较远)
- 注意力机制:模型根据上下文为每个位置分配权重,决定「关注」哪些 Token(例如生成「苹果」时,若上下文是「乔布斯创办了___」,会更多关注「乔布斯」「创办」)
- 前向传播:通过多层 Transformer,得到每个位置对下一个 Token 的预测分布
- 解码:按概率采样或取最大概率 Token,再映射回文本输出
1.3 与幻觉的关系
模型没有「真假」概念,只学习「在给定上下文下,下一个 Token 最可能是什么」。当训练数据中某类模式稀少或矛盾时,模型会倾向于生成统计上合理、但事实错误的续写。
例子:问「张三的生日是几月几日?」。训练集中张三的生日可能只出现过一两次,模型无法可靠学习;但它学过「人名 + 生日」的句式模式,于是可能根据「张三」联想到常见名字、职业等,输出「3 月 15 日」——语法流畅、格式正确,却与事实不符。这就是典型的「统计合理、事实错误」。
二、BPE 算法:Token 从何而来
2.1 什么是 BPE
BPE(Byte Pair Encoding,字节对编码) 是一种子词级分词算法,被 GPT、BERT、Claude 等主流模型广泛采用。其核心思想是:反复合并语料中出现频率最高的相邻符号对,用更大的词表换取更短的序列。
2.2 训练流程(简化)
- 初始化:将语料中每个词拆成字符(或字节),词尾加一个词尾标记(常用
</w>或_表示,用于区分词边界) - 迭代合并:统计所有相邻符号对的出现频率,合并最高频的一对,生成新 subword,加入词表
- 重复:直到词表达到预设大小(通常几万到十几万)
2.3 简单例子
假设语料中有 low、lower、newest、widest。初始化时,每个词拆成单字符并加词尾标记:
| 词 | 初始拆分(每字符为独立符号) |
|---|---|
| low | l + o + w + 词尾 |
| lower | l + o + w + e + r + 词尾 |
| newest | n + e + w + e + s + t + 词尾 |
| widest | w + i + d + e + s + t + 词尾 |
接着迭代合并:(e,s) 出现最频繁 → 合并为 es;(es,t) → 合并为 est;依此类推。
最终 low 可能保持为 low,newest 变成 new + est,lowest 变成 low + est。词形变化(如 loved、loving)会共享子词,减少词表大小。
2.4 与幻觉的间接联系
- OOV 与歧义:罕见词会被拆成多个子词,模型可能从部分子词推断出错误含义。例如「氟西汀」若被拆成
氟+西+汀,模型可能从「西」联想到方位、从「汀」联想到地名,误判为地理相关,而非药物。 - 语言差异:同一句「今天天气很好」,英文约 4–5 个 Token,中文可能 6–8 个。长文档中,中文消耗的 Token 更多,模型对每个 Token 的注意力更分散,中间信息更容易被稀释。
- 边界模糊:BPE 可能把「北京大学」拆成
北京+大学,而「南京大学」拆成南京+大学。若模型在续写时错误地把「北京」和「大学」的组合理解成「北京的大学」而非专名,可能产生张冠李戴。
三、Context Window:上下文窗口与「中间丢失」
3.1 什么是 Context Window
Context Window(上下文窗口)是模型单次能处理的最大 Token 数。所有输入(系统提示、用户消息、历史对话、模型回复)都塞进这个窗口,超出部分会被截断或丢弃。
例子:128K Token 约等于 10 万英文单词,或一本 300 页左右的书。若你塞进一本 500 页的合同,后半部分会被截断;若对话轮次太多,最早的消息也会被「挤出」窗口,模型就「忘掉」了。
3.2 Lost in the Middle
当上下文很长时,模型会出现 Lost in the Middle 现象:位于中间的信息往往被忽略或利用不足。
- 表现:U 形性能曲线——开头和结尾的信息更容易被利用,中间部分「丢失」
- 原因:自回归生成、注意力机制、训练时的信息检索偏好共同作用
- 后果:若关键事实(如「合同金额为 100 万」)位于长文档中间,模型可能「看不到」或权重过低,从而基于错误上下文生成幻觉
例子:一份 50 页的合同中,付款条款在第 25 页。你问「本合同金额是多少?」。模型对开头(目录、甲方乙方)和结尾(签字页)印象更深,中间第 25 页的「100 万」可能被忽略,于是根据训练数据中的常见金额「猜」一个数字,如「500 万」——产生幻觉。
3.3 对幻觉的影响
- 长文档问答、多轮对话中,若关键信息在中间,模型可能忽略它而「猜」答案
- 检索增强(RAG)时,若相关片段被排在中间,模型可能更依赖自身记忆而非检索结果,增加幻觉风险
例子:RAG 检索到 5 段相关文档,按相关性排序后,最相关的一段排在第 3 位。模型可能对第 1、2 段(开头)和第 4、5 段(结尾)赋予更高权重,而把真正含答案的第 3 段「夹在中间」弱化,最终基于错误片段生成答案。
四、Context 压缩算法详解
为扩展有效上下文、降低计算成本,研究者提出了多种压缩策略,将长输入压缩成更短的表示,再喂给模型。可以类比为:把一本 500 页的书「浓缩」成几十页摘要,让模型在有限窗口内「读完」。
4.1 语义压缩(Semantic Compression)
基于信息论中的源编码理论,用预训练模型减少长输入的语义冗余,在保留关键信息的前提下缩短序列。可扩展上下文 6–8 倍,且无需微调主模型。例如:重复出现的「根据上述分析」「综上所述」等过渡句可被合并或删减,只保留实质结论。
4.2 选择性压缩注意力(SCA)
通过贪心算法保留 KV 缓存中最具区分性的向量,删除冗余向量。无需训练即可扩展上下文,甚至超越专门微调的长上下文模型。可以理解为:在「谁说了什么」的记录里,只保留最能区分不同发言者的关键句,去掉重复、套话。
4.3 嵌入式记忆压缩
将长文本压缩为嵌入向量形式的「记忆」,再与当前输入拼接。模型在预训练阶段学习如何从压缩表示中恢复和利用信息。类似于把整本书的内容「压」成一个高维向量,回答时再从这个向量里「提取」相关信息。
4.4 压缩与幻觉的关系
- 信息损失:压缩必然丢弃部分信息,若关键事实被压缩掉,模型可能基于不完整信息生成幻觉
- 压缩偏差:压缩算法可能偏好某些类型的信息(如开头、结尾),与 Lost in the Middle 叠加,加剧中间部分的信息丢失
例子:将一篇 1 万字的报告压缩成 2000 字的摘要。若「本季度亏损 500 万」这句关键事实在原文中间,且压缩算法优先保留开头(背景)和结尾(结论),这句话可能被略去。模型基于压缩后的摘要回答「本季度盈利情况如何?」时,可能根据「结论」部分的模糊表述,错误推断为盈利,产生幻觉。
五、AI 幻觉的原因总结
综合上述机制,可将幻觉的主要来源归纳如下。
5.1 训练与评估的激励错位
OpenAI 的研究指出:标准评估体系鼓励猜测而非承认不确定性。
- 类比:选择题考试中,猜错和空着都得零分,但猜有 1/365 概率对,空着必然零分
- 结果:在数千道题中,猜测型模型的准确率往往高于谨慎型模型
- 因此:开发者倾向于训练「敢猜」的模型,而非「不确定时诚实说不知道」的模型
例子:在 SimpleQA 类评估中,某模型弃权率 52%(不确定时说「不知道」),准确率 22%,错误率 26%;另一模型弃权率仅 1%,准确率 24%,但错误率高达 75%。后者在「准确率」指标上略胜,却产生了大量幻觉——因为猜得多,对得多,错得也多。
5.2 下一词预测的统计必然性
语言模型通过预测下一个 Token 的概率分布来生成文本,没有「真/假」标签,只有「流畅/不流畅」的统计模式。
- 拼写、括号等有固定规则,模型可学;生日、人名这类任意低频事实本质上是随机的,无法仅凭模式预测
- 当缺乏准确信息时,模型会倾向于生成统计上合理、但事实错误的续写
- 论文证明:生成误差率 ≥ 2 × 分类错误率,即幻觉在预训练目标下具有统计必然性
例子:若训练数据是数百万张猫狗照片,按「猫/狗」标注,模型能可靠分类。但若改为按「宠物生日」标注,生日本质上随机,再强的模型也无法避免错误。预训练中的事实性知识同理:拼写、语法有规律可学,而「某人生日」「某论文标题」这类任意事实,模型只能靠统计猜,猜错即幻觉。
5.3 知识压缩与表示缺陷
LLM 将知识以概率分布形式压缩在参数中,压缩过程可能产生:
- 虚假相关性学习:训练中「苹果公司」和「市值」常一起出现,模型可能过度关联,问「苹果的市值」时混淆成水果公司
- 信息过度泛化:学过「某总统于 X 年就职」,可能泛化成「所有总统都在偶数年就职」,导致错误推断
- 知识边界模糊:模型知道「巴黎是法国首都」,但「巴黎在 2024 年的人口」这类边界知识可能模糊,容易编造
- 上下文依赖的知识激活不完整:问「当前在任的 X 国总统是谁?」时,若「当前」对应的年份未正确激活,可能回答已卸任的人
5.4 上下文与位置因素
- Lost in the Middle:长上下文中,中间信息易被忽略
- Context 压缩:压缩算法可能丢弃关键事实
- Token 与 BPE:分词边界、语言差异影响模型对信息的理解与利用
5.5 小结
| 来源 | 简要说明 |
|---|---|
| 评估激励 | 准确率导向鼓励猜测,惩罚「不知道」 |
| 下一词预测 | 无「真假」标签,统计模式导致无法避免的生成误差 |
| 知识压缩 | 参数化表示中的虚假相关、泛化、边界模糊 |
| 上下文位置 | Lost in the Middle、压缩导致信息丢失 |
| 分词与 Token | BPE 边界、语言差异影响语义理解 |
六、延伸阅读
理解幻觉的本质,有助于我们更理性地使用 AI:在关键场景中保持验证习惯,对模型输出保持审慎,而非盲目信任。