Skip to main content
QUICK REVIEW

[논문 리뷰] Cross-Language Learning for Program Classification using Bilateral Tree-Based Convolutional Neural Networks

Nghi D. Q. Bui, Lingxiao Jiang|arXiv (Cornell University)|2017. 10. 17.
Software Engineering Research인용 수 22
한 줄 요약

이 논문은 추상 구문 트리(abstract syntax trees, ASTs)에서 공유되는 알고리즘적 구조를 활용하여 다양한 프로그래밍 언어의 프로그램을 분류하기 위해 이중 트리 기반 합성곱 신경망(BiTBCNNs)을 제안한다. 자바와 C++의 여섯 가지 알고리즘에 대한 코드 스니펫에서 유도된 ASTs를 사용하여, 모델은 다국어 간 이진 분류에서 90% 이상의 정확도와 다중 클래스 알고리즘 분류에서 80% 이상의 정밀도를 달성하였으며, 트리 구조 신경망을 통한 효과적인 전이 학습을 입증하였다.

ABSTRACT

Towards the vision of translating code that implements an algorithm from one programming language into another, this paper proposes an approach for automated program classification using bilateral tree-based convolutional neural networks (BiTBCNNs). It is layered on top of two tree-based convolutional neural networks (TBCNNs), each of which recognizes the algorithm of code written in an individual programming language. The combination layer of the networks recognizes the similarities and differences among code in different programming languages. The BiTBCNNs are trained using the source code in different languages but known to implement the same algorithms and/or functionalities. For a preliminary evaluation, we use 3591 Java and 3534 C++ code snippets from 6 algorithms we crawled systematically from GitHub. We obtained over 90% accuracy in the cross-language binary classification task to tell whether any given two code snippets implement the same algorithm. Also, for the algorithm classification task, i.e., to predict which one of the six algorithm labels is implemented by an arbitrary C++ code snippet, we achieved over 80% precision.

연구 동기 및 목표

  • 프로그래밍 언어에 관계없이 구현된 알고리즘에 기반해 코드 스니펫을 자동으로 분류할 수 있도록 하는 것.
  • 다른 문법과 언어 고유의 관례 사이에서 기능적 유사성을 인식하는 과제를 해결하는 것.
  • 다양한 프로그래밍 언어의 ASTs에서 구조적 및 의미적 유사성을 포착하는 딥 러닝 모델을 개발하는 것.
  • 공유된 알고리즘 패턴을 활용한 다국어 프로그램 분류의 가능성을 평가하는 것.

제안 방법

  • 이 방법은 각각 하나의 프로그래밍 언어(예: 자바와 C++)에서 생성된 ASTs를 학습하는 두 개의 트리 기반 합성곱 신경망(TBCNNs)을 사용한다.
  • 각 TBCNN은 AST 노드 유형에 대한 학습된 임베딩과 고정 깊이의 부분트리 필터를 사용하여 AST의 구조적 특징을 인코딩한다.
  • 이중 신경망 아키텍처는 두 언어별 TBCNNs를 결합하여 코드 스니펫 간의 구조적 및 기능적 유사성에 기반해 비교 및 분류한다.
  • 모델은 두 개의 다른 언어에서 온 코드 스니펫의 출력 표현을 비교하여 알고리즘 레이블을 예측하기 위해 공유된 소프트맥스 레이어를 사용한다.
  • ASTs는 소스 코드의 토큰 시퀀스에서 학습된 스킵그램 유사 모델을 사용하여 벡터 표현(_AST2vec_)으로 변환되며, 이는 구조적 및 의미적 근접성을 유지한다.
  • 최종 분류는 C++ 스니펫의 인코딩 표현을 레이블이 부여된 자바 스니펫의 표현과 비교하여 가장 가능성 있는 알고리즘을 추론함으로써 수행된다.

실험 결과

연구 질문

  • RQ1딥 러닝 모델이 기반 알고리즘 기능에 기반해 다양한 프로그래밍 언어의 프로그램을 효과적으로 분류할 수 있는가?
  • RQ2이중 신경망 아키텍처가 서로 다른 언어의 ASTs에서 구조적 및 의미적 유사성을 얼마나 잘 포착할 수 있는가?
  • RQ3동일한 알고리즘을 구현한 두 언어 간에, 한 언어에서 학습한 모델이 다른 언어의 코드를 분류하는 데 얼마나 일반화되는가?
  • RQ4다른 알고리즘이나 프로그래밍 언어 간으로 전이할 때 모델의 성능은 어떻게 변하는가?

주요 결과

  • BiTBCNN 모델은 이진 분류에서 두 언어에서 온 코드 스니펫이 동일한 알고리즘을 구현하는지 여부를 판단하는 데 90% 이상의 정확도를 달성하였다.
  • 다중 클래스 알고리즘 분류에서, C++ 코드 스니펫의 AST 표현을 기반으로 알고리즘을 예측할 때 모델은 정밀도 80.5%를 기록하였다.
  • 모델는 언어 간 강력한 일반화 능력을 보였으며, 이는 AST 기반의 구조적 인코딩이 언어에 관계없는 알고리즘 패턴을 포착함을 시사한다.
  • AST2vec 임베딩의 사용은 AST 노드 간의 의미적 및 구문적 관계를 유지함으로써 표현 학습을 향상시켰다.
  • 식별자 이름을 제거한 경우에도 모델의 성능이 뛰어나, 구조적 특징만으로도 고정밀도 분류가 가능함을 시사한다.
  • 이 방법은 다국어 코드 클론 검출, 알고리즘 특허 분석, 자동 버그 수정 등에 유망하며, 더 많은 언어와 알고리즘으로의 확장 가능성도 있다.

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

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

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

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