RAG/蒸馏/微调怎么选?
检索增强、知识蒸馏、微调策略与推理干预详解
原题:列举并解释当前主流的缓解大语言模型幻觉问题的技术方法,如检索增强、知识蒸馏、微调策略或推理时干预等。
模型微调 · 联通真题
回答与解析
幻觉问题的分类
先区分两类幻觉:
- 事实性幻觉:模型编造不存在的事实(如错误的人物关系)
- 忠实性幻觉:输出与输入/上下文不一致(如摘要偏离原文)
缓解方法需针对性选择。
主流技术方法
1. 检索增强(RAG)
核心思路:外接知识库,将生成约束在检索到的证据上
- 标准流程:查询改写 → 向量检索 → 重排序 → 上下文增强生成
- 关键优化:多路召回、HyDE(假设文档嵌入)、Self-RAG(反思token)
- 局限:检索失败时幻觉反而加重,需配合置信度校准
2. 微调策略
- 事实性SFT:用高质量QA对训练,强化"不知道就拒绝"
- 偏好对齐:RLHF/DPO中引入事实性奖励,惩罚幻觉输出
- 知识蒸馏:从大模型蒸馏事实性强的推理链到小模型
3. 推理时干预(Inference-Time Intervention)
不修改模型,在生成过程中干预:
| 方法 | 机制 | 代表工作 |
|---|---|---|
| 对比解码 | 对比大模型与浅层输出,抑制幻觉 | DoLa |
| 注意力引导 | 强制关注输入上下文 | ITI |
| 自我验证 | 生成后让模型自检,迭代修正 | Self-Check |
4. 知识编辑(Model Editing)
直接修改模型参数中的特定事实:
- 定位-编辑:ROME、MEMIT定位MLP层中的知识神经元
- 适用场景:单条事实修正,不适合大规模更新
工程实践建议
- 分层防御:检索优先 → 推理干预兜底 → 事后事实核查
- 幻觉检测:NLI模型判断生成与证据的蕴含关系,或采样一致性检验
- 产品策略:高风险场景强制引用溯源,低置信度触发人工审核
学习建议
建议系统学习该知识点
口语版讲法(约4分钟)
- 一句话定位:幻觉本质是模型自信与不确定性之间的失衡
- 边界划分:RAG适合事实性幻觉,微调适合风格/格式,推理干预做兜底
- 业务场景:客服退款政策查询的落地案例
- 落地风险:检索失败反而加重幻觉,需置信度校准
- 工程师取舍:分层防御,优先RAG,辅以推理干预和事后检测
面试官好,这道题问的是幻觉缓解,其实我觉得本质是在问:怎么让模型在不确定的时候学会说不知道,而不是强撑着编答案。因为大模型天生就是个接龙游戏,它不知道什么是对的,它只知道什么最像真的。所以所有方法,往根上说,都是在给模型画一条边界,告诉它哪里可以自由发挥,哪里必须守规矩。
我按适用场景把主流方法分成三个梯队。先说第一梯队,RAG,也就是检索增强。它的核心思路特别简单:模型别自己瞎编,先去查资料。比如在客服场景,用户问退款政策,你不能让模型背一个过时的版本,而是先从一个知识库里把最新的政策文档搜出来,然后让模型照着写。这个思路对事实性幻觉效果特别好,因为事实是外挂的,不是模型记的。但这里有个坑:检索失败的时候,幻觉反而比不用RAG更严重,因为模型会强行把检索来的无关信息也编进去。所以落地时我特别关注两件事,一个是检索质量,比如用 Hybrid Search 把关键词和向量两条路结合起来,再一个是对检索结果做置信度过滤,分太低的直接丢掉。
第二梯队是微调。微调适合的场景和RAG不一样,RAG管事实,微调更多管风格和逻辑。比如你要模型在不确定时说“我不确定”,或者让它的推理链更忠实于上下文,那微调就更直接。具体做法分两种,一种是用高质量QA对做 SFT,叫它学会拒绝;另一种是用 RLHF 或者 DPO,在偏好对齐里加入事实性奖励,惩罚幻觉输出。但微调的局限也很明显,它改的是模型的内部参数,改完以后新知识进来,要么忘了旧的,要么学歪了,所以不适合高频更新的场景。
第三梯队是推理时干预,就是不改模型,在生成过程中加限制。比如 对比解码,拿大模型和小模型的输出对比,如果小模型觉得概率大的词,大模型却觉得概率小,那往往是幻觉信号,就把它压下去。还有 Self-RAG,让模型生成的时候自己反思,输出一个反思token,比如“我有没有依据”,然后根据这个token决定要不要引用来源。这个方法的好处是灵活,不依赖外部知识库,但坏处是推理成本高,而且对模型自身能力有要求,不是所有模型都反思得好。
其实还有一个方向,就是知识编辑,直接修改模型参数里某个具体事实。比如公司改了某个产品的价格,你不想重新训练,就定位到模型MLP层里存这个价格的神经元,直接改。但这方法风险很大,因为模型的知识是分布式存储的,你改一个点可能连带影响别的事实。所以我对它的看法是,适合做紧急热修复,但绝对不能当常规方案。
所以总结一下,我的倾向是分层防御:先用RAG解决大部分事实性问题,推理时干预做兜底,最后再加一道事后检测,比如用 NLI 模型判断生成内容和检索证据的蕴含关系,或者做采样一致性检验。真正上线的时候,我宁可让模型回复“我不知道”,也比它编一个看起来合理但错误的信息强。
关键一句:知识编辑(Model Editing)作为紧急热修复可行,但风险大,不能做常规方案
面试官还可能这样问
- 问法 1 · 场景切入
假设你在做电商客服机器人,用户问“这个手机多少钱”,模型答了2999,但实际是3999。这种编造事实的幻觉,你平时怎么防?从实际业务出发聊聊吧。
- 问法 2 · 层层追问
大模型生成内容有时会胡说八道,你了解吧?……一般怎么缓解这类问题?……那如果微调不够,还有什么办法?比如生成时能不能干预?
- 问法 3 · 直球架构
列举目前主流的缓解LLM幻觉的技术方法,包括检索增强、微调、推理时干预等,各自的核心思路和典型做法是什么?