[論文レビュー] ReACC: A Retrieval-Augmented Code Completion Framework
ReACC は、大規模なコードベースから意味的・語彙的に類似したコードスニペットを検索することで、コード補完を向上させるリtrieval-augmentedコード補完フレームワークです。ハイブリッドリトリーバ(密度的 + 種別)とファインチューニングされたCodeGPTベースのジェネレータを組み合わせ、PythonおよびJavaのCodeXGLUEベンチマークで最先端のパフォーマンスを達成しています。
Code completion, which aims to predict the following code token(s) according to the code context, can improve the productivity of software development. Recent work has proved that statistical language modeling with transformers can greatly improve the performance in the code completion task via learning from large-scale source code datasets. However, current approaches focus only on code context within the file or project, i.e. internal context. Our distinction is utilizing "external" context, inspired by human behaviors of copying from the related code snippets when writing code. Specifically, we propose a retrieval-augmented code completion framework, leveraging both lexical copying and referring to code with similar semantics by retrieval. We adopt a stage-wise training approach that combines a source code retriever and an auto-regressive language model for programming language. We evaluate our approach in the code completion task in Python and Java programming languages, achieving a state-of-the-art performance on CodeXGLUE benchmark.
研究の動機と目的
- 現在のファイルを超えた外部コードベースの文脈を活用して、コード補完を改善すること。
- 意味的および語彙的に類似したコードスニペットを検索することで、コード補完のパフォーマンスが向上するかどうかを調査すること。
- リトリーブと生成を統合する段階的訓練フレームワークを設計すること。
- ハイブリッドリトリーブ(密度的 + 種別)およびデータ拡張が、コード補完の正確性を向上させる貢献度を評価すること。
提案手法
- GraphCodeBERTで初期化されたデュアルエンコーダー密度的リトリーバを、合成コードペアにおける対照的学習によりファインチューニング。
- 語彙的類似性を扱うスパースリトリーバ(BM25)を、密度的リトリーバとハイブリッドリトリーブ戦略で統合。
- 意味を保持する変換(例:識別子のリネーム、不要コードの挿入)を用いたデータ拡張により、リトリーバの正例トレーニングペアを生成。
- 入力コードスニペットに、類似スニペットを検索して得たものをコンテキストとして連結し、ジェネレータに供給。
- デコーダー専用のトランスフォーマー(CodeGPT-adapted)をコード補完ジェネレータとして使用し、拡張されたコンテキストでファインチューニング。
- 段階的訓練戦略を採用:まずリトリーバを事前学習し、その後、検索されたコンテキストを用いてジェネレータをファインチューニング。
実験結果
リサーチクエスチョン
- RQ1内部コンテキストのみに依存するのと比較して、意味的に類似した外部コードスニペットを検索することで、コード補完の正確性が向上するか?
- RQ2密度的(意味的)およびスパース(語彙的)リトリーブを組み合わせることで、コード補完パフォーマンスにどのような影響を与えるか?
- RQ3異なるデータ拡張技術が、リトリーバーの一般化能力およびパフォーマンスに与える貢献度は何か?
- RQ4リトリーブ・オーガナイズドフレームワークは、CodeGPT や GitHub Copilot といった強力なベースラインを上回るか?
- RQ5一般用途のコードとアルゴリズム的コードの両方の分野において、ReACC のパフォーマンスはどのように変化するか?
主な発見
- ReACC は、CodeXGLUEベンチマークで最先端のパフォーマンスを達成し、ハイブリッドリトリーバを用いた PY150 データセットで 64.74% の正確一致スコアを記録。
- ハイブリッドリトリーバは、密度的およびスパースベースラインを上回り、意味的類似性と語彙的類似性の補完的利点を示した。
- CodeNet アルゴリズムデータセットでは、ReACC は CodeGPT-adapted よりも編集類似度を 18% 向上させ、正確一致スコアを 10% 向上させ、特定の分野での強力な有効性を示した。
- アブレーションスタディーでは、クエリの切り詰めと識別子のリネームが、リトリーバーにとって最も効果的なデータ拡張技術であることが判明。
- raw な検索スニペットをそのまま使用した場合、コンテキストのアライメントが行われていないため、ジェネレータのパフォーマンスがわずかに低下した。これは、コンテキストアライメントの価値を示している。
- 小さなリトリーブデータベースでも、ReACC は一部の状況で GitHub Copilot を上回った。また、GitHub Copilot 自身も ReACC のリトリーバーを組み込むことで恩恵を受けた。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。