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 Sonnet | 92.0% | 2024.06 |
| GPT-4o | 90.2% | 2024.05 |
| GPT-4 | 87.1% | 2023.03 |
| Claude 3 Opus | 84.9% | 2024.03 |
| DeepSeek Coder V2 | 90.2% | 2024.06 |
| Llama 3 70B | 81.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
----