テキスト変換によるリポジトリレベルのコード検索の改善

日本でのIT人材は不足しており、2030年には最大で79万人不足するという試算もある1）。その解決法の一つとして、大規模言語モデル(LLM)を用いたソフトウェアの開発の支援が挙げられる。現在、LLMによるコード生成能力は飛躍的に上昇しており、単一のコードの理解や生成の精度は高い。しかし、実際のソフトウェア開発に近いリポジトリレベルでの研究は少なく、LLMによるリポジトリレベルのコード生成の能力は非常に低い。リポジトリレベルでのバグ修正ベンチマークSWE-bench[1]のバグ解決率はわずか1.96%にとどまる。リポジトリレベルでのコード関連タスクでは多くのファイルの参照が必要となる。しかし、LLMのほとんどはTransformer[2]ベースのモデルであるため、入力長に制限があり、多くのファイルを入力できない。そのため、類似度などを基に関連性の高いコードを検索し、それらのみを入力する手法が提案されている。コード検索の精度は、SWE-benchやリポジトリレベルのコード補完・検索ベンチマークであるRepoBench[3]などでも高くない。1）https://www.meti.go.jp/policy/itpolicy/jinzai/houkokusyo.pdf本研究では、コード補完タスクにおけるコード検索手法の改善に取り組む。コード補完タスクは、未完成のコードの次の行を予測するタスクである。次の行の予測のために、未完成のコードを構文解析することで得られるファイル間の依存関係をもとに、複数の関連ファイルが与えられる。本論文では未完成のコードを対象コードと呼び、複数の関連ファイルをコード候補と呼ぶ。対象コードの情報を基に、コード候補から正しいコードを選択するタスクをコード検索と呼ぶ。既存研究ではコード検索のために、対象コードおよびコード候補のそれぞれの特徴量(言語モデルの埋め込み表現など)を取得し類似度を計算している[3]。RepoCoder[4]では、このような手法でコード検索し、一度コードの生成を行い、生成されたコードを含めて再検索し生成する手法をとる。本研究では、直接コード間の類似度を取らずに、LLMによってコードを変換した後に類似度を計算する。候補コードはテキストに変換し、対象コードはテキストへの変換や、RepoCoderの手法とテキスト変換を組み合わせた、次の行の予測とその説明などに変換を行う。図1にテキスト変換の流れを示す。本手法によって、コード補完タスクにおけるコード検索の精度が向上することを確認した。また、LLMでテキスト変換を行うプロンプトについても検証を行った。.