Re Reference AI

評価

HumanEvalとは

関数のdocstringからコードを生成させ、テストの合格率でLLMのコーディング能力を測るベンチマーク

ベンチマークコード生成

ひとことで言うと

プログラムの説明文からコードを書かせて、AIのコーディング力を測るテスト。

概要

HumanEvalとは、OpenAIが開発した、LLMのコード生成能力を測定するためのベンチマーク。 関数のシグネチャとdocstring(処理内容の説明)を与え、モデルにその関数の実装を生成させたうえで、あらかじめ用意された単体テストに合格するかどうかで正誤を判定する。 生成されたコードが実際に動作し意図した処理を行うかを直接検証できる点が特徴で、コード生成モデルの性能評価における代表的なベンチマークの1つとして広く使われている。 一方でHumanEvalの問題自体が学習データに混入している(ベンチマークの汚染)可能性が指摘されており、より大規模で汚染の少ない後継ベンチマークも研究コミュニティで開発されている。

背景

コード生成モデルの評価では、生成されたコードが文法的に正しいだけでなく、実際に意図通り動作するかどうかを確認する必要がある。 HumanEvalは、単体テストの合格・不合格という客観的な基準でこれを検証できるベンチマークとして開発された。

歴史

2021年: OpenAIがHumanEvalを提案する論文とともに、コード生成モデルCodexの評価結果を発表。 以降、コード生成能力を測る代表的なベンチマークとして、多くのLLMの評価に採用されている。

アーキテクチャ

各問題は、関数のシグネチャ・docstring・複数の単体テストケースから構成される。 モデルが生成したコードを実際に実行し、全てのテストケースに合格するかどうかで正誤を判定する(pass@k という、k 回の生成試行のうち少なくとも1回正解する割合を指標とすることが多い)。

コード例

データセットの読み込み(概念例)

from datasets import load_dataset

dataset = load_dataset("openai/openai_humaneval")
print(dataset["test"][0]["prompt"])

利点

  • 生成されたコードを実際に実行して検証するため、動作の正しさを客観的に評価できる
  • コード生成タスクに特化しており、モデル間の比較がしやすい
  • 問題数を絞った小規模なベンチマークのため、評価コストが比較的低い

欠点

  • 比較的短く独立した関数レベルの問題が中心で、実務の大規模なコードベース上での作業能力までは測れない
  • 問題セットが公開されているため、学習データへの混入(データ汚染)のリスクがある
  • 対応言語がPython中心で、他言語のコード生成能力は別途評価する必要がある

比較

  • SWE-benchHumanEvalが独立した関数レベルの問題であるのに対し、SWE-benchは実際のソフトウェアリポジトリでの課題解決能力を評価する
  • MMLUMMLUが幅広い知識を問うのに対し、HumanEvalはコード生成能力に特化して評価する

関連用語

SWE-benchMMLULLMLLM-as-a-Judge

よくある質問

pass@kとは?

モデルに k 回コードを生成させ、そのうち少なくとも1回が全テストに合格すれば正解とみなす評価指標。 生成のばらつきを考慮した評価方法として用いられる。

HumanEvalとSWE-benchはどう違う?

HumanEvalが独立した関数レベルのコード生成を評価するのに対し、SWE-benchは実際のGitHubリポジトリのIssue解決能力を評価する、より実務に近いベンチマーク。

参考文献

関連Zenn記事