起源与目标
HumanEval是由 OpenAI于2021年开发的,用于评估大型语言模型(LLMs)的代码生成能力。随着像 Codex(GitHub Copilot的前身)这样的模型展现出非凡的软件编写能力,创建一种标准化的评估方法变得至关重要。HumanEval 的目标是测试模型能否根据自然语言描述(即文档字符串)正确地生成一段代码。
工作原理
该基准测试包含164个原创的编程问题。每个问题包括以下内容:
- 一个函数签
- 一个文档字符串,描述函数应完成的功能
- 若干单元测试,用于验证代码的正确性
模型的任务是完成函数体。主要的评价指标是 pass@k,它衡量在 k 个生成的解决方案中至少有一个能通过单元测试的比例。例如:
- pass@1表示第一个生成的解决方案是正确的
- pass@100表示模型有100次尝试机会
为什么重要:优势与影响
HumanEval 在 AI 编码助手的开发过程中发挥了重要作用。
-
功能正确性
它不仅测试代码的语法正确性,还测试代码是否能按预期运行,这是现实场景中的关键需求。 -
语言无关的逻辑推理
尽管问题是用 Python 编写的,但它们测试的是普遍的编程逻辑,例如数据结构处理、算法思维以及边界情况处理能力。 -
直接的产品影响
HumanEval 的改进直接关系到 GitHub Copilot、Amazon CodeWhisperer 等 AI 驱动的开发者工具的质量提升。
局限性与缺点
HumanEval 的主要局限性在于其范围:
- 问题规模较小,自包含,且偏向算法性质。
- 它并未测试模型处理大型代码库、理解复杂架构或从事高层次设计工作的能力,而这些在软件工程中至关重要。
- 模型可能在这些“代码片段”问题上表现出色,但未必能理解实际项目的广泛上下文。
当前进展
早期的模型甚至难以解决少量问题。而如今,顶尖模型的 pass@1得分已超过90%,表明它们在这一特定任务上已达到精通水平。这推动了更高级的代码基准测试的发展,例如 MBPP(Mostly Basic Programming Problems)和更大规模的项目型评估。