- 自己呼び出し関数の生成能力を測定するためのベンチマーク「HumanEval Pro」と「MBPP Pro」を提案
- 最新のLLMでも自己呼び出し関数の生成に課題があり、特に非指示調整型モデルで精度が低いという結果
- エラー削減に役立つ可能性を示唆し、コード生成の能力向上のための評価ツールとして有用性を強調
論文:HumanEval Pro and MBPP Pro: Evaluating Large Language Models on Self-invoking Code Generation
本記事で使用している画像は論文中の図表、またはそれを参考に作成した画像を使用しております。
本論文の概要
この論文では、LLM(大規模言語モデル)がコード生成における自己呼び出し関数を生成する能力を評価するため、新しいベンチマークである「HumanEval Pro」と「MBPP Pro」を提案しています。従来の評価ベンチマークでは対応が難しかった、自己呼び出しによる問題構造の複雑化や論理的整合性の確保にフォーカスしています。この評価手法では、与えられたプログラムの機能を別の関数から再帰的に利用するタスクを設定することで、コード理解や生成能力をより精密に測定します。
これらのベンチマークを用いて、複数の最新LLM(例えばGPT-4やCodeGeeXなど)の性能を比較しました。その結果、大部分のモデルが基本的なコード生成には高い性能を発揮する一方で、自己呼び出し関数の生成における課題が浮き彫りになりました。具体的には、指示調整されたモデルよりも非指示調整型モデルがこのタスクにおいて精度が低い傾向が見られ、特にエラー解析では「変数名の誤り」や「型の不一致」がよく発生する原因として挙げられています。
加えて、新しいベンチマーク問題は使用するコードの行数や概念的な深さを比較することで、従来の単純な問題よりも解決が高度であることが確認されています。エラーの種類や発生パターンを分析することで、CoT(Chain-of-Thought)プロンプティングなどの技術がエラー削減に貢献する可能性を示唆しました。
本研究の最終的な結論では、現在のLLMはコード生成の中でも特に再帰的で複雑な問題に対処するための能力を向上させる余地があり、それを評価し改善するためのベンチマークとして「HumanEval Pro」および「MBPP Pro」の有用性が強調されています。
図表の解説
この図は、LLMが自己呼び出し型のコード生成を行う方法を示しています。まず、基本問題として文字列内の文字を置き換える関数を作成し、その解決策を使ってより複雑な自己呼び出し型問題(複数の文字を置き換える)的に取り組むことが求められます。これにより、モデルは自身の生成したコードを活用し、複雑なタスクを解決する能力が評価されます。
論文から抽出された表1は、Self-Invokingコード生成におけるLLMの性能を評価しています。表は、各イテレーションラウンドでのHumanEval ProとMBPP ProのPass@1(%)を示しています。初回ラウンドから第3ラウンドまで、モデルの性能が向上しており、最終的には100%の成功率に達しています。これは、人間の手によるレビューとコードテストの反復改善が、モデルの応答の精度向上に効果的であることを示しています。
この図はベンチマークの構築プロセスを示す概要です。プロセスは3つのステップで構成されます。まず、「自己呼び出し問題生成」はDeepseek-V2.5を用いて問題と解答、テスト入力を生成します。次に、「解答生成」は生成された解答をコントロールされたPython環境で実行し、正確な出力を取得します。最後に「テストケース生成」はテストケースがすべて合格するか繰り返しチェックし、マニュアルでレビューします。この一連のプロセスを経て、完成されたテストケースが構築されます。
この画像は、研究論文で評価されたモデルのAPI名とHuggingFaceモデルのURLを示しています。表には、さまざまなモデルの名前とそれに対応するAPI名やHuggingFace URLが詳述されています。これにより、モデルの具体的な評価やアクセス方法が容易になり、研究や実験での再現性が確保されています。このような情報は、コード生成のような複雑なタスクにおけるモデル性能を理解するための基盤として役立ちます。
この図は、「HumanEval Pro」および「MBPP Pro」と、従来の「HumanEval」および「MBPP」におけるモデル性能の比較を示しています。縦軸はパス率(pass@1)で、より高いほどモデルの性能が高いことを示します。黄色とオレンジのバーは従来のテストでの結果、青のバーは拡張版での結果です。全体的に、モデルは新しい自己呼び出しタスクでの性能が落ちることが多いことを示しています。これは、複雑な自己呼び出しコード生成がモデルに新たな課題を提示しているからです。
この表は、様々な「エラーの種類」とその説明を示しています。「AssertionError」はテストケースに失敗するエラーを指し、「NameError」は未定義の変数が含まれるコードのエラーを指します。「ValueError」は変数の値に関するエラー、「IndexError」は配列の範囲外エラー、「TypeError」は変数の型の誤使用を示しています。その他のエラーには、「KeyError」や「SyntaxError」などが含まれます。これらのエラーは、プログラムの実行時に頻繁に発生する問題として挙げられ、この研究の評価結果に反映されていると示唆されています。
図4は、プログラミング能力を評価するためにベースモデルとインストラクションモデルを比較したものです。具体的には、HumanEvalとMBPPのスコアに対するHumanEval ProとMBPP Proの結果を示しています。図からわかるように、インストラクションモデル(青いドット)は通常のコード生成タスクでは大幅に改善されますが、より複雑な自己呼び出し型のタスクではその効果が限られています。したがって、自己呼び出しタスクでの性能向上にはさらなる工夫が必要です。
この表は、さまざまな大規模言語モデル(LLM)がBigCodeBench-LiteおよびBigCodeBench-Lite-Proのベンチマークにおいて達成した合格率(%)を示しています。モデル名と性能がリストされており、各モデルの自己呼び出しコード生成能力を評価しています。通常、伝統的なベンチマークよりも自己呼び出しタスクでの成績が低下することが観察され、これはモデルがより複雑な問題を解決する際の難しさを示しています。