CN115729532B - 基于生成对抗网络的Java程序方法名推荐方法及系统 - Google Patents
基于生成对抗网络的Java程序方法名推荐方法及系统 Download PDFInfo
- Publication number
- CN115729532B CN115729532B CN202310036231.7A CN202310036231A CN115729532B CN 115729532 B CN115729532 B CN 115729532B CN 202310036231 A CN202310036231 A CN 202310036231A CN 115729532 B CN115729532 B CN 115729532B
- Authority
- CN
- China
- Prior art keywords
- method name
- syntax tree
- abstract syntax
- name
- java program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及Java程序方法名推荐技术领域,公开了基于生成对抗网络的Java程序方法名推荐方法及系统,该方法,包括以下步骤:S1,代码预处理;S2,方法名生成;S3,方法名判别;S4,生成对抗网络训练。本发明解决了现有技术存在的模型结构臃肿、针对性强、数据准备阶段消耗了大量的人工精力、不具有实用性等问题。
Description
技术领域
本发明涉及Java程序方法名推荐技术领域,具体是基于生成对抗网络的Java程序方法名推荐方法及系统。
背景技术
随着信息产业的快速发展,从工业自动化生产到日常生活,软件已经融入人类社会的方方面面。然而,随着软件功能的日益复杂,软件维护难、成本高已经成为了现阶段急需解决的一大问题。开发人员在软件开发、更新迭代过程中使用了不恰当的变量名、方法名等,导致后续维护人员难以理解代码,增加软件维护的时间;开发人员对方法功能的扩充且没有及时的更新方法名,导致其他开发人员错误的使用方法,得到不正确的结果。这些情况都会导致软件代码可读性差、增加软件项目维护的难度、影响软件的质量。一个不适当的方法名,不仅会降低代码可读性,还会影响开发人员的工作心情、降低开发人员工作效率。因此,一个高质量、见名知意的方法名可以增加开发人员的工作效率、提高软件项目的可读性,从而降低软件项目的维护难度、减少维护费用。
现有技术方案:
北京工业大学的专利申请“一种基于两阶段框架的Java方法名推荐方法”(专利号:202110646079.5),该方法包括:首先通过启发式规则为Java方法中的getter/setter方法、delegations方法进行命名。第一步根据不同方法的方法名前缀对方法进行分类。第二步,针对特定前缀开头的方法采用基于频率的启发式规则来推荐方法名,而对于其他类型的方法采用RecursiveRNN来生成对应的方法名。该方法的缺点是,对于不同类型的方法名,所使用的推荐方法不同,且并未使用代码本身的结构信息,模型结构臃肿,针对性强。
北京工业大学的专利申请“一种基于seq2seq模型的Java方法名推荐方法”(专利号:202110727637.0),该方法包括:Java方法名采集阶段,从知名开源组织下采集基于Java语言的项目Git仓库,并提取Git仓库中的Java方法名。建立Java方法名词库阶段:提取Java方法名中的高频率标记,并采用人工标注的方式来为标注中文语义。建立中文同义词库阶段:通过人工标注的方式来为Java方法名词库中已经标记好中文的中文标记标注其同义词。创建数据样本阶段:采用人工标注的方式来为Java方法名标注中文语义。当开发者输入中文方法名,模型seq2seq会输出英文的方法名。方法名推荐阶段帮助中文开发者将中文方法名输入到seq2seq模型中,模型输出相应的Java方法名。该方法的缺点在于,数据准备阶段消耗了大量的人工精力,且功能为输入中文方法名推荐英文方法名,不具有实用性。
发明内容
为克服现有技术的不足,本发明提供了基于生成对抗网络的Java程序方法名推荐方法及系统,解决现有技术存在的模型结构臃肿、针对性强、数据准备阶段消耗了大量的人工精力、不具有实用性等问题。
本发明解决上述问题所采用的技术方案是:
基于生成对抗网络的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)是基于注意力机制的门控循环单元网络。
作为一种优选的技术方案,步骤S3采用卷积神经网络结构进行方法名判别,以判别方法名是由步骤S2生成的虚假方法名还是源码的真实方法名。
作为一种优选的技术方案,步骤S3包括以下步骤:
S31,对输入方法名判别器的方法名
X使用不同尺寸的卷积核进行卷积操作,同一个尺寸的卷积核有多个,卷积计算如下:
其中,是方法名序列中第个单词到第
i+
h-1个单词的子序列,|
vocab|是词汇表的大小,是尺寸为
h的卷积核参数矩阵,
b是偏置项,是单词经过卷积操作并拼接后生成的特征词,
k是同一尺寸卷积核的数量;
S32,对于方法名
X进行卷积操作有:
S33,将
U经过全连接层,得到二分类结果:
其中,是全连接层的系数矩阵,
b是偏置项,
P是一个二维向量,
P中两个向量元素分别是预测为正样本、负样本的概率。
作为一种优选的技术方案,步骤S4包括以下步骤:
S41,由步骤S3根据方法的抽象语法树路径集合
S生成推荐方法名;
S42,将推荐方法名输入S3,得到推荐方法名的分类概率,然后将分为负样本的概率大小作为奖励,并基于奖励计算出S2和S3的损失值和梯度。
基于生成对抗网络的Java程序方法名推荐系统,其特征在于,用于实现所述的基于生成对抗网络的Java程序方法名推荐方法,包括依次连接的以下模块:
代码预处理模块:用以将方法源代码解析成为抽象语法树,并抽取出Java程序代码的抽象语法树中所有两个终端节点之间的路径作为抽象语法树路径;
方法名生成模块:用以基于Java程序代码的抽象语法树路径,给出推荐的Java程序方法名;
方法名判别模块:用以判别待判别方法名是否由步骤S2所生成,并给出评分;
生成对抗网络训练模块:基于步骤S3所给出的评分,分别计算出步骤S2和步骤S3的损失值和梯度,并根据损失值和梯度优化步骤S2和步骤S3中的参数;
代码预处理模块还直接与方法名判别模块连接,方法名生成模块还直接与生成对抗网络训练模块连接。
本发明相比于现有技术,具有以下有益效果:
(1)本发明使用生成对抗网络,方法名生成器可以根据代码的内容,推荐符合代码语义的方法名;方法名判别器负责给推荐的方法名评分,并将评分作为奖励,反馈给方法名生成器;本发明通过生成器与判别器之间的互相博弈训练,进一步提高了方法名推荐的质量,有助于开发人员理解代码内容、降低软件项目后期维护成本;
(2)本发明将Code2Seq加入对抗生成网络模型的CodeGAN在三个指标(Precision、Recall、F1)中都领先于Code2Seq;使用生成对抗网络模型的训练方法可以明显提升Code2Seq的性能,提高方法名的推荐质量;并且CodeGAN的性能指标也处于前列,在平衡Precision和Recall的F1中表现超过了其他所有模型。
附图说明
图1为第一段Java方法的源代码示意图;
图2为图1所呈现代码段对应的抽象语法树示意图;
图3为第二段Java方法的源代码示意图;
图4为图3所呈现的代码段对应的抽象语法树图;
图5为本发明提出的方法名推荐模型架构图;
图6为代码预处理模块图;
图7为本发明所提出的Java方法名生成器结构图;
图8为本发明提出的Java方法名判别器结构图。
具体实施方式
下面结合实施例及附图,对本发明作进一步的详细说明,但本发明的实施方式不限于此。
实施例1
如图1至图8所示,本发明公开了基于生成对抗网络的Java程序方法名推荐系统。该系统主要包括以下模块:
(1)代码预处理模块:将代码解析成为抽象语法树,并抽取出代码的抽象语法树中所有两个终端节点之间的路径作为抽象语法树路径。
(2)方法名生成器模块:此模块为Encoder-to-Decoder(端到端)模型,分为编码器和解码器两个部分。编码器使用循环神经网络将代码的抽象语法树路径编码为一个隐含特征向量;解码器使用带有注意力机制的循环神经网络解码隐含特征向量,并给出推荐方法名。
(3)方法名判别器模块:使用卷积神经网络作为判别器,判别所给的方法名是否由方法名生成器模块所生成,并给出评分。
(4)生成对抗网络训练模块:将方法名判别器模块所给出的评分作为方法名生成器模块的反馈用来优化方法名生成器,评分越高,说明所推荐的方法名质量越高。
本发明使用生成对抗网络,方法名生成器可以根据代码的内容,推荐符合代码语义的方法名;方法名判别器负责给推荐的方法名评分,并将评分作为奖励,反馈给方法名生成器。该方法通过生成器与判别器之间的互相博弈训练,进一步提高了方法名推荐的质量,有助于开发人员理解代码内容、降低软件项目后期维护成本。
抽象语法树是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。抽象语法树的终端节点表示源代码中的数据类型声明、变量名、方法名等信息;非终端节点表示源代码中的语法结构,如:if操作、for操作等。抽象语法树路径是指抽象语法树中任意一个终端节点到达另外一个终端节点所经过的节点序列。如图1与图3所示,两个方法都是统计字符串内某个字符的个数,但是它们在变量、参数、逻辑结构等上有不同之处。图2是图1所呈现的Java代码段的抽象语法树,图4是图3中所呈现的Java代码段的抽象语法树,即使代码实现逻辑之间有明显差异,但是它们所实现的功能相似,那么它们之间会拥有相似或者相同的抽象语法树路径,比如在图2与图4中标示的三条抽象语法树路径:
Primitive-Method Declaration-Block-Return-
Name、
Name-Method Call-Name、
Integer-VariableDeclarator-VerDec-Block-DoStmt/
ForStmt-Block-IfStmt-Block-Increment-VarDecId,因此可以根据抽象语法树路径信息为Java方法代码自动推荐合适的方法名。
生成对抗网络,通常由生成器
G和判别器
D两部分组成。生成器的目标是生成出高质量的样本来迷惑判别器
D,使判别器
D无法区分生成样本和真实样本,并且根据判别器
D的反馈来优化自己。而判别器
D努力区分出生成样本和真实样本,并给予生成器
G反馈。生成器
G和判别器
D通过这种博弈训练互相提升自身的性能,最终目的是生成器
G生成的样本与真实样本一致,而判别器
D无法正确分区生成样本和真实样本。
本发明主要包括四个模块:代码预处理模块、方法名生成器模块、方法名判别器模块和生成对抗网络训练模块。方法名推荐模型架构图如图5所示。
1、代码预处理模块
代码预处理模块如图6所示。给定方法源代码
C,我们将
C构建为抽象语法树
T,并将
T中的节点
N分为三类:非终端节点、终端节点中的方法名节点和其余终端节点,在图2中分别对应椭圆形节点、菱形节点和方形节点。对一个终端节点到达其他终端节点所经过的路径被称为抽象语法树路径。和可能由多个单词组成,并且将视为只由一个单词组成,因此对、 分词后,有,,,。其中,分别为的词汇表。为方法源代码
C的方法名
M分词后的
i个单词。是终端节点分词后第
i个单词。是非终端节点的单词表示。
即,对于代码
C经过代码预处理模块后,可得抽象语法树路径集合
S:
其中,是终端节点到终端节点的抽象语法树路径。为终端节点分词后的单词序列。为终端节点与之间抽象语法树路径的非终端节点单词序列。为终端节点分词后第
l个单词。
方法源代码
C的方法名
M为:
2、方法名生成器模块
方法名生成器
G的任务是生成高质量的方法名,本方法中方法名生成器采用编码器/解码器结构,方法名生成器结构图如图7所示。
2.1 编码器
经过上一步对代码的预处理,我们可以将一个源代码转换为抽象语法树路径集合
S。而是抽象语法树路径的逻辑表示,由一系列单词序列组成,并不能直接输入神经网络中。因此,需要对进行向量表示化,将单词从非欧几里得空间映射到欧几里得空间中:
其中,是的向量表示。是的长度。
d是向量表示的维度。是的向量表示。是的长度。是的向量表示。是中第
k个单词的向量表示。
对于
S中的一条确定的抽象语法树路径的计算流程如下。
其中,
sum(
x)是对
x中的向量求和。是中所有向量的和。LSTM,全称Long Short-Term Memory(长短期记忆神经网络),是一种特殊的循环神经网络。是经过LSTM编码后的向量表示。LSTM的计算流程如下:
其中,是时间步
t时LSTM的输入。是时间步
t时LSTM输出的隐状态。表示向量是按照列拼接的。
tanh(
x)是激活函数。
z是由拼接向量乘以权重矩阵
W之后,再通过一个
tanh激活函数将输出转换成-1到1之间的值。是
sigmoid激活函数。是由拼接向量分别乘以权重矩阵,再通过一个
sigmoid激活函数转换成0到1之间的数值,来作为一种门控状态。是哈玛达积,也就是操作向量中对应位置元素相乘。是时间步
t时,LSTM输出的细胞状态。是时间步
t时,LSTM的输出结果。
经过公式(5)和(6)的计算,有:
其中,
encode_token(
x)是公式(5)和(6)。是编码后的向量表示。
然后,将输入全连接层,将从映射到中:
其中,是全连接层的权重矩阵。是经过全连接成映射到中的向量表示。
公式(4)-(15)是一条确定的抽象语法树路径的计算过程。
S中其他的抽象语法树路径计算过程与相同,对于
S可以得到:
其中,
encode(
S)是公式(4)-(15)。
2.2 解码器
由方法源代码解析获得的抽象语法树路径集合中包含多条抽象语法树路径,而每条抽象语法树路径对于代码语义、方法命名的重要程度不同。比如Java代码中常出现的getter方法,在getter方法中,return语句对getter方法命名很重要。当一个Java方法有返回值,并且没有参数,那么这个方法可能更适合命名为getXXX,而不是setXXX。因此,对于所包含的抽象语法树路径,它们的重要程度并不是相同的,模型需要自动学习区分这些抽象语法树路径的重要程度,这就引入了注意力机制。
注意力机制实际上就是将人的感知方式、注意力的行为应用在机器上,让机器学会去感知数据中重要和不重要的部分。如人在观察一张图片时,人们很难全面的观察图片中所有的部分,而会将大部分的注意力集中在某个部分上。使用注意力机制可以自动学习每条抽象语法树路径的重要程度,也就是抽象语法树路径的权重值。本发明使用基于注意力机制的GRU对编码器的输出
R进行解码,获得预测方法名。
GRU,全称Gate Recurrent Unit(门控循环单元),是循环神经网络的一种,和LSTM类似,都是为了解决长期记忆和反向传播中的梯度等问题提出的。GRU的计算流程如下:
其中,、是由拼接向量分别乘以权重矩阵、再通过一个
sigmod激活函数转换成0到1之间的数值,来分别作为重置门控状态、更新门控状态。是上一个时间步
t-1时刻的隐状态经过重置门后的数据。是由拼接向量乘以权重矩阵
W之后,再通过一个
tanh激活函数将输出转换成-1到1之间的值。与相等,分别是当前时间步的输出结果和隐状态。
在本方法中,我们将起始隐状态设为编码后抽象语法树路径向量的平均值:
其中,
mean(
x)是对
x中所有向量求平均值。|
R|是方法源代码
C中抽象语法树路径的个数。基于注意力机制的GRU所有时间步的输入
X为:
其中,
ATTENTION是注意力机制,计算流程如下:
其中,分别是查询矩阵、关键矩阵、价值矩阵。
softmax(
x)是一种激活函数,它可以将向量
x归一化为一个概率分部向量,且各个概率之和为1。是经过
ATTENTION计算后的
R。
即,预测方法名为:
其中,
argmax(
x)是获取向量
x中最大数值的索引,即最大单词预测概率的索引。
ATTENTION_GRU(
R)是公式(17)-(27)。
综上所述,方法名生成器的计算流程可以记为:
其中,
G就是公式(3)-(28)。
3、方法名判别器模块
方法名判别器
D采用卷积神经网络结构,其目标是判别方法名是方法名生成器
G生成的,还是样本真实的方法名,并且给予方法名生成器
G反馈,来优化方法名生成器
G。而且方法名判别器只需判别方法名是由生成器
G生成的虚假方法名还是源码的真实方法名,因此方法名判别器
D的任务是一个二分类问题。Java方法名判断器结构图如图6所示。
首先,对输入
X使用不同尺寸的卷积核进行卷积操作,同一个尺寸的卷积核有多个,卷积计算如下:
其中,是单词序列中第
i个单词到第
i+
h-1个单词的子序列。是词汇表的大小。是尺寸为
h的卷积核参数矩阵,
b是偏置项。同一个尺寸的卷积核有多个,因此需要对同一尺寸不同卷积核卷积操作后的特征词向量使用最大池化(
maxpooling)操作并将其拼接。是单词经过卷积操作并拼接后生成的特征词,
k是同一尺寸卷积核的数量。
对于整个单词序列
X进行卷积操作有:
最后,将
U经过全连接层,得到二分类结果:
其中,是全连接层的系数矩阵。
P是一个二维向量,分别是预测为正、负样本的概率。
综上所述,方法名判别器的计算流程可以记为:
其中,
X为单词序列。
D就是公式(30)-(32)。
4、生成对抗网络训练模块
方法名生成器
G的输出结果是,是一个单词序列,都是文本数据;而方法名判别器
D的输入是单词序列的独热编码向量,从文本数据到独热编码向量是不可导的,因此想要完成方法名判别器
D与方法名生成器
G共同训练需要解决不可导的问题。
本方法采用强化学习的方式:首先,由方法名判别器
D根据方法的抽象语法树路径集合
S生成推荐方法名;其次,将推荐方法名输入方法名判别器
D,得到预测方法名的分类概率,并且将分为负类的概率大小作为对方法名判别器的反馈:
其中,为交叉熵损失。为方法名生成器
G的损失函数。为方法名判别器
D的损失函数。
Y为全0向量,表示是由方法名生成器
G生成的,全部为负类样本。
本方法所提出的模型命名为CodeGAN,我们从三个指标上测试了模型的效果,分别是:Precision(准确率)、Recall(召回率)、F1,如表1所示。
将Code2Seq改进为对抗生成网络模型CodeGAN可以明显提高方法名生成的质量和可靠性。本发明提出的CodeGAN比没有加入对抗生成网络模型的Code2Seq的Precision高0.0118,Recall高0.0173,F1高0.0160。而且,CodeGAN虽然Precision比ConvAttention低0.0177,但是CodeGAN的Recall值比高0.0440,F1高0.0315。CodeGAN的Precision、Recall与F1值在所有模型中是最高的。
综上所述,将Code2Seq加入对抗生成网络模型的CodeGAN在三个指标中都领先于Code2Seq。使用生成对抗网络模型的训练方法可以明显提升Code2Seq的性能,提高方法名的推荐质量。并且CodeGAN的性能指标也处于前列,在平衡Precision和Recall的F1中表现超过了其他所有模型。
表1 模型指标对比表
本发明设计了一个基于生成对抗网络的Java方法名推荐系统,这个系统可以根据代码的内容信息推荐适合的方法名。
本发明设计了一个针对基于生成对抗网络的Java方法名推荐系统的训练优化方法,该训练优化方法可以解决判别器与生成器之间函数不可导的问题。
作为替换的技术方案,可以将技术方案中的方法名生成模块所使用的编码器/解码器结构替换为其他的编码器/解码器结构。
作为替换的技术方案,可以将技术方案中的方法名判别模块所使用的基于卷积神经网络的分类器替换为其他结构的分类器。
如上所述,可较好地实现本发明。
本说明书中所有实施例公开的所有特征,或隐含公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合和/或扩展、替换。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质,在本发明的精神和原则之内,对以上实施例所作的任何简单的修改、等同替换与改进等,均仍属于本发明技术方案的保护范围之内。
Claims (5)
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中的参数;
代码预处理模块还直接与方法名判别模块连接,方法名生成模块还直接与生成对抗网络训练模块连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310036231.7A CN115729532B (zh) | 2023-01-10 | 2023-01-10 | 基于生成对抗网络的Java程序方法名推荐方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310036231.7A CN115729532B (zh) | 2023-01-10 | 2023-01-10 | 基于生成对抗网络的Java程序方法名推荐方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115729532A CN115729532A (zh) | 2023-03-03 |
CN115729532B true CN115729532B (zh) | 2023-04-18 |
Family
ID=85302007
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310036231.7A Active CN115729532B (zh) | 2023-01-10 | 2023-01-10 | 基于生成对抗网络的Java程序方法名推荐方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115729532B (zh) |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050125280A1 (en) * | 2003-12-05 | 2005-06-09 | Hewlett-Packard Development Company, L.P. | Real-time aggregation and scoring in an information handling system |
US10983761B2 (en) * | 2019-02-02 | 2021-04-20 | Microsoft Technology Licensing, Llc | Deep learning enhanced code completion system |
US11176330B2 (en) * | 2019-07-22 | 2021-11-16 | Advanced New Technologies Co., Ltd. | Generating recommendation information |
WO2022101515A1 (en) * | 2020-11-16 | 2022-05-19 | UMNAI Limited | Method for an explainable autoencoder and an explainable generative adversarial network |
CN113609394B (zh) * | 2021-08-09 | 2023-09-05 | 上海交通大学 | 面向信息流的安全推荐系统 |
CN114327609A (zh) * | 2021-12-31 | 2022-04-12 | 北京航空航天大学 | 一种代码补全方法、模型和工具 |
CN114896514B (zh) * | 2022-07-14 | 2022-09-30 | 西安电子科技大学 | 一种基于图神经网络的Web API标签推荐方法 |
-
2023
- 2023-01-10 CN CN202310036231.7A patent/CN115729532B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN115729532A (zh) | 2023-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109359293B (zh) | 基于神经网络的蒙古文命名实体识别方法及其识别系统 | |
CN111985245A (zh) | 基于注意力循环门控图卷积网络的关系提取方法及系统 | |
CN110309511B (zh) | 基于共享表示的多任务语言分析系统及方法 | |
CN113987187B (zh) | 基于多标签嵌入的舆情文本分类方法、系统、终端及介质 | |
CN112734881A (zh) | 基于显著性场景图分析的文本合成图像方法及系统 | |
CN112309528B (zh) | 一种基于视觉问答方法的医疗影像报告生成方法 | |
CN115510814B (zh) | 一种基于双重规划的篇章级复杂问题生成方法 | |
CN115048447B (zh) | 一种基于智能语义补全的数据库自然语言接口系统 | |
CN114926150A (zh) | 一种变压器技术符合性评估数字化智能审核方法与装置 | |
CN116204674B (zh) | 一种基于视觉概念词关联结构化建模的图像描述方法 | |
CN113657123A (zh) | 基于目标模板指导和关系头编码的蒙语方面级情感分析方法 | |
CN110084323A (zh) | 端到端语义解析系统及训练方法 | |
CN115858750A (zh) | 基于自然语言处理的电网技术标准智能问答方法及系统 | |
CN117648429A (zh) | 基于多模态自适应检索式增强大模型的问答方法及系统 | |
CN110852066A (zh) | 一种基于对抗训练机制的多语言实体关系抽取方法及系统 | |
CN115729532B (zh) | 基于生成对抗网络的Java程序方法名推荐方法及系统 | |
CN113590745B (zh) | 一种可解释的文本推断方法 | |
CN112528003B (zh) | 一种基于语义排序和知识修正的多项选择问答方法 | |
CN115033692A (zh) | 一种面向机器阅读理解的问题生成方法 | |
CN116468030A (zh) | 一种基于多任务神经网络的端到端方面级情感分析方法 | |
CN110955768A (zh) | 一种基于句法分析的问答系统答案生成方法 | |
Wu et al. | Mitigating idiom inconsistency: A multi-Semantic Contrastive Learning Method for Chinese idiom reading comprehension | |
CN116681087B (zh) | 一种基于多阶段时序和语义信息增强的自动问题生成方法 | |
CN116227428B (zh) | 一种基于迁移模式感知的文本风格迁移方法 | |
CN118095261B (zh) | 一种文本数据处理方法、装置、设备以及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |