[논문 리뷰] Abstract Syntax Tree for Programming Language Understanding and Representation: How Far Are We?
이 논문은 코드 클론 검출, 코드 검색, 코드 요약 작업을 포함한 세 가지 코드 관련 작업에서 AST 기반 표현과 토큰 기반 표현을 종합적으로 비교하는 실증 연구를 수행한다. 놀랍게도, AST 기반 표현을 사용하는 모델는 토큰 기반 표현을 사용하는 모델에 비해 일관되게 열등한 성능을 보이며, 다만 특정 샘플 서브셋에서는 AST가 뛰어난 성능을 보인다—이는 AST 기반 코드 표현에 대해 맥락 인식형, 단계별로 방법을 선택할 필요가 있음을 시사한다.
Programming language understanding and representation (a.k.a code representation learning) has always been a hot and challenging task in software engineering. It aims to apply deep learning techniques to produce numerical representations of the source code features while preserving its semantics. These representations can be used for facilitating subsequent code-related tasks. The abstract syntax tree (AST), a fundamental code feature, illustrates the syntactic information of the source code and has been widely used in code representation learning. However, there is still a lack of systematic and quantitative evaluation of how well AST-based code representation facilitates subsequent code-related tasks. In this paper, we first conduct a comprehensive empirical study to explore the effectiveness of the AST-based code representation in facilitating follow-up code-related tasks. To do so, we compare the performance of models trained with code token sequence (Token for short) based code representation and AST-based code representation on three popular types of code-related tasks. Surprisingly, the overall quantitative statistical results demonstrate that models trained with AST-based code representation consistently perform worse across all three tasks compared to models trained with Token-based code representation. Our further quantitative analysis reveals that models trained with AST-based code representation outperform models trained with Token-based code representation in certain subsets of samples across all three tasks. We also conduct comprehensive experiments to evaluate and reveal the impact of the choice of AST parsing/preprocessing/encoding methods on AST-based code representation and subsequent code-related tasks. Our study provides future researchers with detailed guidance on how to select solutions at each stage to fully exploit AST.
연구 동기 및 목표
- AST 기반 코드 표현의 효과성을 수량적으로 평가하여 후속 코드 관련 작업을 지원하는 데 기여하고자 한다.
- 이론적으로 유리한 점이 있음에도 불구하고 AST 기반 표현이 토큰 기반 표현에 비해 성능이 열등한 이유를 규명하고자 한다.
- 다양한 AST 파싱, 전처리 및 인코딩 방법의 선택이 다양한 코드 작업에서 모델 성능에 미치는 영향을 조사하고자 한다.
- 작업 맥락에 따라 AST 기반 표현 기법을 선택하는 데 실질적인, 단계별 지침을 제공하고자 한다.
제안 방법
- 이 연구는 코드 클론 검출, 코드 검색, 코드 요약 세 가지 코드 관련 작업에서 AST 기반 및 토큰 기반 코드 표현을 기반으로 학습된 모델을 비교한다.
- 네 가지 AST 파싱 방법, 여섯 가지 AST 전처리 기법, 네 가지 일반적으로 사용되는 AST 인코딩 방법을 평가한다.
- 모델 성능을 비교하기 위해 통계 분석을 수행하며, 하위군 분석을 통해 AST 기반 모델이 토큰 기반 모델을 초월하는 경우를 규명한다.
- AST 파싱 단계는 다양한 도구와 설정을 사용하여 소스 코드를 추상구문트리(abstract syntax trees)로 변환한다.
- 전처리 단계는 노드 정규화, 부분트리 제거, 구조 단순화 등의 기법을 적용하여 AST를 인코딩에 적합하게 준비한다.
- 인코딩 단계는 트랜스포머, GNN, 트리 구조 기반 어텐션 메커니즘을 포함한 딥러닝 모델을 활용하여 AST에서 코드 임베딩을 생성한다.
실험 결과
연구 질문
- RQ1AST 기반 코드 표현은 코드 클론 검출, 코드 검색, 코드 요약 작업 전반에서 토큰 기반 표현에 비해 어떤 성능을 보이는가?
- RQ2AST 기반 표현이 토큰 기반 표현을 초월하는 특정 코드 샘플 서브셋은 무엇인가?
- RQ3AST 파싱, 전처리, 인코딩 단계에서의 다양한 선택지가 코드 표현 모델의 최종 성능에 어떤 영향을 미치는가?
- RQ4다양한 AST 표현 파이프라인 구성 요소가 후속 코드 지능 작업에 미치는 작업별 영향은 무엇인가?
주요 결과
- 모든 세 가지 작업—코드 클론 검출, 코드 검색, 코드 요약—에서 AST 기반 코드 표현을 기반으로 학습된 모델는 토큰 기반 표현을 기반으로 학습된 모델에 비해 일관되게 열등한 성능을 보였다.
- 전반적인 열등성에도 불구하고, AST 기반 모델은 특정 샘플 서브셋에서 토큰 기반 모델를 능가했으며, 코드 요약 작업에서는 최대 39%, 코드 검색 작업에서는 최대 28%의 샘플에서 그러한 성과를 보였다.
- AST 기반 표현의 성능는 파싱, 전처리, 인코딩 방법의 선택에 매우 민감하며, 이는 후속 작업에 따라 영향의 정도가 달라진다.
- AST가 토큰보다 뛰어난 성능을 보이는 서브셋은 일반적으로 텍스트 유사도가 낮은 코드를 포함한다—예를 들어, 구조적 유사성은 있지만 어휘적 비유사성은 높은 클론 쌍을 포함한다.
- 이 연구는 어떤 AST 표현 파이프라인 구성도 항상 다른 구성보다 뛰어나지 않음을 규명하였으며, 이는 작업별 최적화의 필요성을 강조한다.
- 결과적으로 현재 AST 기반 코드 표현 학습은 체계적인 가이던스가 부족하며, 향후 연구는 맥락 인식형, 파이프라인 단계 인식형 설계에 초점을 맞춰야 한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.