BigCodeBench: 複雑な Python コード生成のための新しいベンチマーク

Hugging Face は BigCodeBench を発表しました。これは、複雑で実世界的なタスクに焦点を当て、大規模言語モデル(LLM)の実践的なプログラミング能力を評価するために設計された新しいベンチマークです。HumanEval のように単純なアルゴリズム指向のスニペットに依存する従来のベンチマークとは異なり、BigCodeBench は 139 種類のライブラリにまたがる複数の関数呼び出しを組み合わせて、ユーザー指向の問題を解くことをモデルに求めます。

既存ベンチマークの限界への対処

BigCodeBench は、既存のコード評価フレームワークで見られる 3 つの主要な課題を解決するために開発されました。

  • タスクの単純さ: HumanEval のタスクは実際のソフトウェア開発を表すにはあまりにも単純で、通常は多様なライブラリの統合が必要です。
  • 汚染と過学習: LLM が HumanEval データで学習されている可能性が高まっており、汎化性能の指標として信頼できなくなっています。
  • 汎用ツールの不足: 既存の代替手段はドメイン固有すぎる、決定論的すぎる、あるいはエージェント専用(例: DS-1000 や SWE-bench)であることが多く、使いやすく広範囲なプログラミングベンチマークのギャップが残っています。

技術設計とタスク構造

BigCodeBench は 1,140 の関数レベルタスクで構成されています。厳密な評価を行うため、各タスクは平均 5.6 件のテストケースを含み、平均ブランチカバレッジは 99% です。

タスクバリアント

ベンチマークには、モデルの異なる能力をテストするための 2 つのバージョンがあります。

  • BigCodeBench-Complete: docstring に記載された詳細な指示に基づき、LLM が関数を完成させるコード補完シナリオ。
  • BigCodeBench-Instruct: 要件が会話形式で簡潔に提示され、指示チューニングされた LLM の性能を評価する、より挑戦的なバリアント。

タスク作成プロセス

タスクは「Human‑LLM コラボレーションプロセス」を通じて生成されます。

  1. シーディング: ODEX データセット(Stack Overflow の Python ワンライナー)から開始。
  2. 拡張: GPT‑4 がこれらのワンライナーを包括的な関数レベルタスクへと拡張。
  3. 洗練: 5 年以上の Python 経験を持つ 20 人の人間専門家がサンドボックス内で GPT‑4 を指導し、タスクとテストケースを洗練。
  4. 検証: 追加の 7 人の人間専門家が品質をクロスチェック。人間専門家はサンプリングされたタスクで平均 97% の性能を達成しました。

LLM の性能と評価指標

評価は Pass@1(貪欲デコード) を用いて実施し、最初の試行で正しく解決されたタスクの割合を測定します。長いプロンプトでインポート文など必須のセットアップを省略する「モデルの怠惰」への対策として、研究者は calibrated Pass@1 を使用し、評価時に不足しているインポートやグローバル定数を自動的に追加します。

主な所見

  • 性能ギャップ: LLM の性能は人間より大幅に低い。現在のトップモデルは GPT‑4o で、BigCodeBench-Complete で校正済み Pass@1 が 61.1%、BigCodeBench-Instruct で 51.1% を記録。
  • クローズド vs. オープン: クローズドソースモデルとオープンソースモデルの間に顕著な性能差が存在。
  • 難易度: ベンチマークは非常に難しく、BigCodeBench-Complete では全テストされたモデルが解けなかったタスクが 149 件ある一方、すべてのモデルが解けたタスクはわずか 6 件。

Elo レーティングによるランキング

Pass@1 だけでは粒度が足りないため、チームはチェスで一般的に使用される Elo レーティングシステムを適用しました。このシステムでは各タスクを「ゲーム」、各モデルを「プレイヤー」とみなします。GPT‑4o が大きくリードし、次点は DeepSeekCoder‑V2 が続きます。

評価フレームワークと実装

BigCodeBench は PyPI から入手可能なユーザーフレンドリーな評価フレームワークを提供します(pip install bigcodebench)。このフレームワークは EvalPlus をベースにしていますが、unittest と BigCodeBench が要求する多様なライブラリ依存関係に合わせて調整されています。

ワークフロー

  1. 生成: bigcodebench.generate を使用してコードサンプルを作成。
  2. サニタイズ: bigcodebench.sanitize で自然言語を除去し、コードがコンパイル可能であることを保証。
  3. 評価: Docker サンドボックス内で bigcodebench.evaluate を実行し、テストケースに対してコードを評価。

今後のロードマップ

BigCode プロジェクトはベンチマークを以下の重要領域で進化させることを目指しています。

  • 多言語対応: Python 以外のプログラミング言語へ拡張。
  • 厳密性の向上: テストケースの増強を改善し、すべての LLM 生成解答が正確に評価されるようにする。
  • 汎化能力: transformerslangchain といった新興ライブラリでモデルをテスト。
  • 進化的更新: 非推奨となったライブラリバージョンや変化する学習データに対応するため、ベンチマークを定期的に更新。
  • インタラクション: モデルがブラウザやターミナルと対話し、自己デバッグやリフレクションを行える「LLM をエージェントとして」活用する方向へシフト。

Sources