9.1 回归集:Jev 开发的测试循环


9.1 回归集:Jev 开发的测试循环

本节摘要:回归集是一份"输入 + 人工标注的正确答案"清单,100~500 条起步,来源首选第 8 章影子日志的真实流量(含对账阶段发现的分歧样本与错误流里的 hard case)。它是 Jev 开发的单元测试:改一句 instructions、动一个选项、换一版模型,都必须重跑回归集——绿灯才许上线。评测读法分类型:Noul/Choice 看混淆矩阵与分桶准确率,Choice 额外盯 other 的滥用,Score 看分桶内的均值偏差。本节给出回归集的最小数据结构与一份可直接用的评测脚本骨架。

学习目标

阅读完本节,你应当能够:

  1. 从影子日志组织一份结构化回归集。
  2. 把回归集跑成混淆矩阵与分桶指标。
  3. 将回归集接入 schema 变更流程(变更 gating)。

一、回归集从哪来、要多少

来源 价值 占比建议
影子日志随机抽样 代表真实分布 ~60%
对账分歧样本(第 8.2 节) 边界与难点 ~25%
错误流 hard case(第 8.3 节) 最难判断的输入 ~10%
人工构造的对抗/极端例 覆盖长尾 ~5%

:100~500 条起步。低于 50 条时分桶统计全是噪声;高于 500 条的边际收益递减(除非做多阈值精调)。

最小数据结构(一份 JSONL,随仓库走版本控制):

{"id": "t-0042", "state": {"ticket": "..."}, "labels": {"is_urgent": 1, "route": "billing"}, "note": "对账分歧样本:含退款+故障混合诉求"}

labels 的 key 对齐问题 ID——回归集与 questions 定义一一映射,问题 ID 稳定(第 8.1 节)在这里兑现价值。

二、跑评测:分类型的读法

Noul:按预测概率分桶看准确率(第 9.2 节的可靠性曲线就是它的完整形态)。

Choice:混淆矩阵(第 6.1 节已示例)+ 三个专项检查:

  • 对角线 = 总准确率;
  • 双高格 = 判别性不足的两类;
  • other 行/列 = 覆盖问题(真实类大量进 other → 选项表缺类;other 频繁胜出 → 阈值或 schema 问题)。

Score:每级桶内看 |预测均值 − 真实等级|,偏差大且系统性的等级回去改描述(第 3.3 节准则一)。

评测脚本骨架(与第 6.1 节混淆矩阵衔接):

def evaluate_choice(dataset: list[dict], questions: dict) -> dict: matrix = {} # (预测, 真实) -> 计数 for case in dataset: pred = jev_call(case["state"], questions)["route"]["choice"] truth = case["labels"]["route"] matrix[(pred, truth)] = matrix.get((pred, truth), 0) + 1 acc = sum(v for (p, t), v in matrix.items() if p == t) / len(dataset) return {"accuracy": acc, "matrix": matrix, "other_rate": sum(v for (p, _), v in matrix.items() if p == "other") / len(dataset)}

三、变更 gating:回归集的真正用途

第 8.2 节变更表的执行细则:

改 instructions / criteria / 模型版本 │ ▼ 跑回归集 ──准确率/混淆不劣化──▶ 允许发布(进影子或灰度) │ └─劣化──▶ 定位:哪类样本翻车?→ 修 schema / 回滚 → 再跑

三个实践要点:

  1. 基线入库:每次发布的回归集结果(准确率、混淆摘要、ECE)存档——下次劣化时你能回答"从哪版开始坏的";
  2. 允许 trade-off:修订选项表常出现"A 类准了、B 类微降"——只要总代价(按第 9.3 节权重)更优即可放行,把决策记进回归集的 CHANGELOG;
  3. 回归集也要长:线上新发现的 bad case,修完即入集——它防的是同一条沟里翻两次车。

💡 为什么 100 条就够:回归集的目标不是统计显著性(那是 9.2 校准的事),而是变更检测——schema 改动通常造成整类样本翻转,100 条足以暴露整类变化;配 25% 的分歧样本构成,敏感度更高。

本节要点回顾

  1. 构成:影子抽样 60% + 分歧样本 25% + hard case 10% + 构造例 5%,100~500 条。
  2. 读法:Noul 分桶、Choice 混淆矩阵盯双高格与 other、Score 分级偏差。
  3. gating:改 schema/版本必重跑;基线存档、允许记录在案的 trade-off、bad case 即入集。

回归集管"判断对不对",下一节管"概率诚不诚实"——可靠性曲线与 ECE,30 行代码给 Jev 做体检。


作者与出处
原作者: 灏天文库
整理: 灏天文库整理
本站整理收录,版权归原作者/开源协议所有;欢迎通过原文链接访问源仓库。
发布者: 作者: 灏天文库 转发
评论区 (0)
U