Skip to main content
QUICK REVIEW

[논문 리뷰] Evaluating Large Language Models Trained on Code

Mark Chen, Jerry Tworek|arXiv (Cornell University)|2021. 07. 07.
Software Engineering Research참고 문헌 96인용 수 1,403
한 줄 요약

Codex는 공개 GitHub 코드로 미세조정된 GPT 기반 모델로, 문서 문자열(docstrings)에서 기능적 코드 생성을 시연하고, 새로운 HumanEval 벤치마크에서 여러 베이스라인을 능가하며, 단일 샘플 중 최적 성능이 다중 샘플 및 단위 테스트를 사용할 때 현저히 향상된다.

ABSTRACT

We introduce Codex, a GPT language model fine-tuned on publicly available code from GitHub, and study its Python code-writing capabilities. A distinct production version of Codex powers GitHub Copilot. On HumanEval, a new evaluation set we release to measure functional correctness for synthesizing programs from docstrings, our model solves 28.8% of the problems, while GPT-3 solves 0% and GPT-J solves 11.4%. Furthermore, we find that repeated sampling from the model is a surprisingly effective strategy for producing working solutions to difficult prompts. Using this method, we solve 70.2% of our problems with 100 samples per problem. Careful investigation of our model reveals its limitations, including difficulty with docstrings describing long chains of operations and with binding operations to variables. Finally, we discuss the potential broader impacts of deploying powerful code generation technologies, covering safety, security, and economics.

연구 동기 및 목표

  • 공개적으로 이용 가능한 코드로 학습된 코드 중심 언어 모델 개발의 필요성을 제시한다.
  • 유닛 테스트를 활용한 코드 생성의 기능적 정확성 평가 프레임워크를 소개한다.
  • 문서 문자열에서 파이썬 함수 합성에 대한 Codex의 성능을 평가하고 기준선과 비교한다.
  • 샘플링 전략과 지도 학습 미세조정이 코드 생성 품질에 미치는 영향을 탐구한다.
  • 강력한 코드 생성 모델의 한계, 위험 및 사회적 영향에 대해 논의한다.

제안 방법

  • 대규모 GitHub Python 말뭉치를 사용해 GPT 계열 모델을 미세조정하여 Codex를 만든다.
  • 새로운 HumanEval 데이터셋(164개의 수작업으로 작성된 문제)을 사용하여 유닛 테스트로 기능적 정확성을 평가한다.
  • 단위 테스트를 통과하는 코드 샘플의 다중 샘플 평가를 위한 편향되지 않은 추정치로 pass@k를 사용한다.
  • 여러 모델 크기에 걸쳐 Codex를 GPT-Neo, GPT-J, TabNine과 비교한다.
  • 독립적으로 올바른 함수에 대해 Codex를 추가로 미세조정하여 Codex-S를 만들고 이득을 평가한다.
  • 생성된 코드를 유닛 테스트에 안전하게 실행하기 위한 샌드박스 실행 환경(gVisor 기반)을 제안한다.

실험 결과

연구 질문

  • RQ1비코드-미세조정 기준선과 비교했을 때 Codex가 문서 문자열에서 올바른 파이썬 함수를 얼마나 잘 생성할 수 있는가?
  • RQ2문서 문자열에서 코드 완성을 위한 pass@k 성능에 대해 모델 크기와 샘플링 전략의 영향은 무엇인가?
  • RQ3함수적으로 올바른 샘플이 BLEU와 같은 표준 코드 유사도 지표와 상관관계가 있는가?
  • RQ4올바른 독립 함수에 대한 지도 학습 미세조정(Codex-S)이 기본 Codex보다 성능을 향상시킬 수 있는가?
  • RQ5대규모로 코드 생성 LLM을 배포할 때의 한계와 안전 고려사항은 무엇인가?

주요 결과

패스@kk=1k=10k=100
GPT-Neo 125M0.75%1.88%2.97%
GPT-Neo 1.3B4.79%7.47%16.30%
GPT-Neo 2.7B6.41%11.27%21.37%
GPT-J 6B11.62%15.74%27.74%
TabNine2.58%4.35%7.59%
Codex-12M2.00%3.62%8.58%
Codex-25M3.21%7.10%12.89%
Codex-42M5.06%8.80%15.55%
Codex-85M8.22%12.81%22.40%
Codex-300M13.17%20.37%36.27%
Codex-679M16.22%25.70%40.95%
Codex-2.5B21.36%35.42%59.50%
Codex-12B28.81%46.81%72.31%
  • 단일 샘플로 Codex-12B는 HumanEval 문제의 28.8%를 해결; GPT-3 계열은 거의 0%에 가깝고; GPT-J는 11.4%를 해결한다.
  • 문제당 100개의 샘플을 생성하고 유닛 테스트로 최적의 샘플을 선택하면 문제의 77.5%를 해결하고, 평균 로그확률이 가장 높은 샘플을 사용하는 경우 44.5%를 얻는다.
  • 독립적으로 올바른 함수에 대해 지도 학습 미세조정된 Codex-S는 단일 샘플에서 37.7%를 해결하며 Codex보다 유의미한 차이로 우수하다.
  • 비교에서 GPT-Neo 및 GPT-J 기준선은 Codex보다 뒤처지며; Codex-12B는 HumanEval에서 28.81% (pass@1), 46.81% (pass@10), 72.31% (pass@100)에 달리고; Codex-2.5B 이상은 계속 개선한다.
  • BLEU 점수는 기능적 정확성과 낮은 상관관계를 보이며, 기능적으로 동등한 해법이 낮은 BLEU를 가질 수 있고 그 반대도 가능하다.
  • Codex-S는 일반적으로 모델 크기에 관계없이 Codex를 능가하며; 최적 샘플링 온도는 k에 따라 다르고; 평균 로그 확률로 샘플을 선택하면 성능이 향상된다.

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

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

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

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