1.基于生成对抗网络的Java程序方法名推荐方法,其特征在于,包括以下步骤:S1,代码预处理:将Java程序代码解析成为抽象语法树,并抽取出Java程序代码的抽象语法树中所有两个终端节点之间的路径作为抽象语法树路径;
S2,方法名生成:基于Java程序代码的抽象语法树路径,给出推荐的Java程序方法名;
S3,方法名判别:判别待判别方法名是否由步骤S2所生成,并给出评分;
S4,生成对抗网络训练:基于步骤S3所给出的评分,分别计算出步骤S2和步骤S3的损失值和梯度,并根据损失值和梯度优化步骤S2和步骤S3中的参数;
步骤S1中,方法源代码C经过代码预处理模块后,可得抽象语法树路径集合S:
其中,是终端节点到终端节点的抽象语法树路径,为终端节点分词后的单词序列,为终端节点与之间抽象语法树路径的非终端节点单词序列,为终端节点分词后第l个单词,、表示抽象语法树中两个终端节点的编号,表示从终端节点到终端节点的抽象语法树路径中非终端节点的数量,表示非终端节点集合,表示非终端节点集合中第个非终端节点;
对一个终端节点到达其他终端节点所经过的路径为抽象语法树路径;
步骤S2中,利用编码器和解码器进行方法名生成;其中,编码器使用循环神经网络将代码的抽象语法树路径编码为一个隐含特征向量;解码器使用带有注意力机制的循环神经网络解码隐含特征向量,并给出推荐方法名;
步骤S2中,对于S:
其中,R是隐含特征向量,encode(S)是方法名生成器中编码器的计算结果,是抽象语法树路径集合S中的抽象语法树路径,是映射到中的向量表示,是编码后的向量表示,是的向量表示,d是的向量维度,n是终端节点的个数;
步骤S2中,推荐方法名为:
其中,argmax(x)是获取向量x中最大数值的索引,指最大单词预测概率的索引,ATTENTION_GRU(R)是基于注意力机制的门控循环单元网络。
2.根据权利要求1所述的基于生成对抗网络的Java程序方法名推荐方法,其特征在于,步骤S3采用卷积神经网络结构进行方法名判别,以判别方法名是由步骤S2生成的虚假方法名还是源码的真实方法名。
3.根据权利要求2所述的基于生成对抗网络的Java程序方法名推荐方法,其特征在于,步骤S3包括以下步骤:S31,对输入方法名判别器的方法名序列X使用不同尺寸的卷积核进行卷积操作,同一个尺寸的卷积核有多个,卷积计算如下:
其中,是方法名序列中第个单词到第i+h-1个单词的子序列,|vocab|是词汇表的大小,是尺寸为h的卷积核参数矩阵,b是偏置项,是单词经过卷积操作并拼接后生成的特征词,k是同一尺寸卷积核的数量,表示向量表示的维度,表示方法名序列X中单词的数量;
S32,对于方法名X进行卷积操作有:
S33,将U经过全连接层,得到二分类结果:
其中,是全连接层的系数矩阵,b是偏置项,P是一个二维向量,P中两个向量元素分别是预测为正样本、负样本的概率。
4.根据权利要求1至3任一项所述的基于生成对抗网络的Java程序方法名推荐方法,其特征在于,步骤S4包括以下步骤:S41,由步骤S3根据方法的抽象语法树路径集合S生成推荐方法名;
S42,将推荐方法名输入S3,得到推荐方法名的分类概率,然后将分为负样本的概率大小作为奖励,并基于奖励计算出S2和S3的损失值和梯度。
5.基于生成对抗网络的Java程序方法名推荐系统,其特征在于,用于实现权利要求1至4任一项所述的基于生成对抗网络的Java程序方法名推荐方法,包括依次连接的以下模块:代码预处理模块:用以将方法源代码解析成为抽象语法树,并抽取出Java程序代码的抽象语法树中所有两个终端节点之间的路径作为抽象语法树路径;
方法名生成模块:用以基于Java程序代码的抽象语法树路径,给出推荐的Java程序方法名;
方法名判别模块:用以判别待判别方法名是否由步骤S2所生成,并给出评分;
生成对抗网络训练模块:基于步骤S3所给出的评分,分别计算出步骤S2和步骤S3的损失值和梯度,并根据损失值和梯度优化步骤S2和步骤S3中的参数;
代码预处理模块还直接与方法名判别模块连接,方法名生成模块还直接与生成对抗网络训练模块连接。