详细解释
Out-of-Distribution Detection(OOD 检测 / 分布外检测,简称 OOD Det)一句话:你用一个金融领域微调的模型回答「如何组装家具」这种完全没见过的问题,它很可能会瞎编一堆金融专业术语混在家具组装步骤里(因为它只会输出金融风格的内容,但对家具步骤一无所知);OOD 检测就是在模型回答之前,先判断「这个输入离我训练时熟悉的数据分布到底有多远」——如果太远,直接告诉用户「这个问题不在我的能力范围内,请换一个金融相关的问题」,而不是硬答误导用户。 它和 Hallucination Detection 是互补关系:OOD 检测在生成之前拦问题,幻觉检测在生成之后审答案。
OOD 检测的本质假设:模型在训练分布内的样本上,输出的概率分布是「尖锐」的(某一个 Token 概率极高,其他极低);在 OOD 样本上,它会「犹豫不决」,输出的概率分布很平(所有 Token 概率都差不多,像乱猜)。基于这个假设,发展出了三大类检测方法:(1)基于 Output Probability / Logit 的方法(看分布平不平、看最大概率值、看 MSP / MaxLogit / Energy);(2)基于 Embedding 空间距离的方法(把输入 embedding 之后看它离训练分布的中心有多远,用马氏距离 / KNN 距离打分);(3)基于合成 OOD 数据训练一个二分类 Detector 的方法(专门训一个小模型判断 In-Distribution vs OOD)。
唯元智创 的兼容平台给所有模型都默认开了 OOD 检测(你不用自己实现):当一个请求的 OOD Score 超过阈值(默认 0.8)时,自动在 System Prompt 里追加一句「请坦诚说明这个问题超出了你的专业领域,不要编造答案」;如果 OOD Score 更高(超过 0.95),会直接在 API 层面返回结构化的 OOD 错误码,让你后端可以走自定义兜底逻辑(比如跳转到通用模型、跳转到人工客服)。
三类主流 OOD 检测方法对比(2025 年选型表)
| 方法类别 | 代表算法 | 核心原理 | 部署成本 | 检测准确率(AUC) | 延迟开销 | 推荐使用场景 |
|---|---|---|---|---|---|---|
| ① 基于输出概率的零样本方法 | MSP(最大 Softmax 概率)、Energy Score、MaxLogit、Gram Matrices | 看模型生成的 Token 概率分布形状,平就 OOD | 极低,推理时顺手算 | 70% 至 80% | < 1ms | 所有场景默认必开的 Baseline,不开白不开 |
| ② 基于 Embedding 空间距离的方法 | Mahalanobis、KNN-Distance、Density Ratio、KNN-Mahalanobis | 用少量 In-Distribution 样本建个参考分布,新来的算距离 | 低(要存 1-5 万条参考 embedding) | 85% 至 92% | +5ms 至 +15ms | 领域模型(金融/法律/医疗)专业 OOD,效果最佳性价比首选 |
| ③ 训练专用 Detector 模型 | OOD-BERT、LLM-OOD-Det、OOD classifier trained with OOD data augmentation | 拿正样本(In-Distribution)+ 合成负样本(各种合成的 OOD 文本)训一个专门的二分类小模型 | 中(需要训小模型 + 准备 OOD 合成数据) | 92% 至 97% | +20ms 至 +50ms | 安全要求极高的场景(医疗/法律/自动驾驶语音指令),必须上这一层 |
把 OOD 检测落地到 LLM 应用的 5 条实战规范
- 一定要有动态阈值,不要写死 0.5/0.8——不同用户的问题难度分布天差地别(周末普通用户问题简单、工作日专业用户问题复杂),推荐用过去 24 小时真实业务 OOD 分数的 P95 作为当天阈值(每天自动更新),比写死值的漏检率低 30%。
- 不要只依赖单一指标,至少组合「MSP + Embedding KNN Distance」两路——单指标 AUC 80%,两路加权融合之后 AUC 能到 90%,花 2 倍计算量换 10% 的准确率提升,安全场景血赚。
- OOD 分数不要只用来「拦/不拦」二元判断,做三层分流策略:(1)OOD 分数低(在阈值内)→ 正常回答;(2)中等(在灰色区)→ 在 System Prompt 里追加「坦诚说明不确定 + 引用来源」;(3)极高(明显不是领域的)→ 直接拒绝 + 给推荐入口(跳转到合适的模型或人工)。
- RAG 场景下要做「Query OOD → 文档召回 OOD → 生成后 OOD」三层联动:Query 本身不 OOD,但 RAG 召回的文档和 Query 相似度很低(文档是 OOD),模型回答时的 OOD 分数会很高,这三层一起用,能把 RAG 里的「答非所问」问题检出率从 60% 提到 92%,单独用任意一层只能到 60-70%。
- 把 OOD 样本主动收集起来喂回流做 SFT 数据增强——每次触发 OOD 拒绝的 Query 都收集到一个 OOD 池子里,每周做一次:(a)人工抽样 100 条看是不是误判(误判的那类样本加入训练分布重新训练 Detector);(b)用户后续又追问了的问题说明是「真业务问题但模型不会」,整理出来作为增量 SFT 数据,模型越训练,真 OOD 的比例就越低。