[논문 리뷰] LongCoder: A Long-Range Pre-trained Language Model for Code Completion
LongCoder는 브릿지 토큰과 메모리 토큰을 도입한 스퍼스 트랜스포머 모델로, 코드 완성 작업에서 장기적인 코드 시퀀스를 효율적으로 처리하며, 선형 계산 복잡도를 유지하면서도 장기적 맥락 작업에서 최고 성능을 기록한다.
In this paper, we introduce a new task for code completion that focuses on handling long code input and propose a sparse Transformer model, called LongCoder, to address this task. LongCoder employs a sliding window mechanism for self-attention and introduces two types of globally accessible tokens - bridge tokens and memory tokens - to improve performance and efficiency. Bridge tokens are inserted throughout the input sequence to aggregate local information and facilitate global interaction, while memory tokens are included to highlight important statements that may be invoked later and need to be memorized, such as package imports and definitions of classes, functions, or structures. We conduct experiments on a newly constructed dataset that contains longer code context and the publicly available CodeXGLUE benchmark. Experimental results demonstrate that LongCoder achieves superior performance on code completion tasks compared to previous models while maintaining comparable efficiency in terms of computational resources during inference. All the codes and data are available at https://github.com/microsoft/CodeBERT.
연구 동기 및 목표
- 표준 트랜스포머가 제곱형 계산 비용을 유발하는 장기적인 코드 파일에서의 코드 완성 과제를 해결한다.
- 임포트 및 함수 정의와 같은 핵심 코드 요소에 대한 전역 액세스를 가능하게 하여 장기적 맥락 코드 완성에서 모델 성능을 향상시킨다.
- 장기적 의존성을 포착하면서도 선형 복잡도를 유지하는 효율적인 어텐션 메커니즘을 개발한다.
- 장기적 코드 모델링 연구를 지원하고 실제 장기적 맥락 코드 예제에서 모델을 평가하기 위해 새로운 벤치마크 데이터셋(LCC)을 구축한다.
- 전체 파일 또는 프로젝트 수준에서 효율적으로 기억하고 검색함으로써 확장 가능한 코드 완성 기능을 실현한다.
제안 방법
- 자기 어텐션의 스ライ딩 윈도우 메커니즘을 도입하여 국소 계산을 제한하고 복잡도를 낮춘다.
- 정기적인 간격으로 브릿지 토큰을 삽입하여 국소 맥락을 집계하고 윈도우 간 장거리 정보 흐름을 가능하게 한다.
- 임포트, 클래스 및 함수 정의와 같은 고영향도 코드 요소에 전역적으로 어텐션할 수 있도록 메모리 토큰을 통합한다.
- 국소 윈도우 어텐션, 브릿지 토큰 집계, 전역 메모리 어텐션을 결합한 스퍼스 어텐션 메커니즘을 설계하여 장기적 맥락 모델링을 효율적으로 구현한다.
- 맥락 표현을 학습하기 위해 마스킹 언어 모델링 목표를 사용하여 코드 코퍼스(CodeSearchNet)에서 LongCoder를 사전 훈련한다.
- 하류 성능 평가를 위해 새로 제작된 LCC 데이터셋과 CodeXGLUE의 코드 완성 벤치마크에서 LongCoder를 미세조정한다.
실험 결과
연구 질문
- RQ1스퍼스 어텐션 메커니즘이 선형 계산 복잡도를 유지하면서도 코드 완성 작업에서 장기적인 코드 시퀀스를 효과적으로 모델링할 수 있는가?
- RQ2브릿지 토큰과 메모리 토큰을 포함함으로써 표준 트랜스포머에 비해 장기적 맥락 코드 파일에서의 코드 완성 정확도가 얼마나 향상되는가?
- RQ3더 긴 맥락을 사용할 경우 코드 완성 성능가 얼마나 향상되며, 이는 추론 비용을 증가시키지 않고도 효율적으로 달성될 수 있는가?
- RQ4표준 맥락 윈도우를 초월한 장기적 맥락 코드 예제에서 Codex와 같은 대규모 모델과 비교해 LongCoder는 어떻게 성능을 내는가?
- RQ5작은 사전 훈련 코퍼스에서 훈련된 모델도 아키텍처 혁신을 통해 강력한 성능을 장기적 코드 완성에서 달성할 수 있는가?
주요 결과
- LongCoder는 기존 벤치마크보다 평균적으로 5배 긴 코드 예제를 포함한 LCC 데이터셋에서 최고 성능을 기록한다.
- LCC 벤치마크에서 LongCoder는 표준 모델과 Codex-512를 모두 능가하며, 모델 크기가 Codex보다 작음에도 불구하고 장기적 맥락 모델링의 이점을 입증한다.
- 장기적 임포트나 정의에 의존하는 코드를 올바르게 완성하는 데는 오직 LongCoder와 Codex-2048만이 성공한다. 예를 들어 파일 상단에 위치한 타임스탬프 함수 임포트에 의존하는 코드의 경우이다.
- 자바 사례 연구에서 LongCoder는 국소 윈도우 외부에 위치한 클래스 정의에서 정확한 메서드 호출을 예측하는 데 성공했고, Codex-512는 맥락 윈도우 제한으로 인해 실패한다.
- 브릿지 토큰과 메모리 토큰을 활용한 스퍼스 어텐션 메커니즘 덕분에 LongCoder는 장기적 맥락을 처리함에도 불구하고 작은 모델과 유사한 추론 효율성을 유지한다.
- 메모리 토큰을 통해 전역적으로 관련 있는 코드 요소를 기억하고 검색할 수 있는 능력 덕분에, 단순 윈도우 기반 접근 방식에 비해 장거리 의존성에 대해 더 우수한 일반화 성능을 보인다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.