核心概念
大規模言語モデルを用いたクラスレベルのコード生成では、実世界のソフトウェア開発環境における複雑な依存関係や相互作用を考慮する必要がある。本研究では、リポジトリ内のクラスレベルコード生成を評価するベンチマークを提案し、リポジトリツールを活用したイテレーティブな推論手法を開発することで、従来手法を大幅に改善した。
摘要
本研究は、大規模言語モデルを用いたクラスレベルのコード生成に取り組んでいる。従来の研究では、関数やステートメントレベルのコード生成に焦点が当てられてきたが、クラスレベルのコード生成には、実世界のソフトウェア開発環境における複雑な依存関係や相互作用が考慮されていない。
本研究では、RepoClassBenchと呼ばれる新しいベンチマークを提案している。このベンチマークには、Javaとpythonのリポジトリから収集された130個のクラスと97個のクラスが含まれており、それぞれのクラスがリポジトリ内の他のコンポーネントに依存している。また、各クラスには対応するテストケースも用意されている。
この新しいベンチマークを用いて、既存の手法の性能を評価した結果、大きな課題があることが明らかになった。そこで本研究では、Retrieve-Repotools-Reflect (RRR)と呼ばれる新しい手法を提案している。RRRは、リポジトリツールを活用してリポジトリコンテキストを効果的に取得・活用し、イテレーティブに推論を行うことで、従来手法を大幅に改善している。
具体的には、RRRは以下のような流れで動作する:
- 初期生成: 自然言語の説明とリポジトリツールの出力を使って、初期のクラスコードを生成する。
- オラクルコール: 生成されたコードをテストし、エラーを特定する。
- リポジトリツール呼び出し: エラーを修正するために必要な情報をリポジトリツールから取得する。
- 反映: ツールの出力を基に、生成されたコードを改善する。
- 改善生成: 改善された情報を使って、クラスコードを再生成する。
この一連のプロセスを繰り返し行うことで、最終的に全てのテストケースを通過するクラスコードを生成することができる。
実験の結果、RRRは従来手法と比べて大幅な性能向上を示した。特に、類似コードの検索だけでは不十分であり、リポジトリ内の依存関係を理解することが重要であることが明らかになった。また、テストフィードバックの活用や、リポジトリツールの活用が、RRRの高い性能につながっていることが示された。
本研究の成果は、大規模言語モデルによるクラスレベルのコード生成における課題を明らかにし、その解決に向けた新しい手法を提案したものである。今後、より実用的なコード生成技術の開発につながることが期待される。
統計資料
クラスの長さは平均2080文字(Java)、4663文字(Python)
クラスを直接カバーするテストケースの数は平均5.48個(Java)、42.94個(Python)
クラス内のメソッドの数は平均3.1個(Java)、9.29個(Python)
テストケースで少なくとも1つカバーされているメソッドの数は平均2.85個(Java)、4.84個(Python)
外部参照を行うメソッドの数は平均2.28個(Java)、4.84個(Python)
引述
"大規模言語モデルを用いたコード生成タスクでは、関数やステートメントレベルでの生成に焦点が当てられてきたが、クラスレベルの生成には、実世界のソフトウェア開発環境における複雑な依存関係や相互作用が考慮されていない。"
"RepoClassBenchには、Javaの130個のクラスと、Pythonの97個のクラスが含まれており、それぞれのクラスがリポジトリ内の他のコンポーネントに依存している。また、各クラスには対応するテストケースも用意されている。"
"RRRは、リポジトリツールを活用してリポジトリコンテキストを効果的に取得・活用し、イテレーティブに推論を行うことで、従来手法を大幅に改善している。"