TREECAPS:TREE-STRUCTURED CAPSULE NETWORKS FOR PROGRAM SOURCE CODE PROCESSING 读后心得

1、论文

论文要解决的问题是:读懂代码功能,对代码功能进行分类。

之前的技术为啥不行?与自然语言不同的是,编程语言有明确的语法定义,可编译的源代码必须遵循严格的语法结构。所以一般的技术无法处理。目前Tbcnns接受源代码的抽象语法树(Asts)作为输入,并捕获代码元素之间显式的、结构化的父-子兄弟关系。但是不能同时捕捉语法结构与依赖信息。

本文中提出的模型:Treecaps  树胶囊网络。

胶囊网络相比于cnn能够获得空间信息,能够保证代码的层次性。

2模型原理

1.输入的数据集是可以运行的代码。模型无法直接对代码直接进行处理。需要进行转换,首先将源代码转为抽象语法树AST,再将AST通过word2vec技术矢量化。如下图所示:

 

2.处理好的数据集输入到胶囊网络模型中,该论文中提到的胶囊网络是改进的胶囊网络。网络由5层构成,其中隐藏层包括PVC层、PSC层、CC层。如下图所示:

 

3.在PSC层中,矢量化的AST树需要进行卷积操作,因为树的大小因程序不同,树的高度也不同。因节点的不同引起的子节点的不同(ps:这里理解的是int a 和double a的区别)。所以在卷积核的大小无法固定。文章中采用了 Convolutional neural networks over tree structures for programming language processing.这篇文章提出的二叉连续树方法。讲卷积核模拟为一个二叉树。如下图所示:

 

分别为Wt、Wr、Wl。Nti,Nli,Nri是与子节点的深度和位置相对应的权重。如Tbcnn卷积方式类似,卷积过程如下图:

 

卷积的公式如下:

 

激活函数是用的tanh,初始化b=0。经过胶囊网络不断前向传播。最后得到Xpsc。

4.动态路由转静态是本文的亮点,经过PSC层处理后的到结果,还是不同的,那为什么还要有PSC层呢,卷积的操作是可以降低树的高度差异的,为了更好处理。动态转静态的方式是Xpsc中的每个节点进行L2 norm。然后进行排序。将排序后的第一个值取出。经验上,并非AST的每个节点对源代码分类都有作用。有点topb的意思。(这快我还没看明白)

5.CC层是普通的胶囊网络层,是把psc处理好的数据进行特征提取。然后经过softmax层输出对应的预测结果。胶囊网络摒弃了BP算法。根据有空间意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值