论文笔记《Cross-Language Learning for Program Classification using Bilateral Tree-Based Convolutional Ne

Cross-Language Learning for Program Classification using Bilateral Tree-Based Convolutional Neural Networks

https://arxiv.org/abs/1710.06159

概述:

        为了实现将使用了某种算法的代码从一种编程语言转换成另一种编程语言,本文提出了一种基于双边树的卷积神经网络进行自动程序分类的方法。他的分层是在两个基于树的卷积神经网络之上,这两个网络都可以识别不同编程语言的代码算法。网络的组合层可以识别不同编程语言中代码的相似性和差异性。BiTBCNN使用不同语言的源代码进行训练,而这些代码的算法或功能是已知的。在初步的评估中,我们使用从Github抓取的6种算法的3591条java和3534条C++的代码片段。在跨语言的二进制分类任务中,判断任意给定的两个代码片段是否使用了相同的算法,准确率达到了90%。此外,在算法分类任务中,即判断任意给出的c++代码片段实现的是6中算法中的哪一种,准确率达到了80%。

 

        论文提出使用双边神经网络(BINNS),这是一种最初开发用来处理自然语言句子的技术,用于识别不同语言的代码片段是否具有相似语言和潜在语义。作者的基本思想是构建独立的子网用来编码不同编程语言的抽象语法树,然后构建子网的组合层,分析不同编程语言的代码结构之间的相似性和差异性。

抽象语法树:是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上每个节点都表示源代码中的一种结构。 可参考:https://www.cnblogs.com/qinmengjiao123-123/p/8648488.html

论文笔记《Cross-Language Learning for Program Classification using Bilateral Tree-Based Convolutional Ne

 

论文提出的BiTBCNN主要由三个主要结构组成:1.BiNN使用softmax操作结构化的数据进行分类;2.一种基于树的卷进神经网络(TBCNNs)的变种,用来编码BiNNs的每一侧的AST结构,可以选择不同的编程语言;3.AST的统一编码,可以进行跨语言程序分类。

TBCNNs:每个抽象语法树的节点通过编码层的处理,表示为一个向量,它的任务是将抽象语法树节点的方法嵌入到一个连续的向量空间中(语义相似的方法被映射到附近的点。) 比如方法”while“和”for“是相似的(都是循环语句)。

        子网改编自TBCNN,每个子网都将抽象语法树的程序作为输入,TBCNNs通过一个卷积步骤提取这个树中的信息。在论文的例子中,每个TBCNN在池化层之后,将得到每个程序的向量表示,并将两个向量合并为一个向量,称之为”联合特征表示层“,接着在联合特征表示层上有两个完全连接的隐藏层,并且连接着softmax层,用来分类(如果输入的两个程序引用的相同的算法)

论文笔记《Cross-Language Learning for Program Classification using Bilateral Tree-Based Convolutional Ne

所训练的模型可处理两个问题:1.所提供代码片段的使用算法是什么?2.任意两种不同编程语言的代码片段是否使用了同一种算法。

 

代码地址:需要docker环境

https://github.com/yijunyu/bi-tbcnn