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)|Oct 17, 2017
Software Engineering Research被引用数 22
ひとこと要約

本稿では、抽象構文木(AST)における共有されたアルゴリズム的構造を活用して、異なるプログラミング言語のプログラムを分類するための二重木ベース畳み込みニューラルネットワーク(BiTBCNN)を提案する。JavaおよびC++の6つのアルゴリズムのコードスニペットから得たASTを用いて評価した結果、言語間二値分類では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.

研究の動機と目的

  • プログラミング言語に依存しない形で、コードスニペットが実装するアルゴリズムに基づいて自動的に分類することを目的とする。
  • 異なる構文や言語固有のイディオムにおいても機能的類似性を認識する課題に対処することを目的とする。
  • 異なるプログラミング言語におけるASTの構造的・意味的類似性を捉える深層学習モデルを開発することを目的とする。
  • 共有されたアルゴリズム的パターンを用いた言語間プログラム分類の実現可能性を評価することを目的とする。

提案手法

  • 本手法は、それぞれが1つのプログラミング言語(例:JavaおよびC++)のASTで学習された2つの木ベース畳み込みニューラルネットワーク(TBCNN)を用いる。
  • 各TBCNNは、ASTノードタイプの学習済み埋め込みと固定深さの部分木フィルタを用いて、ASTの構造的特徴を符号化する。
  • 二重ニューラルネットワークアーキテクチャにより、2つの言語特化TBCNNを統合し、コードスニペットの構造的・機能的類似性に基づいて比較・分類する。
  • 2つの異なる言語からのコードスニペットの出力表現を比較することで、共通のソフトマックス層を用いてアルゴリズムラベルを予測する。
  • ASTは、ソースコードのトークン列に基づいて学習されたスキップグラム風モデルを用いてベクトル表現(AST2vec)に変換され、構造的・意味的近接性が保持される。
  • 最終的な分類は、C++スニペットの符号化表現とラベル付きJavaスニペットの表現を比較することで実行され、最も可能性の高いアルゴリズムが推定される。

実験結果

リサーチクエスチョン

  • RQ1深層学習モデルは、プログラムの背後にあるアルゴリズム的機能に基づいて、異なるプログラミング言語間で効果的に分類を行うことができるか?
  • RQ2二重ニューラルネットワークアーキテクチャは、異なる言語からのASTにおいて構造的・意味的類似性をどの程度正確に捉えることができるか?
  • RQ3同じアルゴリズムを実装している場合、ある言語で学習したモデルが、別の言語のコードをどの程度一般化して分類できるか?
  • RQ4異なるアルゴリズムやプログラミング言語間での移行において、モデルの性能はどのように変化するか?

主な発見

  • BiTBCNNモデルは、異なる言語からの2つのコードスニペットが同じアルゴリズムを実装しているかどうかを判別する二値分類において、90%を超える精度を達成した。
  • 多クラスアルゴリズム分類において、C++スニペットのAST表現に基づいてアルゴリズムを予測する際、適合率は80.5%を達成した。
  • モデルは言語を跨いで優れた一般化性能を示しており、ASTベースの構造的符号化が言語に依存しないアルゴリズム的パターンを捉えていることが示唆された。
  • AST2vec埋め込みの使用により、ASTノード間の意味的および文法的関係を保持する表現学習が向上した。
  • 識別子名を削除してもモデルの性能が安定しており、構造的特徴のみで高精度な分類が可能であることが示された。
  • 本手法は、言語を跨ぐコードクローン検出、アルゴリズム特許分析、自動バグ修正の分野において有望であり、より多くの言語やアルゴリズムへの拡張が可能である。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。