Chen 等,2021,随 Evaluating Large Language Models Trained on Code 发布。衡量「根据文档字符串合成 Python 函数」能否通过单元测试,而不是与参考解是否相似。
数据与评测框架:openai/human-eval。同篇论文里的模型见 Codex。原文:arXiv:2107.03374。
Chen 等,2021,随 Evaluating Large Language Models Trained on Code 发布。衡量「根据文档字符串合成 Python 函数」能否通过单元测试,而不是与参考解是否相似。
数据与评测框架:openai/human-eval。同篇论文里的模型见 Codex。原文:arXiv:2107.03374。
评测集随 Codex 论文一次交出。这里只转述 HumanEval 这张考卷;模型训练与限度见 Codex 论文。Chen 等,Evaluating Large Language Models Trained on Code,2021-07。arXiv:2107.03374。仓库:https://github.com/openai/human-eval。
代码生成原先常用与参考解的精确或模糊匹配(BLEU)。匹配无法覆盖「功能等价但写法不同」的大空间。本文改用功能正确:样本通过一组单元测试即算对。这与测试驱动开发、合并代码前过单测的工程习惯一致。
为此手写 164 道带单测的 Python 题,覆盖语言理解、算法与简单数学,部分接近初级面试题。每题含签名、文档字符串、函数体与若干单测,平均 7.7 个测试。必须手写:模型训在 GitHub 很大一部分上,网上已有各种题解。
每题生成 (k) 个样本,任一通过则该题算解出,再报解出比例。直接用 (k) 个样本方差大。改为每题生成 (n\ge k) 个(文中 (n=200),(k\le 100)),设 (c) 个通过,用无偏估计
[ \mathrm{pass@}k=\mathbb{E}_{\text{Problems}}\left[1-\frac{\binom{n-c}{k}}{\binom{n}{k}}\right] ]
用 (1-(1-\hat p)^k) 是有偏的。文中还显示:功能不等价的错误解与正确解的 BLEU 分布大量重叠,优化 BLEU 不等于优化功能正确。
12B Codex 单样本解出 28.8%;GPT-3 约 0%;GPT-J 11.4%。每题 100 个样本,Codex 可解出约 70%。监督微调后的 Codex-S,pass@1 约 37.7%,pass@100 约 77.5%。这些数字属于模型对照,不是考卷自己的属性。
不是仓库级、多文件、带真实 GitHub issue 的考试。164 道独立函数,尺度故意很小,为的是可复现、可自动判。执行在 gVisor 沙箱里,是为了安全地跑生成代码。
2021 年若只用 BLEU,分不清「形似」与「功能正确」。HumanEval 用手写题目与单元测试定义对错,并给出无偏的 pass@(k)。手写是为了减少训练语料泄漏。多采样(pass@100)被写成对「尝试多种写法」的近似。同日交出的模型见 Codex。
评测从「形似」转为「功能正确」。后来的 MBPP、LiveCodeBench 沿用功能正确;产品里的「再生成一次」与 pass@(k) 是同一逻辑。泄漏与手写基准这一问题,一直传到 SWE-bench 的去污染讨论。
它覆盖的是函数级合成,不是在仓库里修改缺陷、提交 PR。164 道题远窄于 2023 年的 SWE-bench。HumanEval 通过,不代表能修真实 issue。
对 Agent 循环而言,它提供的是完成谓词的早期形态:行动的反馈可以是测试退出码,而不只是人看一眼。循环本身不在这张考卷上。考卷没有决策核心,没有多步环境,也没有开放目标。这条路一直走到 2023 年的 SWE-bench。
时间线标成底层能力里的首证、标准。仓库级的完成谓词要到 SWE-bench。