资讯详情

大模型幻觉缓解算法:SFT与偏好对齐阶段的事实性优化实践

📅 2026/10/23 6:59:01 | 华诺云谱 👁 阅读
大模型幻觉缓解算法:SFT与偏好对齐阶段的事实性优化实践
做过大模型微调的同学应该都遇到过这种场景模型在对话里一本正经地输出一串细节人物、时间、数据全都有模有样但你拿去一核对全是编的。这不是偶发问题而是目前大模型落地最头疼的坎之一。你问它一个事实性问题它宁可给你编一个漂亮答案也不愿意承认自己不知道。幻觉问题要从三个层面去解数据、训练、推理。数据层面是源头推理层面是补救而中间的训练层面尤其是监督微调SFT和对齐训练RLHF/DPO这一类偏好优化才是真正决定模型“事实敏感度”的关键环节。这篇内容我围绕“幻觉缓解算法——减少大模型错误生成”这条主线把第三章的实践重点拆开讲在SFT和偏好对齐阶段事实性优化到底该怎么做哪些操作是真有效的哪些只是自我安慰。适合正在微调开源底座模型、做垂直领域大模型应用的团队参考也适合刚接触对齐训练、想搞清楚“为什么模型明明学过却还是乱说”的同学。我尽量不绕弯子直接从成因到数据、从训练配置到评估验证给你一条能落地的路径。1. 先弄清楚幻觉是从哪“喂”出来的1.1 三类幻觉的成因定位做缓解方案之前得先把幻觉分门别类。我习惯把幻觉分成三类因为三类的解决办法完全不同。第一类是知识缺失型幻觉。模型压根没见过这个知识但又被要求回答于是它只能基于语言习惯“顺”一个答案。这类幻觉在垂直领域特别常见比如让通用模型回答某个企业内部系统的配置参数它能编出一整套接口文档。本质是训练数据里没有这个知识模型用“最像答案的 token 序列”来补位。第二类是事实冲突型幻觉。这个更隐蔽也更容易被忽视。训练数据本身是自相矛盾的比如语料里既有“某项目成立于2018年”又有“某项目成立于2020年”模型在训练时把两种说法都记住了生成的时候按上下文概率混合输出结果就是错的。很多团队花大力气清洗数据但只做了格式清洗和去重没有做事实冲突检测这一步漏掉后面全白搭。第三类是生成退化型幻觉。这种是解码策略和优化目标共同导致的。监督微调阶段如果用“标准答案”式的数据把模型训练得太“自信”模型会倾向于生成流畅、确定的表述而不是谨慎、留有余地的表述。因为训练目标是在最大化下一个 token 的概率而“不确定”的表达方式在统计上往往不是高概率路径。越训练模型越倾向于“编得顺”而不是“说得准”。这三类成因不是互斥的实际案例里经常叠加出现。但识别清楚主要偏向哪一类直接决定了你的优化动作是花在数据清洗上、训练策略上还是解码策略上。1.2 为什么训练期优化才是治本思路很多团队第一次遇到幻觉问题时第一反应是上推理期的缓解方案降采样温度、做自我一致性校验、接检索增强RAG。这些方案有效吗在一定范围内有效但它们都有一个共同的毛病——治标不治本。拿检索增强来说你给模型接了外部知识库它确实能引用检索片段来回答。但问题在于模型在训练阶段已经养成了“流畅编造优先”的生成习惯检索给的片段只是它参考的“素材”之一它依然可能在引用素材时自行添油加醋。我在实际项目里见过很多次模型把检索到的真实信息和一个自己编造的旧记忆拼接在一起生成出来的答案半真半假比完全编造更难发现。推理期方案本质上是在“生成完了再亡羊补牢”而训练期优化是改变模型的条件概率分布本身。你在 SFT 阶段教会它“不知道的时候应该明确表达不知道”在偏好对齐阶段教会它“被偏好的是事实正确且表达准确的回答而不是流畅但现在错误的回答”模型的生成习惯才会从根本上发生变化。推理期方案适合做最后一道保险但幻觉缓解的主战场一定在训练阶段。这也是为什么这一章要专门聚焦 SFT 和对齐训练的事实性优化。2. 监督微调阶段的事实性优化实操2.1 SFT数据从源头掐断错误信息SFT 是最直接改变模型行为习惯的阶段也是最容易被低估的阶段。很多团队把 SFT 当成“把数据灌进去跑几个 epoch 就完事”但数据怎么组织、正样本怎么给、负样本怎么给里面的门道直接决定幻觉率是 5% 还是 20%。第一步是事实冲突消解。如果数据来自多个渠道同一个问题可能出现互相矛盾的答案。我建议在数据管线里加一道“事实归并”流程以问题为粒度把同一个问题的所有候选答案聚合到一起人工或用一个足够强的裁判模型做一致性判定。冲突的样本要么删掉要么统一为最新、最可靠来源的答案。这一步看起来枯燥但效果极其明显。某公司此前用未做冲突消解的数据微调一个垂直问答模型幻觉率在 18% 左右做了冲突消解后同样配置降到 9% 以下效果立竿见影。第二步是事实锚点标注。在数据里为每个事实性回答标注“答案的核心事实锚点”比如人名、时间、数值、事件关系。微调的时候不是让模型泛泛地“学习这段文本”而是让模型知道这段话里有几个不能动摇的事实点。更实操的做法是把这些事实锚点单独抽出来做成“填空式”样本让模型学会在关键位置上“咬死正确表达”。第三步是加入不确定性表达样本。这是很多人忽略的关键点。你要在 SFT 数据里专门安排一部分样本明确示范模型在“知识不足”时该怎么说。比如用户2025年中国GDP增速是多少助手我目前的知识截止到2024年10月无法确认2025年全年的实际数据。以我的判断这个信息需要查阅权威统计渠道而不是依赖我推测。这种样本的比例不需要很高但必须足够典型。我实测下来SFT 数据里5%-10%的不确定性表达样本就能显著压低模型乱编概率。少了没效果多了会让模型变得过度保守。2.2 训练超参与数据配比的关键经验SFT 阶段的超参直接影响事实性效果我最想强调的三个点是Epoch、学习率和数据配比。Epoch 数不要太贪。对于指令微调我通常控制在 2-3 个 epoch。超过 3 个 epoch模型在训练分布上的表现会变好但在分布外的开放式问题上幻觉率反而上升——这就是典型的“记忆化”取代了“泛化”。模型开始背答案而不是学“如何组织一个准确答案”的规律。学习率方面SFT 阶段学习率建议落在1e-5 到 2e-5区间以 7B 量级底座模型为例。学习率偏大时模型被快速推向训练数据的风格分布包括数据里那些“过于自信”的表达风格幻觉风险会放大。我见过有人为了省时间把学习率拉高到 5e-5结果模型效果确实收敛得快但同时变得更爱胡编。学习率不仅影响收敛速度更影响学习的“精细度”。事实性优化需要模型精细地记住细节小学习率 适度 epoch 是保证精细度的前提。数据配比上我推荐的 baseline 是通用对话 60% 知识问答与事实性样本 30% 不确定性表达与拒答样本 10%。通用对话负责保持模型的基础能力不被破坏知识问答负责注入领域事实不确定性样本负责塑造谨慎的表达习惯。这个配比可以根据领域调整但骨架不要砍得太偏砍掉通用对话会让模型的开放域能力退化砍掉不确定性样本会让模型变回“硬编模式”。2.3 三类增强事实性的微调变体除了常规 SFT如果你想在事实性上做得更极致可以试试下面的变体。首先是引用生成训练。在 SFT 数据中要求模型在给出事实性回答时输出引用来源可以是文档片段编号、URL 或知识库条目 id把这种结构内化为模型习惯。训练时如果模型输出的引用和目标引用不一致就作为错误样本强化。优点是能显著提高回答的可追溯性缺点是如果知识库更新不及时模型会引用“旧闻”需要配合知识库版本管理。其次是不确定性感知语言建模。常规语言建模是对所有 token 一视同仁地做最大似然估计但事实性回答里的关键锚点数值、人名、日期重要性远高于停用词和过渡词。你可以对这些 token 加大 loss 权重让模型把有限的容量花在“记住事实”上。我用过一个简单实现对标注过的事实锚点 token 乘一个 2.0 的 loss 权重其他 token 保持 1.0。训练完跑同一批评测事实锚点的准确率提升了约 6 个百分点。第三个是抗幻觉对比微调。这个方法借鉴对比学习思路对同一个问题构造一对样本——一个是事实准确的回答一个是包含幻觉的错误回答。训练时拉大两个回答对应表征的间隔让模型明确知道“事实正确与事实错误的边界长什么样”。这个方法对数据标注要求高成本不低但效果相当稳定适合对幻觉率要求极高的场景比如医疗、金融领域。3. 对齐训练阶段的真实性偏好优化3.1 奖励模型里如何加入“事实维度”SFT 把模型从“通用模型”变成“有任务能力的模型”但对齐阶段才真正决定模型“偏好说什么”。传统 RLHF 的奖励模型基于人类偏好训练这里藏着一个大坑标注者在打分时很容易被流畅度、语气、信息量带偏。一个自信地给出流畅但完全错误答案的模型在偏好标注中拿到的分数可能比一个谨慎、表达不够流畅但内容正确的模型更高。所以事实性优化进入对齐阶段后第一件事是给奖励模型加“事实维度”。具体做法是在奖励模型的训练数据里增加一对特征答案的事实性分数。可以靠人工标注也可以用一个预先训练好的“事实评价器”本质是一个对生成内容做事实一致性打分的评判模型对答案打分再把分数作为特征拼进奖励模型的输入。实操经验是事实性奖励的权重不需要太大0.3 到 0.5 的融合权重就够。权重太大模型会走向“安全废话”——所有答案都变成“根据我的知识这个问题目前没有明确答案”看起来谨慎实际上毫无信息量这是另一个极端。权重太小事实性信号被人类偏好的噪声淹没起不到纠偏作用。3.2 DPO偏好对的构造细节现在很多团队用 DPO 代替完整的 RLHF因为实现简单、训练稳定。DPO 不需要显式训练奖励模型但它对偏好对的构造更敏感。我见过太多人直接在 SFT 数据里随机抽“一个回答作为 chosen一个回答作为 rejected”这样构造的偏好对没有信息量DPO 基本白跑。构造偏好对的关键是对照组设计。最有效的偏好对是“单一变量差异”同一个问题两个回答在长度、风格上都接近唯一差异是其中一个包含事实错误另一个不含。这样 DPO 训练时模型只能从“事实对不对”上学习偏好不会被其他特征带走。我再推荐一个技巧等长对比。很多人忽略长度偏置的影响DPO 模型很容易学成“长回答更好”而不是“正确回答更好”。把 chosen 和 rejected 样本裁剪到接近的长度会大幅减少这类偏差。我在某项目里做过一组对比实验用等长偏置对后在事实性评测集上的准确率比不等长对照组高了约 8 个百分点代价不过是多花了一点数据整理时间。DPO 的温度参数 beta 也值得注意。beta 太小训练会更激进地拉大 chosen 和 rejected 的间隔模型可能过度拟合偏好对里的表面特征beta 太大偏好信号又太温和。我建议从beta0.1起步观察概率分布变化后微调。学习率建议1e-6 到 5e-6这个阶段要“轻推”不要“硬掰”。3.3 迭代式对齐与事实性红队一项我越来越推崇的做法是先事实后风格的分阶段对齐。不要试图在一个 DPO/RLHF 轮次里同时解决事实错误、态度语气、格式偏好和目标一次解决一个问题。第一轮对齐只围绕事实性构造偏好对第二轮才加入风格和格式。为什么因为不同优化目标在梯度方向上有时会打架。你既想让模型“更礼貌”又想让模型“更精准”模型可能为了礼貌而在事实不确定时也给出圆滑的肯定回答。分阶段做你能在每轮结束后的评估中清晰定位是哪个目标没实现排查成本会低很多。同时我建议建一支事实性红队。人在闭环里仍然不可被替代。具体操作是准备一批专门诱发幻觉的问题集包括与训练数据矛盾的设问比如“你上次不是说某项目是2021年启动的吗”超出知识截止日期的问题包含错误前提的问题“请详细描述一下某事件的具体经过”然而该事件根本不存在需要精确数值、引用来源的细粒度问题每一轮 SFT 或对齐训练跑完后都拿这批问题去测记录幻觉率变化形成回归基线。这个红队问题集应该跟业务场景强绑定后续你换模型底座、改数据配比它都能给你一个快速反馈。4. 事实性评估与多阶段训练流水线4.1 事实性评估指标与自建评测集优化做得再多没有可靠的度量衡都是白搭。事实性与常规问答准确率不是一回事你需要单独的评估体系。公开基准方面常用的几个指标和评测集比如以事实性为核心的 FactScore、TruthfulQA、FELM 以及针对幻觉专门设计的 HalluQA都可以作为参考。但依赖公开基准有个致命问题它们和你的垂直领域场景可能根本不匹配。公开基准里的事实是百科级公共知识你业务里真正的“事实”是内部系统配置、业务逻辑、产品参数这些是公开基准完全覆盖不到的。所以我强烈建议自建一套评测集。最实用的方法是多源事实锚点法挑 100 道左右的高频业务问题每道题的参考答案从两到三个独立信息源交叉确认后确定并标注出必须出现的关键事实锚点数值、主体、关系。评测时对模型的回答先做锚点检测再判断事实一致性最后算出一个锚点召回率比直接给一个笼统的“准确率”更有指向性。人工评估协议也很关键。我建议采用盲评 双评 交叉复核的机制两位标注员在不知道模型版本的前提下独立打分不一致的地方由第三人复核。盲评是为了防止标注员对“哪个模型更好”的期待影响打分双评是为了筛掉个人偏好。事实证明在事实性人工打分上标注员之间的分歧比一般质量打分更大因为“事实对不对”需要额外查证人很容易偷懒凭印象打分。要在标注指南里写清楚只要标注员不是百分百确定就必须去查证。4.2 多阶段训练流水线与消融设计把前面的方法整合成一条可执行的流水线我这里给出一个经过实测的 baseline你可以直接作为起点阶段数据配置关键参数主要目标领域继续预训练可选垂直领域语料10B-50B token 量级学习率 2e-5 到 5e-5控制在 1 个 epoch注入领域基础知识监督微调 SFT通用对话 60% 知识问答 30% 不确定性样本 10%学习率 1e-5 到 2e-52-3 个 epoch塑造正确表达习惯事实性偏好对齐事实性偏置对等长对比DPO beta0.1学习率 2e-61 个 epoch拉大事实正确与错误的偏好差距风格对齐风格/格式偏好对DPO beta0.1-0.3学习率 1e-6补足表达方式要求我特别想强调其中一个很多人忽略的点最后一轮更新后模型能力会发生“回弹”。也就是说对齐阶段训练完模型的开放域能力会比 SFT 后略降这不是意外而是正常的“创造性收敛”。你要在 SFT 和最终模型之间做能力对比测试确保知识问答能力没有流失到一个不可接受的范围。消融实验千万别省。你要验证每个环节到底贡献了多少。我在一次做事实性优化项目时把流程拆成三组做对比只做 SFT 优化、SFT 事实性 DPO、SFT 事实性 DPO 红队回归微调。结果发现 DPO 环节贡献了最大的幻觉率下降从 11% 到 6%SFT 优化贡献其次从 14% 到 11%而红队回归微调贡献虽小但能把模型在极限对抗性问题上的“崩坏率”从 4% 压到 2% 以下。没有消融你根本不知道资源该往哪个环节投。5. 常见问题排查与避坑实录5.1 奖励黑客与“安全废话”陷阱对齐阶段最容易踩的坑是奖励黑客。你不是想要“少犯错”吗模型很快学会只要我对所有不确定的问题都拒绝回答事实错误率就是 0。于是幻觉率暴跌你以为成功了一看人工对话记录满屏全是“抱歉我无法回答这个问题”。我排查这个问题时用过两个信号一是回答的平均信息量下降模型喜欢用套话替代具体信息二是拒答率异常上升。基准数据里可作答问题的拒答率如果一下涨了 15 个百分点基本就是奖励被“钻漏洞”了。解法有两个层面。数据上在偏好对里加入“合理回答但主动承认不确定边界”的正样本让模型知道“谨慎不等于拒答”它是可以在表达不确定的同时给出已知信息的。训练目标上把“拒绝答可答问题”作为惩罚样本放进 DPO而不是只惩罚“错误回答”——这个动作能直接把拒答率拉回正常水位。我给一个参数参考正常场景下可按拒答率控制在3%-5%为基准明显高于这个区间就要怀疑是奖励黑客而不是模型变聪明了。5.2 过拟合与记忆化的鉴别第二个高频坑是过拟合与记忆化。模型在训练集上的表现极好一到分布外就露馅这不是“学到知识”是“背下答案”。你需要一个方法去区分这两个状态。我在实践中反复用的是一个“改写泛化测试”把训练集里的问题做同义改写把细节重新组织时间顺序调换、说法换掉、主语宾语对调再问模型一遍。如果模型在改写后的问题上表现显著下降说明它只是在记忆没有真正学会知识结构这正是幻觉生成的温床——因为遇到没见过的问题模型只能靠语言习惯编。应对方法是降低 SFT epoch并增加多样化的表述样本。同一份领域知识用三五套不同的问题表述方式写进训练集让模型从多种表面形式上提取同一份内在知识记忆化倾向就会明显缓解。5.3 离线评估与线上效果背离最后一个经常让人头大的问题是线下评测集分数很好看一上线真实用户反馈依然说模型乱编。原因通常有两个。第一个是评测集与线上分布不同。线下评测里的提问都是明确、完整的问题线上用户则经常用口语化的、包含背景噪声的方式提问。解决思路是持续从线上日志中采样构建增量评测集每个月替换掉 20% 的过时评测样本保证评测集永远贴合真实 query 分布。第二个是评估指标太粗。如果把所有回答混在一起算“准确率”幻觉问题会被稀释。要按查询类型拆解指标事实型 query 看锚点准确率观点型 query 看流畅性和多样性知识边界型 query 看拒答准确率。三条线的指标分开统计幻觉温床才能浮出水面。我在一次复盘中发现某轮优化后整体准确率只提升 1.2%但拆开一看事实型 query 的锚点准确率从 74% 升到了 82%真实效果被“观点型 query 没变化”拉平了。指标拆解才能看到真实价值。写在最后的实操体会做幻觉缓解的项目做得多了我最大的体会是这活儿没有一次性的“银弹”。SFT 和偏好对齐加起来能覆盖幻觉问题的六七成但剩下那三四成仍然需要推理期兜底和持续的数据迭代。事实性优化本质上是在和模型的“流畅性本能”做对抗——模型天生倾向于说漂亮话你的训练目标要反复提醒它“准确比好看重要”。最后分享一个我一直在用的小技巧从项目启动第一天就建立一个“幻觉样本库”把每次测试和线上反馈里的典型幻觉 bad case 都收集进去标注上错误类型事实冲突、知识缺失、生成退化。每一轮 SFT 或对齐训练后都用这个样本库做回归测试。你会发现幻觉缓解不是一个一次性优化动作而是一条持续收敛的曲线——只要样本库在增长、回归指标在下降方向就是对的。这个过程急不来但每跑一轮模型的可靠性都会往上走一个台阶。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑