问题、检测、缓解汇总
| 方向 | 检测方法 | 缓解方法 |
|---|---|---|
| 知识事实幻觉 | claim 分解 + 检索验证 + NLI/LLM judge | RAG、Self-RAG、CRAG、事实性微调 |
| 上下文不忠实 | answer-context entailment、attention map、claim-context 对齐 | 引用约束、上下文压缩、生成后验证 |
| 开放域长文本幻觉 | FActScore/SAFE 类原子事实评估 | CoVe、自我修正、检索增强生成 |
| 模型不确定性 | entropy、semantic entropy、多采样一致性 | abstention、校准、拒答训练 |
| 内部机制幻觉 | hidden states、logits、attention、layer probing | DoLa、activation steering、attention/head intervention |
| 多模态幻觉 | object/attribute/relation grounding、cross-modal attention、工具验证 | 视觉对比解码、V-DPO、OPERA 类推理干预、视觉指令微调 |
问题、检测、缓解详细解释
知识事实幻觉
模型说出了看似合理但是事实上错误的信息,比如人物、时间、地点、论文等。
检测方法:claim分解 + 检索验证 + LLM judge
claim的具体做法就是把一个回答拆成多个小的事实,例如对于回答:“爱因斯坦出生于德国,于1921年获得诺贝尔物理学奖”,可以拆分为“爱因斯坦出生于德国“、“爱因斯坦获得过诺贝尔物理学奖”、“获奖时间为1921年”,然后对每个 claim 做检索,再让模型或着其他的事实核查方法对于每个 claim 进行判断。
缓解方法:
- RAG:生成前先检索外部知识库,例如向量数据库、文档等,减少由于参数记忆不足引发的编造
- Self-RAG:让模型自己判断什么时候需要进行检索,以及检索的结果是否可靠。
- cRAG:先评估检索结果的质量,如果检索结果不可靠,则继续进行补充检索和纠错。
- 事实性微调:用事实真实性回答和幻觉回答训练模型,让模型更偏向真实回答。
上下文不忠实
模型虽然读取了用户给出的文档、提示词等信息,但是生成的内容与上下文不一致,例如让模型总结一篇论文时,最后输出论文里没有提及的内容。
检测方法:
- answer-content entailment:判断回答能否被上下文推出
- attention map:关注模型生成某些 token 时是否关注了其他上下文 token
- claim-context alignment:把回答中的每个 claim 与上下文的证据片段对齐,观察是否有对应依据。
缓解方法:
- 引用约束:要求模型给出引用的证据或者出处
- 上下文压缩:适当压缩长上下文,舍弃部分与问题无关的噪声
- 生成后验证:先生成回答,然后判断是否被上下文支持,对于不支持的内容进行删除或者改写
开放域长文本
模型生成回答、报告、人物传记这类长文本时候,容易在细节上编造内容
检测方法:原子事实评估 把模型回答的内容拆分为一个个原子事务,然后逐个验证(有点类似于 claim 分解)
缓解方法:
- CoVe(Chain of Verification):由模型先生成初稿,再提出验证性问题,然后独立回答验证问题,最后修正原回答(例如,用户提出一个问题:“《红楼梦》的作者曹雪芹是哪个朝代的?他还写了哪些作品?“,然后模型回答:”曹雪芹是明朝人,还写了《水浒传》“,然后模型对于自己生成的内容产生怀疑:“曹雪芹的真实生活朝代是明朝还是清朝?”“曹雪芹除了《红楼梦》还写过哪些其他文学作品?”,然后模型自己回答自己:“曹雪芹原来是清朝人”“曹雪芹没有其他的翡翠有名的完整的作品”,然后模型会更正自己的回答:“抱歉,曹雪芹是清朝人。他一生主要致力于《红楼梦》的创作,并没有写过《水浒传》或其他著名长篇小说。《水浒传》实际上是施耐庵的作品”)
- RAG
模型不确定性
模型其实不知道答案,但是还是强行生成一个回答而不是承认自己不知道
检测方法:
- entropy:看模型输出分布是否混乱。如果很多 token 概率接近,说明模型不确定。
- semantic entropy:不是看字面 token,而是看多次回答的语义是否分散。如果同一个问题生成多次,每次答案含义都不一样,说明模型不确定
- 多采样一致性:让模型多回答几次。如果答案互相矛盾,幻觉风险较高
缓解方法:
- abstention:让模型学会“无法判断”“资料不足”“我不确定”。
- 校准:让模型的置信度和真实正确率更匹配。
- 拒答训练:训练模型在证据不足时不要乱答,而是拒绝或说明限制。
内部幻觉机制
可能由于模型内部某些层的 attention head 、logits、hidden state 等,就是说模型在生成内容之前,其内部状态就已经出现异常的偏向
检测方法:
- hidden states:观察模型每层的隐藏状态,看哪些表示和正确/错误回答相关
- logits:分析最终输出 token 之前的打分,看错误 token 为什么被推高
- attention:看生成时模型关注的是上下文、图像,还是之前生成的文本
- layer probing:给不同层训练探测器,判断某一层是否已经编码了真实信息或幻觉信号
缓解方法:(这一类方法不一定需要重新训练模型,而是在推理过程中直接干预内部表示)
- DoLa:对比高层和低层 logits。高层通常更接近事实知识,低层更偏语言模式,通过层间对比减少事实错误
- activation steering:在推理时修改模型激活方向,让模型朝更真实、更保守或更符合证据的方向生成
- attention/head intervention:找到容易导致幻觉的注意力头,然后在推理时抑制或调整这些 head
多模态幻觉
视觉语言模型接收图片后,描述了图中不存在的物体、属性或关系。例如图中没有狗,模型却说“有一只狗”;或者颜色、数量、位置、动作说错
检测方法:
- object / attribute / relation grounding
- cross-modal attention:看模型生成某个词时是否真正关注了图像 token
缓解方法:
- 视觉对比解码:对比“正常图像输入”和“扰动图像输入”的输出分布。如果某个词在图像被破坏后仍然高概率出现,说明它可能来自语言先验,需要被压低
- V-DPO:用偏好优化方法,让模型更依赖视觉证据,减少语言先验导致的幻觉
- OPERA 类方法:在推理时观察注意力模式,惩罚模型过度依赖少数文本 token,而忽视图像 token
- 视觉FT:用更多图像问答和负样本训练模型,让它学会根据图像回答,而不是凭常识猜
文本幻觉与多模态幻觉的本质差异
事实来源不同
纯文本幻觉的输入和输出都是文本,产生幻觉的主要原因分为:世界知识、用户给出的文本、检索到的信息、用户对话历史、数学逻辑与代码事实等,而多模态模型的输入除了文本,还有图像、视频、音频等。它产生幻觉时,通常是因为生成内容与视觉或听觉输入本身不一致
错误对象不同
纯文本幻觉为“知识错误”,常见形式:
- 编造不存在的论文
- 编造不存在的引用
- 错误回答历史事实
- 错误解释法律条文
- 错误生成 API 用法
- 在不知道答案时强行补全
多模态幻觉为“感知-语言对齐错误”,常见形式:
- 图像里没有某物,模型说有
- 物体数量说错
- 属性(颜色、性状等)说错
- 位置关系说错
- 人物动作说错
- OCR 读错
- 图像细节被语言常识补全
幻觉来源不同
纯文本幻觉一般由于:
- 训练语料中的知识不完整或过时
- 模型没有见过相关事实,或者见过错误信息
- 语言建模目标导致的补全倾向
- 上下文利用失败
- 推理链错误:多步推理中前一步出错,后面继续沿着错误方向生成
- 过度自信
多模态幻觉的主一般由于:
- 视觉编码器识别不足
- 图像特征没有被准确提取
- 视觉-语言projector不充分:图像特征需要映射到语言模型空间,如果投影层对齐不好,语言模型可能无法充分利用视觉信息
- 视觉 token 被文本 token 压制(语言先验)
- 注意力聚合异常
- 图像细节不足或分辨率限制
评估方法不同
纯文本幻觉重点关注的是生成文本是否符合真实世界知识、给定文档:
- factuality score
- fact verification
- QA accuracy
- entailment / contradiction 判断
- 人工事实核查
- 检索增强验证
- 引用准确率
- long-form factuality evaluation
多模态幻觉需要比较输出和其他模态内容是否一致:
- CHAIR:图像描述中的对象幻觉比例
- POPE:通过 “Is there a
- MME:综合评估感知和认知能力
- AMBER:评估图像描述中的真实对象覆盖和幻觉对象
- MMVet:评估识别、OCR、空间、数学等多模态能力