一种基于递归神经网络模型的代码注释生成方法

文档序号:26101426发布日期:2021-07-30 18:12阅读:来源:国知局

技术特征:

1.一种基于递归神经网络模型的代码注释生成方法,其特征在于,包括如下步骤:

s1、使用scrapy从开源社区上爬取评分高的代码项目,获得java数据集;

s2、对步骤s1获得的java数据集进行筛选和处理,剔除简单的注释和方法,优化java数据集;

s3、将步骤s2处理过的java数据集输入seq2seq模型中,进行信息编码;

s4、将步骤s3输出的信息编码输入attention机制层和copy机制层得到上下文向量;

s5、将信息编码和上下文向量输入解码层,生成代码注释。

2.根据权利要求1所述的基于递归神经网络模型的代码注释生成方法,其特征在于,步骤s1的具体步骤为:

s1.1、根据github上的编程语言流行指标,选择排名靠前的java语言作为代码注释的目标;

s1.2、从github上爬取评分较高的java项目,获得java数据集。

3.根据权利要求1所述的基于递归神经网络模型的代码注释生成方法,其特征在于,步骤s2的具体步骤为:

s2.1、对获得的java数据集进行筛选和处理:在每个存储库中选择具有相应javadoc的java方法,并将javadoc中的第一句话用作java方法的目标注释,并且采用serializable接口技术,对面目标注释进行向量化处理,使得注释可以很好的保存上下文的信息,获得目标注释序列;

s2.2、优化java数据集:省略java数据集中基本测试方法的注释和方法,手动检查处理后的样本,并省略覆盖方法以减少重复。

4.根据权利要求1所述的基于递归神经网络模型的代码注释生成方法,其特征在于,步骤s3的具体步骤为:

s3.1、在对数据集进行预处理之后,得到的方法序列生成抽象语法树ast:第一步进行词法分析,读取代码从java方法中提取tokens,标记化方法体,使用camelcase分类每个token并且删除重复的token,最后将代码分割成一个tokens列表;第二步进行语法分析,将词法分析所得到的tokens列表转化成树形的表达形式;

s3.2、使用一种平衡二叉搜索树avl来遍历抽象语法树ast,查找token节点类型中代码词典,生成代码序列;

对于每一个结点调用insert()函数,在执行完insert()操作后,avl的性质不满足,再调用maintain()函数来修复avl;

s3.3、调用serialize()函数对ast进行序列化操作,将得到的ast序列输入到seq2seq模型之中;

s3.4、seq2seq模型的主流是编码器-解码器架构,并且融入attention机制和copy机制,编码器是一个两层双向lstm网络,解码器是一个单层lstm网络,对于给定的输入x=(x1,x2,…,xt),在t时刻的状态信息xt和上一状态隐含状态st-1经过长短记忆神经网络lstm模型,生成当前隐含状态序列st和状态信息xt的编码输出ht。

5.根据权利要求4所述的基于递归神经网络模型的代码注释生成方法,其特征在于,步骤s3.4的具体步骤为:

s3.4.1、假设eij为当前隐藏状态序列si-1和上一状态信息的编码输出hj的匹配程度的记号,计算公式如下:

eij=a(si-1,hj)式(ⅰ),

其中,si-1为第i-1位置的隐藏状态序列,hj为第j位置状态信息的编码输出;

s3.4.2、定义α为归一化概率权重,表示输入的第j个信息和当前输出的关系概率:

其中,eij为si-1和hj之间匹配程度的记号;

s3.4.3、权重α和编码输出hj之间的匹配程度得到上下文向量c,c的计算公式如下:

其中,αij为归一化概率权重,hj为第j时刻的编码输出;

s3.4.4、为了解决得到的上下文向量c中出现的未知词汇,融入copy机制,采用generate-mode&copy-mode两个模式,对未知词汇采用直接copy-mode的方式从源代码词汇中直接复制词汇,来缓解未知词汇的问题,提高上下文向量c中的有效词汇,对于已有的词汇采用generate-mode模式直接从词汇中生成;最后,将generate-mode&copy-mode输出的概率进行加和,作为最终词的概率分布。

6.根据权利要求1所述的基于递归神经网络模型的代码注释生成方法,其特征在于,步骤s5中将信息编码和上下文向量输入解码层,由源代码注释和序列概率分布生成输出序列,概率分布计算公式如下:

p(yt|y1,y2,…,yt-1,c)=g(yt-1,hi,c)式(ⅳ),

其中,yt为t时刻预测的结果,c为上下文向量,hi为第i个时刻的编码输出,g()为yi时刻的概率。


技术总结
本发明提供一种基于递归神经网络模型的代码注释生成方法,主要用于解决开发人员节省编写注释所需的时间。包括如下步骤:使用scrapy从开源社区上爬取评分高的代码项目,获得java数据集;对获得的java数据集进行一些筛选和处理,优化数据集;将处理过的数据集输入Seq2Seq+Attention&Copy模型中,进行信息的编码;将输出的信息编码输入Attention机制层和Copy机制层得到上下文向量;将结构信息的编码输出和上下文向量输入解码层,由源代码注释和序列概率分布生成输出序列;基于已训练好的Seq2Seq+Attention&Copy代码注释模型,对代码进行自动注释。本发明中,自动代码注释生成不仅可以帮助开发人员理解源代码,还可以节省编写注释所需的时间。

技术研发人员:文万志;楚加卫;祁佳篁;赵甜;李元金;袁佳祺
受保护的技术使用者:南通大学
技术研发日:2021.05.08
技术公布日:2021.07.30
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1