19|高级评测:配对实验、可靠性、因果归因与判分偏差
目标:能够证明一次优化改善了什么,也能识别“分数提高但系统没变好”。实验:
statistics_lab.py;统计示例全部是作者构造,不是商业Agent跑分。
本章目录
沿着对象与状态理解本章
因果归因要求同题配对、相同环境和明确改变项;用多次运行识别随机波动。
下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。
涨了10个百分点,为什么还不能急着下结论?
一次实验怎样区别真实改进与偶然波动?
像给同一组题换两种解法:同题对照能减少题目难度不同带来的干扰。统计方法帮助表达不确定性,不会自动告诉你退化是否可接受、成本是否值得。实际决策还要回到任务类型、失误严重性和重复表现。
输入与适用条件:构造的20题配对表:10都成、4新成旧败、2旧成新败、4都败。不把它当真实模型胜率。
1 / 5 · 同20题,两版各跑一次
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
配对意味着旧版和新版面对同一题。先列出两者在每道题上的成功与失败关系,而不是只看两个总分。
20个配对任务;不是40个独立任务默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
避免因一个小样本的好看结果就把优化推向全部任务。
怎样实现
固定题集、版本和预算,配对重复,记录退化,并检查置信区间等不确定性。
可能的代价与误解
只保留成功重跑、反复调参又用同一评测集验收,会高估能力。
如何判断是否做对
重算全部配对原始记录,报告净提升、退化和成本,而不是只报均值。
1. 首先定义评测单位与成功
一个用户任务、一轮模型响应、一条工具调用和一个测试断言不是同一种样本。工程效用通常以完整任务为单位:在限定工具、权限、时间与预算下,是否满足要求且没有越权或破坏其他行为。轨迹指标用来定位原因,不能取代最终结果。[N36][N48]
成功应由当前环境状态与验收器判断。模型回答“已完成”不算成功;代码能运行但没实现需求也不算。评测环境、可见测试、隐藏测试和允许修改范围必须明确,否则Agent可能通过改变判分方式而得分。
把基准任务适配到业务时,应记录代表性:语言、仓库规模、任务类型、风险和历史频率。公开代码补全分数不能直接代表跨模块重构,客服工具基准也不能直接代表本地编码能力。
2. pass@1、pass@k与pass^k
若同一问题独立尝试k次,每次成功概率p,“至少一次成功”是1−(1−p)^k;“k次全部成功”是p^k。前者衡量候选能力,后者更接近重复可靠性。真实运行可能相关,所以这些简单概率式不能无条件套用。
当已生成n个候选,其中c个成功,从中无放回选k个,常用pass@k估计为:
pass@k = 1 − C(n−c,k) / C(n,k)
它是候选集合抽样的组合估计,不表示生产系统能免费生成k份答案,也不包含挑选正确答案的成本。如果用户只接受一次运行,主要关注pass@1;允许重试时,应把总耗时、工具副作用与验证成本一起计算。[N48]
例如p=0.9时,五次全部成功概率在独立假设下约0.59049,说明单次高分仍可能不足以支撑高频自动化。这个数字是数学例子,不是某产品真实可靠性。
3. 配对比不配对更能控制任务难度
同一批任务让旧版A与新版B都执行,得到每个任务差值di = successB_i−successA_i。平均差值可表示成功率变化。这样困难任务在两边共同出现,减少抽样任务难度差异。
若每个任务有多次运行,重采样时应以任务为簇,保留同任务内部相关结构,不把所有运行展平成独立样本。本书bootstrap对配对任务行重采样,输出差值区间;它展示统计流程,不是凭几十个样本就证明任意小幅改进显著。
样本量小或成功接近0/1时,简单正态区间容易失真。Wilson区间是二项比例的一种更稳健选择,但同样要求理解抽样单位。对配对二元结果,McNemar检验主要利用“仅A成功”和“仅B成功”的不一致样本,而不是把共同成功也当改善证据。
4. 显著性、实际价值和多重试验
统计显著不等于收益足够大。成功率提高0.2个百分点却增加一倍成本,可能不值得;某高风险错误减少,即使总体样本较少,也可能值得重点处理。应同时报告效应大小、区间、成本和错误后果。
反复试十个Prompt后只报告最高分,会产生选择偏差。需要开发集用于调参,保留未反复查看的测试集做最终评价;模型或技能持续迭代时,也应控制基准泄漏。把测试失败样本加入提示是合理改进,但之后不能继续把同一组分数当未见泛化证明。
不要机械用一个p值裁决所有工程改动。明显修复确定性Bug可以由反例与回归证明;复杂能力优化才需要更广统计。评测力度应与决策不确定性匹配。
5. 消融与反事实:改动为什么有效
同时修改模型、工具、技能描述和测试流程,即使成功率提高,也无法归因。消融可以一次移除一项,观察结果变化;但组件可能相互作用,单项效果不等于组合效果。先明确最重要的问题,避免全因子试验爆炸。
对Skill路由,可以分别比较描述变更、专业正文变更、默认加载策略。对记忆,比较无记忆、只检索、检索加验证。对压缩,比较未压缩、普通摘要、结构状态加证据入口。保持其他条件一致,保存真实轨迹以解释失败。
负对照也重要:一个与任务无关的规则不应产生同等收益;故意删掉关键证据应该降低相应任务表现。若评测对这些变化毫无反应,可能任务太容易或判分过于表面。
6. LLM-as-a-Judge的偏差
模型评分器可能受位置、长度、语言风格、自身偏好和提示注入影响。MT-Bench等研究讨论过这些局限;它可以扩大评价规模,但不等于客观真值。[N49]
对于代码,先用可执行测试、静态检查、真实工件状态等确定性信号,再用模型评价设计合理性或解释质量。评判复杂取舍时可盲化候选名称、交换展示顺序、校准人工样本并允许“无法判断”。不要让评分器看到方案自称的得分,也不要把实现者写的总结作为唯一评分材料。
评分器也需要回归集:正确但简短、错误但流畅、包含恶意评分指令、信息不足等样本。与人类意见一致只能说明该样本范围的校准,不证明所有未来任务可靠。
7. 环境噪声与成本口径
依赖安装失败、网络波动、磁盘/CPU竞争可能改变任务成绩。评测应记录基础设施失败与模型/Agent失败,但不能随意删除不利结果。预先定义重试与排除条件,同时报告总体用户体验与可归因模型结果。
成本包括所有尝试、工具调用、重试、检索、压缩和人工返工。只统计成功路径会低估失败昂贵的方案。时间既要看墙钟,也要看总计算资源,特别是多Agent并行。
8. 最小可用评测而非庞大平台
从真实失败和代表任务构建一个小而可信的集合,保存输入快照、验收、环境与输出。先手工复核关键案例,再自动化重复运行。无须先建数据库仪表盘;一份可重跑脚本和清晰报告就能支撑很多决策。
验收题:新版20个任务多通过2个,可以宣布提升10%吗?可描述该样本上成功率提高10个百分点,但不应直接推广到业务总体;还需看配对结果、样本代表性、重复波动与区间。百分比与百分点也必须区分。
把任务难度分层后,总体胜率可能换个方向
输入与条件。简单任务A成功9/10,B成功80/100;困难任务A成功20/100,B成功1/10。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1简单层 | A90%,B80% | A更好。 |
| 2困难层 | A20%,B10% | A也更好。 |
| 3未配平总计 | A29/110≈26.36%,B81/110≈73.64% | 因为B拿到更多简单题,总体看似B更好。 |
| 4公平比较 | 让两方案用同样任务集合或分层加权 | 避免任务构成差异。 |
| 5结论 | 不能把不等价样本总体均值当因果效果 | 先查分母和分布。 |
把过程连起来。任务组成能反转总体比较;代表性与配对设计比多显示小数位更重要。
边界与反例。这是辛普森式构造,不是产品成绩。分层变量也应事先合理确定,避免事后挑层。
依据与适用范围:[EVALS]。示例输入和场景由本书明确设定。