Skip to main content
QUICK REVIEW

[논문 리뷰] RepoBench: Benchmarking Repository-Level Code Auto-Completion Systems

Tianyang Liu, Canwen Xu|arXiv (Cornell University)|2023. 06. 05.
Software Engineering Research인용 수 11
한 줄 요약

RepoBench는 저장소 수준의 코드 자동완성 벤치마크를 도입하여 Python와 Java에서 여러 모델과 검색 전략을 대상으로 세 가지 작업—검색(Retrieval), 코드 완성(Code Completion), 파이프라인(Pipeline)—을 평가합니다.

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.

연구 동기 및 목표

  • 다중 파일, 저장소 규모의 코드 완성 시스템을 단일 파일 벤치마크를 넘어 평가하는 격차를 해소한다.
  • 끝-to-end 워크플로우를 평가하기 위해 세 개의 상호 연결된 작업(Retrieval, Code Completion, Pipeline)을 제공하는 벤치마크를 제공한다.
  • 실제 저장소에서 교차 파일 및 긴 컨텍스트 코드를 모델이 다루는 방식에 대한 통찰을 제공한다.
  • 저장소 수준의 코드 인텔리전에 대한 공정한 비교를 촉진하고 개선을 촉진한다.]
  • method:["Python 및 Java에 초점을 맞춘 GitHub 코드(학습)에서 데이터셋을 구성하고 새로 수집된 GitHub 저장소(테스트) 포함.","tree-sitter를 통해 교차 파일 의존성을 파싱하여 교차 파일 행과 해당 정의를 식별.","세 가지 작업 정의: RepoBench-R(검색), RepoBench-C(코드 완성), RepoBench-P(파이프라인).","RepoBench-C에 대한 30줄 한도로 교차 파일 맥락(수입으로부터의 맥락)과 파일 내 맥락(선행 라인)을 조합하여 프롬프트 생성.","조회에 대해 acc@k를 사용한 검색 평가, 완성 및 파이프라인에 대해 정확 일치(EM)와 편집 유사성(ES)을 사용한 평가.","Python/Java 변형과 함께 Lexical, Semantic retrieval(CodeBERT, UniXcoder), 대형 언어 모델(Codex, CodeGen, StarCoder)을 포함한 다양한 베이스라인을 테스트."]
  • research_questions:[

실험 결과

연구 질문

  • RQ1검색 전략이 다음 줄 예측을 지원하는 교차 파일 조각을 얼마나 잘 식별하는가?
  • RQ2교차 파일 및 파일 내 맥락을 사용하여 서로 다른 맥락 길이(XF-F, XF-R, IF)에서 모델이 다음 코드 줄을 얼마나 효과적으로 예측할 수 있는가?
  • RQ3검색 및 완성을 파이프라인으로 결합했을 때 엔드-투-엔드 성능은 어떠하며, 교차 파일 맥락 배치가 결과에 어떤 영향을 미치는가?
  • RQ4저장소 수준의 벤치마크가 Python 대 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에서 다른 검색 방법들을 꾸준히 상회하며 교차 파일 조각에 대한 강한 의미 이해도를 나타낸다.
  • Lexical(Jaccard) 검색은 일반적으로 교차 파일 조각의 관련성 측면에서 편집 유사성(ES)보다 우수하다.
  • Python 검색 작업이 방법별로 Java보다 더 높은 정확도를 보이는 경향이 있다.
  • RepoBench-P에서 교차 파일 맥락을 포함하면 설정에 관계없이 성능이 향상되며, 효과적인 검색(UniXcoder 등)은 검색 및 완성 결과를 모두 향상시킨다.
  • 검색된 조각의 순서/배치가 코드 완성 효과에 영향을 주며, 대상 라인에 더 가까운 배치가 이점을 제공한다.]
  • table_headers:[

더 나은 연구,지금 바로 시작하세요

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.