本节摘要:laya 提供两种置信度量(官方口径):answer_confidence 与 entropy confidence。前者是首选答案自身的概率——「答的人有多笃定」;后者基于整个分布的熵——「这道题的答案空间有多清晰」。两者经常同向,但在三种典型形态下分道扬镳:二强争霸(首选 0.51 但其余概率全在次选,熵低而 answer 低)、一团浆糊(首选 0.4 且满盘皆平,双低)、一家独大(双高)。本节给出两种度量的公式(示意写法)、四种分布形态的对照分析、场景适配表——排序与路由用 answer、证据存在性与「模型是否理解了这道题」用 entropy;最后讲组合用法:两者的差与比本身就是信号(示意设计)。字段名以官方文档为准,公式为教学示意。
先立直觉。answer_confidence 回答的是「答的人有多笃定」——首选答案分到了多少概率;entropy confidence 回答的是「这道题的答案空间有多清晰」——概率是集中在少数选项,还是摊成一锅粥。两者不是同一件事的两种算法,是两个不同的问题。
answer_confidence(示意):首选自身的概率 p1 = max(softmax(z)) 「物流投诉拿走了 0.62」 entropy confidence(示意):分布熵的归一化补 H = -Σ p·log(p),n 个选项 ec = 1 - H / log(n) 「概率没摊平:0.62 对 0.21 对 0.09 对 0.08」
两个公式各自注意一点。answer 的分母是全部概率(含首选自己在内),所以它天然受选项数压制:同样「一家独大」的形态,四个选项的首选概率最高约到 0.9 出头,一百个选项满打满算也难得 0.5(量级示意)——跨选项数比较 answer_confidence 是常见误用,第 6 章的动态选项场景尤其要小心。entropy 公式里的 log(n) 是归一化:把「选项数不同导致的熵天然差异」抹掉,让 ec 在 0 到 1 之间可比——这正是它对动态选项更友好的原因(n 变了,刻度不乱)。
# two_confs.py —— 两种置信的桌面计算器(公式为教学示意,字段以官方文档为准) import math def answer_confidence(probs): return max(probs) def entropy_confidence(probs): h = -sum(p * math.log(p) for p in probs if p > 0) return 1 - h / math.log(len(probs)) # 归一化补:跨选项数保持同一刻度 # 用法一:给任一分布同时算两个数,先看数再进分桶 # dist = [0.82, 0.08, 0.06, 0.04] # print(answer_confidence(dist), entropy_confidence(dist)) # 用法二:跨选项数比较的纪律演示(分布为示意)—— # 四选项一家独大 [0.82, 0.06, 0.06, 0.06] 对一百选项顶部 0.45 其余摊平: # answer 一个 0.82 一个 0.45,像是「变弱了」,但选项数不同,answer 不可直接比; # 要跨场景比就用归一化的 entropy_confidence,或各自与自己任务的基线比。
两个函数都不到五行,两处细节别抄错:entropy 求和要跳过零概率项——log 零无定义,这是实现层的坑,与公式无关;归一化除的是 log(选项数)——动态选项场景里选项数每次调用都在变,分母跟着变,刻度才不乱。用法二值得亲手跑一遍:把两个分布的 answer 并排打印,再并排打印 ec,直观感受「answer 随选项数塌下去、ec 的刻度稳住」——第 6 章动态选项场景的门控读数,就该落在后者上。
把「首选概率」与「分布形状」当两个轴,四种典型形态(概率值均为示意):
形态一:一家独大(双高·正常样本) 物流投诉 0.82 ████ 产品 0.08 ▎其他 0.06 ▎售前 0.04 ▎ answer 高 · entropy 高(分布集中)→ 放心自动执行 形态二:二强争霸(answer 低 · entropy 高) 物流投诉 0.51 ██ 产品咨询 0.46 ██ 其他 0.03 ▎ answer 低 · entropy 高(只两个选项在打)→ 首选次选都送复核 形态三:一团浆糊(双低·模型没读懂题) 物流 0.32 █ 产品 0.28 █ 售前 0.24 █ 其他 0.16 ▊ answer 低 · entropy 低(全面摊平)→ 疑为坏题面或域外输入 形态四:弱多数(answer 中 · entropy 中低) 物流 0.44 ██ 产品 0.30 █ 其他 0.14 ▊ 售前 0.12 ▎ answer 中 · entropy 中 → 看阈值落点,多半进复核
形态二与形态三是本节的核心洞察,两种低置信的病因完全不同。二强争霸是「模型读懂了题,但两个答案都合理」——正确动作是复核两个候选(人做二选一比做四选一快得多);一团浆糊是「模型没读懂题」——大概率是题面歧义(选项定义重叠,第 1.2 节的问题设计病)或输入在分布外(第 10 章的域外风险),正确动作是修题面或拦输入,复核它反而是浪费人力。只看 answer_confidence 的话,这两种样本挤在同一个「低置信」桶里被同一种方式处理——这正是两种度量必须分开的工程理由。
| 场景 | 用哪个 | 理由 |
|---|---|---|
| 路由分发(选下游) | answer | 关心「首选有多稳」,次选是谁不重要 |
| 排序与 top-k 输出 | answer | 消费的就是首选概率本身 |
| 复核分流(进人工队列) | 两者组合 | 二强争霸与一团浆糊要进不同队列 |
| 证据存在性(noul 判断) | entropy | 「不知道」占比高即分布摊平,ec 先于 answer 示警 |
| 动态选项(第 6 章) | entropy 优先 | 归一化后跨选项数可比 |
| 微调质量体检(离线) | entropy | 好模型在训练分布内 entropy 分离度高(示意判据) |
挑三行展开。路由用 answer:路由错误只关于首选,0.51 对 0.49 的焦灼对路由来说就是「五成把握」,answer 直说。证据存在性用 entropy:noul 的「不知道」(第 1.2 节)涨起来时,分布整体摊平,ec 的下跌比 answer 更早更稳——它是「模型开始看不懂」的领先指标(示意判断)。动态选项用 entropy:browser-agent(第 5.3 节)每步的候选数都在变,answer 的刻度随之漂移,归一化的 ec 才是可比的。
两种置信并排出现在返回里(字段名以官方文档为准),它们的组合本身可当特征用(示意设计,不替代门控):
# conf_gap.py —— 两种置信的组合分析(示意) def classify_sample(answer_conf, entropy_conf): if answer_conf >= 0.75 and entropy_conf >= 0.75: # 阈值示意 return "clean" # 一家独大:自动执行 if answer_conf < 0.6 and entropy_conf >= 0.6: return "ambivalent" # 二强争霸:双候选复核 if answer_conf < 0.5 and entropy_conf < 0.5: return "confused" # 一团浆糊:查题面/查域外 return "review" # 其余:常规复核
这个四分桶在运营里的价值:三个桶对应三种不同的处理成本(自动、二元复核、修题面),比「一个低置信桶、一律转人工」的粗做法省人力,也比「只看 answer 单阈值」少错分。桶边界用你自己的流量校准(阈值均为示意),上线后每周回看各桶的人工采纳率——「clean 桶里人工推翻多」说明阈值过松,「confused 桶常年空置」说明题面已经很干净,这个桶可以撤掉。
把四分桶走一遍完整流程(数值均为示意)。输入一:工单「物流显示签收但没收到」,四类分布 [物流 0.51, 产品 0.46, 售前 0.02, 其他 0.01]——首选与次选咬死、尾部塌陷,按本节第二部分的形态判读是二强争霸(answer 低而分布不摊平),分桶动作:物流与产品两个候选连同完整分布推入复核队列,复核员做的是二选一而不是四选一。输入二:一段域外的长句闲聊,分布 [物流 0.32, 产品 0.28, 售前 0.24, 其他 0.16]——判读是一团浆糊,分桶动作不是复核而是打回:查题面定义与入口拦截。误判分析:若下游只有「answer 低于 0.6 一律转人工」的单阈值规则,这两条样本进同一个队列、被同一种方式处理——前者的双候选信息被扔掉,复核员从零开始四选一;后者浪费一次注定无果的人工。分桶本身不产生新信息,它做的是把已有的两种低置信拆开,让每一边接对处理动作——这正是第二节那句「挤在同一个桶里」在运营侧的账单。
其一,两种置信都要在温度拟合(第 7.1 节)之后消费。answer_confidence 直接来自概率数值,未校准的数值是错刻度;entropy 虽对单调变换不完全敏感,但温度化同样会改变熵的读数(T 拉大熵升、T 压小熵降)——先校准后门控的顺序不可交换。其二,别把置信当正确率。置信高说明模型内部一致,不等于答案对——微调数据有偏(第 5.1 节的偏好来源病)时,模型会「自信地错」。置信的真正用途是与第 7.3 节的代价矩阵配合做分流,不是给答案盖「正确」的章——这也是《Jev 决策编程》第 09 章《评测与校准》反复强调的立场:校准让概率可信,评测让答案可信,两件事谁也替不了谁。
| 问题 | 先查什么 | 处置 |
|---|---|---|
| answer 与 ec 都高,答案还是错 | 微调数据有没有偏——自信地错 | 置信不背这口锅,靠评测抓(本节第五部分立场) |
| ec 的阈值不知道定多少 | 先看自己流量的分布直方图 | 示意阈值起步,按各桶人工采纳率每周回调 |
| 两字段在返回里叫什么名 | 字段名以官方文档为准 | 封装一层映射,分桶逻辑不跟着字段名走 |
| 两指标打架听谁的 | 场景定优先级:路由听 answer、存在性听 ec | 按本节第三部分场景表,不设全局优先级 |
| clean 桶的人工推翻率升高 | 流量分布漂移或校准过期 | 先重拟合温度(第 7.1 节)再回调阈值 |
度量选好了,最后一节把置信变成动作:低于阈值的样本不硬答,走弃权——阈值用业务代价矩阵算,弃权率当运营指标管理。