跳转到内容

测试集:MultiPL-E

来自封神榜 Wiki
名称 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 初始化。后续修订通过公开审核队列发布。