Skip to main content
QUICK REVIEW

[논문 리뷰] ReACC: A Retrieval-Augmented Code Completion Framework

Shuai Lu, Nan Duan|arXiv (Cornell University)|2022. 03. 15.
Software Engineering Research인용 수 8
한 줄 요약

ReACC는 대규모 코드베이스에서 의미적이고 어휘적으로 유사한 코드 스니펫을 검색하여 코드 완성 성능을 햖थ한 검색 증강 코드 완성 프레임워크입니다. 하이브리드 검색기(밀도 + 희소)와 미세튜닝된 CodeGPT 기반 생성기를 결합하여, 파이썬과 자바에서 CodeXGLUE 벤치마크에서 최고 성능을 기록했습니다.

ABSTRACT

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-적응형)를 사용하며, 증강된 컨텍스트로 미세튜닝합니다.
  • 단계별 훈련 전략을 적용: 먼저 검색기를 사전 훈련한 후, 검색된 컨텍스트를 사용하여 생성기를 미세튜닝합니다.

실험 결과

연구 질문

  • RQ1내부 컨텍스트 외부의 외부 코드 스니펫을 유사한 의미로 검색하는 것이 내부 컨텍스트에만 의존하는 것보다 코드 완성 정확도를 향상시키는가?
  • RQ2밀도(의미적)와 희소(어휘적) 검색을 결합할 경우 코드 완성 성능에 어떤 영향을 미치는가?
  • RQ3다양한 데이터 증강 기법이 검색기의 일반화 능력과 성능에 기여하는 정도는 어떠한가?
  • RQ4검색 증강 프레임워크가 CodeGPT나 GitHub Copilot와 같은 강력한 베이스라인을 초월하는가?
  • RQ5일반 목적 코드와 알고리즘 코드와 같은 다양한 코드 도메인에서 ReACC의 성능은 어떻게 변화하는가?

주요 결과

  • ReACC는 하이브리드 검색기를 사용하여 CodeXGLUE 벤치마크에서 최고 성능을 기록했으며, PY150 데이터셋에서 정확한 일치 스코어가 64.74%로 기록되었습니다.
  • 하이브리드 검색기가 밀도 및 희소 기반 베이스라인을 모두 압도하며, 의미적 유사성과 어휘적 유사성의 보완적 이점을 입증했습니다.
  • CodeNet 알고리즘 데이터셋에서 ReACC는 CodeGPT-적응형 대비 편집 유사도 18% 향상 및 정확한 일치 10% 향상시켜 특정 도메인에서 강력한 효과를 입증했습니다.
  • 절단 실험 결과, 쿼리 자르기와 식별자 이름 변경이 검색기의 성능 향상에 가장 큰 영향을 미치는 데이터 증강 기법임을 확인했습니다.
  • 원본으로 검색된 스니펫을 사용할 경우 생성기의 성능이 약간 떨어지며, 이는 컨텍스트 정렬의 가치를 시사합니다.
  • 더 작은 검색 데이터베이스를 사용하더라도 ReACC는 일부 경우 GitHub Copilot를 뛰어넘었으며, Copilot 자체도 ReACC의 검색기로 증강될 경우 성능 향상을 보였습니다.

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

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

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

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