[논문 리뷰] Learning to Complete Code with Sketches
이 논문은 프로그래밍 언어 문법에 따라 유도되는 '구멍'(■)이 있는 부분 코드(스케치)로 코드 완성어휘를 생성하는 Transformer 기반 모델인 GRAMMFORMER을 소개한다. 이는 표준 자동회귀 모델보다 10–50% 더 정확한 완성어휘와 37–50% 더 긴, 더 정밀한 스케치를 생성하며, 실제 코드와 일치하는 장기적이고 구멍이 최소화된 예측을 장려하는 강화학습 목적함수를 사용한다.
Code completion is usually cast as a language modelling problem, i.e., continuing an input in a left-to-right fashion. However, in practice, some parts of the completion (e.g., string literals) may be very hard to predict, whereas subsequent parts directly follow from the context. To handle this, we instead consider the scenario of generating code completions with "holes" inserted in places where a model is uncertain. We develop Grammformer, a Transformer-based model that guides code generation by the programming language grammar, and compare it to a variety of more standard sequence models. We train the models on code completion for C# and Python given partial code context. To evaluate models, we consider both ROUGE as well as a new metric RegexAcc that measures success of generating completions matching long outputs with as few holes as possible. In our experiments, Grammformer generates 10-50% more accurate completions compared to traditional generative models and 37-50% longer sketches compared to sketch-generating baselines trained with similar techniques.
연구 동기 및 목표
- 표준 코드 언어 모델이 잘못된 코드를 환영하는 한계를 해결하기 위해, 모델이 코드 완성어휘에서 불확실성을 '구멍'으로 명시적으로 나타내도록 하는 것.
- 프로그래밍 언어 문법을 생성 과정 중에 활용하여 더 정밀하고 긴 스케치(부분 코드 및 자리표시자 포함)를 생성하는 방법을 개발하는 것.
- 스케치에서 유도된 정규표현식 패턴을 기반으로 실제 코드와 일치하는지를 측정함으로써 스케치의 정확성과 구체성을 평가하는 새로운 평가 지표인 REGEXACC를 설계하는 것.
- 구멍이 최소화되고 긴 스케치를 생성하도록 최적화하는 강화학습을 통해 모델을 훈련시켜 잘못된 예측을 피하는 것.
- 문법 기반, 스케치 인식 생성 방식이 파이썬과 C#의 코드 완성 작업에서 표준 자동회귀 모델보다 우수한 성능을 보임을 입증하는 것.
제안 방법
- GRAMMFORMER는 부분 문법 트리를 구성함으로써 코드를 생성하는 Transformer 기반 아키텍처를 사용하며, 비단말 노드는 출력에서 '구멍'(■)으로 남겨진다.
- 모델은 강화학습을 통해 훈련되며, 스케치 길이(단말 토큰 수)를 최대화하고 구멍 수를 최소화하는 보상 함수를 사용하여 정밀하고 완전한 제안을 장려한다.
- 새로운 지표인 REGEXACC를 도입한다: 스케치를 정규표현식 패턴으로 변환(■를 ".+"로 치환)한 후, 그 정규표현식이 실제 코드와 일치하는지 확인하며, 이는 비구멍 토큰 비율에 따라 스케일링된다.
- 훈련 데이터는 실제 코드 완성어휘에 구멍을 삽입하여 합성되며, 이는 강화학습 목적함수를 위한 지도 신호를 제공한다.
- 모델는 프로그래밍 언어의 형식적 문법을 활용하여 생성 과정을 유도함으로써, 구멍이 있더라도 문법적으로 올바른 코드를 보장한다.
- 표준 자동회귀 모델과 달리, GRAMMFORMER는 왼쪽에서 오른쪽으로 막연히 토큰을 생성하지 않으며, 대신 문법 인식 디코딩을 사용하여 구조적으로 타당한 완성어휘를 우선순위로 한다.
실험 결과
연구 질문
- RQ1신경망 기반 코드 생성 모델을 훈련시켜 환영되는 토큰 대신 의도적인 '구멍'을 포함한 스케치를 생성하도록 할 수 있는가? 이는 코드 완성의 신뢰성 향상에 기여하는가?
- RQ2문법 기반, 스케치 인식 생성 방식은 표준 자동회귀 언어 모델링 방식과 비교해 코드 완성어휘의 정확성과 완전성 측면에서 어떻게 다른가?
- RQ3장기적이고 구멍이 최소화된 스케치를 장려하는 강화학습 목적함수는 지도 기반 보조 모델 대비 코드 완성의 질을 향상시키는가?
- RQ4새로운 지표인 REGEXACC는 코드 완성에서 스케치 품질에 대한 인간 평가와 얼마나 관련이 깊은가?
- RQ5더 길고 더 정밀한 스케치(구멍이 적은)를 생성할 수 있는 능력은 개발자 경험 향상과 디버깅 노력 감소에 기여하는가?
주요 결과
- GRAMMFORMER는 파이썬과 C# 코드 완성 벤치마크에서 표준 자동회귀 언어 모델보다 10–50% 더 정확한 코드 완성어휘를 생성한다.
- GRAMMFORMER는 유사 기법으로 훈련된 스케치 생성 기반 모델 대비 37–50% 더 긴 스케치를 생성하여 더 높은 정밀도와 구체성을 나타낸다.
- 제안된 REGEXACC 지표는 실제 코드와의 정규표현식 일치도를 측정함과 동시에 예측된 실제 토큰 비율을 고려함으로써 스케치 품질을 효과적으로 캡처한다.
- 문법 인식 목적함수를 사용한 강화학습은 스케치 생성 과업에서 표준 왼쪽에서 오른쪽 자동회귀 생성 방식보다 뚜렷이 우수한 성능을 보인다.
- 모델가 비단말 노드를 구멍으로 남겨두는 능력 덕분에, 특정 값에 대해 불확실할 경우에도 의미적으로 타당하고 구조적으로 올바른 코드 제안을 생성할 수 있다.
- 현재 결과는 자동 평가 지표에 기반하므로, 스케치 정확성과 구체성의 상호보완적 관계를 추가로 검증하기 위해 인간 평가가 필요하다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.