CN115826947A - 一种基于命名模式的方法名称推荐方法 - Google Patents

一种基于命名模式的方法名称推荐方法 Download PDF

Info

Publication number
CN115826947A
CN115826947A CN202211547271.XA CN202211547271A CN115826947A CN 115826947 A CN115826947 A CN 115826947A CN 202211547271 A CN202211547271 A CN 202211547271A CN 115826947 A CN115826947 A CN 115826947A
Authority
CN
China
Prior art keywords
name
representing
training sample
director
hidden state
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.)
Pending
Application number
CN202211547271.XA
Other languages
English (en)
Inventor
徐玲
杨焱平
鄢萌
刘超
雷晏
张小洪
汪卫星
唐菊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chongqing University
Original Assignee
Chongqing University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Chongqing University filed Critical Chongqing University
Priority to CN202211547271.XA priority Critical patent/CN115826947A/zh
Publication of CN115826947A publication Critical patent/CN115826947A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种基于命名模式的方法名称推荐方法,该方法包括如下步骤:首先利用大规模数据集构建检索库,输入目标项目方法,通过代码的令牌级相似度,从检索库中检索出与目标项目方法最相似的方法;然后,使用搜索引擎得到上下文序列,使用最相似的方法的名称作为模式指导器,提供目标方法名称的命名模式;采用NamPat将目标方法的上下文信息与模式指导器相结合,进行方法名称推荐。本方法可以使得对未知的方法进行更准确的名称推荐。

Description

一种基于命名模式的方法名称推荐方法
技术领域
本发明涉及方法名称领域,特别涉及一种基于命名模式的方法名称推荐方法。
背景技术
有意义和简洁的方法名称通常反映了方法的功能,这有助于开发人员理解程序的行为。相反,误导性的方法名称可能会混淆开发人员,导致API滥用,导致软件缺陷。因此,为该方法找到一个合适的名称是至关重要的。实际上,构建一个高质量的方法名称是一项具有挑战性和耗时的任务。
为了获得有意义的方法名称,研究人员提出了各种自动化的方法来推荐有意义的方法名称。早期的研究主要采用信息检索(IR)方法,如Liu等人认为两种身体相似的方法应该有相似的名称。他们检索了类似的方法,并重用了它们的方法名。然而,在许多情况下,两种具有相似主体的方法被赋予不同的名称,因为它们可能有不同的语义或针对不同的任务。此外,基于红外线谱的方法不能推荐在训练数据中看不到的新方法名称。
随着深度学习的快速发展,研究人员使用深度学习技术来推荐合适的方法名称。基于编程语言可以从利用其语法的结构化性质的表示中大大获益的想法。Code2vec和Code2seq使用了抽象语法树(AST)中两个叶节点之间的一组路径来表示用于预测方法名称的方法体。Nguyen等人指出,对于方法命名,自然性因子,即程序实体的名称,比结构化表示更重要。因此,他们提出了MNire,它使用三种上下文(即实现上下文、接口上下文和封闭上下文)的程序实体标记来生成方法名称。Wang等人发现,MNire在处理内容很少的方法时仍然存在局限性,因此他们开发了Cognac,它引入了该方法的调用者/被调用者上下文作为先验知识来完成方法名称的推荐。
此种方法主要集中于引入更多的上下文信息,其中可能包含用于推荐方法名称的目标方法名称标记。它们的方法通常通过组合从上下文信息中提取的标记来生成方法名称,但是,此方法名称包含结构化的命名模式,而这种组合可能会导致方法名称的可读性较差。
发明内容
针对现有技术存在的上述问题,本发明要解决的技术问题是:如何更准确的对方法名称进行命名推荐。
为解决上述技术问题,本发明采用如下技术方案:一种基于命名模式的方法名称推荐方法,包括如下步骤:
S100:选取公开数据集,该公开数据集包括有若干个项目方法,随机从公开数据集中选取多个数据作为训练集P,对公开数据集中的数据进行单词提取得到词汇表,将训练集中的每一个项目方法作为一个训练样本;
S200:构建方法名称推荐模型NamPat,所述NamPat包括命名模式提取模块和方法名称生成模块;
所述命名模式提取模块包括搜索引擎检索模块和上下文提取模块,所述搜索引擎检索模块采用Lucene;
所述方法名称生成模块包括编码器一、编码器二和一个解码器,所述编码器一和编码器二均为单层双向神经网络,所述解码器为单层单向神经网络;
S300:从P中选取第p个训练样本,所述第p个训练样本包括若干个真实词令牌;
将第p个训练样本作为命名模式提取模块的输入,经过搜索引擎检索模块输出第p个训练样本的命名模式引导器;经过上下文提取模块输出第p个训练样本的上下文序列;
S400:将S300得到的命名模式引导器和上下文序列作为方法名称生成模块的输入,输出得到第p个训练样本的推荐方法名称;
S500:设置损失阈值,计算第p个训练样本的损失,当该第p个训练样本的损失小于损失阈值时,得到训练好的NamPat模型,并执行下一步;否则反向更新NamPat模型参数,并令p=p+1,且返回S300;
S600:将待推荐名称的项目方法输入训练好的NamPat模型中,得到对该项目方法的推荐方法名称。
作为优选,所述S400获取得到第p个训练样本的推荐方法名称的具体步骤如下:
S410:将第p个训练样本的命名模式引导器输入到编码器一中得到模式引导器嵌入向量x′,将第p个训练样本的上下文序列输入到编码器二中得到上下文嵌入向量x,表达式分别表示如下:
x′=(x′1,x′2,...,x′n);(1)
x=(x1,x2,...,xm);(2)
其中,x′n表示模式引导器中第n个词令牌嵌入向量,xm表示上下文序列中第m个词令牌嵌入向量,n表示x′的长度,m表示x的长度;
S420:使用Bi-LSTM单元对x′和x进行处理,计算得到上下文序列隐藏状态和模式引导器隐藏状态,具体表达式如下:
Figure BDA0003979877660000031
其中,
Figure BDA0003979877660000032
表示一个连接操作,
Figure BDA0003979877660000033
表示当前Bi-LSTM单元向右传播的隐藏状态,
Figure BDA0003979877660000034
表示从左向右上一单元的隐藏状态,
Figure BDA0003979877660000035
表示当前Bi-LSTM单元向左传播的隐藏状态,
Figure BDA0003979877660000036
表示从右向左上一单元的隐藏状态,hl表示当前单元的隐藏状态;xa为一个中间变量,无实际物理意义;
使用公式(3)、公式(4)和公式(5)分别计算上下文序列隐藏状态hi和模式引导器隐藏状态h′j,具体表述如下:
当xa∈{x1,x2,...,xm}时,得到hi=(h1,h2...hm),i=1,2,…,m;
当xa∈{x′1,x′2,...,x′n}时,得到h′j=(h′1,h′2...h′n),j=1,2,…,n;
S430:设置总体时间步T,从T中选择第t个时间步,计算在时间步t时解码器的隐藏状态st,具体表达式如下:
st=LSTM(st-1,yt-1);(6)
其中,st-1表示解码器之前的隐藏状态,yt-1表示一个词令牌的嵌入;
S440:分别计算上下文序列隐藏状态的权重和模式引导器隐藏状态的权重,计算表达式如下:
Figure BDA0003979877660000037
αt=softmax(et);(8)
其中,
Figure BDA0003979877660000038
表示第i个隐藏状态得到的注意力特征,αt表示所有隐藏状态得到的注意力分数,et表示所有隐藏状态得到的注意力特征,即,v、Wh和Ws均表示可学习的参数,vT表示v的转置;
当et表示上下文序列所有隐藏状态的注意力特征时,即
Figure BDA0003979877660000039
并且上下文序列隐藏状态的注意力权重表示为αt=αt,其中,
Figure BDA00039798776600000310
当et表示模式引导器序列所有隐藏状态的注意力特征时,即
Figure BDA00039798776600000311
并且模式引导器序列隐藏状态的注意力权重表示为αt=α′t,其中,
Figure BDA00039798776600000312
S450:计算模式引导器-上下文序列向量
Figure BDA0003979877660000041
具体表达式如下:
Figure BDA0003979877660000042
其中,
Figure BDA0003979877660000043
表示上下文序列向量,计算表达式如下:
Figure BDA0003979877660000044
其中,
Figure BDA0003979877660000045
表示第i个词令牌在第t个步长时的权重,i=1,2,…,m;
Figure BDA0003979877660000046
表示模式引导器向量,计算表达式如下:
Figure BDA0003979877660000047
其中,
Figure BDA0003979877660000048
表示第j个词令牌在第t个步长时的权重,j=1,2,…,n;
S460:计算从词汇表中生成词令牌的概率pgen,其计算公式如下:
Figure BDA0003979877660000049
其中,pgen表示从词汇表中词令牌被标记的概率且pgen∈[0,1],
Figure BDA00039798776600000410
Ws、Wz和bptr表示可学习的参数,σ表示sigmoid函数,st表示当前时间t的解码器的状态,zt表示当前时间t解码器的输入;
S470:计算在时间步t时第p个训练样本中每个真实词令牌y的输出概率P(y),计算表达式如下:
Figure BDA00039798776600000411
其中,Pvocab(y)表示从词汇表中生成出每个词令牌的概率;
S480:选择时间步t时概率最大值对应的词令牌;
S490:遍历时间步T中的所有时间步,得到每个时间步中概率最大值对应的词令牌,即得到T个词令牌,所述T个词令牌组成推荐方法名称。
作为优选,所述S500中计算第p个训练样本的损失的具体步骤如下:
采用公式(14)计算第p个训练样本的损失:
Figure BDA00039798776600000412
其中,
Figure BDA00039798776600000413
表示生成目标词汇的概率,
Figure BDA00039798776600000414
表示第p个训练样本的真实词令牌对应的输出概率;
作为优选,所述S200中方法名称生成模块可以为seq2seq注意模型。
作为优选,所述S100中的公开数据集还可以作为检索语料库。
相对于现有技术,本发明至少具有如下优点:
1.该方法推荐的方法名称在各类评估指标上都相较于其他对比方法有很大提升,能够为目标方法推荐更准确、更具有语义、更具有可读性的方法名称。通过最相似方法的名称,可以得到具有的重复命名模式,再结合目标方法的上下文信息,分别对命名模式与上下文信息进行编码,在通过解码生成推荐的方法名称。
2.实证研究:我们的研究发现,方法名称有许多重复的命名模式,而具有相似主体代码的方法通常具有相同的命名模式。
3.方法名推荐方法:我们提出了一种新的方法名推荐方法NamPat。它使用最相似的方法的名称作为模式指导器来提供命名模式,并结合该方法的上下文来推荐方法名称。
4.性能评估:我们在一个大规模的Java数据集上进行了实验,以评估NamPat的性能。实验结果表明,NamPat的整体性能优于目前最常用的方法。
附图说明
图1本发明中一个原始方法的例子和一个类似的方法的检索示意图。
图2本发明NamPat模型流程示意图。
图3本发明实验中方法名称长度的分布情况示意图。
图4本发明实验中已生成的方法名称的示例示意图。
具体实施方式
下面对本发明作进一步详细说明。
本实验进行了大规模实证分析发现:(1)方法名称包含许多重复命名模式,两种体代码相似的方法的名称通常具有相同的命名模式;(2)构成目标方法名称可以观察到最相似方法名称的标记。最相似方法的名称可以更好地推断目标方法名称。基于此,本发明提出了一种基于命名模式的方法名称推荐方法模型NamPat。NamPat包含命名模式提取模块和方法名称生成模块两个模块:命名模式提取模块不仅提取目标方法的上下文信息,而且检索最相似的方法,并提取其方法名称作为模式引导器;方法名称生成模块是一个指针生成器网络,它学习命名模式和上下文信息的语义,并将它们组合起来以推荐方法名称。
参见图1-图2,一种基于命名模式的方法名称推荐方法,包括如下步骤:
S100:选取公开数据集,该公开数据集包括有若干个项目方法,随机从公开数据集中选取多个数据作为训练集P,对公开数据集中的数据进行单词提取得到词汇表,将训练集中的每一个项目方法作为一个训练样本;
所述S100中的公开数据集还可以作为检索语料库,所述检索语料库为在运行搜索引擎检索模块时,用于检索时使用的数据库。
S200:构建方法名称推荐模型NamPat,所述NamPat包括命名模式提取模块和方法名称生成模块;
所述命名模式提取模块包括搜索引擎检索模块和上下文提取模块,所述搜索引擎检索模块采用Lucene,Lucene为现有技术,所述上下文提取模块用于提取项目方法的上下文信息,许多现有方法均可以实现上下文的提取工作;
所述方法名称生成模块包括编码器一、编码器二和一个解码器,所述编码器一和编码器二均为单层双向神经网络,所述解码器为单层单向神经网络,所述神经网络为现有技术;
所述S200中方法名称生成模块可以为seq2seq注意模型,所述seq2seq注意模型为一种新的指针生成器网络为现有技术。
S300:从P中选取第p个训练样本,所述第p个训练样本包括若干个真实词令牌;
将第p个训练样本作为命名模式提取模块的输入,经过搜索引擎检索模块输出第p个训练样本的命名模式引导器;经过上下文提取模块输出第p个训练样本的上下文序列,搜索引擎检索模块基于检索语料库进行检索,根据代码标记的相似性返回与该样本方法最相似的方法,然后从最相似的方法中提取出方法名,并将该方法名处理为一个标记级别序列,该标记级别序列为一个带有命名模式的模式引导器;上下文提取模块在某一项目方法中提取实现上下文、接口上下文和封闭上下文,然后将所述三个上下文分别处理为令牌级序列并进行连接,得到该项目方法对应的上下文序列;
S400:将S300得到的命名模式引导器和上下文序列作为方法名称生成模块的输入,输出得到第p个训练样本的推荐方法名称;
所述S400获取得到第p个训练样本的推荐方法名称的具体步骤如下:
S410:将第p个训练样本的命名模式引导器输入到编码器一中得到模式引导器嵌入向量x′,将第p个训练样本的上下文序列输入到编码器二中得到上下文嵌入向量x,表达式分别表示如下:
x′=(x′1,x′2,...,x′n);(1)
x=(x1,x2,...,xm);(2)
其中,x′n表示模式引导器中第n个词令牌嵌入向量,xm表示上下文序列中第m个词令牌嵌入向量,n表示x′的长度,m表示x的长度;
S420:使用Bi-LSTM单元对x′和x进行处理,计算得到上下文序列隐藏状态和模式引导器隐藏状态,所述Bi-LSTM为单层双向长短期存储器为现有技术,具体表达式如下:
Figure BDA0003979877660000071
其中,
Figure BDA0003979877660000072
表示一个连接操作,
Figure BDA0003979877660000073
表示当前Bi-LSTM单元向右传播的隐藏状态,
Figure BDA0003979877660000074
表示从左向右上一单元的隐藏状态,
Figure BDA0003979877660000075
表示当前Bi-LSTM单元向左传播的隐藏状态,
Figure BDA0003979877660000076
表示从右向左上一单元的隐藏状态,hl表示当前单元的隐藏状态;xa为一个中间变量,无实际物理意义;
使用公式(3)、公式(4)和公式(5)分别计算上下文序列隐藏状态hi和模式引导器隐藏状态h′j,具体表述如下:
当xa∈{x1,x2,...,xm}时,得到hi=(h1,h2...hm),i=1,2,…,m;
当xa∈{x′1,x′2,...,x′n}时,得到h′j=(h′1,h′2...h′n),j=1,2,…,n;
S430:设置总体时间步T,从T中选择第t个时间步,计算在时间步t时解码器的隐藏状态st,具体表达式如下:
st=LSTM(st-1,yt-1);(6)
其中,st-1表示解码器之前的隐藏状态,yt-1表示一个词令牌的嵌入,在训练时,yt-1为正确的词令牌中(t-1)个单词或词令牌的嵌入;在测试时,yt-1表示解码器发出的前一个单词或词令牌;
S440:分别计算上下文序列隐藏状态的权重和模式引导器隐藏状态的权重,计算表达式如下:
Figure BDA0003979877660000077
αt=softmax(et);(8)
其中,
Figure BDA0003979877660000078
表示第i个隐藏状态得到的注意力特征,αt表示所有隐藏状态得到的注意力分数,et表示所有隐藏状态得到的注意力特征,即,v、Wh和Ws均表示可学习的参数,vT表示v的转置;
当et表示上下文序列所有隐藏状态的注意力特征时,即
Figure BDA0003979877660000079
并且上下文序列隐藏状态的注意力权重表示为αt=αt,其中,
Figure BDA00039798776600000710
当et表示模式引导器序列所有隐藏状态的注意力特征时,即
Figure BDA00039798776600000711
并且模式引导器序列隐藏状态的注意力权重表示为αt=α′t,其中,
Figure BDA0003979877660000081
在第t个时间步长,NamPat根据需要更多地关注上下文序列和模式引导序列的相关标记,因为认为方法名称的不同词令牌与方法的不同部分有关,所以在方法名称生成模型中引入注意机制。例如,当模型生成令牌“get”时,因为它注意到方法中的令牌“return”。类似地,NamPat在生成方法名时也可以集中于模式引导器的某些部分。因此,根据注意机制,来计算上下文序列和模式引导器中的每个词令牌的权重α。
S450:计算模式引导器-上下文序列向量
Figure BDA0003979877660000082
模式引导器-上下文向量
Figure BDA0003979877660000083
可以看作是方法中的上下文信息和模式引导器中的方法名称的命名模式的融合表示,具体表达式如下:
Figure BDA0003979877660000084
其中,
Figure BDA0003979877660000085
表示上下文序列向量,计算表达式如下:
Figure BDA0003979877660000086
其中,
Figure BDA0003979877660000087
表示第i个词令牌在第t个步长时的权重,i=1,2,…,m;
Figure BDA0003979877660000088
表示模式引导器向量,计算表达式如下:
Figure BDA0003979877660000089
其中,
Figure BDA00039798776600000810
表示第j个词令牌在第t个步长时的权重,j=1,2,…,n;
S460:计算从词汇表中生成词令牌的概率pgen,其计算公式如下:
Figure BDA00039798776600000811
其中,pgen表示从词汇表中词令牌被标记的概率且pgen∈[0,1],
Figure BDA00039798776600000812
Ws、Wz和bptr表示可学习的参数,σ表示sigmoid函数,st表示当前时间t的解码器的状态,zt表示当前时间t解码器的输入;因为NamPat被允许从输入序列中复制词令牌,并从一个固定的词汇表中生成词令牌;从而进行生成概率的计算;
S470:计算在时间步t时第p个训练样本中每个真实词令牌y的输出概率P(y),计算表达式如下:
Figure BDA00039798776600000813
其中,Pvocab(y)表示从词汇表中生成出每个词令牌的概率,1-pgen表示直接从输入序列中复制词令牌作为输出的概率;第一部分表示从固定词汇表生成y的概率,第二部分表示从输入序列复制y的概率。不仅要从输入方法的上下文序列复制,还要从模式引导标记序列复制。因此,这里的注意力分布包括两部分:上下文标记序列和模式引导标记序列;如果y是一个OOV词令牌,则从固定词汇表中生成的词令牌y的概率为0,则Pvocab(y)为0。也就是说,该模型基于输入标记序列的注意力分布来复制单词。这将使模型能够生成OOV词令牌。
S480:选择时间步t时概率最大值对应的词令牌;
S490:遍历时间步T中的所有时间步,得到每个时间步中概率最大值对应的词令牌,即得到T个词令牌,所述T个词令牌组成推荐方法名称。
S500:设置损失阈值,计算第p个训练样本的损失,当该第p个训练样本的损失小于损失阈值时,得到训练好的NamPat模型,并执行下一步;否则反向更新NamPat模型参数,并令p=p+1,且返回S300;
所述S500中计算第p个训练样本的损失的具体步骤如下:
采用公式(14)计算第p个训练样本的损失:
Figure BDA0003979877660000091
其中,
Figure BDA0003979877660000092
表示生成目标词汇的概率,
Figure BDA0003979877660000093
表示第p个训练样本的真实词令牌对应的输出概率;
S600:将待推荐名称的项目方法输入训练好的NamPat模型中,得到对该项目方法的推荐方法名称。
实验设置
数据集
为了评估NamPat在方法名称推荐任务上的性能,本实验在由Nguyen等人构建的广泛使用的Java数据集上对其进行了测试。这个数据集包含超过10K个Java项目,这些项目是从GitHub上排名最高的公共项目中收集而来的。按照Nguyen等人的相同设置,本实验将数据集随机分为9772个训练项目和450个测试项目,包括17M训练方法和580K测试方法。此外,根据项目而不是文件对语料库进行洗牌,避免了基于文件的洗牌导致的不公平的性能提高。
评价指标
为了评估NamPat模型生成的方法名的质量,本实验使用了与之前的工作相同的度量,它测量了不区分大小写的Precision,Recall,和F-score。具体来说,对于目标方法名称t和推荐的方法名称r,其Precision(t,r)、Recall(t,r)和F-score(t,r)计算为:
Figure BDA0003979877660000094
Figure BDA0003979877660000095
Figure BDA0003979877660000101
其中,token(n)返回名称n中的令牌。总体性能计算为数据集中所有样本的平均值。此外还使用了额外的度量精确匹配精度(EM Acc),此指标中也考虑了令牌的顺序。
实现细节
NamPat是基于PyTorch框架实现的。本实验将单词的嵌入维度设置为150,LSTM隐藏状态维度设置为400,批处理大小设置为128。使用最大梯度范数为2的梯度剪切,并使用贾瓦朗来解析java代码和提取上下文信息。在实验中,将构成方法上下文的序列限制为400个标记,模式引导器序列限制为6个标记,目标方法名称的长度限制为6个。在测试阶段,使用束大小为4的波束搜索生成方法名称。使用的学习速率为0.15、初始累加器值为0.1的Adagrad对模型进行了大约130万次迭代(10个epoch)的训练。NamPat模型的所有实验都是在一个具有12GB内存的NVIDIA Titan V GPU上进行的。
结果评估
本实验将NamPat与以下最先进的方法名称推荐模型进行了比较:
代码2vec:一个基于注意力的神经模型将代码分解为其AST中的一组路径,并通过注意机制将所有的路径向量聚合为单个向量。将方法名称推荐任务作为一个分类任务,利用该方法的表示向量来预测方法名称。
代码2seq:代码2vec的一种扩展方法,它利用seq2seq框架使用LSTMs将代码片段表示为其AST中设置的路径,并在生成方法名称子标记时使用注意机制来选择相关的路径。
MNire:基于RNN的seq2seq方法使用方法体中的程序实体名和封闭的类名来推荐方法名称。
Cognac:上下文引导的方法名称推荐方法通过使用方法的本地上下文、交互方法的全局上下文以及不同上下文中标记的概率来推荐方法名称。
如表1所示,NamPat的性能在所有指标上都优于所有基线模型。在精确匹配精度上,NamPat达到50.4%,与基线相比,16.9%~46.1%相对增加。精确匹配精度越高,说明NamPat推荐的方法名称与地面真相完全匹配的方法名称越多。所有基线模型推荐的方法名称有时有很高的f分数,但它们不能达到精确匹配,因为它们的模型通常不能学习开发人员编写的方法名称的命名模式。例如,基本事实是“prepare update item statement”,推荐的名称是“prepare delete item statement”。在这种情况下,它得到了一个很好的f-score,但是没有发生精确的匹配。在NamPat中,最相似的方法的名称被视为模式引导器,它是由具有命名模式的人编写的。模式引导器将指导NamPat根据相同的命名模式推荐方法名称,以便推荐的方法名称能够更好地匹配地面真相。
表1方法名称推荐的比较
方法 精确率 召回率 F-分数 全匹配准确率
code2vec 58.4% 44.6% 50.6% 38.4%
code2seq 67.4% 57.5% 61.9% 41.3%
MNire 70.1% 64.3% 67.1% 43.1%
Cognac 69.8% 55.8% 62.1% 34.5%
NamPat 74.2% 71.4% 72.8% 50.4%
由表1可知,代码2vec和代码2seq都通过使用AST路径来表示方法。然而,由于方法的复杂性,ast的结构通常又大又深。这种复杂的表示导致在所有指标上的性能都低于MNire,MNire使用程序实体的名称,而不是AST路径来生成方法名。这些结果证明了NamPat模型使用程序实体的名称是正确的,与所有基线相比,NamPat具有最高的查全率和精度。具体来说,NamPat通过5.8%~27.1%提高了精度,11.1%~60.1%的召回率和8.5%~43.9%的f-分数,这意味着由NamPat模型生成的方法名中的标记可以比其他基线覆盖更多的目标标记。通过分析,模式引导器在NamPat中发挥着重要的作用,它与目标方法名有很强的相关性,并引入了更多构成目标方法名的标记。
NamPat的性能都高于最先进的方法。因此,NamPat模型可以充分推荐能够精确描述方法体功能的方法名。
表2模式引导器对NamPat的影响
模型 精确率 召回率 F-分数 全匹配准确率
NamPat-模式引导器 67.6% 54.7% 60.5% 34.1%
NamPat 74.2% 71.4% 72.8% 50.4%
在NamPat模型中,使用三种方法的上下文信息和最相似的方法的名称作为模式引导器来生成方法名称。为了探究模式引导器的有效性,本实验将其从NamPat中删除了,并且只使用这三个上下文信息作为输入来推荐方法名称。
实验结果见表2。当本实验使用模式引导器时,NamPat的性能大大提高了。具体来说,它将准确率从67.6%提高到74.2%,查全率从54.7%提高到71.4%,F-score从60.5%提高到78.8%,精确匹配准确率从34.1%提高到50.4%。其中,在召回率和精确匹配精度方面有了较大的提高。这些结果意味着,仅依赖于方法的三个本地上下文信息(实现上下文、接口上下文和封闭上下文),很难生成具有正确命名模式的方法名。当NamPat使用模式引导器时,它可以根据模式引导器的命名模式生成更准确的匹配方法名称,并覆盖更多的目标标记。
为了衡量NamPat在不同方法名长度设置下的性能,本实验首先统计分析了测试语料库中具有不同方法名长度的方法的数量。如图3所示,将长度大于或等于5的方法放在一起,约占测试语料库中总方法的12.7%。同时也可以发现,长度为1的方法名所占的比例仅为8.9%。当方法名的长度太短时,可能很难描述该方法的功能。长度为2和3的方法名称的数字最大,共占64.1%,几乎每三种方法中就有两种方法有长度为2或3的名称。这些结果表明,开发人员倾向于使用两个或三个词来表示方法名。
表3 NamPat在不同长度的方法名称上的性能
长度1 长度2 长度3 长度4 长度≥5
精确率 40.3% 68.1% 79.1% 83.1% 84.5%
召回率 70.0% 75.5% 76.2% 73.3% 61.3
F-分数 51.2% 71.6% 77.6% 77.1% 71.0%
全匹配准确率 48.1% 56.1% 61.3% 43.5% 17.1%
表3所示,本实验测试了NamPat在不同长度的方法名上的性能。NamPat在方法名称上表现最好,长度为3,f-分数为77.6%,精确匹配准确率为61.3%。对于长度为2的方法名称,NamPat也取得了良好的性能,f-分数为71.6%,精确匹配准确率为56.1%。这些结果表明,NamPat模型生成的方法名称非常符合开发人员的命名习惯。当方法名长度为1时,NamPat的F-score只有51.2%,这说明NamPat更喜欢推荐详细的名称,而不是简单的名称。对于长度大于或等于5的方法名称,NamPat仍然有71.0%的f-分数,因为模式引导器提供了一个唯一的命名模式和许多可预测的令牌。但NamPat的精确匹配精度仅为17.1%,说明随着方法名长度的增加,生成精确匹配地面真相的方法名将变得更加困难。
NamPat模型有效性说明
A.定性分析
如图4所示,展示了由NamPat生成的四个例子和来自测试集中的最先进的基线Cognac。在图4中的示例1和示例2中,Cognac推荐方法名称“invoke user”和“applypaint”,在其中,可以在方法的上下文中观察到标记,但是推荐的名称与方法的真实语义不匹配。在NamPat中,在模式指导器的帮助下,本次验证得到了目标方法名称的命名模式“create_”和“set_”,这有助于NamPat生成更有意义的方法名称;此外,在示例3中可以观察到模式引导器中的命名模式是“on create__”,命名模式提供了特定的预测信息,也就是说,“on”和“create”的标记会出现在模式引导器中,而不是在方法上下文中被观察到;在示例4中,Cognac推荐的方法名称为“set attributes”,其命名模式为“set__”,这并不符合该方法的语义结构,但是,在模式引导器的帮助下,NamPat可以得到正确的命名模式“parse__”。上面的4个示例表明,NamPat推荐的方法名接近于正确的方法名,而以前的模型倾向于生成在上下文中观察到的标记,有时并不能推荐有意义的方法名。
B.来自复制机制的性能增强
以往的研究,如基于seq2seq模型的MNire只能从自己的固定词汇表中生成令牌,而不能从输入序列中复制令牌,这使得模型遇到了OOV问题。因此,在NamPat模型中使用复制机制从输入序列中复制标记,这使NamPat模型能够处理OOV标记;然而,这并不是NamPat模型性能优越的主要原因。为了验证这一观点,本发明通过将模型中的pgen设置为1来从NamPat中删除复制机制,这样NamPat模型就只能从固定的词汇表中生成标记,而不能从输入序列中生成标记。本发明实验对同一数据集进行了性能评估,实验结果表明,去除复制机制的模型的性能达到72.1%(Fscore),略低于NamPat(72.8%),远高于MNire(67.1%)和Cognac(62.1%);换句话说,NamPat的性能主要来自于类似方法的名称所提供的信息,而不是复制机制。虽然本发明实验在一个大的训练集中进行实验,但OOV问题总是出现在本发明实验的任务中的。
因此,本发明添加复制机制来处理OOV令牌是合理的。以上结果表明,在NamPat模型NamPat中引入最相似的方法的名称,使其比现有的方法更有效,而复制机制使NamPat的性能更好。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。

Claims (5)

1.一种基于命名模式的方法名称推荐方法,其特征在于:包括如下步骤:
S100:选取公开数据集,该公开数据集包括有若干个项目方法,随机从公开数据集中选取多个数据作为训练集P,对公开数据集中的数据进行单词提取得到词汇表,将训练集中的每一个项目方法作为一个训练样本;
S200:构建方法名称推荐模型NamPat,所述NamPat包括命名模式提取模块和方法名称生成模块;
所述命名模式提取模块包括搜索引擎检索模块和上下文提取模块,所述搜索引擎检索模块采用Lucene;
所述方法名称生成模块包括编码器一、编码器二和一个解码器,所述编码器一和编码器二均为单层双向神经网络,所述解码器为单层单向神经网络;
S300:从P中选取第p个训练样本,所述第p个训练样本包括若干个真实词令牌;
将第p个训练样本作为命名模式提取模块的输入,经过搜索引擎检索模块输出第p个训练样本的命名模式引导器;经过上下文提取模块输出第p个训练样本的上下文序列;
S400:将S300得到的命名模式引导器和上下文序列作为方法名称生成模块的输入,输出得到第p个训练样本的推荐方法名称;
S500:设置损失阈值,计算第p个训练样本的损失,当该第p个训练样本的损失小于损失阈值时,得到训练好的NamPat模型,并执行下一步;否则反向更新NamPat模型参数,并令p=p+1,且返回S300;
S600:将待推荐名称的项目方法输入训练好的NamPat模型中,得到对该项目方法的推荐方法名称。
2.如权利要求1所述的一种基于命名模式的方法名称推荐方法,其特征在于:所述S400获取得到第p个训练样本的推荐方法名称的具体步骤如下:
S410:将第p个训练样本的命名模式引导器输入到编码器一中得到模式引导器嵌入向量x′,将第p个训练样本的上下文序列输入到编码器二中得到上下文嵌入向量x,表达式分别表示如下:
x′=(x′1,x′2,...,x′n);(1)
x=(x1,x2,...,xm);(2)
其中,x′n表示模式引导器中第n个词令牌嵌入向量,xm表示上下文序列中第m个词令牌嵌入向量,n表示x′的长度,m表示x的长度;
S420:使用Bi-LSTM单元对x′和x进行处理,计算得到上下文序列隐藏状态和模式引导器隐藏状态,具体表达式如下:
Figure FDA0003979877650000021
Figure FDA0003979877650000022
Figure FDA0003979877650000023
其中,
Figure FDA0003979877650000024
表示一个连接操作,
Figure FDA0003979877650000025
表示当前Bi-LSTM单元向右传播的隐藏状态,
Figure FDA0003979877650000026
表示从左向右上一单元的隐藏状态,
Figure FDA0003979877650000027
表示当前Bi-LSTM单元向左传播的隐藏状态,
Figure FDA0003979877650000028
表示从右向左上一单元的隐藏状态,hl表示当前单元的隐藏状态;xa为一个中间变量,无实际物理意义;
使用公式(3)、公式(4)和公式(5)分别计算上下文序列隐藏状态hi和模式引导器隐藏状态h′j,具体表述如下:
当xa∈{x1,x2,...,xm}时,得到hi=(h1,h2...hm),i=1,2,…,m;
当xa∈{x′1,x′2,...,x′n}时,得到h′j=(h′1,h′2...h′n),j=1,2,…,n;
S430:设置总体时间步T,从T中选择第t个时间步,计算在时间步t时解码器的隐藏状态st,具体表达式如下:
st=LSTM(st-1,yt-1); (6)
其中,st-1表示解码器之前的隐藏状态,yt-1表示一个词令牌的嵌入;
S440:分别计算上下文序列隐藏状态的权重和模式引导器隐藏状态的权重,计算表达式如下:
Figure FDA0003979877650000029
αt=softmax(et); (8)
其中,
Figure FDA00039798776500000210
表示第i个隐藏状态得到的注意力特征,αt表示所有隐藏状态得到的注意力分数,et表示所有隐藏状态得到的注意力特征,即,v、Wh和Ws均表示可学习的参数,vT表示v的转置;
当et表示上下文序列所有隐藏状态的注意力特征时,即
Figure FDA00039798776500000211
并且上下文序列隐藏状态的注意力权重表示为αt=αt,其中,
Figure FDA00039798776500000212
当et表示模式引导器序列所有隐藏状态的注意力特征时,即
Figure FDA00039798776500000213
并且模式引导器序列隐藏状态的注意力权重表示为αt=α′t,其中,
Figure FDA00039798776500000214
S450:计算模式引导器-上下文序列向量
Figure FDA00039798776500000215
具体表达式如下:
Figure FDA0003979877650000031
其中,
Figure FDA0003979877650000032
表示上下文序列向量,计算表达式如下:
Figure FDA0003979877650000033
其中,
Figure FDA0003979877650000034
表示第i个词令牌在第t个步长时的权重,i=1,2,…,m;
Figure FDA0003979877650000035
表示模式引导器向量,计算表达式如下:
Figure FDA0003979877650000036
其中,
Figure FDA0003979877650000037
表示第j个词令牌在第t个步长时的权重,j=1,2,…,n;
S460:计算从词汇表中生成词令牌的概率pgen,其计算公式如下:
Figure FDA0003979877650000038
其中,pgen表示从词汇表中词令牌被标记的概率且pgen∈[0,1],Whgc、Ws、Wz和bptr表示可学习的参数,σ表示sigmoid函数,st表示当前时间t的解码器的状态,zt表示当前时间t解码器的输入;
S470:计算在时间步t时第p个训练样本中每个真实词令牌y的输出概率P(y),计算表达式如下:
Figure FDA0003979877650000039
其中,Pvocab(y)表示从词汇表中生成出每个词令牌的概率;
S480:选择时间步t时概率最大值对应的词令牌;
S490:遍历时间步T中的所有时间步,得到每个时间步中概率最大值对应的词令牌,即得到T个词令牌,所述T个词令牌组成推荐方法名称。
3.如权利要求1所述的一种基于命名模式的方法名称推荐方法,其特征在于:所述S500中计算第p个训练样本的损失的具体步骤如下:
采用公式(14)计算第p个训练样本的损失:
Figure FDA00039798776500000310
其中,
Figure FDA00039798776500000311
表示生成目标词汇的概率,
Figure FDA00039798776500000312
表示第p个训练样本的真实词令牌对应的输出概率。
4.如权利要求1所述的一种基于命名模式的方法名称推荐方法,其特征在于:所述S200中方法名称生成模块可以为seq2seq注意模型。
5.如权利要求1所述的一种基于命名模式的方法名称推荐方法,其特征在于:所述S100中的公开数据集还可以作为检索语料库。
CN202211547271.XA 2022-12-05 2022-12-05 一种基于命名模式的方法名称推荐方法 Pending CN115826947A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211547271.XA CN115826947A (zh) 2022-12-05 2022-12-05 一种基于命名模式的方法名称推荐方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211547271.XA CN115826947A (zh) 2022-12-05 2022-12-05 一种基于命名模式的方法名称推荐方法

Publications (1)

Publication Number Publication Date
CN115826947A true CN115826947A (zh) 2023-03-21

Family

ID=85543954

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211547271.XA Pending CN115826947A (zh) 2022-12-05 2022-12-05 一种基于命名模式的方法名称推荐方法

Country Status (1)

Country Link
CN (1) CN115826947A (zh)

Similar Documents

Publication Publication Date Title
Lu et al. Codexglue: A machine learning benchmark dataset for code understanding and generation
Tang et al. Sentiment embeddings with applications to sentiment analysis
CN113641586B (zh) 软件源代码缺陷检测方法、系统、电子设备及储存介质
Guo et al. Question generation from sql queries improves neural semantic parsing
CN112800172B (zh) 一种基于两阶段注意力机制的代码搜索方法
CN107506414A (zh) 一种基于长短期记忆网络的代码推荐方法
CN111488137B (zh) 一种基于共同注意力表征学习的代码搜索方法
CN108875809A (zh) 联合attention机制与神经网络的生物医学实体关系分类方法
CN112183094A (zh) 一种基于多元文本特征的中文语法查错方法及系统
CN112215013A (zh) 一种基于深度学习的克隆代码语义检测方法
CN115017294B (zh) 代码搜索方法
CN110334186A (zh) 数据查询方法、装置、计算机设备及计算机可读存储介质
WO2021160822A1 (en) A method for linking a cve with at least one synthetic cpe
CN114416159B (zh) 基于信息增强调用序列的api推荐方法及装置
CN112966095B (zh) 一种基于jean的软件代码推荐方法
CN113076089B (zh) 一种基于对象类型的api补全方法
CN114327609A (zh) 一种代码补全方法、模型和工具
Shi et al. Improving code search with multi-modal momentum contrastive learning
Yang et al. Locating faulty methods with a mixed RNN and attention model
CN117591913A (zh) 基于改进的R-Transformer的语句级软件缺陷预测方法
Bibi et al. Enhancing semantic code search with deep graph matching
CN115408506B (zh) 联合语义解析和语义成分匹配的nl2sql的方法
Qian et al. Sub-SA: Strengthen In-context Learning via Submodular Selective Annotation
CN114969347A (zh) 缺陷查重实现方法、装置、终端设备及存储介质
CN115186105A (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