[논문 리뷰] InCoder: A Generative Model for Code Infilling and Synthesis
InCoder는 코드 합성(생성)과 보간(infilling)을 모두 수행하도록 인과 마스킹 목표로 학습된 통합 6.7B 트랜스포머 모델이다. 좌우를 모두 사용하는 맥락을 통해 제로샷 작업에서 임의의 코드 영역을 보간하면서도 좌에서 우로의 생성 능력을 유지한다.
Code is seldom written in a single left-to-right pass and is instead repeatedly edited and refined. We introduce InCoder, a unified generative model that can perform program synthesis (via left-to-right generation) as well as editing (via infilling). InCoder is trained to generate code files from a large corpus of permissively licensed code, where regions of code have been randomly masked and moved to the end of each file, allowing code infilling with bidirectional context. Our model is the first generative model that is able to directly perform zero-shot code infilling, which we evaluate on challenging tasks such as type inference, comment generation, and variable re-naming. We find that the ability to condition on bidirectional context substantially improves performance on these tasks, while still performing comparably on standard program synthesis benchmarks in comparison to left-to-right only models pretrained at similar scale. The InCoder models and code are publicly released. https://sites.google.com/view/incoder-code-models
연구 동기 및 목표
- 프로그램 합성과 코드 편집(infilling)도 가능하도록 하는 통합 모델의 필요성과 동기를 제시한다.
- 양방향 맥락을 사용하여 임의의 코드 구간에서 보간(infilling)을 가능하게 하는 학습 목표를 개발한다.
- 타입 추론(type inference), 도큐스트링 생성(docstring generation), 변수 이름 바꾸기(variable renaming)와 같은 다양한 작업에서 제로샷 보간을 평가하고 이를 좌→우 생성과 비교한다.
- 양방향 보간이 좌→우 합성 능력을 손상시키지 않으면서 작업 성능을 향상시킴을 증명한다.
제안 방법
- 코드의 구간을 무작위로 마스킹하고 시퀀스 끝으로 이동시키는 인과 마스킹 목표를 채택하여 전체 시퀀스를 예측하도록 모델을 학습시킨다.
- Python을 주 초점으로 하며 28개 언어에 걸친 허용 라이센스 코드 및 StackOverflow 콘텐츠의 대규모 말뭉치에서 InCoder-6.7B를 학습시킨다.
- 추론 시에 원하는 위치에 마스크를 삽입하고 좌우 맥락에 조건부로 대체를 생성하여 좌→우 생성과 보간(infilling)을 모두 지원한다.
- 타입 추론, 도큐스트링 생성, 변수 이름 바꾸기와 같은 작업에서 제로샷 보간을 평가하고 인과 마스킹 보간을 좌→우 생성 및 재랭킹 baseline과 비교한다.
- 보간 이점이 합성 능력을 해치지 않음을 보여주기 위해 마스크드 언어 모델(masked-language-model) 접근법과 대규모 좌→우 모델과 비교한다.
- 모델 크기, 데이터 및 목적어(목적) 등에 대한 제거실험(ablation)을 포함한 분석을 제공하고 보간 벤치마크의 주요 결과를 보고한다.
실험 결과
연구 질문
- RQ1인과 마스킹이 양방향 맥락에 조건화된 임의의 코드 구간에 대한 제로샷 보간을 가능하게 할 수 있는가?
- RQ2보간에서 양방향 맥락이 타입 추론, 도큐스트링 생성, 변수 이름 바꾸기와 같은 작업을 좌→우 기준선과 비교해 개선하는가?
- RQ3보간이 표준 좌→우 코드 합성 성능에 해를 끼치는가, 아니면 최소한 크게 해를 끼치지 않는가?
- RQ4모델 크기와 학습 데이터 구성의 보간 및 합성 능력에 미치는 영향은 무엇인가?
주요 결과
- 제로샷 인과 마스킹 보간은 보간 작업에서 좌→우 기준선에 비해 현저히 향상된다(단일 줄 및 다중 줄).
- 양방향 맥락은 타입 추론 및 반환 타입 예측에서 강한 성능을 가능하게 하며, 인과 마스킹 보간은 기준선에 비해 상당한 이득을 달성한다.
- 제로샷 설정의 도큐스트링 생성은 감독된 미세 조정된 모델의 성능에 근접한다.
- InCoder는 보간 목표에도 불구하고 표준 벤치마크에서 좌→우 합성 성능을 경쟁력 있게 유지한다.
- 다중 언어 및 StackOverflow 데이터를 사용한 학습은 Python 전용 데이터보다 성능에 이점을 주지만, 다중 언어 데이터가 Python 특화 결과를 다소 줄일 수 있다.
더 나은 연구,지금 바로 시작하세요
연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.