本节摘要:评测体系跑得越久,越要警惕它自身的病变。三个反模式:过拟合评测集——开发者(或自动调优流程)向考卷优化,回归集分数一路上涨、线上纹丝不动,症状是"离线-在线相关性"衰减,解药是留出集隔离(考卷一分为二,日常只看一半)与定期换题(线上新样本滚动补入,老题按半衰期退役);指标 gaming——第 4.1 节 Goodhart 定律的工程重演:分数变成目标就不再是好度量,裁判学会偏爱长回答(5.2 长度偏见)就是被测系统与裁判"共谋"的开始,解药是多指标正交(质量、成本、延迟、安全互为制衡)与对抗性审计(专门开会问"怎么在不变好的前提下把分刷上去");回归集腐化——需求漂移让老题失效(全对但没人信)、规模膨胀(千条大集维护不动)、分布失配(考卷与线上渐行渐远,7.3 PSI 就是它的报警器),解药是季度体检:抽样人审、淘汰与重标(3.1/3.4 流程)、难度复盘(全对≠没事)。收尾是元评测清单四项:线上 badcase 覆盖率(考卷查全率)、裁判-人工 kappa(5.3 门禁的周期化)、离线-在线秩相关(8.1 晋级判据的回顾性验证)、门禁拦截有效率(拦下的真回归占比)——每年给评测体系做一次年检,结论回写 9.1 的变更 PR。
阅读完本节,你应当能够:
症状曲线(示意):回归集通过率三个月从 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 报警)为示意,按考卷规模与方差调整。
Goodhart 定律(第 4.1 节):分数变成目标,就不再是好度量。LLM 评测里的典型共谋链:
通过率当 KPI → 输出变保守(宁可拒答不可答错)→ 通过率涨、解决率跌 裁判分当 KPI → 回应变长(5.2 长度偏见)→ 裁判分涨、用户觉得啰嗦 延迟当 KPI → 缓存乱命中 / 简化回答 → 延迟降、质量跌(4.4 三角互斥)
解药两条:
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 落地:换题、重标、改阈值、修裁判,评测体系自身也服从工程迭代律。
至此全书闭环:从第 0 章的"评测是什么"到本节的"评测的评测",你手里已经有了回归集、指标、裁判、工具链、概率参数、线上防线与工程化设施。附录 A 汇总术语、附录 B 汇总工具速查、附录 C 给出八道练习题——去把这套体系搬到你自己的项目上吧。