HumanEval
HumanEval
LLM의 코드 생성 능력을 평가하는 벤치마크. OpenAI가 개발.
HumanEval
LLM의 코드 생성 능력을 평가하는 벤치마크. OpenAI가 개발.
HumanEval은 OpenAI가 2021년 Codex 논문과 함께 공개한 코드 생성 능력 평가 벤치마크입니다. 164개의 Python 프로그래밍 문제로 구성되어 있으며, 함수 시그니처와 docstring을 보고 올바르게 작동하는 코드를 생성할 수 있는지 평가합니다.
평가 지표로는 pass@k를 사용합니다. 모델이 k개의 코드 샘플을 생성했을 때 적어도 하나가 모든 테스트 케이스를 통과할 확률을 의미합니다. 일반적으로 pass@1(첫 시도에 성공), pass@10, pass@100을 보고합니다.
HumanEval 문제는 "두 수의 합 구하기" 같은 기초적인 것부터 "문자열 파싱", "리스트 조작" 등 다양한 난이도를 포함합니다. 각 문제에는 숨겨진 테스트 케이스가 있어 정확한 구현을 검증합니다.
현재 최신 LLM들은 HumanEval에서 90% 이상의 pass@1을 기록합니다. 이에 따라 HumanEval+, MBPP, SWE-bench 등 더 어려운 벤치마크들이 등장했습니다. 하지만 HumanEval은 여전히 코드 생성 모델의 기본 역량을 빠르게 확인하는 표준으로 사용됩니다.
from human_eval.data import read_problems
from human_eval.evaluation import evaluate_functional_correctness
import openai
# HumanEval 벤치마크 실행 예제
def run_humaneval_benchmark(model_name="gpt-4"):
# 1. 문제 로드
problems = read_problems()
# 2. 각 문제에 대해 코드 생성
samples = []
for task_id, problem in problems.items():
prompt = problem["prompt"]
# LLM으로 코드 생성
response = openai.chat.completions.create(
model=model_name,
messages=[{
"role": "user",
"content": f"Complete the following Python function:\n\n{prompt}"
}],
temperature=0.2,
max_tokens=500
)
completion = response.choices[0].message.content
samples.append({
"task_id": task_id,
"completion": completion
})
# 3. 결과 저장
with open("samples.jsonl", "w") as f:
for sample in samples:
f.write(json.dumps(sample) + "\n")
# 4. 테스트 실행 및 pass@k 계산
results = evaluate_functional_correctness(
sample_file="samples.jsonl",
k=[1, 10, 100]
)
print(f"pass@1: {results['pass@1']:.2%}")
print(f"pass@10: {results['pass@10']:.2%}")
print(f"pass@100: {results['pass@100']:.2%}")
return results
"GPT-4o가 HumanEval pass@1 92%인데 Claude 3.5 Sonnet은 94%예요. 단, HumanEval은 비교적 쉬운 문제라서 실제 코딩 능력 차이는 SWE-bench로 더 정확히 볼 수 있습니다."
"HumanEval의 pass@k 지표는 샘플링 기반 평가입니다. pass@1이 낮아도 pass@100이 높으면 모델이 정답을 알긴 하지만 일관성이 떨어진다는 의미예요. 프로덕션에서는 pass@1이 중요합니다."
"코드 생성 모델 파인튜닝 후 HumanEval로 먼저 검증해보세요. 기존 모델 대비 pass@1이 떨어지면 catastrophic forgetting이 발생한 거니까 학습 데이터나 하이퍼파라미터를 조정해야 합니다."
HumanEval 문제가 학습 데이터에 포함되어 점수가 부풀려진 모델이 있을 수 있습니다. 벤치마크 점수만으로 실제 능력을 판단하지 마세요.
HumanEval은 Python만 평가합니다. 다른 언어 능력은 MultiPL-E 같은 확장 벤치마크로 별도 확인이 필요합니다.
HumanEval은 알고리즘 문제 위주입니다. 실제 개발에 필요한 API 사용, 디버깅, 리팩토링 능력은 다른 벤치마크로 평가해야 합니다.