12일 전

GraphCodeBERT: 데이터 흐름을 활용한 코드 표현의 사전 학습

Daya Guo, Shuo Ren, Shuai Lu, Zhangyin Feng, Duyu Tang, Shujie Liu, Long Zhou, Nan Duan, Alexey Svyatkovskiy, Shengyu Fu, Michele Tufano, Shao Kun Deng, Colin Clement, Dawn Drain, Neel Sundaresan, Jian Yin, Daxin Jiang, Ming Zhou
GraphCodeBERT: 데이터 흐름을 활용한 코드 표현의 사전 학습
초록

프로그래밍 언어를 위한 사전 훈련 모델은 코드 검색, 코드 완성, 코드 요약 등 다양한 코드 관련 작업에서 놀라운 실증적 성능 향상을 달성해왔다. 그러나 기존의 사전 훈련 모델들은 코드 스니펫을 토큰의 시퀀스로만 간주하며, 코드 내에 내재된 구조적 특성을 무시하고 있다. 이 구조적 특성은 코드의 핵심 의미를 제공하며, 코드 이해 과정을 향상시키는 데 핵심적인 역할을 한다. 본 연구에서는 코드의 내재적 구조를 고려한 프로그래밍 언어를 위한 사전 훈련 모델인 GraphCodeBERT를 제안한다. 기존의 추상 구문 트리(abstract syntax tree, AST)와 같은 문법 수준의 구조를 사용하는 대신, 사전 훈련 단계에서 데이터 흐름(data flow)을 활용한다. 데이터 흐름은 변수 간의 '값의 출처' 관계를 인코딩하는 의미 수준의 구조로, AST와 달리 복잡한 깊은 계층 구조를 가지지 않아 모델의 효율성을 높이는 특성을 지닌다. GraphCodeBERT는 Transformer 기반으로 구현되었으며, 마스크 언어 모델링 외에 두 가지 구조 인지 사전 훈련 태스크를 도입하였다. 하나는 코드 구조 간의 엣지를 예측하는 것이고, 다른 하나는 소스 코드와 코드 구조 간의 표현을 정렬하는 것이다. 코드 구조를 효과적으로 통합하기 위해 그래프 가이드 마스크 어텐션 함수를 도입하여 효율적인 모델 구현을 달성하였다. 제안한 모델은 코드 검색, 클론 탐지, 코드 번역, 코드 개선 등 네 가지 작업에서 평가되었으며, 결과적으로 코드 구조와 새로 도입된 사전 훈련 태스크가 GraphCodeBERT의 성능을 향상시켜 네 가지 하류 작업에서 최신 기술(SOTA) 수준의 성능을 달성함을 확인하였다. 또한, 코드 검색 작업에서 모델이 토큰 수준의 어텐션보다 구조 수준의 어텐션을 선호함을 추가로 입증하였다.

GraphCodeBERT: 데이터 흐름을 활용한 코드 표현의 사전 학습 | 최신 연구 논문 | HyperAI초신경