Slide 1

Slide 1 text

BigCodeBench: 多様な関数呼び出しと複雑な指示を用いたコード 生成のベンチマーキング https://arxiv.org/html/2406.15877v3#S7 1

Slide 2

Slide 2 text

目次 1. はじめに 2. ベンチマーク構築 3. ベンチマーク統計 4. 評価 5. 既存のプログラミングベンチマークとの比較 6. 関連研究 7. 結論 2

Slide 3

Slide 3 text

想定読者 自然言語処理研究者 ▶ 機械学習エンジニア ▶ プログラミング言語研究者 ▶ ソフトウェアエンジニアリング研究者 ▶ AI倫理の専門家 ▶ 3

Slide 4

Slide 4 text

まとめ BigCodeBenchは実世界のプログラミングタスクに近い新しいベンチマーク ▶ 多様な関数呼び出しと複雑な指示を含む1,140のタスクを提供 ▶ LLMの評価結果は、現状のモデルに改善の余地があることを示唆 ▶ 今後の研究方向性: 1.より高度なコード生成LLMの開発 2.ベンチマークの継続的な拡張と改良 3.実世界のプログラミングタスクへの適用 ▶ 4

Slide 5

Slide 5 text

用語辞書 LLM: Large Language Model(大規模言語モデル) ▶ GPT: Generative Pre-trained Transformer ▶ docstring: ドキュメント文字列(Pythonのコードドキュメンテーション) ▶ Pass@K: K回の試行で正解を得る確率 ▶ 循環的複雑度: プログラムの複雑さを表す指標 ▶ ブランチカバレッジ: テストケースがプログラムの分岐をカバーする割合 ▶ バックトランスレーション: ある言語から別の言語に翻訳し、再び元の言語に戻す技法 ▶ 5

Slide 6

Slide 6 text

1. はじめに 6

Slide 7

Slide 7 text

1. はじめに (1/2) Pythonコードによるタスク自動化が学術界と産業界から大きな注目を集めている ▶ 現在のベンチマークは短く自己完結的なタスクに限定されている ▶ 7

Slide 8

Slide 8 text

1. はじめに (2/2) 実世界のプログラミングタスクは通常以下を含む: ▶ ツールとしての多様な関数呼び出し - 139のライブラリから723の関数呼び出しを使用 - ドメイン固有ライブラリは包括的な機能をカバー - 複合的推論能力を要する複雑な指示 - 入力データ操作、エラーメッセージ処理、特定の出力フォーマットなどの順序付け - 本研究は孤立したコーディング演習と実世界のプログラミングの評価ギャップを埋めることを目指す ▶ BigCodeBenchを提案:1,140の細分化されたタスクを含む新しいベンチマーク ▶ 8

Slide 9

Slide 9 text

2. ベンチマーク構築 9

Slide 10

Slide 10 text

2.1 データ合成 GPT-4を使用してシード例に基づきプログラミングタスクを合成 ▶ ODEXからの意図とペアになったコードスケルトンをシード例として使用 - モデルバイアスを軽減するため難読化と摂動を実施 ▶ プログラムエントリーポイントをダミー関数名に置換 - バックトランスレーション法でdocstringの自然言語記述を摂動 - 4,718の関数レベルのプログラミングサンプルを収集 ▶ 10

Slide 11

Slide 11 text

2.2 半自動プログラムリファクタリングとテストケース生成 (1/2) Web版GPT-4のCode Interpreterセッションを活用 ▶ Linuxベースの仮想環境でPythonパッケージがプリインストール - 人間のアノテータがフィードバックとガイダンスを提供 ▶ 13人のアノテータが各100のタスクを担当 - LLMの側面: ▶ 段階的な改良プロセスに従う(未使用ライブラリの削除、docstringのフォーマット等) - モックテストと実行時バグの解決に苦戦 - 1,223のリファクタリングされたプログラミングタスクとペアのテストケースを得た ▶ 11

Slide 12

Slide 12 text

2.3 人間によるキュレーション 3段階のプロセス: ▶ 検査:マニュアルレビューと改良 - 詳細なガイドラインに基づき、テストケースの追加やランタイム問題の解決 - 事前評価:GPT-3.5-Turboを使用したドライラン - モデルの失敗を理解し、タスク指示を明確化 - クロスチェック:追加のアノテータがデータを改良し最終化 - docstring構造の修正、未使用モジュールの削除等 - サンプリングされたタスクの97%が全てのテストケースに合格 ▶ 12

Slide 13

Slide 13 text

2.4 NL指向の命令からコード生成へのベンチマーキング より自然言語指向の指示のためBigCodeBench-Instructを作成 ▶ 冗長な情報や特定の詳細を避け、高レベルな機能性の記述に焦点 - タスクプロンプトをより自然な指示に変換するための解析ルールを設計 ▶ 13

Slide 14

Slide 14 text

3. ベンチマーク統計 14

Slide 15

Slide 15 text

3. ベンチマーク統計 (1/2) BigCodeBenchの内容: ▶ 1,140タスク - 平均5.6テストケース - 99%ブランチカバレッジ - 他のベンチマークと比較して高い複雑性 - 平均行数:33.5行 - 平均循環的複雑度:3.1 - 15

Slide 16

Slide 16 text

3. ベンチマーク統計 (2/2) ツール統計: ▶ 7つのドメイン - 139ライブラリ(77標準、62外部) - 723関数呼び出し(281標準、442外部) - ライブラリ、関数呼び出し、ドメインのより多様な組み合わせ ▶ タスクあたり平均2.8ライブラリ、4.7関数呼び出し使用 - 16

Slide 17

Slide 17 text

4. 評価 17

Slide 18

Slide 18 text

4.1 タスクレベルのパフォーマンス測定 (1/2) BigCodeBench-Completeで60のLLM、BigCodeBench-Instructで35の指示調整LLMを評価 ▶ 主な発見: ▶ 指示調整LLMは長いコードプロンプトの重要な詳細を省略する - 必須のインポート文の省略によりタスク失敗 - 指示調整はプログラミング制約の遵守に役立つ - 指示調整LLMと基本LLMの平均Pass@1:40.7% vs 35.7% - LLMはプログラミング指示の詳細さに敏感 - BigCodeBench-Instructでは平均8.5%のPass@1低下 - 18

Slide 19

Slide 19 text

4.2 ツールレベルのパフォーマンス測定 トップパフォーマンスのLLMはほとんどのドメインで優れているが一部で不足 ▶ LLMはグラウンドトゥルースと比較して異なる関数呼び出しを使用してタスクを解決 ▶ 合格ソリューション:59.54%がグラウンドトゥルースにない関数呼び出しを使用 - 失敗ソリューション:77.53%がグラウンドトゥルースにない関数呼び出しを使用 - 19

Slide 20

Slide 20 text

5. 既存のプログラミングベンチマークとの比較 HumanEval+およびLiveCodeBenchと強い相関 ▶ Pearsonの相関係数:0.849-0.864 - Spearmanの順位相関係数:0.861-0.898 - BigCodeBenchは異なる側面を測定し、一部のモデルでランク変動あり ▶ 20

Slide 21

Slide 21 text

6. 関連研究 コード用の大規模言語モデルと既存のプログラミングベンチマークについて議論 ▶ BigCodeBenchの特徴: ▶ より複雑で実世界に近いタスク - 多様なツール使用とライブラリ呼び出し - 複雑な指示に従う能力の評価 - 21

Slide 22

Slide 22 text

7. 結論 BigCodeBenchはツール使用と複雑な指示遵守能力を評価 ▶ LLMのプログラミング能力に改善の余地があることを示唆 ▶ コード用の高度なLLMとベンチマーク開発の継続的な取り組みを呼びかけ ▶ 長期的なロードマップとしてBigCodeBench-Hardの拡張を提案 ▶ 22