CRUXEval 测试集档案
CRUXEval 测试集中文档案:给段代码,让 AI 在脑子里跑一遍说出结果 由 Meta FAIR × MIT CSAIL(Alex Gu 等),2024-01(arXiv:2401.03065) 组织,包含测试方法、典型任务、分数解读、沿革与局限。
- CRUXEval
- CRUXEval(代码推理)
- Meta FAIR × MIT CSAIL(Alex Gu 等),2024-01(arXiv:2401.03065)
已发布事实
- 题量
- 800 个 Python 函数(3–13 行),各配一对输入输出
- 发布
- 2024-01,Meta FAIR × MIT CSAIL(arXiv:2401.03065)
- 计分方式
- 输入预测与输出预测两个任务各自 pass@1,答案真实执行断言判定
- 数据公开性
- 公开,GitHub 与 HuggingFace 可下载,MIT 协议
- 出题方式
- Code Llama 34B 生成候选,按「优秀程序员约一分钟可心算」筛选
- 衍生版本
- CRUXEval-X:第三方扩展到 19 种编程语言
它测什么
CRUXEval(Code Reasoning, Understanding and eXecution Evaluation)由 800 个 3–13 行的短 Python 函数组成,每个函数配一对输入输出,派生出两个任务:给函数和输入预测输出(CRUXEval-O),或给函数和输出反推一个能产生它的输入(CRUXEval-I)。它刻意不考写代码,而是考「在脑内模拟程序执行」的推理能力——一个模型 HumanEval 分数再高,也未必算得清一段简单代码跑出来是什么。设计动机正是发现许多模型在生成榜上刷分,却并没有同步提升对代码执行的理解。
怎么测
两个任务都按 pass@1 计分:模型给出答案后,评测脚本把答案放进 assert 里真实执行,断言成立才算对,不存在模糊判分。数据是「生成加筛选」造出来的:先用 Code Llama 34B 批量生成候选函数和输入、真实运行得到输出,再筛到「优秀人类程序员不借助纸笔约一分钟能做出来」的难度,最后随机取 800 题。
分数怎么看
发布时最强的 GPT-4 也只有 67%(输入预测)和 63%(输出预测),而吃了一大顿代码语料的 Code Llama 34B 仅 47% 和 44%——一半以上的简单执行题做错,这正是论文想暴露的问题。输入反推通常比正向预测更难,两个数都高才说明模型真在「跑」代码而不是背模式。
局限
题目由 Code Llama 34B 生成而非人工编写,风格偏「机器学习感」,且只覆盖 Python 单函数、无第三方库的场景,不能外推到工程能力。另有第三方做的 19 语言扩展版 CRUXEval-X,引用分数时注意区分原版与扩展版。
典型任务
一道典型的输入预测题长这样:函数是 `f = lambda nums: nums + [nums[i % 2] for i in range(len(nums))]`,已知输出是 `[-1, 0, 0, 1, 1, -1, 0, -1, 0, -1]`,模型要反推出输入 `[-1, 0, 0, 1, 1]`。输出预测则反过来:给出 `f(某个具体输入)`,要求一步步心算列表拼接、下标取模后说出返回值。题目都不长,但绕一个弯就出错,非常像面试里的「读代码说结果」。
沿革
- 2024-01:论文与数据集发布(Alex Gu 等),提出「生成加筛选」的可复制出题配方
- 2024-01:首批实测 20 个代码模型:GPT-4 直接提问仅 67%/63%,加思维链提升到 75%/81%
- 2024 年起:出现多语言扩展 CRUXEval-X(19 种语言)等后续工作,「脑内执行」的考法被广泛沿用