1)论文题目解读:用自监督学习的方式来进行代码表征的学习,自监督的子任务是预测子树
2)论文思想:InferCode模型类似于bert也是一个预训练模型,可以运用在许多下游任务例如:无监督任务:Code Clustering、Code Clone Detection…;有监督任务:Code Classification,Method Name Prediction…
3)前期准备:使用tree_sitter工具将每个代码片段生成AST(抽象语法树)并从AST中将节点类型为{exper,decl,exper_stmt,condition}的节点抽取子树,并保存至子树词汇表中。
4) 实现步骤:
1.整体实现流程图
2.学习AST的节点特征
2.1 AST中的每个节点包含其相应的文本特征(token)和类型特征(type),根据他的节点的文本和类型信息初始化Wtype和Wtoken矩阵。如图最左边所示,Wtype和Wtoken进行合并操作后在进行一个线性变化,就形成了节点的初始化embedding
2.2 通过TBCNN卷积层学习节点信息
子树特征探测器—基于树的卷积核(固定窗口深度)
由于每个节点包含的子节点树都不同,所以导致权重矩阵里的参数都不能确定。解决方法,初始化三个矩阵Wt,Wr,Wl,卷积核的权重矩阵根据节点在窗口中的深度和位置的不同进行一个线性组合。
详细的解释可以参考TBCNN的论文TBCNN
3.聚合节点信息
将TBCNN中的最大池化层用attention来代替,初始化attention向量a
4.预测子树
5.实验效果
6.参考文献
1.《InferCode: Self-Supervised Learning of Code Representations by Predicting Subtrees》 2. 《Convolutional Neural Networks over Tree Structures for Programming Language Processing》 3.《Distributed Representations of Sentences and Documents》
|