← 返回题库
第 138 题 · 评测与安全 · 简单

代码模型的 pass@k 应该如何计算,为什么不能只看 pass@1?

岗位专项 这代表什么?
✓ 资料核验 来源说明:公开面经题库主题;公司归属未独立核验,技术答案依据原论文或官方文档整理
Code Evaluationpass@kHumanEval
评论与补充 ↓
口述训练

先用自己的话答,再看参考说法

60 秒是练习上限,不是必须凑满。原理题讲清因果,设计题讲清约束,项目题只讲真实证据。

别照着背。参考说法只用于对照;直接回答问题,简单题说清楚就收尾。项目题只用自己的经历和数字。

面试时怎么答

先解释 pass@1 与 pass@k 的问题定义,再写出从 n 个样本、c 个通过样本估计 pass@k 的组合数公式。要指出不能简单拿前 k 个结果,因为采样顺序和有限样本会带来偏差。面试官继续问评测可信度时,重点谈测试覆盖、沙箱隔离、超时以及固定温度与采样预算。

可以这样答:

pass@1 衡量一次生成就通过测试的概率,pass@k 衡量给模型 k 次独立机会时至少一份通过的概率。若先采样 n 份,其中 c 份通过,常用无偏估计 \(1-\frac{\binom{n-c}{k}}{\binom{n}{k}}\),而不是随意取前 k 份。这个指标依赖采样温度、测试用例和沙箱规则,测试覆盖不足时,代码即使通过也不代表真实正确。

核心回答

\(\operatorname{pass}@k\) 衡量模型为同一道题生成 \(k\) 个候选时,至少有一个通过全部测试的概率。它适合用户或系统可以采样多个候选再验证的代码生成场景;\(\operatorname{pass}@1\) 只衡量一次生成,因此不能描述多次采样带来的覆盖能力。

若对一道题实际采样 \(n\) 个候选,其中 \(c\) 个正确,且 \(n \ge k\),HumanEval 使用的无偏估计为:

\[\widehat{\mathrm{pass@}k} = 1 - \frac{\binom{n-c}{k}}{\binom{n}{k}}\]

含义是从 \(n\) 个候选中无放回选 \(k\) 个,用 1 减去“全部选到错误候选”的概率。最终通常对多道题的估计取平均。

展开说明

不能只生成 \(k\) 个样本并用“是否至少一条正确”的单次结果稳定估计概率,因为方差很大;通常先生成 \(n\) 个、再估计不同 \(k\)。比较模型时必须固定采样温度、最大长度、提示格式、\(n\) 和测试环境,否则 pass@k 变化可能来自采样预算。

通过测试不等于代码完全正确。测试集可能缺少边界条件,代码也可能依赖网络、消耗过多资源或包含恶意副作用。反过来,环境版本、超时或非确定测试也可能把正确代码判错。

\(\operatorname{pass}@k\) 越大通常越高,所以报告多个 k 时要同时说明总推理和执行成本。一个必须一次返回正确答案的产品不能用高 \(\operatorname{pass}@100\) 掩盖低 \(\operatorname{pass}@1\)。

工程实践

在无网络、低权限容器中编译和运行候选,设置 CPU、内存、进程、文件和时间限制。固定依赖与随机种子,保存编译错误、运行时错误、超时和失败用例。去除候选去重规则带来的口径差异,并检查基准题或测试是否出现在训练数据中。报告 \(\operatorname{pass}@1\)、目标 \(\operatorname{pass}@k\) 以及每题平均生成和验证成本。

常见追问

  1. \(\operatorname{pass}@k\) 为什么随 k 增大? 候选更多时至少命中一个正确解的机会不会降低,但成本也会上升。
  2. 为什么要求 \(n \ge k\)? 估计式是在 \(n\) 个已采样候选中选择 \(k\) 个,候选数不足时组合项没有定义。
  3. 测试全过是否证明程序正确? 不能,只能证明通过当前有限测试;隐藏边界、安全和性能问题仍可能存在。
  4. 为什么代码执行要沙箱? 模型生成的是不可信程序,可能读取文件、联网、Fork 或消耗资源。

一句话复习

pass@k 是“k 个候选至少一个通过测试”的概率估计,必须连同采样预算、测试覆盖和安全沙箱一起解释。

参考资料

无需账号 · 原地交流

评论与补充

评论会直接显示在这道题下面。可以写自己的答法、继续追问或指出错误,不需要 GitHub 账号,也不会跳转到 Issue;内容会公开,请勿填写个人隐私、公司机密或受保密约束的材料。

正在加载评论…