大模型的幻觉--原因和解决方案

大模型幻觉是其“数据驱动、概率生成” 本质决定的,是当前技术路线下难以根除的特性

出现幻觉的原因:
1. 自回归生成的概率本质(最核心)
大模型本质是概率预测器, 通过上下文计算下一个词的分布概率, 优先追求的是语言的流畅性和统计上的合理性,而非事实的准确性。 当模型不知道答案时,它会更倾向于生成一个在语法上最像答案的词,从而编造出一个通顺但错误的信息;

2. 训练数据的噪声与偏差
预训练数据来自互联网海量文本,其中包含大量错误信息、过时知识、偏见甚至虚构内容。模型在学习语言模式的同时,也内化了这些错误事实。

3. 压缩与泛化的权衡
大模型将知识压缩进有限的参数中。这是一种“有损压缩”,模型记住的是知识的抽象模式和关联,而非精确的数据库索引。
为了具备举一反三的能力,模型必须学会泛化。但这种泛化能力是一把双刃剑,当模型将A领域的规律错误地迁移到B领域,或者在不该联想的地方进行了联想,就会产生幻觉。

4. 信息不足时,模型不知道自己“不知道”
训练数据之外的事 (最新政策、小众专业细节), 模型没有知识, 只能"猜一个最像的"

其他:
5. 推理链误差累积 (早期错误导致后续错误)
6. 上下文限制(信息丢失或注意力不足)
7. Prompt诱导(错误前提导致错误回答)

判定幻觉的核心原理

  1. 事实一致性(Factual Consistency): 输出内容是否与知识库、参考文档或权威数据源冲突。
原子事实分解:把长回答拆成最小粒度的事实陈述,逐一验证。
证据检索:对每个原子事实,去维基百科、搜索引擎等检索证据,用自然语言推理(NLI)判断证据是否支持该声明。
工具调用:对数值、时间、实体等结构化信息,直接调用计算器、日历、数据库等工具验证。
  1. 自身一致性 / 不确定性估计: 如果模型对同一问题多次生成(不同随机种子或扰动),答案混乱、互相矛盾,则可能产生幻觉。
采样一致性:同样 prompt 生成 N 次,看事实陈述的一致性,高熵处易出幻觉。
token级概率:输出中某些 token 的概率低、模型“犹豫”,往往是编造信号。
内部探测:训练一个分类器读模型隐藏状态,预测该段是否会被事实源否定(如 INSIDE 等方法)。
  1. 逻辑自洽性(Logical Self-Consistency): 回答内部是否自相矛盾,或与输入指令、上下文矛盾。
对回答进行分段,两两用 NLI 检查是否存在“矛盾”关系。
检查是否遵守用户明确约束(如“用不超过 50 字回答”)。
  1. 不确定性度量(Uncertainty Quantification): 模型在生成该Token时,置信度是否过低,或熵值是否异常升高。面对不可回答的问题强行编造,就是幻觉。
先判断问题是否可答(基于知识库覆盖度、模型置信度),若不可答但模型给出了确定答案,直接判定幻觉。

监控幻觉的方案:
核心流程如下:

①拆解——把回答分解为原子事实;
②验证——用外部证据、NLI、工具等手段逐条核验;
③探测——用一致性、不确定性、自矛盾发现隐藏的编造;
④融合——多信号综合判定是否有幻觉;
⑤量化——统计幻觉样本占比,得到幻觉率;

实施方案:

  1. 拆解:把回答分解为原子事实
    原子事实”,就是可以独立判断真假的最小事实单元。
例:“苹果公司由史蒂夫·乔布斯创立,总部在库比蒂诺。” 
拆分成
① 苹果公司由史蒂夫·乔布斯创立
② 苹果公司总部在库比蒂诺

提示词
你是一个事实拆解器。
请将下面的回答拆成多个原子事实。
要求:
2. 每个原子事实必须是一个可以独立验证的陈述。
3. 不要合并多个事实。
4. 保留原文中的实体、时间、数字、条件。
5. 对主观表达、建议、观点单独标注,不视为可验证事实。
6. 输出 JSON。
  1. 验证:用外部证据逐条核验
    核心: 每一个原子事实,都应该能找到支持、反对或无法验证的证据。
流程:
对每个原子事实,生成一个搜索查询。
调用搜索引擎 API(Google/Bing 或自有索引)获取 top-k 片段。
用 NLI 模型判断“证据是否支持该声明”(三分类:支持、矛盾、信息不足)。
任何原子事实被判为“矛盾”,该回答即存在事实性幻觉。
对于数值/时间类事实,直接抽取值进行严格比对或调用工具。

可选技术: 直接使用 OpenAI 的 WebGPT 思路、Perplexity 的在线验证模式,或开源方案如 Self-CheckGPT、FacTool等
  1. 探测:发现没有明确证据也能识别的风险信号
    现实中很多幻觉无法立刻找到外部证据反驳。例如模型编造了一个看起来很合理但搜索不到来源的论文;
1. 一致性: 对同一个问题采样多次,看答案是否稳定。
2. 不确定性: 如果模型能拿到 logprobs,可以观察生成过程中的不确定性。
		不确定性重点看:
		关键实体 token 的概率;
		数字 token 的概率;
		时间 token 的概率;
		人名、公司名、产品名 token 的概率;
		Top-k 候选是否分散;
		生成熵是否异常高。

3. 自矛盾探测: 检查一个回答内部是否冲突。

  1. 融合:多信号综合判定是否有幻觉
第一层:硬规则一票否决,以下情况直接否决
				明确与权威知识库矛盾。
				数学计算错误。
				代码执行结果不一致。
				结构化数据库查询结果冲突。
				回答内部出现强矛盾。
				引用了不存在的法规、药品、标准、API。
				高风险领域给出确定性结论但完全没有证据

第二层:软信号加权;不能单独定罪,但可以累积风险分。
				例如 
				| 信号 | 含义 | 建议权重 |
				|---|---|---:|
				| 外部证据不支持 | 无法验证 ||
				| 多次采样不一致 | 模型不确定 ||
				| 关键实体低置信度 | 可能在编造 | 中低 |
				| 无来源引用 | 引用风险 | 中高 |
				| 高语义熵 | 回答不稳定 ||
				| 内部轻微矛盾 | 逻辑风险 ||
				| 用户负反馈 | 真实世界信号 ||
				| 高风险领域 | 医疗/法律/金融 | 加权 |
				| 数字/时间错误 | 事实错误 ||

第三层:最终判定;建议不要只输出“有幻觉 / 没有幻觉”。
			而是
			{
			  "answer_id": "xxx",
			  "hallucination_label": "high_risk",
			  "hallucination_score": 0.82,
			  "reason": [
			    "claim_3 与知识库矛盾",
			    "claim_5 无法验证且包含具体数字",
			    "采样一致性较低"
			  ],
			  "claims": [
			    {
			      "claim_id": 3,
			      "text": "该公司2023年营收超过10亿元",
			      "verification": "contradicted",
			      "evidence": "内部资料显示2023年营收为6.8亿元"
			    }
			  ]
			}

  1. 量化:如何计算幻觉率
① 样本级幻觉率 = 被判为幻觉的回答数 / 总回答数
	例如: 例如评估 1000 条回答,其中 37 条被判定为幻觉,样本级幻觉率 = 37 / 1000 = 3.7%

② 事实级幻觉率,以原子事实为单位。
	claim级幻觉率 = 被判为幻觉的claim数 / 可验证claim总数
	总回答数:100,拆出可验证 claims:1200,被反驳或高风险 claims:48,claim级幻觉率 = 48 / 1200 = 4%
	这个指标更适合工程优化。因为它能告诉你:到底是哪类事实最容易出错。

另外还可以按场景拆分,按时间拆分;

注意事项:
①拒答率要和幻觉率一起看。如果模型为了降低幻觉率,什么都回答“不知道”,幻觉率会下降,但可用性也会下降。
②幻觉监测可以分为: 在线风险拦截系统(实施发现高风险回答), 离线质量评估系统(精确统计幻觉率);

防幻觉方案:
注意事项: 幻觉只能降低,无法消除

一、事前:防患于未然

  1. 精调推理参数 (成本最低的第一道防线,不改模型不改数据,调参即可生效。)
	① Temperature: 调低至 0.1~0.3,使输出更保守确定,减少随机性幻觉
	② Top-p 核采样: 设为 0.7~0.85,限制模型只从高概率词中选择,进一步收窄生成空间
	③ Max Tokens: 合理限制最大输出长度,防止长文本生成中“跑偏”或过度发挥
	④ Repetition Penalty: 设置重复惩罚,避免模型因重复生成陷入错误循环 (保留原方案)
  1. 模型选型与领域微调(从源头提升模型的事实准确度。成本较高)
	① 领域微调模型: 垂直场景(医疗/法律/金融)优先使用领域微调模型,对术语和事实的记忆更准确
	② 更大基座模型: 条件允许时选择参数量更大的模型,通常事实记忆更准确、幻觉率更低 (新增)
	③ DPO/RLHF 对齐: 微调时加入拒答样本,用对齐训练惩罚编造行为、奖励诚实表达 (保留原方案)
  1. Prompt 约束(软规则 + 负样本)通过指令和示例约束模型行为,成本最低的引导手段。
		① 明确规则: 强制标注来源、要求拒答、禁止编造
		② Few-shot 负样本: 用具体错误示范告诉模型“什么不能做”,比单纯说“不要编造”更有效 (融合)
		③ 角色边界设定: 明确告知模型“你是检索助手,不是知识专家” (保留原方案)
		
	提示词: 
	SYSTEM_PROMPT = """
			1. 回答中的每个事实点必须标注来源编号,如 [1][2]
			2. 如果信息不在提供的资料中,必须回答"资料中没有相关信息"
			3. 严禁编造法条、数据、引用,不确定就说不确定
			4. 以下是一些错误示范(负样本案例):
			   - ❌ "根据民法典第1523条..." → 资料中没有该条文时严禁编造
			   - ❌ "数据显示增长率为15.3%" → 资料中没有具体数据时严禁编造
			   ✅ 正确做法:"资料中没有相关信息,无法确认。"
		"""

  1. 结构化锚定 / 约束解码(高风险场景专用)
    对于零容忍场景,不让模型自由生成事实,而是限制其输出空间。 (保留原方案独有)
		① 模板填充: 预定义回答模板,模型只填充变量槽位,槽位值来自结构化数据库
		② 约束解码: 解码阶段用知识图谱/数据库限制下一个 token 候选集,确保生成的实体在库中真实存在
		③ 选项式生成: 将开放问答转为多选题,模型只能从给定选项中选择

二、事中:过程监管与约束

  1. 检索命中过滤(RAG)
    RAG 黄金规则:答案只能基于检索到的内容,将“闭卷”变“开卷”。
	① 强制闭卷作答: 模型只能基于检索到的 Top-K 片段回答,片段中没有的信息不得编造
	② 混合检索 + 重排序: 向量检索 + BM25 关键词检索提高召回率;Reranker 将最相关文档排前面 (融合)
	③ 时效性/权威性过滤: 剔除过时文档(已废止法条、旧版指南),确保输入质量 (保留原方案)
  1. 思维链(CoT)+ 自一致性(Self-Consistency)
    让推理过程可视化,并通过多次采样过滤偶发错误。
	① CoT 推理可视化: 强制模型先展示推理步骤再给答案,便于发现逻辑漏洞
	② Self-Consistency: 同一问题生成 3~5 次回答,选择最一致的答案,减少单次随机错误 (融合)
	③ 中间步骤一致性校验(进阶): 不仅校验最终答案,还对多次生成的中间推理步骤做一致性检查 (融合)
  1. 自适应反思循环
    超越传统 CoT,让模型对自身推理进行迭代式自我批判和动态修正。
① 生成 → 自我批判 → 修正 → 再生成: 模型在给出答案后,主动审视自己的推理是否存在跳跃、遗漏或矛盾
② 效果: 研究显示可将幻觉率降低约 30%,显著优于传统 CoT 和 Self-Consistency
③ 适用场景: 复杂多跳推理、需要综合多个片段信息的问答

三、事后:验证、校验与兜底
8. 引用硬校验
9. 独立事实核查
10.置信度阈值与风险指数
8,9,10 参考幻觉检测

粗略的硬校验:
① 引用存在性校验: 解析所有 [编号],验证是否对应到真实的检索片段,防止“编造引用编号”
② NLI 语义蕴含校验: 用自然语言推理模型判断“答案中的这句话”是否被“引用的原文”所蕴含,防止张冠李戴 (融合)
  1. 人类在环(Human-in-the-Loop)
    最后一道安全阀,用人类判断兜底。
① 高风险场景必审: 医疗诊断、法律判决、金融交易等场景,设置人工审核环节 (融合)
② 主动学习策略(轻量级): 人工仅审核模型最不确定的输出(如置信度最低的 10%),以最小人力覆盖最大风险 (融合)
③ 幻觉反馈闭环: 将人工审核发现的幻觉案例回流到微调数据集和评测集,持续迭代 (保留原方案)

最后11层校验,不用一次性上满; 通常按场景分级部署:
场景1: 闲聊/创意: 1(精调推理参数) + 3(Prompt 约束)
场景2: 一般知识问答 1(精调推理参数) + 3(Prompt 约束)+ 5(检索命中过滤)+8(引用硬校验)
场景3: 专业领域问答 根据成本,和需求能上多少上多少
场景4: 高风险决策(法律/医疗/金融): 全部 11 层拉满

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值