Skip to main content
QUICK REVIEW

[논문 리뷰] CERT: Continual Pre-Training on Sketches for Library-Oriented Code Generation

Daoguang Zan, Bei Chen|arXiv (Cornell University)|2022. 06. 14.
Software Engineering Research인용 수 9
한 줄 요약

이 논문은 코드 스케치를 활용하여 라이브러리 중심의 코드 생성을 향상시키는 연속적 사전학습 프레임워크인 CERT를 제안한다. 사용자 정의 용어를 제거한 코드 스케치를 예측하는 스케처와 스케치를 기반으로 세부 사항을 채우는 생성기로 구성되며, 라벨이 없는 코드에서 연속적으로 사전학습된 두 모델이 결합되어, 텍스트-코드 쌍 데이터가 필요 없이도 PandasEval 벤치마크에서 기본 모델 대비 15.67%의 절대적인 pass@1 향상을 달성한다.

ABSTRACT

Code generation is a longstanding challenge, aiming to generate a code snippet based on a natural language description. Usually, expensive text-code paired data is essential for training a code generation model. Recently, thanks to the success of pre-training techniques, large language models are trained on large-scale unlabelled code corpora and perform well in code generation. In this paper, we investigate how to leverage an unlabelled code corpus to train a model for library-oriented code generation. Since it is a common practice for programmers to reuse third-party libraries, in which case the text-code paired data are harder to obtain due to the huge number of libraries. We observe that library-oriented code snippets are more likely to share similar code sketches. Hence, we present CERT with two steps: a sketcher generates the sketch, then a generator fills the details in the sketch. Both the sketcher and the generator are continually pre-trained upon a base model using unlabelled data. Furthermore, we craft two benchmarks named PandasEval and NumpyEval to evaluate library-oriented code generation. Experimental results demonstrate the impressive performance of CERT. For example, it surpasses the base model by an absolute 15.67% improvement in terms of pass@1 on PandasEval. Our work is available at https://github.com/microsoft/PyCodeGPT.

연구 동기 및 목표

  • 비용이 많이 드는 텍스트-코드 쌍 데이터셋에 의존하지 않고 라이브러리 중심의 코드 스니펫을 생성하는 데 도전하는 것.
  • 사용자 정의 용어를 생략한 추상화된 구조인 코드 스케치가 연속적 사전학습을 위한 효과적인 감독 신호가 될 수 있는지 탐색하는 것.
  • 라벨이 없는 코드 코퍼스를 활용하여 Pandas와 NumPy와 같은 인기 라이브러리의 코드 생성 성능을 향상시키는 것.
  • 라이브러리 전용 코드 생성 능력을 평가하기 위해 전용 벤치마크인 PandasEval과 NumpyEval을 개발하는 것.

제안 방법

  • 코드 스니펫에서 사용자 정의 용어(예: 변수 이름, 상수)를 익명화하여 코드 스케치를 예측하는 스케처를 훈련한다.
  • 예측된 스케치를 조건으로 삼아 전체 코드를 생성하는 생성기를 훈련한다. 이때 스케치는 구조적 프롬프트로 기능한다.
  • 스케처와 생성기는 텍스트-코드 쌍 데이터가 전혀 필요 없이 대규모 라벨이 없는 코드 코퍼스에서 연속적으로 사전학습된다.
  • 기본 코드 언어 모델(PyCodeGPT)을 기반으로 하되, 라이브러리 전용 코드 파일에서 연속적 사전학습을 통해 미세조정한다.
  • 두 가지 새로운 벤치마크인 PandasEval과 NumpyEval을 사용하여 평가한다. 각각 파이썬으로 작성된 101개의 라이브러리 전용 프로그래밍 문제를 포함한다.
  • 일반화 능력을 평가하기 위해 전체 코드 코퍼스에서 훈련된 변종 CERTg도 함께 훈련한다. 이는 스케치 기반 사전학습이 라이브러리 중심 작업에 특히 효과적임을 보여준다.

실험 결과

연구 질문

  • RQ1텍스트-코드 쌍 데이터가 없는 상황에서 코드 스케치가 연속적 사전학습에 효과적인 감독 신호가 될 수 있는가?
  • RQ2코드 생성을 스케치 예측과 세부 사항 채우기로 분해하는 것이 라이브러리 중심의 코드 생성 작업 성능 향상에 기여하는가?
  • RQ3CERT는 Codex와 GPT-3와 같은 강력한 베이스라인 모델 대비 라이브러리 전용 코드 생성 벤치마크에서 어떻게 성능을 내는가?
  • RQ4스케치 기반 접근법은 일반 코드 생성에도 일반화 가능한가, 아니면 라이브러리 중심 코드 생성에 특별히 유리한가?

주요 결과

  • CERT는 기본 모델 대비 PandasEval 벤치마크에서 pass@1 성능이 15.67% 절대적으로 향상되어, 라이브러리 중심의 코드 생성에서 뚜렷한 성과를 보였다.
  • 스케처와 생성기 모듈 간 상호보완적 작용이 이루어지며, 생성기는 완벽하지 않은 스케치 예측을 수정할 수 있어 스케치 오류에 대해 뛰어난 내성성을 보였다.
  • 110만 파라미터밖에 되지 않음에도 불구하고 GPT-3와 Codex를 모두 PandasEval 및 NumpyEval 벤치마크에서 앞서는 것으로 나타나, 높은 샘플 효율성을 입증했다.
  • 전체 코드 코퍼스에서 훈련된 변종 CERTg는 HumanEval에서 기본 모델과 유사한 성능을 보였으며, 이는 스케치 기반 사전학습이 라이브러리 전용 작업에 가장 효과적임을 확인한다.
  • 제거 실험 결과, 라이브러리 중심의 코드 파일을 추출하는 것이 CERT의 성능 향상에 필수적임을 입증하였으며, CERTg는 라이브러리 전용 벤치마크에서 CERT보다 성능이 열 劣하다.
  • 사례 연구 결과, 스케처는 사용자 정의 용어 없이도 정확한 구조적 템플릿을 생성할 수 있었으며, 생성기는 잘못된 스케치에서도 복구할 수 있었고, 이는 프레임워크의 내성성을 강력히 보여준다.

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

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

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

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