改 A 坏了 B,是最难发现的一类退化
评测集通常围绕"本次改动"设计 ✗ —— 于是回归(改 A 影响 B ✔)很难被发现 ✔:
分类准确率涨了 ✔,但摘要变啰嗦了 ✔;检索召回涨了 ✔,但答案引用率掉了 ✔。
要专门做"横向回归" ✔:改一处、跑全套 ✔。
一、三件事要同时看
① 目标指标(本次想改的)—— 是否变好
② 守卫指标(不想动的)—— 是否没变坏
③ 全局指标(整体)—— 是否有意外变化
第 ② 项最容易被省 ✗ → 但它正是"改 A 坏 B"的探测手段 ✔。
做法 ✔:给每个功能指定 2~3 个守卫指标 ✔(例如"摘要功能的输出长度中位数" ✔),
每次改动都检查它们是否在范围内 ✔。
二、评测集的"横向覆盖"
- 一个评测集覆盖多个功能(而不是每个功能一个孤立的集 ✔);
- 跨功能样本(同一批输入,看多个功能的输出 ✔);
- 共享组件改动要跑全量(改组装器/改解析器/换模型 ✔ —— 影响面最大 ✔)。
判断标准 ✔:这次改动被哪些功能共用 ✔?
共用的越多 → 跑得越全 ✔。
三、三个实操建议
- 冒烟集要覆盖所有功能(每功能 3~5 条 ✔,1 分钟跑完 ✔);
- 完整集按"改动影响面"选(不是每次全跑 ✔ —— 见评测接进 CI ✔);
- 记录"这次跑了哪些集、结果如何" ✔(见发布说明 ✔)。
四、三个反模式
- 只测改动的那个功能 ✗(回归漏掉 ✔);
- 守卫指标没有阈值 ✗("变差一点点没关系" → 累积退化 ✔);
- 改动影响面靠猜 ✗(应该看依赖关系 ✔)。
五、一条判据
上次改动后 ✔,除了目标指标 ✔,你还看了哪几个守卫指标 ✔?
说不出,说明回归防护还只有"目标指标"一层 ✗。