9.3 评测的评测:元问题与反模式


9.3 评测的评测:元问题与反模式

本节摘要:评测体系跑得越久,越要警惕它自身的病变。三个反模式:过拟合评测集——开发者(或自动调优流程)向考卷优化,回归集分数一路上涨、线上纹丝不动,症状是"离线-在线相关性"衰减,解药是留出集隔离(考卷一分为二,日常只看一半)与定期换题(线上新样本滚动补入,老题按半衰期退役);指标 gaming——第 4.1 节 Goodhart 定律的工程重演:分数变成目标就不再是好度量,裁判学会偏爱长回答(5.2 长度偏见)就是被测系统与裁判"共谋"的开始,解药是多指标正交(质量、成本、延迟、安全互为制衡)与对抗性审计(专门开会问"怎么在不变好的前提下把分刷上去");回归集腐化——需求漂移让老题失效(全对但没人信)、规模膨胀(千条大集维护不动)、分布失配(考卷与线上渐行渐远,7.3 PSI 就是它的报警器),解药是季度体检:抽样人审、淘汰与重标(3.1/3.4 流程)、难度复盘(全对≠没事)。收尾是元评测清单四项:线上 badcase 覆盖率(考卷查全率)、裁判-人工 kappa(5.3 门禁的周期化)、离线-在线秩相关(8.1 晋级判据的回顾性验证)、门禁拦截有效率(拦下的真回归占比)——每年给评测体系做一次年检,结论回写 9.1 的变更 PR。

学习目标

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

  1. 说出三大反模式各自的症状、根因与解药。
  2. 设计留出集隔离与换题节奏,检测过拟合。
  3. 组织一次对抗性指标审计。
  4. 用四项元评测指标给评测体系做年检。

一、反模式一:过拟合评测集

症状曲线(示意):回归集通过率三个月从 85% 涨到 97%,线上负反馈率从 10% 涨到 11%——考卷分与真实表现脱钩。根因:每次 prompt 调优都以回归集分数为目标,几百次迭代下来,改动里混进了大量"只对这 200 条题有效"的特化。

解药 做法 成本
留出集隔离 回归集分两半:日常调优只看 70%,剩 30% 只在发版评审时跑一次 考卷量打折
滚动换题 线上新样本每月按 3.1 配方补入 5%~10%,等量老题退役 持续运维
变更审计 prompt diff 里出现"针对某条样本的特判"时,评审强制质疑 流程纪律
# holdout_gap.py(纯标准库,可直接运行) """过拟合哨兵:回归集分 vs 留出集分的差距监控(MOCK 数据演示)。""" import random def pass_rate(n: int, base: float, bump: float, seed: int) -> float: """MOCK:base=真实水平;bump=对考卷的特化增益(只作用于考卷)。""" rng = random.Random(seed) return sum(rng.random() < base + bump for _ in range(n)) / n if __name__ == "__main__": for month, tune in [(1, 0.00), (2, 0.02), (3, 0.05), (4, 0.12)]: main = pass_rate(200, 0.86, tune, seed=month) # 日常调优看的主集 hold = pass_rate(200, 0.86, 0.00, seed=month) # 留出集(发版才跑) flag = "★过拟合警报" if main - hold > 0.05 else "" print(f"第{month}月:主集 {main:.0%} vs 留出集 {hold:.0%}" f"(差 {(main - hold):+.0%}){flag}")

运行输出(实测,本机 Python 3.12):主集与留出集的差从第 1 月的约 0% 走到第 3 月的 +7% 首次触发警报,第 4 月拉大到 +17%——特化增益全留在了考卷上,真实水平纹丝不动。阈值(差 > 5pp 报警)为示意,按考卷规模与方差调整。

二、反模式二:指标 gaming

Goodhart 定律(第 4.1 节):分数变成目标,就不再是好度量。LLM 评测里的典型共谋链:

通过率当 KPI → 输出变保守(宁可拒答不可答错)→ 通过率涨、解决率跌 裁判分当 KPI → 回应变长(5.2 长度偏见)→ 裁判分涨、用户觉得啰嗦 延迟当 KPI → 缓存乱命中 / 简化回答 → 延迟降、质量跌(4.4 三角互斥)

解药两条:

  1. 多指标正交:任何单一指标都不配单独成为 KPI——质量(通过率 + 裁判分)、成本、延迟、安全四列并排,且至少一对天然互斥(4.4 延迟成本质量三角);考核表上四列并排,缺一不可;
  2. 对抗性审计(季度一次,观点节奏):一小时会议,议题唯一——"如果我只想把分刷上去、不把产品变好,我会怎么做?"把想出来的每条刷分路径记入 gaming-register.md,能堵的堵(改指标定义)、堵不住的盯(进观察线)。刷分思路举例:向裁判输出固定格式讨好词、把难题路由成"拒答"绕过 hard 子集、在回归集高频题型上过拟合。

⚠️ 对抗性审计的本质是承认:被测系统与评测体系是博弈关系。不主动想怎么骗自己,就会被自己骗。

三、反模式三:回归集腐化

症状 检测 解药
全绿无信息 连续 N 周通过率 100% 且无拦截 难度复盘:全对≠没事,补 hard 题(3.3)
老题失效 抽样人审发现期望答案过时 重标不删(3.1),升数据版本(3.4)
分布失配 考卷分布 vs 线上 PSI > 0.25(7.3 直接复用) 按 3.1 配方补新分布样本
规模膨胀 千条大集、跑一次一小时、没人敢动 分层瘦身回 300 条主集 + 远端全集(9.1 例外通道)

季度体检的动作清单(与 7.3 周度体检、8.3 演练同排一张日历):抽 30 条人审期望标签 → 查三项(PSI、通过率趋势、拦截率)→ 产出一份"考卷健康报告" → 变更走 9.1 的 PR 流程。

四、元评测清单:给评测体系做年检

元指标 定义 数据来源 及格线(示意)
badcase 覆盖率 线上事故样本中,考卷事先覆盖同类问题的比例 8.3 事故复盘 × 考卷检索 ≥ 60%,逐年上升
裁判-人工 kappa 多数投票 vs 金标准的 Cohen's κ(5.3 门禁周期化) 季度抽检 ≥ 0.6
离线-在线秩相关 多个版本的离线分排名与在线指标排名的秩相关(8.1 判据的回顾验证) 版本历史 ≥ 0.7
门禁拦截有效率 CI 拦下的 PR 中真回归占比(其余为误拦) 9.2 门禁日志 ≥ 50% 且误拦不上升

四项都不及格的体系,比没有评测更危险——它提供虚假的安全感(观点)。年检结论作为 9.1 的变更 PR 落地:换题、重标、改阈值、修裁判,评测体系自身也服从工程迭代律。

本节要点回顾

  1. 过拟合考卷:离线涨线上不涨是签名;留出集隔离 + 滚动换题 + 差距哨兵脚本。
  2. 指标 gaming:四指标正交并排 + 季度对抗性审计("我怎么刷分"议题化)。
  3. 考卷腐化:全绿无信息、老题失效、分布失配、规模膨胀——季度体检四查。
  4. 元评测四项:覆盖率、kappa、秩相关、拦截有效率——评测体系自己的年检。

至此全书闭环:从第 0 章的"评测是什么"到本节的"评测的评测",你手里已经有了回归集、指标、裁判、工具链、概率参数、线上防线与工程化设施。附录 A 汇总术语、附录 B 汇总工具速查、附录 C 给出八道练习题——去把这套体系搬到你自己的项目上吧。


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