[논문 리뷰] A Systematic Evaluation of Large Language Models of Code
이 논문은 12개 프로그래밍 언어에서 249GB의 다국어 소스코드를 전용으로 학습한 2.7B 파라미터 오픈소스 언어 모델인 PolyCoder를 제시한다. 대부분의 언어에서 Codex의 성능이 뛰어나지만, C 언어에서는 PolyCoder가 Codex보다 낮은 퍼플렉서티를 기록하여, 특정 언어에서 전용의 다국어 소스코드 사전학습이 독점 모델을 능가할 수 있음을 보여준다.
Large language models (LMs) of code have recently shown tremendous promise in completing code and synthesizing code from natural language descriptions. However, the current state-of-the-art code LMs (e.g., Codex (Chen et al., 2021)) are not publicly available, leaving many questions about their model and data design decisions. We aim to fill in some of these blanks through a systematic evaluation of the largest existing models: Codex, GPT-J, GPT-Neo, GPT-NeoX-20B, and CodeParrot, across various programming languages. Although Codex itself is not open-source, we find that existing open-source models do achieve close results in some programming languages, although targeted mainly for natural language modeling. We further identify an important missing piece in the form of a large open-source model trained exclusively on a multi-lingual corpus of code. We release a new model, PolyCoder, with 2.7B parameters based on the GPT-2 architecture, which was trained on 249GB of code across 12 programming languages on a single machine. In the C programming language, PolyCoder outperforms all models including Codex. Our trained models are open-source and publicly available at https://github.com/VHellendoorn/Code-LMs, which enables future research and application in this area.
연구 동기 및 목표
- 다양한 프로그래밍 언어에서 기존 코드 언어 모델—예를 들어 Codex와 같은 독점 모델, GPT-J, GPT-Neo, GPT-NeoX, CodeParrot와 같은 오픈소스 모델—을 체계적으로 평가하기 위해.
- 현재 오픈소스 모델의 한계, 특히 다양한 프로그래밍 언어에서 대규모로 다국어 소스코드 전용 모델을 학습한 모델의 부족함을 규명하기 위해.
- 이 격차를 메우기 위해 249GB의 다국어 소스코드 코퍼스(12개 언어)에 전적으로 훈련된 2.7B 파라미터 모델인 PolyCoder를 훈련하고 공개하기 위해.
- 모델 성능을 내재적(퍼플렉서티) 및 외재적(HumanEval) 벤치마크에서 비교하여, 모델 크기, 훈련 데이터 구성, 추론 온도의 영향을 분석하기 위해.
- Codex와 같은 독점 모델에 대한 투명하고 공개 가능한 대안을 제공하여, 코드 LMs 분야의 연구 접근성과 재현 가능성을 높이기 위해.
제안 방법
- GPT-2 아키텍처를 사용하여 GitHub 리포지토리에서 선별한 12개 프로그래밍 언어의 249GB 소스코드만을 사용해 단일 머신에서 PolyCoder를 훈련시켰다.
- 퍼플렉서티 측정을 위해 12개 프로그래밍 언어의 새로운 평가 데이터셋을 구축하여, 데이터 누출을 방지하기 위해 테스트 세트를 미리 볼 수 없도록 했다.
- 자연어에서의 코드 생성을 위해 HumanEval에서 평가하여 Pass@1, Pass@10, Pass@100를 추론 온도를 다양하게 설정해 측정했다.
- 각 언어의 동일한 보류된 테스트 세트에서 모델 간의 퍼플렉서티를 비교하여 내재적 언어 모델링 품질을 집중적으로 분석했다.
- 생성 품질에 미치는 영향을 분석하기 위해 모델 크기(160M에서 20B 파라미터), 훈련 데이터 혼합(자연어 + 코드 대비 코드 전용), 추론 온도의 영향을 분석했다.
- 다양한 모델 크기에서 추론 온도 샘플링을 사용하여 다양성과 정확성 간의 트레이드오프를 평가하고, 아블레이션 연구를 수행했다.
실험 결과
연구 질문
- RQ1다양한 프로그래밍 언어에서 오픈소스 코드 언어 모델의 성능은 독점 모델인 Codex와 비교해 어떻게 되는가?
- RQ2대규모 오픈소스 다국어 소스코드 전용 언어 모델이 기존 오픈소스 모델뿐 아니라 특정 언어에서 독점 모델을 능가할 수 있는가?
- RQ3훈련 데이터 구성—특히 자연어와 코드 혼합 또는 순수 코드 전용으로 훈련했는지—이 최종 성능에 어떤 영향을 미치는가?
- RQ4모델 크기와 훈련 기간은 코드 생성 및 언어 모델링 작업 성능에 어떻게 영향을 미치는가?
- RQ5추론 온도는 코드 생성 품질에 어떤 영향을 미치며, 다양한 평가 지표에 최적의 설정은 무엇인가?
주요 결과
- PolyCoder는 C 프로그래밍 언어에서 퍼플렉서티 측면에서 Codex를 능가하여, 테스트된 모든 모델 중에서 가장 낮은 퍼플렉서티 점수를 기록했다.
- HumanEval 벤치마크에서 높은 온도 설정은 Pass@100 점수를 향상시키지만, 낮은 온도 설정은 Pass@1 결과를 더 좋게 만들며, 이는 다양성과 자신감 사이의 트레이드오프를 시사한다.
- Go, Java, Rust, Scala, TypeScript와 같은 언어에서는 모델 크기를 2.7B에서 20B(GPT-Neo에서 GPT-NeoX로)로 늘려도 성능 향상이 미미하여, 모델 용량 포화 상태임을 시사한다.
- C, JavaScript, Rust, Scala, TypeScript에서 PolyCoder는 유사 크기의 GPT-Neo 2.7B를 능가하며, 이는 일부 언어에서 코드 전용 사전학습이 혼합 사전학습보다 더 효과적일 수 있음을 시사한다.
- 파이썬 언어에서 내재적 평가의 퍼플렉서티 추세는 HumanEval 성능과 강하게 상관되어 있어, 퍼플렉서티가 후속 코드 생성 품질에 대한 저비용이고 신뢰할 수 있는 대체 지표임을 시사한다.
- Codex의 다국어에서의 뛰어난 성능은 훈련 세트가 알려져 있지 않아 테스트 데이터가 포함될 수 있다는 잠재적 데이터 누출로 인해 과대평가되었을 수 있다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.