[논문 리뷰] CodeEditor: Learning to Edit Source Code with Pre-trained Models
이 논문은 실제 코드 편집 패턴에 초점을 맞춘 새로운 사전 훈련 작업을 통해 변형된 코드 버전을 정답 버전으로 수정하는 데에 특화된 사전 훈련된 코드 편집 모델인 CodeEditor를 제안한다. 자동으로 생성된 다양한 코드 변형을 기반으로 훈련함으로써, CodeEditor는 피팅, 소수의 예제, 그리고 제로샷 설정에서 모두 최신 기술 수준(SOTA) 성능을 달성하며, 기존 모델 대비 벤치마크 데이터셋에서 최대 26.6% 향상된 성능을 보였다.
Developers often perform repetitive code editing activities for various reasons (e.g., code refactoring) during software development. Pre-trained code editing models have achieved the state-of-the-art (SOTA) results. Pre-trained models are first pre-trained with pre-training tasks and fine-tuned with the code editing task. Existing pre-training tasks mainly are code infilling tasks (e.g., masked language modeling), which are derived from the natural language processing field and are not designed for automatic code editing. This paper proposes a novel pre-training task specialized in code editing and presents an effective pre-trained code editing model named CodeEditor. Our pre-training task further improves the performance and generalization ability of code editing models. Specifically, we collect lots of real-world code snippets as the ground truth and use a powerful generator to rewrite them into mutated versions. Then, we pre-train our CodeEditor to edit mutated versions into the corresponding ground truth, to learn edit patterns. We conduct experiments on four code editing datasets and evaluate the pre-trained CodeEditor in three settings. (1) In the fine-tuning setting, we train the pre-trained CodeEditor with four datasets and evaluate it on the test data. CodeEditor outperforms the SOTA baselines by 15%, 25.5%, and 9.4% and 26.6% on four datasets. (2) In the few-shot setting, we train the pre-trained CodeEditor with limited data and evaluate it on the test data. CodeEditor substantially performs better than all baselines. (3) In the zero-shot setting, CodeEditor correctly edits 1,113 programs while the SOTA baselines can not work.
연구 동기 및 목표
- 기존의 자연어 처리(NLP) 기반 사전 훈련 작업이 실제 코드 편집 패턴에 최적화되어 있지 않다는 한계를 해결하기 위해.
- 실제로 발생하는 다양한 코드 변형을 기반으로 학습하여 코드 편집 모델의 성능과 일반화 능력을 향상시키기 위해.
- 실제 코드를 정답으로 삼고 강력한 생성기로 유의미한 변형된 버전을 생성함으로써, 더 잘 포착된 의미 있는 편집 패턴을 반영한 사전 훈련 작업을 개발하기 위해.
- 소수의 예제 및 제로샷 시나리오를 포함한 실제 설정에서 모델을 평가하여 그 견고성과 일반화 능력을 입증하기 위해.
- 편집 위치에 대한 애너테이션을 필요로 하지 않는 더 실용적이고 효과적인 자동 코드 편집 접근법을 제공하기 위해.
제안 방법
- 공개 저장소(예: GitHub)에서 실제 사용되는 코드 스니펫을 수집하여 정답 코드로 활용하며, 검토를 거쳐 생산 환경에 적합한 코드임을 확보한다.
- 강력한 신경 생성기를 사용해 정답 코드를 구문적 또는 의미적으로 다를 수 있지만 문법적으로 유효한 유사한 변형된 버전으로 자동으로 재작성한다.
- 모델이 변형된 코드를 원래의 정답 코드 버전으로 편집하는 데에 초점을 맞춘 새로운 사전 훈련 작업을 설계하여, 종단 간 편집 패턴을 엔드 투 엔드로 학습한다.
- 이 편집-변형 쌍 데이터를 기반으로 시퀀스 투 시퀀스 프레임워크를 사용해 CodeEditor 모델을 사전 훈련함으로써, 명시적인 위치 애너테이션 없이도 코드 변경 사항을 식별하고 수정할 수 있도록 한다.
- 다음으로, 표준, 소수의 예제, 제로샷 설정에서의 실제 코드 편집 데이터셋에 대해 사전 훈련된 CodeEditor를 피팅하여 성능과 일반화 능력을 평가한다.
- 기존의 ELECTRA나 SSR과 같은 방법들과 달리, 변형된 샘플이 항상 원본 코드와 다를 수 있도록 보장하여, 의미 없는 또는 단순한 사전 훈련 예제를 방지한다.
실험 결과
연구 질문
- RQ1코드 편집에 특화된 사전 훈련 작업이 마스크된 언어 모델링과 같은 일반적인 코드 복구 작업보다 성능이 뛰어나게 될 수 있는가?
- RQ2실제로 발생하는 다양한 코드 변형을 기반으로 사전 훈련하면, 새로운 편집 패턴에 대한 일반화 능력이 향상되는가?
- RQ3CodeEditor는 목표 데이터셋에 대한 피팅 없이도 제로샷 및 소수의 예제 설정에서 뛰어난 성능을 낼 수 있는가?
- RQ4다양한 코드 편집 벤치마크에서 CodeEditor는 최신 기술 수준 모델들과 비교해 편집 정확도와 견고성 면에서 뛰어나게 성능을 내는가?
- RQ5표준 사전 훈련 목표보다 변형 → 원본 편집 쌍을 기반으로 학습하는 것이 더 나은 편집 패턴 이해를 이끌 수 있는가?
주요 결과
- 피팅 설정에서 CodeEditor는 네 가지 다른 코드 편집 데이터셋에서 최신 기술 수준(SOTA) 기준보다 각각 15%, 25.5%, 9.4%, 26.6% 향상된 성능을 보였다.
- 소수의 예제 설정에서 CodeEditor는 전체 학습 데이터로 피팅된 최신 기술 수준 모델조차도 뛰어넘었으며, 이는 더 뛰어난 데이터 효율성과 일반화 능력을 보여준다.
- 제로샷 설정에서 CodeEditor는 어떤 피팅 없이도 1,113개의 프로그램을 정확히 편집했고, 최신 기술 수준 기준 모델들은 완전히 실패했다. 이는 강력한 인덕티브 바이어스와 뛰어난 일반화 능력을 증명한다.
- 제안된 사전 훈련 작업은 무작위 마스킹이 아닌 실제이고 다양한 편집 패턴에 집중함으로써 모델 성능과 일반화 능력을 크게 향상시켰다.
- CodeEditor는 편집 위치 애너테이션을 필요로 하지 않음에도 불구하고, 자동으로 편집 위치를 식별하고 수정할 수 있도록 학습하여 실생활 적용에 더 실용적이게 되었다.
- 모델 혼동을 줄이고 학습 효율성을 높이기 위해, 입력과 출력이 동일한 경우와 같은 단순한 사전 훈련 샘플을 피하는 방법을 적용했다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.