基于决策的融合信息检索和深度学习的代码注释生成方法

文档序号:1922121 发布日期:2021-12-03 浏览:14次 >En<

阅读说明:本技术 基于决策的融合信息检索和深度学习的代码注释生成方法 (Code annotation generation method based on decision-making and integrating information retrieval and deep learning ) 是由 陈翔 周彦琳 杨光 于池 刘珂 于 2021-09-10 设计创作,主要内容包括:本发明提供了一种基于决策的融合信息检索和深度学习的代码注释生成方法,包括以下步骤:(1)基于GitHub网站,挖掘高质量开源项目,搜集代码内的函数及其注释形成语料库,并划分成训练集和验证集;(2)构建基于信息检索的模型,通过融合语义、词法和语法相似度,在训练集中搜索出与目标代码段c最为相似的代码段c-(sim),并复用其注释;(3)构建基于深度学习的模型,考虑对抗样本,并使用一种基于Transformer的模型生成代码注释;(4)在验证集上分析这两种模型的性能与两个代码段c和c-(sim)之间相似度分数的关系,确定相似度阈值;(5)当为一个新的目标代码生成注释时,根据决策模块输出对应的代码注释。本发明的有益效果为:可以生成高质量的代码注释。(The invention provides a code annotation generation method based on decision-making and integrating information retrieval and deep learning, which comprises the following steps of: (1) mining high-quality open source projects based on a GitHub website, collecting functions in codes and annotations thereof to form a corpus, and dividing the corpus into a training set and a verification set; (2) constructing a model based on information retrieval, and searching out a code segment c most similar to a target code segment c in a training set by fusing semantic, lexical and grammatical similarities sim And multiplexing the annotations; (3) constructing a model based on deep learning, considering the confrontation sample, and enablingGenerating code annotations with a Transformer-based model; (4) analyzing the performance of the two models and the two code segments c and c on a validation set sim Determining a similarity threshold value according to the relationship of similarity scores; (5) when a comment is generated for a new target code, the corresponding code comment is output according to the decision module. The invention has the beneficial effects that: high quality code annotations can be generated.)

基于决策的融合信息检索和深度学习的代码注释生成方法

技术领域

本发明涉及计算机技术领域,尤其涉及一种基于决策的融合信息检索和深度学习的代码注释生成方法。

背景技术

代码注释生成旨在帮助软件开发人员理解代码片段的设计意图和功能。由于项目开发预算有限或对代码注释的编写不够重视,代码注释的质量很难保证。此外,代码注释往往不能随着代码片段的演变而自动更新。因此,迫切需要设计有效的方法,在分析目标代码段的语义后自动生成高质量的代码注释。

以往的研究通常将信息检索用于代码注释生成任务,并取得了良好的性能。由于代码克隆在软件开发中十分普遍,基于信息检索的代码克隆检测技术可用于从现有代码存储库(如Github)或开发人员问答网站(如Stack Overflow)检索类似的代码片段。然后,开发人员可以复用类似代码段的注释。然而,这种方法缺乏普遍性。这意味着,如果检索到的代码段和目标代码段之间的相似度分数不高,那么直接使用检索到的代码段的注释是没有用的。

近年来,越来越多的研究应用深度学习方法生成代码注释,将代码注释生成任务建模为机器翻译任务。这些研究主要采用以源代码为输入、注释为输出的编码器-解码器框架。实验研究表明,这些方法可以取得较好的性能,并有较高的泛化能力,但生成的注释中倾向于包含高频词,难以覆盖到低频词。

除了基于信息检索或深度学习的方法外,最近的研究也致力于将信息检索和深度学习融合起来,取得了良好的效果。因此,为了提高代码注释生成的性能,需要探索更为有效的基于信息检索和基于深度学习的模型,并分析提出一种简单、高效的融合方法来进一步提升性能。

如何解决上述技术问题成为本发明面临的课题。

发明内容

本发明的目的在于提供一种基于决策的融合信息检索和深度学习的代码注释生成方法,该方法可以根据输入代码段c和训练集中检索到的最为相似的代码段csim的相似程度选择合适的代码注释生成模型,从而生成高质量的代码注释。

本发明的思想为:本发明提出基于决策的融合信息检索和深度学习的代码注释生成方法,首先分别构建了基于信息检索和基于深度学习的新模型,接着在验证集上分析给定代码段c与从训练集中检索到的最为相似的代码段csim之间的相似度分数与两个模型性能之间的关系,并确定相似度阈值,最后,当面对新的目标代码,决策模块选择输出对应的注释:如果目标代码c与基于信息检索模块检索出的最相似代码csim的相似度分数大于阈值,则选择基于信息检索模型输出的注释,否则选择基于深度学习模型输出的注释,本发明的方法在相同的语料库中取得了比基准方法更好的性能。

本发明是通过如下措施实现的:一种基于决策的融合信息检索和深度学习的代码注释生成方法,其中,包括以下步骤:

(1)基于GitHub网站,通过挖掘高质量的开源项目,搜集开源代码内的函数和对应的注释形成语料库,并进一步划分成训练集和验证集;

(2)构建基于信息检索的模型:通过融合语义、词法和语法相似度,为目标代码段c找到训练集中最为相似的代码段csim,然后,通过复用这个最相似代码段的注释作为目标代码段的注释,具体包括如下步骤:

(2-1)计算语义相似度:使用适用于代码的预训练模型CodeBert来提取代码语义特征,并通过BERT-whitening操作进行代码语义特征中关键特征提取和降维;通过计算目标代码段c和训练集中代码段的语义向量之间的L2距离,确定出代码段间的语义相似度;随后选择排在前k位语义最相似的代码片段作为候选代码;

(2-2)计算词法相似度:首先根据驼峰大小写命名规则来分割代码序列中的标识符;对代码序列进行去重复操作,以获得代码片段的词元集合;通过Jaccard相似度计算两个代码段之间的词法相似度;

(2-3)计算语法相似度:首先将代码转换为相应的抽象语法树;随后遍历代码抽象语法树的类型节点,以获得有序序列;最后通过计算有序序列之间的编辑距离来计算两个代码段之间的语法相似度;

(2-4)根据词法和语法相似度融合的比例加权求和计算出混合分数后,从候选代码中找出最相似的代码片段csim,复用它的代码注释。

(3)构建基于深度学习的模型:考虑对抗样本,并使用一种基于Transformer的模型生成代码注释,首先预先训练一个通用模型,然后在特定的语料库上对该模型进行微调,具体包括如下步骤:

(3-1)预训练阶段:根据命名规则进行标识符分割,接着通过BPE算法进行子词划分,得到代码序列C=(c1,c2,…,cn),解析代码成抽象语法树并遍历它以获得抽象语法树序列A=(a1,a2,…,an)。拼接这两个序列并使用标识符<ast>来分隔它们,得到输入序列Xinput=(c1,c2,…,cn,<ast>,a1,a2,…,an);通过嵌入层和位置编码,得到向量Xemb

(3-2)将向量输入双向编码器进行语义学习。首先将向量输入到多头注意层,利用残差连接和层归一化使矩阵运算维一致,并将网络中的隐含层归一化为标准正态分布,加快了模型的训练和收敛速度。接着,通过前馈层和两个线性映射层,使用激活函数生成向量Xhidden,通过残差连接和层归一化得到隐藏语义向量;

(3-3)解码器的每一层在编码器的最终隐藏层上执行额外的交叉注意计算,并通过交叉注意连接;解码器的输出被发送到一个完全连接的神经网络,它可以通过softmax层来预测下一个词元的概率;

(3-4)最后,借助束搜索算法来提高生成的代码注释的质量;

(3-5)微调阶段:不调整模型的bias和LayerNorm.weight参数,采用AdamW方法对其他参数进行微调;使用快速梯度法来获得对抗样本,添加扰乱Radv到编码器的嵌入层,获得对抗样本后用它进行训练。

(4)计算相似度阈值:在分别获得了基于信息检索模型和基于深度学习模型产生的代码注释后,在验证集上分析这两种模型的性能与两个代码段c和csim之间相似度分数之间的关系,确定相似度阈值,具体包括如下步骤:

(4-1)对于验证集中的每一个代码,都能得到基于信息检索和基于深度学习模型产生的注释以及相似度分数(基于信息检索模块计算的混合分数);

(4-2)然后把相似度分数集合划分到以0.1为间隔的10个子集上,分别计算每个子集上基于信息检索模型和基于深度学习模型的平均性能。对于每一个评测指标,当两个模型的性能比较结果发生变化时,确定阈值。最后,取四个评测指标(即BLEU、METEOR、ROUGE-L和CIDER这四个评测指标)下阈值的均值作为最终的相似度阈值。

(5)决策模块:当为一个新的目标代码生成注释时,根据基于决策的模块输出对应的代码注释,如果目标代码c与基于信息检索模块检索出的最为相似代码csim的相似度分数大于阈值,则选择基于信息检索模型输出的注释,否则选择基于深度学习模型输出的注释。

基于决策的融合信息检索和深度学习的代码注释生成方法的参数设置如下:

与现有技术相比,本发明的有益效果为:本发明提出了一种基于决策的融合信息检索和深度学习的代码注释生成方法,首先分别构建了基于信息检索的模型和基于深度学习的模型用于生成代码注释,所提的两个模型与相应类型的基准方法相比,都能取得更好的性能。通过分析发现,这两个模型的性能取决于基于信息检索模型检索到的最为相似代码的相似程度,因此进一步提出了一种基于决策的融合信息检索和深度学习的代码注释生成方法,如果目标代码c与基于信息检索模块检索出的最相似代码csim的相似度分数大于阈值,则选择基于信息检索模型输出的注释,否则选择基于深度学习模型输出的注释,这种基于决策的融合方法与最先进的融合基准方法相比,可以生成更高质量的代码注释,有助于提高开发人员的代码理解效率,易于软件的开发和维护。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。

图1为本发明提供的一种基于决策的融合信息检索和深度学习的代码注释生成方法的系统框架图;

图2为本发明提供的基于深度学习模型中编码器的结构。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。当然,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

实施例1

参见图1、图2所示,本发明提供了一种基于决策的融合信息检索和深度学习的代码注释生成方法,具体包括以下内容:

(1)搜集两个大规模语料库PCSD(Python代码注释数据集)和JCSD(Java代码注释数据集)作为实验对象,这两个语料库都是从GitHub挖掘的<函数,注释>对,并进一步划分成训练集、验证集和测试集,具体的统计信息(如代码段的数量、代码中的平均词元数和注释中的平均词元数)如表1所示。

表1

(2)构建基于信息检索的模型,通过融合语义、词法和语法相似度,为目标代码段c找到训练集中最为相似的代码段csim,然后,通过复用这个最相似代码段的注释作为目标代码段的注释,具体包括如下步骤:

(2-1)计算语义相似度:使用适用于代码的预训练模型CodeBert来提取代码语义特征,并通过BERT-whitening操作进行代码语义特征中关键特征提取和降维;通过计算目标代码段c和训练集中代码段的语义向量之间的L2距离,确定出代码段间的语义相似度;随后选择排在前k位语义最相似的代码片段作为候选代码;

(2-2)计算词法相似度:首先根据驼峰大小写命名规则来分割代码序列中的标识符;对代码序列进行去重复操作,以获得代码片段的词元集合;通过Jaccard相似度计算两个代码段之间的词法相似度;

(2-3)计算语法相似度:首先将代码转换为相应的抽象语法树;随后遍历代码抽象语法树的类型节点,以获得有序序列;最后通过计算有序序列之间的编辑距离来计算两个代码段之间的语法相似度;

(2-4)根据词法和语法相似度融合的比例加权求和计算出混合分数后,从候选代码中找出最相似的代码片段csim,复用它的代码注释。

(3)训练基于深度学习的模型:考虑对抗样本,并使用一种基于Transformer的模型生成代码注释,首先预先训练一个通用模型,然后在特定的语料库上对该模型进行微调,具体包括如下步骤:

(3-1)预训练阶段:根据命名规则进行标识符分割,接着通过BPE算法进行子词划分,得到代码序列C=(c1,c2,…,cn),解析代码成抽象语法树并遍历它以获得抽象语法树序列A=(a1,a2,…,an)。拼接这两个序列并使用标识符<ast>来分隔它们,得到输入序列Xinput=(c1,c2,…,cn,<ast>,a1,a2,…,an);通过嵌入层和位置编码,得到向量Xemb

(3-2)将向量输入双向编码器进行语义学习。首先将向量输入到多头注意层,利用残差连接和层归一化使矩阵运算维一致,并将网络中的隐含层归一化为标准正态分布,加快了模型的训练和收敛速度。接着,通过前馈层和两个线性映射层,使用激活函数生成向量Xhidden,通过残差连接和层归一化得到隐藏语义向量;

(3-3)解码器的每一层在编码器的最终隐藏层上执行额外的交叉注意计算,并通过交叉注意连接;解码器的输出被发送到一个完全连接的神经网络,它可以通过softmax层来预测下一个词元的概率;

(3-4)最后,借助束搜索算法来提高生成的代码注释的质量;

(3-5)微调阶段:不调整模型的bias和LayerNorm.weight参数,采用AdamW方法对其他参数进行微调;使用快速梯度法来获得对抗样本,添加扰乱Radv到编码器的嵌入层,获得对抗样本后用它进行训练。

(4)计算相似度阈值:在分别获得了基于信息检索模型和基于深度学习模型产生的代码注释后,在验证集上分析这两种模型的性能与两个代码段c和csim之间相似度分数之间的关系,确定相似度阈值,具体包括如下步骤:

(4-1)对于验证集中的每一个代码,都能得到基于信息检索和基于深度学习模型产生的注释以及相似度分数(基于信息检索模块计算的混合分数);

(4-2)然后把相似度分数集合划分到以0.1为间隔的10个子集上,分别计算每个子集上基于信息检索模型和基于深度学习模型的平均性能。对于每一个评测指标,当两个模型的性能比较结果发生变化时,确定阈值。最后,取四个评测指标(即BLEU、METEOR、ROUGE-L和CIDER这四个评测指标)下阈值的均值作为最终阈值。

(5)决策模块:当为一个新的目标代码生成注释时,根据基于决策的模块输出对应的代码注释,如果目标代码c与基于信息检索模块检索出的最为相似代码csim的相似度分数大于阈值,则选择基于信息检索模型输出的注释,否则选择基于深度学习模型输出的注释。

(6)该基于决策的融合信息检索和深度学习的代码注释生成方法的参数设置如表2所示:

表2

(7)在相同的语料库上对本发明方法和已有代码注释生成方法进行评估,使用来自神经机器翻译研究领域的四个评测指标(即BLEU、METEOR、ROUGE-L和CIDER)来自动评估生成注释的质量。表3显示了本发明构建的基于信息检索的模型和各信息检索基准方法的比较结果;表4显示了本发明构建的基于深度学习的模型和各深度学习基准方法的比较结果;表5显示了本发明提出的基于决策的融合方法和最先进的融合基准方法之间的比较结果。

表3基于信息检索的模型和基准方法的比较结果

经实验表明,本发明提出的基于信息检索的代码注释生成模型相较于4个最先进的信息检索基准方法,能生成更高质量的代码注释。消融实验也表明,使用BERT-whitening操作进行关键特征提取和降维,考虑词法和语法级别的相似度对模型性能的提升很有价值。

表4基于深度学习的模型和基准方法的比较结果

经实验表明,本发明提出的基于深度学习的代码注释生成模型相较于4个最先进的深度学习基准方法,能生成更高质量的代码注释。消融实验也表明,考虑对抗训练能进一步提升模型的性能。

表5基于决策的融合方法和最先进的融合基准方法的比较结果

经实验表明,本发明提出的基于决策的融合信息检索和深度学习的代码注释生成方法相较于先进的融合基准方法而言,在所有指标上都取得了更好的性能,也就是说能生成更高质量的代码注释。具体来看,最好的结果是在JCSD语料库上,其中ROUGE-L指标可以提高3.1。就评测指标而言,本发明提出的基于决策的融合方法比最先进的融合方法Rencos更简单、更有效,表明了本发明所提方法的竞争力。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种建筑构件的施工管理方法、工程资料生成方法及装置

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!