直接回答:pass@k 表示每道题采样 k 个候选解、至少一个通过全部测试用例的概率,是代码生成模型的标准指标(HumanEval、MBPP 都用它)。直接每题只采 k 次统计命中率方差极大,Codex 论文给出的无偏估计:每题采样 n ≥ k 个(常取 n=200),其中 c 个通过,则 pass@k = 1 - C(n-c, k) / C(n, k)。
展开解析:理解这个组合公式:C(n-c,k)/C(n,k) 是从 n 个样本里抽 k 个全部抽中失败样本的概率,1 减去它就是至少一个通过的概率。工程要点:采样必须用较高温度(0.2~0.8)保证多样性,贪心解码 k 个全一样,pass@k 就退化成 pass@1;n 要足够大,n=20 时 pass@100 的估计基本不可信;测试用例质量决定指标上限——HumanEval 原测试偏少,EvalPlus 补了 80 倍用例后多个模型分数掉 10+,说明原指标高估。解读指标时区分用途:pass@1 反映单次出活能力,最接近 Copilot 场景;pass@100 反映“上限潜力”,配合执行过滤的流水线(生成百个再跑测试筛)实际就在用 pass@k 红利。报告规范:必须注明 n、温度、模型版本,否则无法横向对比。新趋势是转向 SWE-bench 这类真实仓库任务,pass@k 思想不变但评测成本(要起容器跑仓库测试)高两个量级。
追问方向:温度对 pass@1 与 pass@100 的影响方向为何相反?功能正确性之外还该测什么?
(约 470 字)