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

一种基于Transformer和混合代码表示的Java代码注释自动生成方法技术

技术编号:26923738 阅读:21 留言:0更新日期:2021-01-01 22:47
本发明专利技术提供了一种基于Transformer和混合代码表示的Java代码注释自动生成方法,包括以下步骤:S1、下载Java项目,构建代码库;S2、在序列化处理层,基于AST遍历转换为代码token向量和SBT向量;S3、在编码层,使用Code编码器和SBT编码器,Code编码器从源代码中提取词法信息,使用SBT编码器来获取代码的结构信息;S4、在解码层,对语义信息进行解码生成注释。本发明专利技术的有益效果为:本发明专利技术的方法是用于代码注释生成,尤其是在编码层对Code和基于AST的SBT遍历序列进行编码,并合并两者学习的语义信息以捕获源代码的语义信息。

【技术实现步骤摘要】
一种基于Transformer和混合代码表示的Java代码注释自动生成方法
本专利技术涉及计算机应用
,尤其涉及一种基于Transformer和混合代码表示的Java代码注释自动生成方法。
技术介绍
在软件的开发和维护过程中,与代码对应的注释经常存在缺失、不足或者与代码实际内容不匹配等问题,但手工编写代码注释对开发人员来说费时费力,且注释质量难以保证,因此亟需研究人员提出有效的代码注释自动生成方法。代码注释生成旨在生成源代码的自然语言描述,可以帮助开发人员理解程序,从而减少软件维护的时间成本。近来,大多数最新技术都利用基于RNN(递归神经网络)或CNN(卷积神经网络)的Seq2Seq模型。但是,这种方法具有某些缺点。例如,CNN不能直接用于处理可变长度序列样本,而RNN不能并行计算,并且效率很低。
技术实现思路
本专利技术的目的在于提供一种基于Transformer和混合代码表示的Java代码注释自动生成方法,以解决现有技术中在软件开发和维护过程中因为缺少代码注释而造成的程序可读性差、可理解性差、软件开发和维护成本增加的问题,该方法是用于代码注释生成,尤其是在编码层对Code和基于AST的SBT遍历序列进行编码,并合并两者学习的语义信息以捕获源代码的语义信息;本专利技术实现了代码注释生成的自动化,为代码生成既简洁又准确的注释,提高了代码的可读性和可理解性,降低了代码开发和维护成本,提高代码开发和维护效率。本专利技术是通过如下措施实现的:一种基于Transformer和混合代码表示的Java代码注释自动生成方法,其中,包括以下步骤:S1、下载Java项目,构建代码库;S2、在序列化处理层,基于AST遍历转换为代码token向量和SBT向量;为了解决词汇量不足的问题,基于驼峰命名法将来自代码令牌和AST节点的标识符拆分为多个单词;S3、在编码层,使用Code编码器和SBT编码器,Code编码器从源代码中提取词法信息,使用SBT编码器来获取代码的结构信息;S4、在解码层,对语义信息进行解码生成注释。作为本专利技术提供的一种Transformer和混合代码表示的Java代码注释自动生成方法进一步优化方案,所述步骤S2中生成了分别适用于Code编码器和SBT编码器两种输入序列,在生成Code编码器的输入序列时,具体包括如下步骤:S201、使用驼峰命名法将源代码中的标识符名进行分解成多个单词;S202、将分解后的单词统一转换成小写格式;S203、OOV(Out-Of-Vocabulary)问题就是在目标任务中可能出现一些罕见词或是派生词,词的复数或者其他的一些组合词的规则而产生的词无法用现有词向量模型表示,将具体数字和字符串分别替换为“<NUM>”和“<STR>”标签来缓解OOV问题,得到CodeEncoding的输入序列;S204、对Java代码数据使用Eclipse的JDT编译器将Java方法解析为抽象语法树AST,使用SBT遍历方法对这个抽象语法树进行遍历得到SBT编码器的输入序列。作为本专利技术提供的一种Transformer和混合代码表示的Java代码注释自动生成方法进一步优化方案,所述步骤S3中使用Code编码器和SBT编码器,两个编码器得到的信息合并到编码层序列的输出。与现有技术相比,本专利技术的有益效果为:本专利技术是一种新的新的基于混合代码表示和Transformer的代码注释生成方法,Transformer可以实现比传统的Seq2Seq(SequencetoSequence)模型更好的性能,提出在编码层对Code和基于AST的SBT遍历序列进行编码,并将两者学习到的语义信息进行合并,以获取源代码的语义信息,与以往的代码注释生成方法进行比较,本方法在性能方面有显著的提高,可以更好的帮助开发人员生成简洁明了的代码注释,以起到辅助开发人员理解代码功能,加速软件维护进程,提高软件制品质量的作用,而为了便于复制我们对未来代码注释生成技术的研究和评估,我们在本文中使用的源代码和数据集都可以在GitHub存储库中找到。附图说明附图用来提供对本专利技术的进一步理解,并且构成说明书的一部分,与本专利技术的实施例一起用于解释本专利技术,并不构成对本专利技术的限制。图1为本专利技术的总体流程图。图2为本专利技术不同编码器设置的比较结果曲线示意图一。图3为本专利技术不同编码器设置的比较结果曲线示意图二。具体实施方式为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本专利技术进行进一步详细说明。当然,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。实施例1参见图1至图3,本专利技术提供其技术方案为,一种基于Transformer和混合代码表示的Java代码注释自动生成方法,其中,包括以下步骤:S1、下载Java项目,构建代码库;S2、在序列化处理层,基于AST遍历转换为代码token向量和SBT向量;为了解决词汇量不足的问题,基于驼峰命名法将来自代码令牌和AST节点的标识符拆分为多个单词;S3、在编码层,使用Code编码器和SBT编码器,Code编码器从源代码中提取词法信息,使用SBT编码器来获取代码的结构信息;S4、在解码层,对语义信息进行解码生成注释。作为本专利技术提供的一种Transformer和混合代码表示的Java代码注释自动生成方法进一步优化方案,所述步骤S2中生成了分别适用于Code编码器和SBT编码器两种输入序列,在生成Code编码器的输入序列时,具体包括如下步骤:S201、使用驼峰命名法将源代码中的标识符名进行分解成多个单词;S202、将分解后的单词统一转换成小写格式;S203、OOV(Out-Of-Vocabulary)问题就是在目标任务中可能出现一些罕见词或是派生词,词的复数或者其他的一些组合词的规则而产生的词无法用现有词向量模型表示,将具体数字和字符串分别替换为“<NUM>”和“<STR>”标签来缓解OOV问题,得到CodeEncoding的输入序列;S204、对Java代码数据使用Eclipse的JDT编译器将Java方法解析为抽象语法树AST,使用SBT遍历方法对这个抽象语法树进行遍历得到SBT编码器的输入序列。作为本专利技术提供的一种Transformer和混合代码表示的Java代码注释自动生成方法进一步优化方案,所述步骤S3中使用Code编码器和SBT编码器,两个编码器得到的信息合并到编码层序列的输出。术语解释:抽象语法生成树(AbstractSyntaxTree,AST):又称语法树,是代码语法结构的抽象树状表示,树中每个节点表示代码的一种结构。参照图1所示的一种新的基于混合代码表示和Transformer的代码注释生成方法,新的基于混合代码表示和Transformer的代码注释生成方法:...

【技术保护点】
1.一种基于Transformer和混合代码表示的Java代码注释自动生成方法,其特征在于,包括以下步骤:/nS1、下载Java项目,构建代码库;/nS2、在序列化处理层,基于AST遍历转换为代码token向量和SBT向量;基于驼峰命名法将来自代码令牌和AST节点的标识符拆分为多个单词;/nS3、在编码层,使用Code编码器和SBT编码器,Code编码器从源代码中提取词法信息,使用SBT编码器来获取代码的结构信息;/nS4、在解码层,对语义信息进行解码生成注释。/n

【技术特征摘要】
1.一种基于Transformer和混合代码表示的Java代码注释自动生成方法,其特征在于,包括以下步骤:
S1、下载Java项目,构建代码库;
S2、在序列化处理层,基于AST遍历转换为代码token向量和SBT向量;基于驼峰命名法将来自代码令牌和AST节点的标识符拆分为多个单词;
S3、在编码层,使用Code编码器和SBT编码器,Code编码器从源代码中提取词法信息,使用SBT编码器来获取代码的结构信息;
S4、在解码层,对语义信息进行解码生成注释。


2.根据权利要求1所述的Transformer和混合代码表示的Java代码注释自动生成方法,其特征在于,所述步骤S2中生成了分别适用于Code编码器和SBT编码器两种输入序列,在生成Code编码器的输入序列时,具体包括如下步骤:
S201、使用驼峰命名法将源代码中的标识符名进行分...

【专利技术属性】
技术研发人员:陈翔杨光刘珂田丹贾焱鑫于池胡新宇
申请(专利权)人:南通大学
类型:发明
国别省市:江苏;32

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

1