Code Summarization이란 소스코드를 간결한 자연어로 나타내는 태스크고 긴 코드가 있을 때 시멘틱을 짧게 한 두 문장 정도의 자연어로 나타내서 사람이 이제 빠르게 이해할 수 있도록 하는 건데요 이제 코드를 유지 보수해보시거나 이제 오픈소스같은 큰 코드를 보신 경험이 있는 분이라면 소프트웨어 유지보수와 프로그램에 있어서 프로그램 이해에 있어서 이런 짧은 주석 같은 것들이 얼마나 중요한 역할을 하는지 잘 알고 계실겁니다 이러한 테스크를 해결하기 위해 해당 논문은 Hierarchical Splitting and Reconstruction 라는 방법을 제시합니다.
논문 리뷰를 자연어 처리팀 신동진님이 자세한 리뷰 도와주셨습니다.
CAST:Enhancing Code Summarization with Hierarchical Splitting and Reconstruction of Abstract Syntax Trees
1. CAST: Enhancing Code Summarization
with Hierarchical Splitting and
Reconstruction of Abstract Syntax Trees
NLP팀 박희수, 신동진
2. Task: Code Summarization
- 소스 코드를 간결한 자연어로 나타내는 task
- 소프트웨어 유지보수와 프로그램의 이해에 중요한 역할
- 하지만 노동과 시간이 많이 듦 개발자가 코드에 대한 좋은 요약을 직접 작성해야
함
- Methods
- 전통적: 복잡한 문법이나 구조는 무시하고 소스 코드를 일반 텍스트처럼
간주하고 룰 기반 혹은 IR 기반으로 접근
- 최근: ASTs(abstract syntax trees)를 도입
3. Limitations
- AST를 tree 기반의 뉴럴넷으로 인코딩 → 학습 시간이 너무 길어짐
- 높은 프로그램의 복잡도와 크기 때문
- e.g. HybridDrl: AST 를 이진트리로 변형
⇒ 더욱더 깊은 트리를 만들게 되면서 정보 손실
- AST 직렬화 → AST 의 계층 정보의 손실
- ASTNN: AST를 statement tree 로 분할 ⇒ 큰 tree 학습의 어려움을 해소
- 하지만 각각의 서브 트리는 한 개의 statement 만을 포함할 수 있음
- Sub-tree 각각을 직렬화하여 입력 ⇒ 계층 구조 정보의 손실
4. Solution: Hierarchical splitting and reconstruction
1. 전체 AST를 적절하게 분리
2. Tree 기반 모델로 각 sub-tree를 학습
3. 이후 조합
⇒ 전체 AST의 representation