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
一句话总结

本文提出双分支树形卷积神经网络(BiTBCNN)通过利用抽象语法树(AST)中的共享算法结构,实现跨编程语言的程序分类。基于Java和C++代码片段的六种算法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中的结构与语义相似性。
  • 评估利用共享算法模式实现跨语言程序分类的可行性。

提出的方法

  • 该方法采用两个基于树的卷积神经网络(TBCNN),分别在单一编程语言(如Java和C++)的AST上进行训练。
  • 每个TBCNN通过为AST节点类型学习嵌入表示,并使用固定深度的子树滤波器,编码AST的结构特征。
  • 双分支神经网络架构将两个语言特定的TBCNN结合,基于其结构与功能相似性比较并分类代码片段。
  • 模型通过共享的Softmax层预测算法标签,通过比较来自不同语言的两个代码片段的输出表示实现。
  • AST通过一种类似skip-gram的模型,基于源代码的标记序列转换为向量表示(AST2vec),以保留节点之间的结构与语义接近性。
  • 最终分类通过将C++代码片段的编码表示与已标记的Java代码片段表示进行比较,推断最可能的算法。

实验结果

研究问题

  • RQ1深度学习模型能否有效基于程序的底层算法功能,对不同编程语言的程序进行分类?
  • RQ2双分支神经网络架构在多语言AST中捕捉结构与语义相似性的能力如何?
  • RQ3当两种语言实现相同算法时,基于一种语言训练的模型在另一语言上的泛化能力如何?
  • RQ4当在不同算法或编程语言之间进行迁移时,模型的性能如何变化?

主要发现

  • BiTBCNN模型在二分类任务中准确率超过90%,可判断来自不同语言的两个代码片段是否实现相同算法。
  • 在多类算法分类中,模型基于C++代码片段的AST表示预测其算法时,精确率达到80.5%。
  • 模型在跨语言间表现出强泛化能力,表明基于AST的结构编码能够捕捉与语言无关的算法模式。
  • 使用AST2vec嵌入提升了表示学习效果,有效保留了AST节点之间的语义与语法关系。
  • 即使移除标识符名称,模型性能依然稳健,表明仅依靠结构特征即可实现高精度分类。
  • 该方法在跨语言代码克隆检测、算法专利分析及自动化错误修复方面具有应用前景,且可扩展至更多语言与算法。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。