开发人员使用多台屏幕工作

什么是 HumanEval?

HumanEval 的定义

HumanEval 是用于评估大语言模型 (LLM) 代码生成能力的基准。它由 OpenAI 开发,用于评估驱动该公司软件工程智能体 Codex 的 AI 模型的早期版本。

HumanEval 基准专为 Python 生成的代码而设计。它超越语法层面,验证所创建的代码既准确又能按预期运行。

该基准的框架可通过 OpenAI HumanEval GitHub 仓库访问。HumanEval 还有一个排行榜 ,对不同代码生成模型的性能进行排名,包括 Claude 系列、Kimi K2Google GemmaGeminiGPT-5 以及较旧的 GPT-4o 和 GPT-4,还有 IBM Granite 系列等。

数据集结构

HumanEval 数据集包含 164 个手写的编程问题及其相应的单元测试1这些问题衡量模型理解语言、操作字符串、搜索和排序的能力。它们还评估在简单数学和复杂算法方面的问题解决能力。这些编程任务类似于软件开发人员在技术面试中遇到的算法问题、编程练习或系统设计挑战。

每个代码生成任务包含以下组成部分:

  • 函数签名

  • 文档字符串

  • 函数体

  • 单元测试

函数签名

函数签名定义了函数的名称和参数。例如,下面是计算两个整数乘积的函数的签名:       

def multiply(a, b):

文档字符串

文档字符串是一个自然语言提示或描述,说明函数的预期行为、目标、输入和输出。这些注释概述了函数的功能,在生成 Python 代码时引导模型。

例如,乘法函数的文档字符串将是:

“””Complete the function that takes two integers as inputs
and returns their product as the output.
Assume the inputs are always valid.
Examples:
multiply(8, 2) must return 16
multiply(0, 777) must return 0
multiply(-32,64) must return -2048
“””

函数体

这是分配给模型生成的代码的段落。它包含根据函数签名和文档字符串对问题的实现解决方案。

单元测试

这些测试用例验证生成的代码在不同场景下的功能正确性。每个测试向函数输入特定输入,然后根据预期结果检查输出。

以下是乘法函数的一些示例单元测试:

def test_multiply():
    assert multiply(89, 0) == 0
    assert multiply(37, -5) == -185
    assert multiply(66, 17) == 1122

评估指标

许多代码 LLM 基准测试采用用于文本生成的方法,例如基于匹配的指标,将生成的代码样本与参考解决方案进行比较。但基于匹配的指标通常不考虑解决问题的多种方式,其中任何一种方式在功能上都可能与参考解决方案等效。

这就是为什么 HumanEval 基准转向了功能正确性,如果生成的代码样本通过了一组单元测试,则认为它是正确的。这种方法反映了开发人员通过在一系列单元测试中运行代码并确保其通过每一个测试来评估其代码成功与否的方式。

HumanEval 使用 pass@k 指标来衡量功能正确性。对于每个问题,模型生成 k 个代码样本。如果其中任何一个样本通过了单元测试,则认为该问题已正确解决。pass@k 指标估计了 k 个样本中至少有一个在功能上正确的概率。

AI 学院

面向企业的生成式 AI 的兴起

了解生成式 AI 的历史兴起及其对企业的意义。

HumanEval 的局限性

HumanEval 只是评估代码 LLM 的众多基准之一。软件开发团队仍然必须使用自己的内部测试来评估 LLM 生成的代码,并组合多个指标以更全面地了解模型性能。持续采用人在回路的方法对于帮助确保 AI 生成代码的准确性以及随时间微调和改进机器学习模型也仍然至关重要。

以下是 HumanEval 基准的一些局限性:

  • 数据污染

  • 缺乏真实世界的复杂性

  • 编码能力的指标狭窄

  • 编程语言支持受限

数据污染

数据集中的编程问题因其广泛可得,可能在模型训练期间已被模型遇到过。问题的数量也少到足以让代码生成模型可能全部记住它们。

缺乏真实世界的复杂性

HumanEval 中的代码生成任务通常属于易到中等难度范围。然而,真实世界的编程任务往往更复杂,包括与多个系统的 API 集成、庞大的代码库和大型数据集。

该基准也未能反映真实世界软件开发环境和工作流中常见的错综复杂的状态:不断变化的用例、不完整的测试用例、不一致的需求、旧版代码或模糊的规范,等等。

编码能力的指标狭窄

编程不仅仅是功能正确性。例如,HumanEval 没有考虑效率。这意味着 LLM 生成的准确且按预期工作的代码,在性能方面可能不是最高效和最优化的解决方案。

该基准也没有考虑编程最佳实践,例如编码约定、风格标准、错误处理、输入验证和安全编码。

编程语言支持受限

HumanEval 是专门为开源 Python 编程语言量身定制的。使用其他语言生成的源代码必须使用其他基准进行评估。

HumanEval 的变体

该基准有几个不同的版本,解决了其部分局限性:

  • HumanEval+
     

  • HumanEval-V
     

  • HumanEval-X
     

  • HumanEvalNext

HumanEval+

HumanEval 中的每个编程问题平均约有 7 到 8 个单元测试。1HumanEval+  显著提高了测试覆盖率,每个问题平均达到 764 个测试,实现更严格的评估。2

HumanEval-V

HumanEval-V  在其前身的基础上构建,为多模态 AI 模型(特别是视觉语言模型,VLM)创建了一个基准。它评估 VLM 在编程环境中理解图表、图示和图形并对其进行推理的能力,例如基于算法的流程图或矩阵变换生成代码。

HumanEval-X

HumanEval-X  将原始基准扩展到包括 C++、Go、Java 和 JavaScript 编程语言。其 820 个任务可用于评估代码生成和代码翻译能力。

HumanEvalNext

HumanEvalNext 对 HumanEval 进行了改进。它通过类型注解(指示函数参数和返回值数据类型的编程语法)添加了更多上下文,包含了更多边缘情况,引入了更多单元测试,并提高了问题的难度。3

作者

Rina Diane Caballar

Staff Writer

IBM Think

Cole Stryker

Staff Editor, AI Models

IBM Think

相关解决方案
IBM Bob

借助您的 AI 合作伙伴 Bob,加速软件交付,实现安全的意图感知型开发。

深入了解 IBM® Bob
AI 编码解决方案

利用可信的 AI 驱动型工具优化软件开发工作,最大限度地减少编写代码、调试、代码重构或代码补全的时间,从而拓展创新空间。

深入了解 AI 编码解决方案
AI 咨询与服务

通过增加 AI 重塑关键工作流程和运营,最大限度提升体验、实时决策能力和商业价值。

深入了解 AI 咨询服务
采取后续步骤

利用生成式 AI 和高级自动化技术加速创建企业就绪代码。Bob 通过建模增强开发人员技能,简化并自动执行开发与现代化工作。

  1. 了解 IBM Bob
  2. 深入了解 AI 编码解决方案