Deeper Learning

CodeBERT:A Pre-Trained Model for Programming and Natural Languages 본문

AI/Deep Learning

CodeBERT:A Pre-Trained Model for Programming and Natural Languages

Dlaiml 2022. 8. 23. 15:02

Zhangyin Feng, Daya Guo, Duyu Tang, Nan Duan, Xiaocheng Feng, Ming Gong, Linjun Shou, Bing Qin, Ting Liu, Daxin Jiang, Ming Zhou, [Research Center for Social Computing and Information Retrieval, Harbin Institute of Technology, China, The School of Data and Computer Science, Sun Yat-sen University, China, Microsoft Research Asia, Beijing, China, Microsoft Search Technology Center Asia, Beijing, China] (2020.02)

 

 

Abstract

  • Programming language(PL)과 natural language(NL)을 위한 pre-trained bimodal 모델인 CodeBERT를 제시
  • CodeBERT는 자연어로 코드 검색, 코드 documentation 생성 등 자연어-코드 적용을 위한 범용적인 representation을 학습
  • masked language modeling과 replaced token detection을 사용하여 학습
  • 코드 검색, 코드 documentation 생성에서 SOTA를 달성

1. Introduction

  • CodeBERT는 bimodal 모델로 자연어와 코드 간의 의미론적 연결성을 잡아내고 범용적인 representation을 학습하여 자연어-코드 관련 task에서 좋은 성능을 보임
  • BERT의 masked language modeling과 ELECTRA의 replaced token detection을 사용하여 학습
  • 6개 프로그래밍 언어를 사용하여 학습, bimodal 데이터는 함수 단위의 코드와 자연어 documentation pair 사용
  • 저자가 언급한 본 논문의 contribution
    • 여러 프로그래밍 언어를 위한 최초의 large NL-PL pre-trained 모델
    • code search, code-to-text generation에서 CodeBERT가 효과적임을 보이는 empirical result
    • code-based pre-trained model의 성능을 측정하는 dataset을 최초로 제시

2. CodeBERT

2.1. Model Architecture

  • RoBERTa-base와 동일한 모델 구조 사용 (125M parameters)

2.2. Input/Output Representations

  • [CLS] w1 w2 w3 … wn [SEP] c1 c2 c3 … cn [EOS] 형태로 two segment를 이어 붙인 input
  • WordPiece를 사용하여 자연어를 split
  • output은 CLS token의 representation과 각 자연어, 코드 token의 contextual vector representation

2.3. Pre-Training Data

  • Github repository data를 사용
  • Python, Java, JavaScript, PHP, Ruby, Go 언어를 학습

2.4. Pre-Training CodeBERT

  • masked language modeling(MLM)은 자연어-코드 pair data에만 적용
  • Replaced Token Detection(RTD)는 자연어-코드 pair data, unimodal data에 모두 적용

2.5. Fine-Tuning CodeBERT

  • natural language code search에는 pre-training과 같은 방식으로 input을 주고 [CLS]를 사용하여 의미론적 언어 관계를 파악
  • code-to-text generation에서는 생성모델의 encoder를 CodeBERT로 initialize

3. Experiment

  • natural language code retrieval, NL-PL probing, Code-to-Documentation generation task에서 모두 기존 모델보다 뛰어난 성능을 기록하며 SOTA 달성

4. Conclusion

  • 자연어와 코드 다루는 최초의 large bimodal pre-trained model CodeBERT를 제시
  • code-search code-to-document generation에서 SOTA를 달성
  • NL-PL probing task를 정립하고 dataset을 제시
  • Future work
    • bimodal evidence를 활용하거나 모델 구조를 개선하여 더 generator를 고도로 학습
    • generation을 위한 learning objective의 추가
    • AST(추상 구문 트리)를 활용한 code 전처리
    • 다른 자연어-코드 task로의 확장, 더 많은 언어와 프로그래밍 언어로 학습

후기 & 정리

  • Google AI4Code 캐글 대회에 참여하면서 가볍게 훑었던 논문이라 다시 정리
  • hugging face에 공개된 pre-trained weight를 사용하였더니 random initialize RoBERTa에 비해 어느 정도 성능 향상이 있었음
  • 자연어-코드 bimodal로 학습한 최초의 대규모 언어모델이 가장 큰 의의
  • 기존 방식을 그대로 사용하였기 때문에 모델 아키텍처 및 학습 방식에서 novelty는 없음
  • 조금 더 code domain에 specific한 모델 설계가 있으면 큰 성능 향상이 있을 것이라고 생각함

 

Reference

[0] Zhangyin Feng et al. (2020). "CodeBERT: A Pre-Trained Model for Programming and Natural Languages". https://arxiv.org/abs/2002.08155

 

CodeBERT: A Pre-Trained Model for Programming and Natural Languages

We present CodeBERT, a bimodal pre-trained model for programming language (PL) and nat-ural language (NL). CodeBERT learns general-purpose representations that support downstream NL-PL applications such as natural language codesearch, code documentation ge

arxiv.org

 

Comments