Page 229 - 《软件学报》2021年第7期
P. 229
牛长安 等:基于指针生成网络的代码注释自动生成模型 2147
码行的特征向量,然后采用信息增益去除掉不相关的特征维度,之后使用一系列机器学习算法训练模型.林泽琦
等人 [35] 在文档语义搜索方法中,从源代码的 AST 中提取源代码的 4 种代码元素和 11 种结构依赖关系构成代码
结构图,然后将文档的语义表示为代码结构图上的一个带权子图,接着计算两者之间的相似度以度量源代码和
文档之间的语义相似度.
Mou 等人 [36] 在程序功能自动识别方法中使用基于树的卷积神经网络(TBCNN),在程序的 AST 上设计了卷
积内核以捕获结构信息.TBCNN 是用于编程语言处理的通用架构,实验结果表明,TBCNN 优于很多用于 NLP 的
神经网络模型.Cao 等人 [37] 在为源代码与文档之间建立可追溯性的链接中,提出了一种基于决策树的方法,用于
识别软件文档中的显著代码元素和上下文代码元素.不仅关注文档中代码段的词法特征,还关注源代码的语义
特征,量化了软件文档中显著代码元素和上下文代码元素的 4 种文档相关功能和类型(type)、关系(relation)、距
离(distance)这 3 种代码相关功能.API 使用代码推荐方法 DeepAPIRec [38] 由语句预测的深层学习模型(称为语句
模型)和参数具体化统计模型(称为参数模型)组成,其中,语句模型使用基于树的 LSTM(tree-LSTM)从 AST 和源
代码的控制流中提取代码树,从而学习 API 使用和程序结构模式.Tai 等人 [39] 提出的 Tree-LSTM 用来解决自然
语言表现出来的句法特性,即可以自然地将单词组合成短语,在预测两个句子的语义相关性和情感分类两项任
务上,Tree-LSTM 的表现优于所有基线,包括 LSTM.
2 CodePtr
本文首先针对 Hybrid-DeepCom 在试图解决输入端 OOV 问题时带来的两个输入之间不一致的问题,通过
增加一个编码器消除了其中的不一致,提出了 CodePtr-PGN,然后,为了进一步解决输出端的 OOV 词问题,本文
通过引入指针生成网络,提出了 CodePtr.
CodePtr 的整体框架图如图 3 所示,与 Hybrid-DeepCom 和无指针生成网络的 CodePtr 之间的差异将在下方
给出说明.
Fig.1 Overall framework of CodePtr
图 1 CodePtr 的总体结构
其中,将“Pointer-generator network”模块以及相关的连线删去后就得到了 CodePtr-PGN,CodePtr 中,Source