一个高置信度的错误答案
企业知识库问答系统上线后,运维同学通常会加一道“置信度闸门”:模型回答时顺带输出 token 概率,平均概率低于阈值就转人工,或者提示“我不确定”。上线第一周看起来正常,第二周开始出现一类难处理的工单——员工问“差旅住宿的报销上限是多少”,模型回答了一个具体金额,平均 token 概率很高,系统判定为可信,直接展示;但对照制度文档,这个金额属于另一类出差场景。
问题不在于模型答错,而在于系统用一个看似客观的信号把错误答案标成了高置信。logit 概率、预测熵和 token 级置信度都属于“白盒”信号,它们直接读取模型在每一步对下一个 token 的分布。直觉上,分布越尖锐,模型越有把握。这个直觉在语言建模任务里部分成立,但迁移到事实问答时,它衡量的是“下一个词该怎么说”,而不是“这件事是不是真的”。
下面以这个企业知识库问答场景贯穿全文:检索返回若干制度片段,模型据此生成答案,系统需要判断该答案能否直接展示。
logit 概率到底在度量什么
语言模型在每个解码步输出一个覆盖词表的向量,经过 softmax 后得到下一个 token 的概率分布。取生成序列中各 token 概率的几何平均或长度归一化对数似然,就得到常见的序列置信度。工程上通常把它当作“模型对自己输出的把握”。
这个量度量的是词序列在模型分布下的可能性。训练目标就是最大化真实语料的似然,所以模型学会了对“常见说法”给高分。制度文档里“住宿费上限为 X 元”这种句式非常常见,模型对“住宿费”“上限”“为”这些 token 都会给出较高概率,即使 X 本身是错的。反过来,一个正确但不常见的表述,比如把“上限”换成“最高可报销”,token 概率可能下降。
Geng 等人在 NAACL 2024 的置信度估计与校准综述里直接指出这一根本歧义:低 token 概率可能反映事实置信度低,也可能只是措辞不寻常。模型可能对用词不确定,但对底层事实很确定。企业知识库场景放大了这个问题,因为制度文本的措辞高度模板化,模型很容易在“像制度文件”这个维度上给出高概率,而金额、适用条件这些真正需要判断的事实字段并没有被单独度量。
预测熵是同一问题的另一种写法。对下一个 token 分布计算熵,熵低表示分布集中。但分布集中可以来自“模型知道答案”,也可以来自“这个位置只有一种语法上通顺的接法”。在“报销上限为 ___ 元”这种位置,模型即使不知道具体数字,也可能因为训练中见过的金额分布而给出一个相对集中的分布。
token 级置信度为何与事实正确性脱钩
把每个 token 的概率当作独立证据,再聚合成答案级置信度,是很多工程实现的默认做法。它隐含一个假设:事实错误的答案,其关键 token 概率应该偏低。这个假设在开放域常识问答里有时成立,在专业制度问答里经常不成立。
原因在于错误可以发生在“高概率 token 的组合”上。模型可能对“上限”“报销”“员工”这些 token 都很确定,唯独在金额或适用条件上选错。金额 token 本身的概率未必低,因为训练语料里存在大量结构相似但数值不同的句子,模型学到的是“这里该放一个金额”,而不是“这里该放 800 元”。token 级信号看到的是“放金额”这件事很确定,看不到“放哪个金额”这件事不确定。
另一个脱钩来源是答案长度和位置。短答案里每个 token 权重都大,长答案里关键事实 token 可能被大量套话 token 稀释。长度归一化能缓解一部分,但归一化本身又引入新偏差:它倾向于抬高短答案的置信度,而制度问答里简短回答往往省略了适用条件,反而更容易出错。
Xiong 等人在 ICLR 2024 的置信度引出评估里报告了一组相关观察:LLM 在被要求用语言表达置信度时倾向于过度自信,可能是在模仿人类表达把握的方式;随着模型能力增强,校准和失败预测表现会改善;白盒方法整体优于黑盒方法,但差距不大,例如 AUROC 在 0.522 到 0.605 之间。这说明即使能拿到 logit,也不足以稳定地区分正确与错误。
校准、分布外输入与过度自信
校准描述的是“模型说 80% 把握时,是否真的有约 80% 正确”。一个模型可以在训练分布内校准良好,一旦输入偏离训练分布,校准就会崩坏。企业知识库的分布外输入非常典型:新发布的制度、内部缩写、只在某个部门使用的流程名称。这些内容在预训练语料里几乎不存在,模型对相关 token 的分布没有可靠依据。
分布外输入下的过度自信有两种表现。一种是模型直接编造一个具体值,并对该值给出不低的 token 概率,因为它把问题映射到了训练中见过的相似模板。另一种是模型在检索片段缺失关键信息时,仍然生成一个语法完整、措辞专业的答案,token 概率因为“像制度文件”而保持高位。
温度缩放这类事后校准方法能修正整体偏移,但它需要标注数据来拟合温度参数,而且假设校准误差在输入分布上稳定。当分布外输入占比升高,这个假设不成立。上下文校准通过减去空提示下的类别先验偏差来去偏,对分类式任务有效,对开放式生成的事实正确性帮助有限。
Lin 等人在 2022 年的工作里展示过另一条路径:GPT-3 可以在不使用 logit 的情况下,用自然语言表达对自身答案的置信度,并且这些置信度在 CalibratedMath 任务上校准良好,在分布偏移下仍保持中等校准。这提示置信度不一定只能从 logit 读,但后续研究也表明,单纯让模型“说出百分比”在多数模型上会退化为集中在高区间的过度自信。
采样一致性与语义熵
如果 token 概率不可靠,一个自然的替代是看模型多次采样是否一致。核心直觉是:对模型真正掌握的事实,重复采样会收敛到同一答案;对编造的事实,采样会发散。这就是 SelfCheckGPT 这类基于一致性的黑盒方法的基础,它不需要 logit 访问权限。
直接比较字符串会误判。模型可能一次说“住宿费上限 800 元”,另一次说“住宿报销最高 800 元”,语义相同但 token 序列不同。Kuhn、Gal 和 Farquhar 在 ICLR 2023 提出的语义熵解决了这个问题:先对采样答案做语义等价聚类,再在聚类结果上计算熵。论文报告语义熵在问答数据集上比同类基线更能预测模型准确率,方法无监督、只用单个模型、不需要修改现成模型。
Farquhar 等人后续在 Nature 2024 的工作把语义熵用于幻觉检测,进一步确认了这条路线。对企业知识库场景,语义聚类尤其重要,因为制度问答的正确答案往往可以用多种句式表达,而错误答案也可能被包装成相似句式。语义熵看的是“模型是否在不同采样里指向同一个事实”,这比看单个 token 概率更接近事实层面的不确定性。
代价是采样次数。要估计一致性,至少需要若干次独立生成,每次都是一次完整前向解码。延迟和算力随采样数线性增长,在线问答的响应时间预算通常不允许。工程上往往用较小采样数加缓存来折中,但采样数太少会让熵估计方差变大,阈值判断不稳定。
flowchart TD
A[员工提问] --> B[检索制度片段]
B --> C[模型生成答案]
C --> D{置信度信号}
D -->|logit 概率与熵| E[高概率但可能事实错误]
D -->|多次采样语义聚类| F[语义熵估计]
D -->|内部状态探针| G[隐层特征打分]
E --> H[展示或转人工]
F --> H
G --> H
H --> I[人工反馈与阈值复核]
I --> D
图中关键转折在 D 到 E:logit 路径在“像制度文件”的措辞上给出高分,无法区分事实错误;采样路径和内部状态路径分别用一致性和隐层特征提供不同证据,最终都汇入同一个展示或转人工决策,并由人工反馈回灌阈值。
内部状态方法与工程对比
白盒方法不止 logit。模型的隐层表示、注意力模式、特定探针分类器都可以作为不确定性信号。Geng 等人的综述把这些归为利用内部模型状态的方法,并指出它们通常比黑盒方法表现更好,但需要模型访问权限,对闭源 API 不可用。
内部状态方法的工程难点在于探针训练和分布漂移。探针需要在带标签的正确/错误样本上训练,标签来自人工或外部验证。企业知识库的事实会更新,探针需要定期重训,否则会把旧分布下的特征当作可靠信号。
下表对比几种路线在质量、延迟、成本和实现复杂度上的定性差异。表中不含具体数字,因为资料未提供可直接迁移的性能数据。
| 方法 | 信号来源 | 相对质量 | 延迟与吞吐 | 成本 | 实现复杂度 | 适用边界 |
|---|---|---|---|---|---|---|
| logit 概率 / 预测熵 | 单次前向的 token 分布 | 易把措辞不确定与事实不确定混淆 | 最低,单次解码 | 最低 | 低 | 白盒模型,措辞稳定的模板任务 |
| 长度归一化对数似然 | 序列 token 概率聚合 | 受长度与套话影响 | 最低 | 最低 | 低 | 短答案、格式固定的抽取任务 |
| 言语置信度 | 模型自述百分比 | 普遍过度自信 | 低,单次生成 | 低 | 低 | 仅作参考,不宜直接展示 |
| 采样一致性 | 多次生成的一致性 | 对事实错误更敏感 | 高,随采样数线性增长 | 高 | 中 | 黑盒 API,可接受多次采样 |
| 语义熵 | 语义聚类后的熵 | 比 token 级一致性更贴近事实 | 高 | 高 | 中高 | 答案可多句式表达的事实问答 |
| 内部状态探针 | 隐层特征与分类器 | 通常优于黑盒,但依赖标注 | 中,需额外前向或缓存 | 中 | 高 | 有模型访问权且有标注数据 |
从表里能看到一个清晰的权衡:信号越接近事实层面,需要的计算和标注越多。企业知识库问答如果对延迟敏感,logit 路径成本最低但最不可靠;如果对错误容忍度低,语义熵或内部状态探针更合适,但要接受更高的延迟和运维成本。
可观测指标与部署边界
部署不确定性估计时,需要区分两类指标。一类是校准指标,比如预期校准误差,衡量置信度与正确率的匹配程度。另一类是判别指标,比如 AUROC,衡量置信度能否把正确和错误答案分开。Xiong 等人的评估显示,即使在受控设置下,白盒与黑盒方法在 AUROC 上的差距也不大,且没有哪种技术稳定优于其他。这意味着不能指望单一指标解决所有问题。
生产环境需要观察的信号包括:转人工率、被展示答案的人工复核错误率、置信度分布随时间的漂移、以及分布外输入的占比。如果转人工率突然下降而复核错误率上升,通常是置信度阈值在分布漂移后失效。如果置信度分布整体向高区间移动,可能是新制度上线后模型对相关措辞更熟悉,但事实正确性未必同步改善。
部署边界上有几个明确前提。第一,logit 信号只在有模型访问权限时可用,闭源 API 只能走采样或言语置信度路线。第二,采样一致性方法的延迟随采样数增长,在线问答的响应时间预算决定采样数上限。第三,语义熵依赖语义聚类质量,聚类错误会让熵估计失真。第四,内部状态探针需要标注数据和定期重训,制度更新频繁时维护成本高。第五,所有方法在专业知识和长尾输入上表现都更差,Xiong 等人的评估也指出这些方法在需要专业知识的任务上仍然吃力。
一个务实的部署方式是分层:先用低成本的 logit 信号做粗筛,把明显低置信的请求转人工;对高置信请求再用采样一致性或语义熵做二次校验,只对二次校验通过的答案直接展示。这样把高成本信号集中在真正需要判断的请求上。阈值不能一次设定后长期不变,需要结合人工复核结果持续调整。
仍未解决的问题包括:如何在制度频繁更新的企业环境里维持校准;如何在没有标注数据的冷启动阶段选择方法;以及当模型本身能力提升时,旧的置信度阈值是否需要重新拟合。这些问题在现有资料里没有统一答案,工程上只能通过持续观测和人工反馈来逼近可用状态。