HumanEvalは、LLMのコード生成能力を測るベンチマークです。関数の仕様を読んでプログラムを書き、ユニットテストを実行して通過したかで採点する——文章がそれらしく見えるかではなく、動く実装かが合格ライン——本記事はpass@kの式より、「なぜコード評価は実行ベースなのか」と、名前のHumanが人間評価を意味しない点に焦点を当てます。
なぜ実行で採点するか
コード支援では、もっともらしいコードが動かないことが日常茶飯事です(TF-0460)。変数名やインデントが整っていても、境界条件の漏れでテストが落ちる——だからHumanEvalは自動テストの合否を正解とします。
これはBLEUのような文字列の類似度や、GLUEのような分類精度とは思想が違います。コードの正しさは、多くの場合実行可能か・仕様を満たすかでしか判断できません。
HumanEvalの流れ
- 問題 — 関数の説明・シグネチャ・入出力例が与えられる
- 生成 — Codexなどのコード生成モデルが実装を出力
- 実行 — サンドボックスでコードを動かし、隠しユニットテストを実行
- 判定 — 全テスト通過なら正解、一つでも失敗なら不正解
OpenAIがCodex公開時に提示したベンチマークとして広く引用され、以降のコード特化LLMの性能比較の共通言語になりました(TF-0150)。
| 要素 | HumanEvalでの役割 |
|---|---|
| 問題セット | 手書きのプログラミング課題(訓練データとは別設計) |
| ユニットテスト | 採点の唯一の基準。人間の目視は標準フローではない |
| モデル | Codex、GPT系、他社コードLLMなど |
pass@kという報告の仕方
コード生成は確率的——同じ問題でも複数候補を出し、どれか一つでもテストを通れば成功と数える指標がpass@kです。kは生成する候補数、k個のうち少なくとも1つが正解だった問題の割合を報告します。
試験では数式の暗記より、「複数案を出して当てにいく評価」と覚えれば十分です。エディタの補完(Top-1)と、ベンチマーク(Top-k)で見る世界が違う——という対比が実務理解にもつながります。
他ベンチマークとの違い
| ベンチマーク | 測るもの | 採点の軸 |
|---|---|---|
| GLUE | 自然言語理解(複数タスク) | 分類・類推などの精度(G-348) |
| BLEU | 機械翻訳・生成文 | 参照文とのn-gram一致 |
| HumanEval | コード生成 | ユニットテストの合否 |
生成AIの応用には要約・画像・コード生成が含まれます(TF-170、TF-336)。HumanEvalはそのうち実装力だけを切り出して数値化した道具——モデル名(Codex)やサービス名(Copilot)とは別レイヤーです。
試験で押さえるポイント
- 定義 — コード生成LLMの能力を測るベンチマーク
- 採点 — ユニットテストの実行結果で正誤判定
- 指標 — pass@k(k個の候補のうち成功した割合)
- 対比 — GLUE=言語理解、HumanEval=コード実装。Human≠人間採点
すり替えに注意
| 誤った説明 | 正しい理解 |
|---|---|
| HumanEval=人間が採点する評価 | 名称はHumanEvalだが、標準は自動ユニットテスト |
| HumanEval=Codex | ベンチマーク vs モデル |
| HumanEval=学習用データセット | 性能評価用の問題集合 |
| HumanEval=GLUE | コード生成 vs 自然言語理解 |
| HumanEval=BLEU | テスト合否 vs 文字列類似度 |
よくある質問
HumanEvalは何を測るベンチマークですか?
LLMが関数の説明やシグネチャから正しいプログラムを書けるかを測るベンチマークです。生成したコードを実際に実行し、用意されたユニットテストを通過したかで採点します。文章の流暢さではなく、実装が動くかが合格ラインです。
HumanEvalと人間による評価は同じですか?
同じではありません。名前にHumanが付きますが、HumanEvalは自動実行のユニットテストで採点するベンチマークの名称です。人間が主観的に良し悪しを付ける評価手法そのものを指す用語ではありません。
HumanEvalとGLUEは同じですか?
同じではありません。GLUEは複数の自然言語理解タスクで言語モデルを比較するベンチマークです。HumanEvalはコード生成の実装正しさを測るベンチマークです。タスク(言語理解 vs コード生成)と採点方法が異なります。