分布外检测 Out-of-Distribution Detection

Out-of-Distribution (OOD) Detection

OOD 检测是判断模型当前输入是否来自于它训练时见过的数据分布的技术,是 LLM 安全、幻觉抑制、RAG 质量控制的第一道防线:输入越 OOD,模型输出越不可靠,应该走兜底或拒绝回答。

详细解释

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 条实战规范

  1. 一定要有动态阈值,不要写死 0.5/0.8——不同用户的问题难度分布天差地别(周末普通用户问题简单、工作日专业用户问题复杂),推荐用过去 24 小时真实业务 OOD 分数的 P95 作为当天阈值(每天自动更新),比写死值的漏检率低 30%。
  2. 不要只依赖单一指标,至少组合「MSP + Embedding KNN Distance」两路——单指标 AUC 80%,两路加权融合之后 AUC 能到 90%,花 2 倍计算量换 10% 的准确率提升,安全场景血赚。
  3. OOD 分数不要只用来「拦/不拦」二元判断,做三层分流策略:(1)OOD 分数低(在阈值内)→ 正常回答;(2)中等(在灰色区)→ 在 System Prompt 里追加「坦诚说明不确定 + 引用来源」;(3)极高(明显不是领域的)→ 直接拒绝 + 给推荐入口(跳转到合适的模型或人工)。
  4. RAG 场景下要做「Query OOD → 文档召回 OOD → 生成后 OOD」三层联动:Query 本身不 OOD,但 RAG 召回的文档和 Query 相似度很低(文档是 OOD),模型回答时的 OOD 分数会很高,这三层一起用,能把 RAG 里的「答非所问」问题检出率从 60% 提到 92%,单独用任意一层只能到 60-70%。
  5. 把 OOD 样本主动收集起来喂回流做 SFT 数据增强——每次触发 OOD 拒绝的 Query 都收集到一个 OOD 池子里,每周做一次:(a)人工抽样 100 条看是不是误判(误判的那类样本加入训练分布重新训练 Detector);(b)用户后续又追问了的问题说明是「真业务问题但模型不会」,整理出来作为增量 SFT 数据,模型越训练,真 OOD 的比例就越低。

常见问题

OOD 检测的假阳性太高了,很多正常问题也被拦下了,怎么调?有没有办法把 FP 降到 1% 以内?
假阳性 FP(把正常问题误判成 OOD)90% 的情况不是算法本身的问题,是你建 In-Distribution 参考分布时用的参考样本太窄、覆盖太少。把参考数据集做三次「广度扩展」,基本就能把 FP 压到 1% 以内。具体操作:(1)第一次扩展:领域内样本至少要覆盖 Top 30 类真实业务意图,每类至少 200 条,不要只拿 FAQ 页面 500 条标准问——真实用户的问法(错别字、口语化、带废话、中英混)和 FAQ 页面标准写法分布差 10 倍;(2)第二次扩展:加入「边界样本」——比如你是金融模型,加一些「半金融半其他领域」的问题(如用户问「房贷和租房哪个划算」涉及金融+生活方式、「怎么买保险理财养老」涉及金融+保险+社保),这些边界样本不扩展进去,几乎 100% 会被误判;(3)第三次扩展:加入 20% 的「正常但写法奇怪」的样本——同义词替换、中英混写、错别字、口语化表达(「老哥那啥我想知道咋买基金啊」这种),很多假阳性都是因为参考集里全是书面语,口语化的正常业务 Query 离群了。扩展完参考集之后,再把阈值调到「过去 30 天真实业务数据上 FP=1% 时对应的 TPR(真阳性率)」位置,这是最优平衡点:既不漏太多真 OOD,也不误拦太多正常问题。
合成 OOD 负样本该怎么造?直接拿通用闲聊语料当负样本行不行?
直接拿通用闲聊语料当 OOD 负样本训练 Detector 会导致「边界样本全部漏检」——真 OOD 是「看起来很像领域内但其实不在分布里」的样本,不是明显一眼假的闲聊;合成高质量 OOD 负样本要用「近邻对抗扰动」的思路,三大来源按比例混合。推荐的 3 类负样本各占 1/3:(1)Near-OOD(近分布负样本):拿你的 In-Distribution 样本用 GPT-4 生成「看起来很像但答案其实完全不对」的变种——比如金融模型的原样本是「怎么买沪深 300 ETF」,Near-OOD 变种是「怎么买纳斯达克 100 三倍做空 ETF」(国内不能直接买,不在你的分布里),这种「看起来极像真的但就是 OOD」的负样本对 Detector 提升最大;(2)Far-OOD(远分布负样本):其他完全不相关领域的专业数据(比如医疗报告、法律判决书、代码数据),占 1/3 作为容易样本;(3)Adversarial OOD(对抗负样本):用 Prompt 让模型专门去模仿你领域的风格但内容完全不对(比如让 GPT-4 写一段「包含大量金融专业术语但语义完全胡扯的句子」),这种最难,专门用来练 Detector 的最后 5% 准确率。三类 1:1:1 混合起来训的 Detector,AUC 比直接拿闲聊语料当负样本高 15 至 20 个百分点。AI Alignment 里的 3 类数据合成原则也适用,直接套。
多模态 VLM 场景下的 OOD 检测怎么做?图片 + 文本联合输入的分布距离怎么算?
多模态 OOD 别自己瞎写新算法,沿用纯文本的两大原则 + 一个跨模态融合策略就能到 SOTA:「模态独立检测 + 跨模态一致性校验 + 后期融合加权」。具体三步落地:(1)每个模态独立跑 OOD——图片侧用视觉 encoder 的 embedding 建参考分布(ImageNet 预训练的 CLIP ViT 就行),用 Mahalanobis 距离算图 OOD 分数;文本侧沿用上面的 MSP + Embedding KNN 算文本 OOD 分数;(2)跨模态一致性校验:如果文本说的是「狗」但图片 embedding 在狗类参考分布的距离很远(比如图片其实是猫),两者语义不一致就加一个 Conflict Score;(3)后期融合:文本 OOD 分数 × 0.4 + 图片 OOD 分数 × 0.4 + 跨模态冲突分数 × 0.2 = 最终多模态 OOD 分数,再按阈值判断。这个组合策略在 2024-2025 年的多模态 OOD Benchmark 上能到 93% AUC,比那些复杂的端到端 Multimodal OOD Detector 只差 1% 但部署复杂度低 10 倍,99% 的业务场景用这个三组合就够了,没必要自己训专用多模态 OOD Detector 大模型。