HumanEval基准测试

Code Generation Benchmark for LLMs

概述

HumanEval是OpenAI于2021年发布的代码生成评估基准,专门用于评估大语言模型的编程能力。 包含164道手工编写的Python编程题,要求模型根据函数签名和文档字符串生成正确的函数实现。

核心特点:164道题、Python语言、功能正确性评估、Pass@k指标。

题目格式

from typing import List

def has_close_elements(numbers: List[float], threshold: float) -> bool:
    """
    Check if in given list of numbers, are any two numbers
    closer to each other than given threshold.
    
    >>> has_close_elements([1.0, 2.0, 3.0], 0.5)
    False
    >>> has_close_elements([1.0, 2.8, 3.0, 4.0, 5.0, 2.0], 0.3)
    True
    """
    # 模型需要生成这里的内容
    for i in range(len(numbers)):
        for j in range(i + 1, len(numbers)):
            if abs(numbers[i] - numbers[j]) < threshold:
                return True
    return False

评估指标

Pass@k

Pass@k是最常用的评估指标,表示在k个生成结果中至少有一个通过所有测试用例的概率:

# Pass@k 计算公式

Pass@k = 1 - C(n-c, k) / C(n, k)


# n: 生成总数

# c: 通过数量

# k: 选择数

常用指标

  • Pass@1:单次生成通过率,最常用指标
  • Pass@10:10次尝试中至少通过一次的概率
  • Pass@100:100次尝试中至少通过一次的概率

模型表现

模型Pass@1发布时间
Claude 3.5 Sonnet92.0%2024.06
GPT-4o90.2%2024.05
GPT-487.1%2023.03
Claude 3 Opus84.9%2024.03
DeepSeek Coder V290.2%2024.06
Llama 3 70B81.7%2024.04

评估方法

# 使用HumanEval评估
from human_eval.data import write_jsonl, read_problems
from human_eval.evaluation import evaluate_functional_correctness

# 读取问题
problems = read_problems()

# 生成代码
samples = []
for task_id, problem in problems.items():
    prompt = problem["prompt"]
    # 使用模型生成代码
    completion = model.generate(prompt)
    samples.append({
        "task_id": task_id,
        "completion": completion
    })

# 保存结果
write_jsonl("samples.jsonl", samples)

# 评估
results = evaluate_functional_correctness("samples.jsonl")
print(f"Pass@1: {results['pass@1']}")

难度分布

难度级别题目数量典型任务
简单~40基础函数、简单算法
中等~80数据结构操作、字符串处理
困难~44复杂算法、数学计算

相关基准

MBPP

Mostly Basic Python Problems,入门级Python题目。

APPS

竞赛级编程题目,难度更高。

CodeContests

DeepMind发布的编程竞赛数据集。

HumanEval+

扩展测试用例,更严格的评估。

局限性

  • 仅支持Python语言
  • 题目数量有限
  • 可能存在数据污染
  • 不测试代码效率
  • 不测试代码安全性

参考资料

  • Evaluating Large Language Models Trained on Code (Chen et al., 2021)
  • HumanEval GitHub Repository
  • OpenAI Codex Paper
----