System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种源代码注释生成方法技术_技高网

一种源代码注释生成方法技术

技术编号:40419334 阅读:6 留言:0更新日期:2024-02-20 22:37
本发明专利技术公开了一种源代码注释生成方法,训练阶段包括S11,获取开源数据集,对数据集进行预处理,得到每个方法的语法图结构和句子序列;S12,使用预训练的嵌入层模型对数据集做嵌入操作,得到每个单词的向量表示;S13,将语法图中的节点用单词向量替换,同时将句子序列中的单词也用向量替换,分别输入到编码器E<subgt;1</subgt;和编码器E<subgt;2</subgt;中,分别得到表示源代码结构信息的特征向量H<subgt;s</subgt;和语义信息的特征向量H<subgt;c</subgt;;S14,将两个特征向量融合后输入到解码器D<subgt;1</subgt;,通过监督学习方式训练编码器E<subgt;1</subgt;,E<subgt;2</subgt;和解码器D<subgt;1</subgt;,得到生成目标注释的最大概率。本发明专利技术将优质的开源数据集进行训练,确定源代码的编码向量和解码向量,再结合搜索算法进行代码注释的预测,大大提高生成注释的质量。

【技术实现步骤摘要】

本专利技术属于计算机,特别涉及一种源代码注释生成方法


技术介绍

1、随着现代化信息环境的日益复杂,特别是移动互联网的大规模普及,出现了大量功能复杂的软件。而源代码的注释是为了提高源码可读性而编写的对应源代码的自然语言文本描述,主要目的是为了辅助程序员进行代码理解,提高软件系统的可维护性。优秀的软件项目需要有高质量的代码和准确、全面的注释及文档。对于大量的软件代码,如果不对软件代码匹配高质量、精确度高的代码注释,软件的维护工作将耗费程序人员大量的精力和时间。

2、早期的技术大多基于信息检索的方法。大多数研究通常从代码片段中抽取一些关键词作为对应代码的摘要。近年来的技术大多基于神经机器翻译,而常见的模型是单编码器-解码器模型。现有的技术存在以下问题:

3、1.基于单独的信息检索方法对于非常复杂或特定领域的代码,可能无法生成准确和有意义的注释;

4、2.基于单编码器方法无法完全理解上下文,可能使生成的注释不连贯,并且对源代码结构信息不敏感,生成的注释仅依靠单独的语义信息;

5、3.基于单独的神经网络方法对于低频词的学习效果不好,最终生成的注释可能包含未知的标志。


技术实现思路

1、有鉴于此,本专利技术提出一种源代码注释生成方法,包括以下步骤:

2、s1,使用数据集训练模型;

3、s2,使用经过训练的模型对源代码的注释进行预测,并生成相应的自然语言注释。

4、优选地,所述s1包括以下步骤:

5、s11,获取开源数据集,对数据集进行预处理,得到每个方法的语法图结构和句子序列;

6、s12,使用预训练的嵌入层模型对数据集做嵌入操作,得到每个单词的向量表示;

7、s13,将s11得到的语法图中的节点用单词向量替换,同时将句子序列中的单词也用向量替换,分别输入到编码器e1和编码器e2中,分别得到表示源代码结构信息的特征向量hs和语义信息的特征向量hc;

8、s14,将s13得到的两个特征向量融合后输入到解码器d1,通过监督学习方式训练编码器e1,e2和解码器d1,得到生成目标注释的最大概率。

9、优选地,所述s11包括以下步骤:

10、s111,以方法体为粒度划分数据集,首先,将源代码方法转换为语法树结构,其次,将语法树每层的每个兄弟节点相互连接并标记根节点作为起始节点,形成抽象语法图结构,进一步丰富源代码的结构信息;同时,将源代码表示为句子序列,丰富源代码的语法信息;

11、s112,选择单词出现次数前10000个单词制作源代码词汇表vc和注释词汇表vs。

12、优选地,所述s12包括以下步骤:

13、s121,对源代码和注释进行分词,得到出现频率前n个单词作为源代码词汇表vc和注释词汇表vs;对源代码分词时,将驼峰形式表示的单词拆分为独立的若干个单词;

14、s122,将词汇表、源代码和注释输入到预训练的模型中,得到词嵌入矩阵,矩阵的每一行都表示为一个单词的向量形式。

15、优选地,所述s13包括以下步骤:

16、s131,抽象语法图作为编码器e1的输入,对源代码结构信息进行编码,得到表示源代码结构信息的特征向量hs;

17、s132,将源代码序列作为编码器e2的输入,双向循环神经网络对语义信息编码,得到表示源代码语法信息的特征向量hc;

18、s133,对于每个源代码和注释的向量表示,存储在数据库中作为记忆库,帮助模型对源代码进行注释预测。

19、优选地,所述s131包括以下步骤:

20、s1311,编码器e1中神经网络为m层,在第mi层计算时,对于每个节点i,与其距离为mi的全部邻接点进行传递计算,其公式如下:

21、

22、其中,n(i)表示节点i的邻接点,di表示节点i的度,dj表示节点j的度,xj表示节点j的向量,k表示可选的卷积核,yi表示每个节点得到局部信息;

23、步骤s1312,单个节点计算完毕后,进行聚合操作,得到节点的局部结构信息的向量表示;全部节点遍历计算完成后,进行下一层计算,每层计算方式相同,不同之处在于邻接点距离不同;

24、步骤s1313,m层迭代完毕后,进行图池化操作,并将聚合结果输入到激活函数中,得到表示源代码结构信息的特征向量hs。

25、优选地,所述s14包括以下步骤:

26、s141,将s13得到的两个特征向量先输入到双线性池化层中进行融合,得到包含语义信息和结构信息的上下文向量c;

27、s142,使用带注意力机制的循环神经网络作为解码器,解码器最初的输入为上述的向量c和起始符号,此后每个时刻t,解码器生成隐藏状态ht和注意力权重向量at;

28、s143,解码完成后,使用监督学习方式训练编码器e1,e2和解码器d1,得到生成目标注释的最大概率。

29、优选地,所述s142中通过下式计算出注意力分数:

30、

31、其中,w为注意力权重矩阵,由向量at构成,ct-1为上一个时刻的上下文向量,注意力分数与ct-1加权求和,计算出当前时刻t的上下文向量ct,帮助生成t+1时刻的输出。

32、优选地,所述s2包括将带预测注释的源代码输入到模型中,生成自然语言注释。

33、优选地,所述s2包括以下步骤:

34、s21,编码器编码得到带预测源代码的结构向量和语义向量后,分别通过搜索算法在上述记忆库中搜索最相近的k个向量;

35、s22,将搜索到的向量进行拼接,降维操作,得到与解码器相同维度两个向量,输入解码器中,解码器在生成每个时刻t的结果时,选择k个概率最大的单词,对于每个候选单词,计算与当前序列的累积得分,保留最高得分的单词作为此时刻的结果,得分调整公式为:

36、score=ri/lα

37、l是注释长度,α是长度惩罚的超参数,ri表示候选单词。

38、与现有技术相比,本专利技术公开的源代码注释生成方法,至少包括以下有益效果:

39、1.设计抽象语法图结构,并使用图编码器对其进行编码,有效的学习了源代码的全局结构信息和局部结构信息,增加了生成注释的准确度;

40、2.使用双编码器对源代码进行编码,使模型可以学习更为全面的源代码信息,增加了模型的泛化能力和性能;

41、3.结构编码器使用图神经网络,并对每个节点进行m层传播,有效的消除了结构编码器存在的全局编码能力差的缺点,使模型学习到的信息更加全面;

42、4.将搜索技术和深度学习技术结合起来,即提高了模型对低频词的关注度,也使模型具有较高的泛化性,有助于生成更高质量,更加全面的注释。

本文档来自技高网...

【技术保护点】

1.一种源代码注释生成方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的源代码注释生成方法,其特征在于,所述S1包括以下步骤:

3.根据权利要求2所述的源代码注释生成方法,其特征在于,所述S11包括以下步骤:

4.根据权利要求2所述的源代码注释生成方法,其特征在于,所述S12包括以下步骤:

5.根据权利要求2所述的源代码注释生成方法,其特征在于,所述S13包括以下步骤:

6.根据权利要求5所述的源代码注释生成方法,其特征在于,所述S131包括以下步骤:

7.根据权利要求2所述的源代码注释生成方法,其特征在于,所述S14包括以下步骤:

8.根据权利要求7所述的源代码注释生成方法,其特征在于,所述S142中通过下式计算出注意力分数:

9.根据权利要求1所述的源代码注释生成方法,其特征在于,所述S2包括将带预测注释的源代码输入到模型中,生成自然语言注释。

10.根据权利要求1所述的源代码注释生成方法,其特征在于,所述S2包括以下步骤:

【技术特征摘要】

1.一种源代码注释生成方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的源代码注释生成方法,其特征在于,所述s1包括以下步骤:

3.根据权利要求2所述的源代码注释生成方法,其特征在于,所述s11包括以下步骤:

4.根据权利要求2所述的源代码注释生成方法,其特征在于,所述s12包括以下步骤:

5.根据权利要求2所述的源代码注释生成方法,其特征在于,所述s13包括以下步骤:

6.根据权利要求5所述的源代码注释生...

【专利技术属性】
技术研发人员:赵建勇王文亮邬惠峰陈佰平
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1