Skip to main content
QUICK REVIEW

[論文レビュー] RepoBench: Benchmarking Repository-Level Code Auto-Completion Systems

Tianyang Liu, Canwen Xu|arXiv (Cornell University)|Jun 5, 2023
Software Engineering Research被引用数 11
ひとこと要約

RepoBench は、3つのタスク(取得、コード補完、パイプライン)を含む、コード自動補完のリポジトリレベルベンチマークを導入します。PythonとJavaで複数のモデルと取得戦略を評価します。

ABSTRACT

Large Language Models (LLMs) have greatly advanced code auto-completion systems, with a potential for substantial productivity enhancements for developers. However, current benchmarks mainly focus on single-file tasks, leaving an assessment gap for more complex, real-world, multi-file programming scenarios. To fill this gap, we introduce RepoBench, a new benchmark specifically designed for evaluating repository-level code auto-completion systems. RepoBench supports both Python and Java and consists of three interconnected evaluation tasks: RepoBench-R (Retrieval), RepoBench-C (Code Completion), and RepoBench-P (Pipeline). Each task respectively measures the system's ability to retrieve the most relevant code snippets from other files as cross-file context, predict the next line of code with cross-file and in-file context, and handle complex tasks that require a combination of both retrieval and next-line prediction. RepoBench aims to facilitate a more complete comparison of performance and encouraging continuous improvement in auto-completion systems. RepoBench is publicly available at https://github.com/Leolty/repobench.

研究の動機と目的

  • 単一ファイルベンチマークを超えた、マルチファイル・リポジトリ規模のコード補完システムの評価ギャップを埋める。
  • 3つの相互に関連するタスク(取得、コード補完、パイプライン)を備えたベンチマークを提供し、エンドツーエンドのワークフローを評価する。
  • 実世界のリポジトリにおけるクロスファイルおよび長文コンテキストの扱いについて、モデルの挙動に洞察を与える。
  • リポジトリレベルのコードインテリジェンスの公正な比較を促進し、改善を推進する。

提案手法

  • GitHub のコード(トレーニング)と新たにクロールした GitHub リポジトリ(テスト)から、Python と Java に焦点を当てたデータセットを構築する。
  • tree-sitter によるクロスファイル依存関係を解析し、クロスファイル行と対応する定義を特定する。
  • 3 つのタスクを定義する:RepoBench-R(取得)、RepoBench-C(コード補完)、RepoBench-P(パイプライン)。
  • クロスファイルコンテキスト(import からの)とファイル内コンテキスト(前続行)を組み合わせてプロンプトを作成し、RepoBench-C では30行のキャップを設定する。
  • 取得には acc@k、補完およびパイプラインには Exact Match (EM) と Edit Similarity (ES) を評価する。
  • Python/Java バリアントを用いて、レキシカル、セマンティック取得(CodeBERT, UniXcoder)、大規模言語モデル(Codex, CodeGen, StarCoder)などのベースラインを幅広くテストする。

実験結果

リサーチクエスチョン

  • RQ1取得戦略が次の行の予測を支える関連クロスファイルスニペットをどれほど適切に特定できるか?
  • RQ2不同のコンテキスト長(XF-F、XF-R、IF)の下で、モデルがクロスファイルとファイル内コンテキストを用いて次のコード行をどれほど効果的に予測できるか?
  • RQ3取得と補完を組み合わせたパイプラインにおけるエンドツーエンドの性能はどの程度か、またクロスファイルコンテキストの配置が結果にどう影響するか?
  • RQ4リポジトリレベルのベンチマークは、取得と補完の性能において Python vs Java などの言語特有の差異を示すか?

主な発見

検索方法XF-F EMXF-F ESXF-R EMXF-R ESIF EMIF ES全体 EM全体 ES
Gold-Only * (Python)30.5970.4340.6574.4541.1078.3235.7973.59
Gold-Filled-Head * (Python)31.0770.4839.7774.4241.8778.5636.0773.68
Gold-Filled-Tail * (Python)31.3570.7340.5674.3741.2178.5036.1873.77
UniXcoder-H2L (Python)30.9970.6840.7174.7443.1979.1836.6174.02
UniXcoder-L2H (Python)32.1271.3640.5974.4843.0779.2237.1174.32
Random (Python)28.0668.9538.7573.8141.1678.3434.1572.72
Baseline (Python)26.7568.1637.6073.3040.7978.2633.1572.20
Gold-Only * (Java)32.4870.3943.5176.4955.9181.6541.6274.95
Gold-Filled-Head * (Java)32.4870.2943.4476.3655.8481.6841.5974.88
Gold-Filled-Tail * (Java)32.3770.3043.4876.6355.6681.5541.4974.91
UniXcoder-H2L (Java)32.4670.1642.7976.1456.7181.8641.7074.83
UniXcoder-L2H (Java)32.6970.3343.0876.2156.5781.8941.8374.93
Random (Java)31.3469.8142.0875.7355.9481.6740.7774.51
Baseline (Java)30.7369.4841.4475.4256.1881.7040.4074.29
  • UniXcoder は RepoBench-R で他の取得方法を一貫して上回り、クロスファイルスニペットの意味的理解力が高いことを示す。
  • レキシカル(Jaccard)取得は、クロスファイルスニペットの関連性において一般に Edit Similarity を上回る。
  • Python の取得タスクは、方法間で Java より高い精度を示す傾向がある。
  • RepoBench-P では、クロスファイルコンテキストを組み込むと設定全体で性能が向上し、効果的な取得(例:UniXcoder)により取得と補完の結果の両方が改善される。
  • 取得済みスニペットの順序・配置がコード補完の有効性に影響を与え、対象行に近い位置の方が効果を高める。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。