Jev 置信度阈值与人工复核
根据业务风险设计 Jev 置信度阈值、校准测试和人工复核区间,并结合本站站内链接实验理解为什么高置信不等于正确。
1. 置信度不等于胜出概率
对 Choice 和 Score 而言,confidence 概括整个分布是否明确。某个选项即使概率最高,整体分布仍可能非常模糊。
2. 按风险设置三个区间
将结果分为自动执行、人工复核和拒绝执行。退款、账号变更、删除等不可逆操作,应比可撤销的路由建议采用更严格的边界。
3. 用自己的数据校准
收集有代表性的标注样本,运行与线上完全相同的问题,按置信度分组并计算实际错误率。模型、规则或输入结构改变后需要重新校准。
4. 记录完整决策契约
保存问题版本、模型版本、答案、分布、置信度、阈值和最终动作,才能衡量回归问题与人工覆盖率。
5. 第三方案例:用实际结果验证置信度
Loomaly 作者报告,用 Jev 判断站内链接建议时,被采纳和被拒绝建议的平均置信度只差 0.004;置信度最高的一条为 0.89,却被人工确认是错误建议。本站未独立复现这些结果。两组均值接近不能证明置信度没有区分能力;还需要样本量、分布与具体任务验证。Jev 可以负责提出或排序链接建议;URL 有效性、重复链接、锚文本规则以及最终发布等不可逆决定,继续由确定性代码和人工控制。
动手验证:完整示例与失败路径
下方是完整文件,不需要补写省略函数。示例仅打印建议或转人工状态,不修改工单、不执行支付或发布。
验证范围:锁定依赖的类型/语法检查和模拟传输;未进行真实 API 性能或准确率测试。真实运行需要自己的服务端密钥,可能产生费用。纯校准和输入处理示例不联网。
先定义“对”,再选择阈值
这里的目标是工单队列与独立人工标签一致,不是用户是否点击“采纳”。每条记录保存预测、人工标签、confidence、模型与问题版本。按时间或客户分组切分开发集和留出集,避免同一工单的近重复内容落入两边。
以下数据完全是人工构造的教学样本。coverage=可建议数/全部样本;selective_error=建议中的错误数/建议数。零建议时错误率为未定义,不能报 0% 错误。cost 只是人为设定的错误成本与复核成本之和。
只在开发集扫描阈值,再对留出集评估一次。若失败,应重做输入或问题并准备新的验证轮次,而不是在同一留出集反复调到好看。真实报告还应披露样本数、分组表现与不确定区间。
calibrate.py
"""Synthetic teaching fixture: NOT measured Jev accuracy or a recommended threshold."""
# (model confidence, predicted team, independently assigned correct team)
development = [(0.95, 'technical', 'technical'), (0.89, 'billing', 'technical'),
(0.8, 'billing', 'billing'), (0.7, 'technical', 'technical'),
(0.6, 'billing', 'technical'), (0.4, 'human', 'human')]
held_out = [(0.92, 'technical', 'billing'), (0.83, 'billing', 'billing'),
(0.55, 'technical', 'technical'), (0.3, 'billing', 'technical')]
def evaluate(rows, threshold, error_cost=10, review_cost=1):
proposed = [r for r in rows if r[0] >= threshold and r[1] != 'human']
errors = sum(predicted != label for _, predicted, label in proposed)
reviewed = len(rows) - len(proposed)
return {'threshold': threshold, 'n': len(rows), 'proposed': len(proposed), 'errors': errors,
'coverage': len(proposed) / len(rows) if rows else 0,
'selective_error': errors / len(proposed) if proposed else None,
'review_rate': reviewed / len(rows) if rows else 0,
'cost': errors * error_cost + reviewed * review_cost}
if __name__ == '__main__':
results = [evaluate(development, t) for t in [0.5, 0.7, 0.8, 0.9, 1.0]]
for row in results:
print('development', row)
chosen = min(results, key=lambda r: (r['cost'], -r['threshold']))['threshold']
print('held-out (do not retune on this set)', evaluate(held_out, chosen))
print('Synthetic illustration only. Repeat with labeled outcomes and uncertainty estimates.')
下载此文件运行
python calibrate.py如何判断是否运行正确
有 API 的示例应输出 action、team 等结构化字段;具体标签与分数会随输入和模型变化,不能要求与模拟值一致。删除密钥应走复核分支,不应泄露异常正文。校准脚本输出 development 与 held-out 两组指标;它不验证模型质量。
把阈值脚本跑出的失败案例读明白
本站的可下载 calibrate.py 只包含 6 条开发样本和 4 条留出样本,全部是合成示意,不是 Jev 实测。按“误判成本 10、人工复核成本 1”的教学设定,开发集选出 0.9:自动建议 1/6、误判 0/1。但在未参与选阈值的留出集中,同一阈值自动建议 1/4,恰好错 1 条。小样本的开发集最优,不能替代上线前评估。
下一步应收集真实标签,先固定训练/调参与留出切分,再同时报告 coverage、自动建议中的错误率、人工复核量和业务损失;0 条自动建议时错误率记为“无法计算”,不能记为 0%。新问题版本或输入结构变化后重新评估。
下载合成校准脚本 ↓