Skip to main content
QUICK REVIEW

[논문 리뷰] Fix Bugs with Transformer through a Neural-Symbolic Edit Grammar

Yaojie Hu, Xingjian Shi|arXiv (Cornell University)|2022. 04. 13.
Software Engineering Research인용 수 6
한 줄 요약

NSEdit는 신경-기호 편집 문법을 정규 언어로 정식화한 트랜스포머 기반 코드 수리 방법을 제안한다. 이 방법은 편집 시퀀스를 생성하며, 위치 선택을 위한 포인터 네트워크와 검증 데이터로 미세조정된 앙상블 재순서 정렬기(재정렬기)를 결합하여 CodeXGLUE 벤치마크의 Tufano 소규모 데이터셋에서 24.04%의 새로운 최고 성능을 달성한다. 이는 문법적 버그에 대해 강건하며, 프로그램 분석 입력 없이 효과적인 편집 시퀀스 생성이 가능함을 보여준다.

ABSTRACT

We introduce NSEdit (neural-symbolic edit), a novel Transformer-based code repair method. Given only the source code that contains bugs, NSEdit predicts an editing sequence that can fix the bugs. The edit grammar is formulated as a regular language, and the Transformer uses it as a neural-symbolic scripting interface to generate editing programs. We modify the Transformer and add a pointer network to select the edit locations. An ensemble of rerankers are trained to re-rank the editing sequences generated by beam search. We fine-tune the rerankers on the validation set to reduce over-fitting. NSEdit is evaluated on various code repair datasets and achieved a new state-of-the-art accuracy ($24.04\%$) on the Tufano small dataset of the CodeXGLUE benchmark. NSEdit performs robustly when programs vary from packages to packages and when buggy programs are concrete. We conduct detailed analysis on our methods and demonstrate the effectiveness of each component.

연구 동기 및 목표

  • 프로그램 분석 또는 보조 표현에 의존하지 않고 문법적 버그가 존재하는 환경에서 코드 수리 문제를 해결하는 것.
  • 직접적인 코드 간 번역이 아닌, 구조적이고 미분 가능한 언어로 편집을 모델링하여 코드 수리의 일반화 및 강건성을 향상시키는 것.
  • 빔 서치의 출력 품질을 향상시키기 위해, 정밀도와 재현율의 상호 보완적 관계를 개선하는 학습 가능한 재순서 정렬 메커니즘을 도입하는 것.
  • Transformer 모델이 삭제 및 삽입 동작으로 구성된 도메인 전용 언어(DSL)를 통해 복잡한 편집 작업을 학습할 수 있음을 보여주며, 정밀한 기호적 프로그램 변환을 가능하게 하는 것.

제안 방법

  • NSEdit는 버그가 있는 소스 코드를 인코더가 처리하고, 디코더가 신경-기호 편집 문법을 도메인 전용 언어(DSL)로 사용하여 편집 시퀀스를 생성하는 트랜스포머 인코더-디코더 아키텍처를 사용한다.
  • 편집 문법은 두 가지 기본 동작인 '삭제'와 '삽입'을 포함하는 정규 언어로 정식화되며, 이들은 모델의 어휘에 특수 토큰으로 통합된다.
  • 디코더에 포인터 네트워크를 통합하여 인코더의 은닉 상태에서 편집 위치를 동적으로 선택함으로써, 정적 임베딩 대신 내용 기반 위치 어텐션을 가능하게 한다.
  • 모델는 디코딩을 위해 빔 서치를 사용하며, 이후 검증 데이터 기반으로 미세조정된 앙상블 재순서 정렬기를 통해 가설을 재순서 정렬한다. 이 정렬기는 메인 모델의 로그가능도와는 별개의 학습된 신뢰도 신호를 기반으로 한다.
  • 재순서 정렬기는 검증 세트에서 학습되어 과적합을 줄이고 일반화 능력을 향상시키며, 신뢰도 점수를 활용해 실사용 환경에서 정밀도-재현율 균형을 제어한다.
  • 모델는 AST, DFG, 오류 메시지 등의 입력 없이, 오직 버그가 있는 코드와 수정된 코드의 쌍만을 사용하여 엔드 투 엔드로 훈련되며, 사전 훈련을 통해 문법과 의미를 학습하는 능력에 의존한다.

실험 결과

연구 질문

  • RQ1프로그램 분석 표현에 의존하지 않고, 버그가 있는 코드에 대해 정확한 편집 시퀀스를 생성할 수 있도록 트랜스포머 모델이 학습할 수 있는가?
  • RQ2편집 시퀀스를 도메인 전용 언어(DSL)로 사용하는 신경-기호 편집 문법이 직접적인 코드 생성 방식보다 코드 수리의 강건성과 정확도를 향상시키는가?
  • RQ3앙성 재순서 정렬기와 검증 세트 기반 미세조정이 코드 수리에서 빔 서치의 출력 품질에 얼마나 기여하는가?
  • RQ4실사용 환경에서 재순서 정렬 점수의 정밀도-재현율 균형은 빔 서치의 내재된 로그가능도 점수와 비교해 어떻게 다를까?

주요 결과

  • NSEdit는 CodeXGLUE 벤치마크의 Tufano 소규모 데이터셋에서 24.04%의 새로운 최고 성능을 달성하여, 직접적인 코드 생성 또는 복잡한 그래프 기반 표현에 의존하는 이전 방법들을 능가한다.
  • 검증 세트에서 미세조정된 앙상블 재순서 정렬기는 단일 재순서 정렬기 대비 상위 1위 정확도를 1.69%p 향상시켜, 과적합을 줄이는 데 앙상블 학습의 효과를 입증한다.
  • 검증 세트에서 재순서 정렬기를 미세조정하면 모든 상위-k 설정에서 정확도가 향상되며, 특히 앙상블과 미세조정을 동시에 적용했을 때 최고의 성능을 기록한다.
  • 재순서 정렬 점수는 빔 서치의 내재된 로그가능도 점수보다 더 효율적인 정밀도-재현율 균형을 제공한다: 50% 정밀도일 때 재순서 정렬 방법은 38.4%의 재현율을 유지하지만, 빔 서치 점수는 동일한 정밀도 수준에 도달하기 위해 재현율을 22.4%로 낮춰야 한다.
  • NSEdit는 다양한 코드베이스와 실제 버그가 있는 프로그램에서도 강건하게 작동하여, 문법이 손상된 경우에도 강력한 일반화 능력을 보인다.
  • CodeBERT와 CodeGPT를 백본 인코더 및 디코더로 통합함으로써 성능이 향상되었으며, 이는 사전 훈련된 코드 기반 모델이 편집 시퀀스 생성에 효과적으로 지식을 전이할 수 있음을 확인한다.

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

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

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

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