测试集:MultiPL-E
| 名称 | MultiPL-E |
|---|---|
| 类别 | coding |
| 主办方 | Northeastern 等(Cassano et al.),arXiv:2208.08227 |
| 开源状态 | open |
| 网址 | 官方页面 |
multipl-e18 种语言、HumanEval/MBPP 机器翻译、编译器式翻译器扩展、逐语言横向对照、测多语言偏科
测试集content/benchmarks/multipl-e.md
一句话
把 HumanEval 机器翻译成 18 种语言再来一遍
测什么
2022 年发布(NeurIPS 2023 正式收录),回答的问题是:代码模型在非 Python 语言上还灵不灵?做法是为 HumanEval 和 MBPP 写一套「编译器式」的翻译器,把题目、单元测试和类型约定逐语言改写,一键扩展到 18 种编程语言,涵盖 Java、C++、JavaScript、TypeScript、Go、Rust、Swift、Ruby、PHP、Bash、R、Julia、Lua、Perl、Scala 等不同范式与冷热程度的语言。它是最早的大规模多语言代码生成基准,让「模型是不是 Python 偏科生」第一次有了量化答案。
怎么测
每种语言的版本与原版题型一致:给函数签名和注释说明,模型补全函数体,跑该语言的原生单元测试,按 pass@k 计分。翻译不是逐字直译——翻译器要处理各语言的类型系统、命名习惯、测试框架差异(比如把 Python 的 doctest 转成 Go 的 testing 包断言),保证题意在目标语言里成立且可自动判分。加一门新语言只需为它写一个翻译器,所以这套东西可扩展性很强。
典型任务
同一道题在不同语言里长什么样:HumanEval 里一道「判断列表中是否存在两数之差小于阈值」的 Python 题,到了 MultiPL-E 的 Go 版本里,函数签名变成 Go 风格、样例断言变成 Go test 代码,模型要用 Go 的切片和循环写出同样逻辑的解法;到了 Rust 版本又换一套所有权和类型写法。164 道题 × 18 种语言,就构成了一张「同一模型、逐语言对照」的成绩单。
分数怎么看
核心看法是横向对比同一模型在各语言上的 pass@k:差距越大偏科越严重。论文里的发现就很有意思——Codex 在其中好几种语言上的表现追平甚至超过 Python,说明强模型的代码能力不完全押在单一语言上;而冷门语言(训练语料里代码少的)普遍得分更低,语言热度与分数正相关。
含金量与局限
题目由机器翻译而来,非 Python 语言的题面质量依赖翻译器水准,个别语言的习语转换未必地道。另外它常与 EvalPlus 连写为一个标签,注意二者是独立基准:一个管多语言,一个管测试加严(理论上可以叠加,但原生 MultiPL-E 沿用的还是母本的弱测试)。
冷知识
最反直觉的发现是:Codex 在好几种「客场」语言上追平甚至超过了它的主场 Python——强模型的代码能力并不押注单一语言;真正拉开差距的是语言的冷热,训练语料里代码越少的语言,得分越低。
数据来源
本页由仓库 content/benchmarks/multipl-e.md 初始化。后续修订通过公开审核队列发布。