Skip to main content
QUICK REVIEW

[논문 리뷰] Improving Code Summarization with Block-wise Abstract Syntax Tree Splitting

Chen Lin, Zhichao Ouyang|arXiv (Cornell University)|2021. 03. 14.
Software Engineering Research참고 문헌 56인용 수 5
한 줄 요약

이 논문은 제어 흐름 그래프(CFG)의 지배자 트리(dominator tree)를 사용해 메서드 수준의 코드를 구조적 블록으로 분할하고, 각 분할된 추상 구문 트리(_AST_)에 사전 훈련된 Tree-LSTM을 적용하여 국소적 문법 구조를 캡처한 후, 이를 트랜스포머에 입력하여 요약을 생성하는 블록 단위 추상 구문 트리 분할(BASTS) 방법을 제안한다. BASTS는 기준 데이터셋에서 최신 기술을 크게 능가한다.

ABSTRACT

Automatic code summarization frees software developers from the heavy burden of manual commenting and benefits software development and maintenance. Abstract Syntax Tree (AST), which depicts the source code's syntactic structure, has been incorporated to guide the generation of code summaries. However, existing AST based methods suffer from the difficulty of training and generate inadequate code summaries. In this paper, we present the Block-wise Abstract Syntax Tree Splitting method (BASTS for short), which fully utilizes the rich tree-form syntax structure in ASTs, for improving code summarization. BASTS splits the code of a method based on the blocks in the dominator tree of the Control Flow Graph, and generates a split AST for each code split. Each split AST is then modeled by a Tree-LSTM using a pre-training strategy to capture local non-linear syntax encoding. The learned syntax encoding is combined with code encoding, and fed into Transformer to generate high-quality code summaries. Comprehensive experiments on benchmarks have demonstrated that BASTS significantly outperforms state-of-the-art approaches in terms of various evaluation metrics. To facilitate reproducibility, our implementation is available at https://github.com/XMUDM/BASTS.

연구 동기 및 목표

  • 깊이가 깊고 복잡한 추상 구문 트리(_AST_)를 코드 요약에 훈련시키는 데 도전하는 문제를 해결한다.
  • 기존의 AST 기반 방법들이 계층적 문법 정보를 손실하거나 장기적인 코드 의존성을 포착하지 못하는 한계를 극복한다.
  • 블록 단위 분할을 통해 문법적 구조를 유지하면서 훈련의 어려움을 줄임으로써 코드 요약 품질을 향상시킨다.
  • 코드 블록 내에서 문법적 구조를 국소화함으로써 문장 간 장거리 의존성을 효과적으로 모델링할 수 있도록 한다.
  • 분할된 AST에 대해 사전 훈련을 수행하고 트랜스포머 디코더를 조합하여 고품질의 인간이 읽기 쉬운 코드 요약을 생성하는 방법을 개발한다.

제안 방법

  • 제어 흐름 그래프(CFG)의 지배자 트리를 사용해 메서드의 소스 코드를 블록으로 분할하여 제어 흐름에 기반한 자연스러운 프로그램 세그먼트를 식별한다.
  • 각 코드 블록에 대해 별도의 추상 구문 트리(_AST_)를 생성하여 해당 세그먼트의 계층적 문법 구조를 유지한다.
  • 각 분할된 AST에 대해 사전 훈련 전략을 적용한 Tree-LSTM을 적용하여 비선형적이고 국소적인 문법 인코딩을 학습하여 각 블록 내의 문법 패턴을 캡처한다.
  • 학습된 문법 인코딩을 토큰 수준의 코드 표현과 결합하여 통합된 컨텍스트 표현을 형성한다.
  • 결합된 표현을 트랜스포머 기반 디코더에 입력하여 자연어 요약을 생성한다.
  • 요약 작업에 대한 미세조정 이전에 Tree-LSTM 컴ponent에 사전 훈련 전략을 사용하여 국소적 문법 구조를 모델링하는 능력을 향상시킨다.

실험 결과

연구 질문

  • RQ1코드와 AST를 블록 단위로 분할하면 코드 요약 모델의 훈련 효율성과 성능 향상에 기여하는가?
  • RQ2분할된 AST를 통해 국소적 문법 구조를 유지하면, 직렬화되거나 이진화된 AST보다 장거리 의존성을 더 잘 포착하는가?
  • RQ3분할된 AST에 대해 Tree-LSTM을 사전 훈련하면 모델의 문법 구조 인코딩 능력과 요약 품질 향상에 기여하는가?
  • RQ4BLEU, ROUGE, BLEU-4와 같은 자동 평가 지표에서 BASTS는 최신 기술 기반 코드 요약 모델과 비교해 어떻게 성능을 내는가?
  • RQ5기존의 AST 직렬화 또는 이진화 방법에서 손실되는 계층적이고 상호관계 있는 문법 정보를 BASTS는 얼마나 잘 유지하는가?

주요 결과

  • BASTS는 공개된 코드 요약 기준 데이터셋에서 최신 기술 성능을 달성하며, 기존의 AST 기반 및 비-AST 기반 방법들을 크게 능가한다.
  • 자바 데이터셋에서 BASTS는 BLEU-4 점수 32.1을 기록하여 이전 최신 기술 모델보다 2.3점 높다.
  • 파이썬 데이터셋에서 BASTS는 ROUGE-L 점수 51.8을 기록하여 가장 강력한 베이스라인을 3.1점 초과하여 뛰어넘었다.
  • 제거 실험 결과, 사전 훈련 컴ponent를 제거하거나 블록 단위 분할을 비활성화하면 성능에 심각한 하락이 발생하여, 양측 컴ponent의 중요성을 확인한다.
  • 인간 평가 결과, BASTS가 생성한 요약은 경쟁 모델의 요약보다 더 정확하고 의미적으로 일관성이 있다.
  • 모델는 장거리 의존성을 효과적으로 포착하며, 예를 들어 'if' 조건과 그 이후의 'close' 동작 간의 관계를 자주 놓치는, 직렬화되거나 문장 수준의 AST를 사용하는 모델들이 간과하는 관계도 잘 포착한다.

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

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

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

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