【技术实现步骤摘要】
一种基于机器翻译模型的代码注释生成方法
本专利技术涉及软件开发领域,尤其涉及一种基于机器翻译模型的代码注释生成方法。
技术介绍
随着互联网时代不断发展,其涉及领域逐渐繁多,应用于之上的各类平台软件体系愈加庞大,给后期软件维护人员的维护工作增加了纷繁复杂的困难。在软件工程中,阅读代码是一项基本任务,而通常来说,软件维护人员通常不是原始开发人员,且人员流动导致开发人员不得不接管不熟悉的软件代码,同时在代码审查中也需要处理大量不熟悉的源代码。另有研究表明,在企业大型应用开发中,开发人员阅读代码的时间往往比编写代码所需的时间更多。这时,代码注释可以在此问题上提供帮助。在源代码中,编写完整的代码注释可以大大提高代码的可读性;阅读代码注释可以使人更快理解代码,节省理解代码的时间,大大提高工作效率。但同时,编写良好注释的习惯由于既繁琐又耗时往往被程序人员所忽视。自动化生成代码注释的方法亟需提上日程。近年来,机器学习和深度学习的广泛应用,给了自动化方法生成代码注释带来新的挑战和机遇,成为一个可以解决自动生成代码注释问题的良好契机。本文即研究使用自然语言处理领域的机器翻译模型训练源代码特征来生成代码注释的方法。早期的代码注释生成方式很大程度上依赖相关人员工作技能经验的先验知识,直接阅读代码进行静态分析或者考虑程序运行过程中输入输出关系等来进行动态分析标注。但随着程序规模的逐渐庞大,传统方式依赖人力即耗时又费力且效率低下。研究使用深度学习方式自动生成代码注释,将源代码内容的特征数据进行训练提取代码特征,可以自动化 ...
【技术保护点】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。