[논문 리뷰] NatGen: Generative pre-training by "Naturalizing" source code
NatGen은 코드의 '자연스러움'을 개선하는 새로운 사전학습 목표를 제안한다. 이 목표는 의미적으로 동일하지만 자연스럽지 않은 코드를 인간이 작성한 자연스러운 코드로 변환하도록 모델이 학습하도록 한다. 실제 코드에 대해 6가지 의미 유지 변환을 적용하고, 코드 생성, 번역, 개선 작업에서 미세조정함으로써 NatGen은 특히 제로샷 및 피처샷 설정에서 최신 기술 수준의 성능을 달성하며, CodeT5와 같은 모델을 뛰어넘는 성능을 보인다.
Pre-trained Generative Language models (e.g. PLBART, CodeT5, SPT-Code) for source code yielded strong results on several tasks in the past few years, including code generation and translation. These models have adopted varying pre-training objectives to learn statistics of code construction from very large-scale corpora in a self-supervised fashion; the success of pre-trained models largely hinges on these pre-training objectives. This paper proposes a new pre-training objective, "Naturalizing" of source code, exploiting code's bimodal, dual-channel (formal & natural channels) nature. Unlike natural language, code's bimodal, dual-channel nature allows us to generate semantically equivalent code at scale. We introduce six classes of semantic preserving transformations to introduce un-natural forms of code, and then force our model to produce more natural original programs written by developers. Learning to generate equivalent, but more natural code, at scale, over large corpora of open-source code, without explicit manual supervision, helps the model learn to both ingest & generate code. We fine-tune our model in three generative Software Engineering tasks: code generation, code translation, and code refinement with limited human-curated labeled data and achieve state-of-the-art performance rivaling CodeT5. We show that our pre-trained model is especially competitive at zero-shot and few-shot learning, and better at learning code properties (e.g., syntax, data flow).
연구 동기 및 목표
- 코드 생성 및 기타 생성형 소프트웨어 공학 작업을 위한 고급 레이블링 데이터 부족 문제를 해결한다.
- 코드의 이중 채널 성격(형식적 언어와 자연어)을 활용하여, 모델의 이해력과 생성 능력을 향상시키는 자기지도 학습 사전학습 목표를 창출한다.
- 자연스러운 코드를 자연스럽지 않은 형태로 변환하고 원래 형태로 복원하도록 요구함으로써, 대규모 오픈소스 코드 기반으로 확장 가능한 비지도 학습 방법을 개발한다.
- 코드의 자연스러움과 의미 유지 성질에 중점을 두는 사전학습 작업을 통해, 저자원 환경(제로샷 및 피처샷)에서 모델의 일반화 능력과 성능을 향상시킨다.
- 코드 편집, 즉 자연스럽게 만드는 능력을 학습하는 것이 표준 노이즈 제거 목표보다도 후속 생성 작업에서 더 뛰어난 성능을 내는가를 입증한다.
제안 방법
- 실제 자연스러운 소스 코드에 의미 유지 변환 6종류를 적용하여 의미는 유지하면서 구문과 구조를 변경한 '자연스럽지 않은' 변형을 생성한다.
- 원본 자연스러운 코드를 타겟으로, 변형된 코드를 입력으로 사용하여 모델이 원래 형태를 재구성하도록 순서-순서 생성 방식으로 학습한다.
- 모델이 자연스럽지 않은 코드를 그에 해당하는 자연스러운 형태로 매핑하도록 하는 디노이징 오토인코더 작업으로 사전학습 목표를 설계하며, 깊은 의미적 및 구문적 이해가 필요하다.
- 인간 레이블링 없이 대규모 오픈소스 코드 코퍼스에서 이 자연스러움 목표를 사용해 트랜스포머 기반 모델(NatGen)을 사전학습한다.
- 제한된 인간이 정제한 레이블 데이터를 사용하여 사전학습된 NatGen 모델을 코드 생성, 코드 번역, 코드 개선과 같은 세 가지 후속 생성 작업에 대해 미세조정한다.
- CodeT5와 유사한 인코더-디코더 아키텍처를 채택하지만, 사전학습 목표를 자연스러움 작업으로 대체하여 생성 품질과 전이 가능성 향상을 도모한다.
실험 결과
연구 질문
- RQ1자연스럽게 만드는 코드 기반 사전학습 목표—즉, 자연스럽지 않은 코드를 개발자가 작성한 자연스러운 코드로 변환하는 것—이 후속 생성형 소프트웨어 공학 작업에서 모델 성능을 향상시키는가?
- RQ2특히 저자원 환경에서, 자연스러움 사전학습 목표가 표준 노이즈 제거 목표(예: 마스크 토큰 예측)와 비교해 후속 성능에 어떤 영향을 미치는가?
- RQ3자연스러움 작업이 코드의 구문적 및 의미적 특성(예: 데이터 플로우, 구조 등)을 학습하는 데 얼마나 효과적인가?
- RQ4코드의 이중 채널 성격(형식적 언어와 자연어)이 기존 접근 방식보다 더 효과적인 자기지도 사전학습 목표를 가능하게 하는가?
- RQ5자연스러움 사전학습을 거친 모델는 광범위한 미세조정 없이도 제로샷 및 피처샷 설정에서 효과적으로 일반화될 수 있는가?
주요 결과
- NatGen은 코드 생성, 코드 번역, 코드 개선 작업에서 최신 기술 수준의 성능을 달성하며, CodeT5의 성능을 뛰어넘거나 뒤지지 않는다.
- 제로샷 및 피처샷 학습 환경에서 뛰어난 성능을 보이며, 자연스러움 사전학습 목표로부터 얻은 강력한 일반화 능력을 시사한다.
- 표준 노이즈 제거 목표로 사전학습된 모델보다 NatGen이 더 구문적이고 의미적으로 인간이 작성한 코드에 가까운 코드를 생성한다.
- 자연스러움 사전학습 작업은 코드의 구조적 및 의미적 정확도를 향상시키는 데 효과적이며, 데이터 플로우와 같은 코드 속성에서의 성능 향상으로 이를 입증한다.
- 이 방법은 확장 가능하고 자기지도 학습 기반으로, 사전학습에 인간 레이블링 데이터가 전혀 필요 없으며, 기존 코드의 자동 변환에 의존한다.
- 제한된 레이블 데이터로 NatGen을 미세조정하면 뛰어난 성능을 내며, 이는 저자원 환경에서 사전학습 목표의 효과성을 입증한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.