当前位置: 首页 > 专利查询>中山大学专利>正文

一种基于机器翻译模型的代码注释生成方法技术

技术编号:24010147 阅读:39 留言:0更新日期:2020-05-02 01:28
本发明专利技术公开一种基于机器翻译模型的代码注释生成方法,将所获取含注释的代码语料库划分为源代码方法序列语料库和对应的源代码注释语料库;将源代码注释语料库中源代码注释作输入seq2seq模型;提取源代码方法序列生成抽象语法树,将节点的标识符替换为节点类别且结构化遍历得到保留结构信息的序列输入seq2seq模型;将结构信息输入编码层生成隐含状态序列和结构信息的编码输出并输入注意力机制层,根据隐含状态序列和结构信息的编码输出之间匹配程度计算上下文向量;将结构信息的编码输出和上下文向量输入解码层,并计算训练样本目标的序列概率分布;由源代码注释和序列概率分布生成基于序列机器翻译模型。

A code annotation generation method based on machine translation model

【技术实现步骤摘要】
一种基于机器翻译模型的代码注释生成方法
本专利技术涉及软件开发领域,尤其涉及一种基于机器翻译模型的代码注释生成方法。
技术介绍
随着互联网时代不断发展,其涉及领域逐渐繁多,应用于之上的各类平台软件体系愈加庞大,给后期软件维护人员的维护工作增加了纷繁复杂的困难。在软件工程中,阅读代码是一项基本任务,而通常来说,软件维护人员通常不是原始开发人员,且人员流动导致开发人员不得不接管不熟悉的软件代码,同时在代码审查中也需要处理大量不熟悉的源代码。另有研究表明,在企业大型应用开发中,开发人员阅读代码的时间往往比编写代码所需的时间更多。这时,代码注释可以在此问题上提供帮助。在源代码中,编写完整的代码注释可以大大提高代码的可读性;阅读代码注释可以使人更快理解代码,节省理解代码的时间,大大提高工作效率。但同时,编写良好注释的习惯由于既繁琐又耗时往往被程序人员所忽视。自动化生成代码注释的方法亟需提上日程。近年来,机器学习和深度学习的广泛应用,给了自动化方法生成代码注释带来新的挑战和机遇,成为一个可以解决自动生成代码注释问题的良好契机。本文即研究使用自然语言处理领域的机器翻译模型训练源代码特征来生成代码注释的方法。早期的代码注释生成方式很大程度上依赖相关人员工作技能经验的先验知识,直接阅读代码进行静态分析或者考虑程序运行过程中输入输出关系等来进行动态分析标注。但随着程序规模的逐渐庞大,传统方式依赖人力即耗时又费力且效率低下。研究使用深度学习方式自动生成代码注释,将源代码内容的特征数据进行训练提取代码特征,可以自动化充分挖掘代码隐含语义,提高程序理解的效率。目前代码注释生成方法主要有两种思路。一种是使用IR方法为类和方法生成注释,常见的模型由空间模型(VSM)和潜在语义索引(LSI),以从类似的代码片段中搜索注释。这种方法的限制在于当变量标识符和方法名称命名不当时,很难从中提取准确的关键字,并且他们比较依赖于代码库中相似代码片段的相似程度。另外一种方式是将问题抽象为自然语言处理领域中的机器翻译问题,使用解决机器翻译问题的方法来生成相关学习模型。使用的模型一般是处理序列问题的深度学习模型,从开始的循环神经网络(recurrentneuralnetwork,RNN)和长短时记忆网络(longshorttermmemory,LSTM),增加注意力(attention)机制,到后来使用序列到序列(Seq2seq)模型。通过对模型使用大量数据集训练构建大规模源代码的概率模型,不同于IR方式使用关键词合成注释,此种方法直接从代码中自动提取丰富特征生成相应代码注释。RNN通过增加隐藏层中结点连接引入循环机制处理序列相关问题,适用于处理较长序列情形。基于RNN及其变体LSTM可用于对程序语言建模以获得代码序列的特征向量表示。注意力转移机制使得神经网络在生成当前输出时动态关注输入中与其更加相关的内容,在输入较长的情况下也能减轻对于长序列的记忆负担,有效提高模型性能。Seq2seq模型用于对输入输出序列进行映射建模,它包含解码器和编码器,编码器将输入序列转化为特征向量,解码器则根据该向量生成输出序列。这两种思路与自然语言处理相反,代码注释的生成使用代码片段来生成注释,而使用编程语言进行编写的源代码是具有明确的结构,现有的方法中并未利用到丰富的结构信息提高模型的精准度。其次,由于代码中含有许多变量名称,所建立的词典将十分庞大,例如在数据集中有790000个唯一标识符,如果使用常见的训练维度30000,将有95%以上的词汇视为未知,根据研究表明,这是不合理的。
技术实现思路
本专利技术为克服上述现有技术所述的至少一种缺陷(不足),提供一种基于机器翻译模型的代码注释生成方法。本专利技术旨在至少在一定程度上解决上述技术问题。为了达到上述技术效果,本专利技术的技术方案如下:一种基于机器翻译模型的代码注释生成方法,包括:S10获取含注释的代码语料,提取代码语料中的高频词构建词典,将代码语料库划分为源代码方法序列语料库和对应的源代码注释语料库;S20提取源代码注释语料库中源代码注释作为训练样本目标Y输入seq2seq模型;S30提取源代码方法序列生成抽象语法树,将节点的标识符替换为节点的type类别且结构化遍历得到保留结构信息的序列作为模型训练样本X,将模型训练样本X将输入seq2seq模型;S40将结构信息X输入编码层生成作为模型参数的隐含状态序列S和结构信息的编码输出h;S50将隐含状态序列S和结构信息的编码输出h输入注意力机制层,注意力机制层根据隐含状态序列S和结构信息的编码输出h之间匹配程度计算得到上下文向量C;S60将结构信息的编码输出h和上下文向量C输入解码层,并计算训练样本目标Y的序列概率分布;S70由源代码注释和序列概率分布生成基于序列机器翻译模型。优选地,所述S30具体包括:S301对源代码序列生成抽象语法树,其中抽象语法树至少包括方法的类型名和参数作为叶结点词语表征;S302从根节点开始,使用一对括号来表示结构信息,将本节点放在括号里以及最后;S303遍历根节点的所有子节点,对于所有子节点生成一对括号并将子节点放在括号后面;S304通过S302和S303步骤的递归遍历,以子节点为根节点的树结构生成一个包含结构信息的序列;S305将词典之外的方法名替换为结点在抽象语法树中类型名作为词典征。优选地,所述编码器采用长短时记忆网络LSTM模型,假设编码器当前状态为t,使用当前状态的结构信息xt和上一状态隐含状态序列st-1经过长短时记忆网络LSTM模型生成当前隐含状态序列st和当前结构信息的编码输出ht。优选地,所述S50具体为:S501将隐含状态序列S和结构信息的编码输出h输入注意力机制层,假设ei,j为当前隐含状态序列sj和上一状态结构信息的编码输出hi-1的匹配程度,计算公式如下:ei,j=a(hi-1,sj),S502设隐含状态序列S包括各状态s1,...sm,假设注意机制层中的当前隐含状态序列为sj,计算当前隐含状态序列sj的权重αi,j:S503以S502计算得到当前隐含状态序列的各状态加权和作为当前状态的上下文向量ci,并将之输出,其中当前状态的上下文向量ci的计算公式如下:优选地,所述S60具体为:S601将训练样本目标Y序列化为y1,y2,...,yi-1,yi,计算基于ci和y1,y2,...,yi-1的分布概率预测序列y:p(yi|y1,y2,…,yi-1,x)=g(yi-1,hi,ci),g为yi的概率;S602以概率g的信息熵为目标函数,通过最优梯度下降算法最小化目标损失函数生成训练样本目标Y的序列概率分布。优选地,所述S10中词典的选取维度为3000个单词,抽象语法树序列限制在400维度。优选地,所述含注释的代码语料从开源的面向开源及私有软件项目的托管平台中获取。本文档来自技高网
...

【技术保护点】
1.一种基于机器翻译模型的代码注释生成方法,其特征在于,包括:/nS10获取含注释的代码语料库,提取代码语料库中的高频词构建词典,将代码语料库划分为源代码方法序列语料库和对应的源代码注释语料库;/nS20提取源代码注释语料库中源代码注释作为训练样本目标Y输入seq2seq模型;/nS30提取源代码方法序列生成抽象语法树,将节点的标识符替换为节点的type类别且结构化遍历得到保留结构信息的序列作为模型训练样本X,将模型训练样本X将输入seq2seq模型;/nS40将结构信息X输入编码层生成作为模型参数的隐含状态序列S和结构信息的编码输出h;/nS50将隐含状态序列S和结构信息的编码输出h输入注意力机制层,注意力机制层根据隐含状态序列S和结构信息的编码输出h之间匹配程度计算得到上下文向量C;/nS60将结构信息的编码输出h和上下文向量C输入解码层,并计算训练样本目标Y的序列概率分布;/nS70由源代码注释和序列概率分布生成基于序列机器翻译模型。/n

【技术特征摘要】
1.一种基于机器翻译模型的代码注释生成方法,其特征在于,包括:
S10获取含注释的代码语料库,提取代码语料库中的高频词构建词典,将代码语料库划分为源代码方法序列语料库和对应的源代码注释语料库;
S20提取源代码注释语料库中源代码注释作为训练样本目标Y输入seq2seq模型;
S30提取源代码方法序列生成抽象语法树,将节点的标识符替换为节点的type类别且结构化遍历得到保留结构信息的序列作为模型训练样本X,将模型训练样本X将输入seq2seq模型;
S40将结构信息X输入编码层生成作为模型参数的隐含状态序列S和结构信息的编码输出h;
S50将隐含状态序列S和结构信息的编码输出h输入注意力机制层,注意力机制层根据隐含状态序列S和结构信息的编码输出h之间匹配程度计算得到上下文向量C;
S60将结构信息的编码输出h和上下文向量C输入解码层,并计算训练样本目标Y的序列概率分布;
S70由源代码注释和序列概率分布生成基于序列机器翻译模型。


2.如权利要求1所述的基于机器翻译模型的代码注释生成方法,其特征在于,所述S30具体包括:
S301对源代码序列生成抽象语法树,其中抽象语法树至少包括方法的类型名和参数作为叶结点词语表征;
S302从根节点开始,使用一对括号来表示结构信息,将本节点放在括号里以及最后;
S303遍历根节点的所有子节点,对于所有子节点生成一对括号并将子节点放在括号后面;
S304通过S302和S303步骤的递归遍历,以子节点为根节点的树结构生成一个包含结构信息的序列;
S305将词典之外的方法名替换为结点在抽象语法树中类型名作为词典征。


3.如权利要求1所述的基于机器翻译模型的代码注释生成方法,其特征在于,所述编码器采用长短时记忆网络LSTM模型,假设编码器当前状态为t,使用当前状态的结构信息xt和上一状态隐含状态序列st-1经过长短时记忆网络LSTM模型生成当前隐含状态序列st和当前结构信息的编码输出ht。


4.如权利要求1所述的基于机器翻译模型的代码注释生成方法,其特征在于,所述S50具体...

【专利技术属性】
技术研发人员:郑子彬马蒙蒙周晓聪
申请(专利权)人:中山大学
类型:发明
国别省市:广东;44

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

1