CN113076133B - 基于深度学习的Java程序内部注释的生成方法及系统 - Google Patents

基于深度学习的Java程序内部注释的生成方法及系统 Download PDF

Info

Publication number
CN113076133B
CN113076133B CN202110449761.5A CN202110449761A CN113076133B CN 113076133 B CN113076133 B CN 113076133B CN 202110449761 A CN202110449761 A CN 202110449761A CN 113076133 B CN113076133 B CN 113076133B
Authority
CN
China
Prior art keywords
annotation
code
target
model
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110449761.5A
Other languages
English (en)
Other versions
CN113076133A (zh
Inventor
陈林
汪值
李言辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN202110449761.5A priority Critical patent/CN113076133B/zh
Priority to PCT/CN2021/089827 priority patent/WO2022226716A1/zh
Publication of CN113076133A publication Critical patent/CN113076133A/zh
Application granted granted Critical
Publication of CN113076133B publication Critical patent/CN113076133B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • G06F16/334Query execution
    • G06F16/3344Query execution using natural language analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/289Phrasal analysis, e.g. finite state techniques or chunking

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Library & Information Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开基于深度学习的Java程序内部注释的生成方法及系统,所述方法包括如下步骤:获取Stars数排名靠前的项目,提取出对应的内部注释和方法语句列表;得到:<注释,目标代码>对;选择Verb‑dobj形式的注释;得到和目标代码段相关联的代码上下文;对注释、目标代码以及上下文进行预处理,得到:<注释,目标代码,代码上下文>组成的三元组数据集;对构建的数据集随机划分成训练集、验证集和测试集,同时构建编码器解码器网络;划分中的训练集用于模型训练,并且通过在验证集上进行评估,得到在验证集上效果最好的模型作为目标模型;用获得的目标模型对测试集中的数据进行预测,生成预测的注释。

Description

基于深度学习的Java程序内部注释的生成方法及系统
技术领域
本发明涉及一种基于深度学习的Java程序内部注释的生成方法及系统,属于互联网技术领域。
背景技术
在软件开发和维护中,开发人员将大约59%的时间用于程序理解活动。源代码注释是软件的重要组成部分,它可以帮助开发人员理解代码并减少代码审查的难度。代码注释以自然语言描述的形式对代码操作或者程序语义进行描述。研究表明,带注释的代码比没有注释的代码更易于理解,并且代码注释也被视为评估代码质量的关键因素。
但是在软件开发活动中,由于时间压力和开发过程中的疏忽,开发人员并不总是有机会对新写的代码进行仔细注释或在更改代码时更新注释。在忽略代码注释的重要性和其他原因的同时,代码注释在代码更改期间通常会丢失或变得过时不匹配,并且在许多项目中存在已过时的注释。因此,自动生成代码注释可以帮助开发人员节省编写注释和理解其程序的时间。更多的情况下,开发者往往不会注释他们的代码,大约只有20%的方法中存在内部注释。针对这些问题的一种解决方法是通过学习的代码特征,自动的为这些没有注释的代码生成对应的描述注释。随着今年来深度学习方法的快速发展,受到神经机器翻译和序列生成方法的启发,可以通过从大规模的开源项目中提取代码和注释对,在大量数据的训练下优化模型性能,最终将代码输入到训练好的模型中即可输出需要的可描述性的注释信息。
现有的工作主要集中于研究方法摘要注释,并未关注方法内部注释的自动生成,将这些方法迁移到内部注释生成任务的效果并不明确,并且存在三个问题。首先,生成方法摘要注释更加容易,因为方法摘要往往是函数Javadoc中使用自然语言描述的第一个句子,明确地描述了整个方法的功能。然而相对于半结构化的Javadoc,Java的方法内部注释却表达的语义更加多样和复杂,部分注释和代码并不是直接相关,生成内部注释的难度相比于生成方法摘要更加困难。其次,在方法摘要注释生成任务中,方法摘要有明确的目标代码,也就是整个方法体,但是识别内部注释和对应的目标代码并不直接可以确定。第三,无法直接将摘要注释生成的方法迁移到内部注释上,因为只利用的对应的目标代码通常不足以生成内部注释,在不同项目中不同注释对应的目标代码可能是相似的除源代码片段外还应考虑更多信息,例如方法体中的其他代码。
发明内容
为克服现有技术存在的缺陷,解决上述技术问题,提出一种基于深度学习的Java程序内部注释的生成方法及系统。本发明的目的在于,为Java程序体内的代码片段自动生成内部注释,并且通过结合两种类型的信息(目标代码和上下文代码信息),通过采用深度学习的领域的编码器解码器网络来构建模型,并且采用预训练的语言模型CodeBERT来作为编码器,从而提高生成注释的质量,辅助开发者进行代码理解和阅读,提升代码的可维护性
本发明具体采用如下技术方案:基于深度学习的Java程序内部注释的生成方法,包括如下步骤:
步骤SS1:通过从GitHub中获取Stars数排名靠前的项目,然后通过静态分析工具JDT提取Java源码中的方法信息,然后识别出对应的方法信息,提取出对应的内部注释和方法语句列表;
步骤SS2:根据注释的位置,遍历方法信息中的语句,通过位置信息和数据流信息得到注释对应的语句列表,得到:<注释,目标代码>对;
步骤SS3:根据注释的类型进行过滤,选择Verb-dobj形式的注释;
步骤SS4:分析方法信息内部实现的数据流信息,根据变量之间的定义使用关系,得到和目标代码段相关联的代码上下文;
步骤SS5:对注释、目标代码以及上下文进行预处理,所述预处理过程包括分词、标识符切分,单词小写化;最终处理完成得到:<注释,目标代码,代码上下文>组成的三元组数据集;
步骤SS6:对构建的数据集随机划分成训练集、验证集和测试集,同时构建编码器解码器网络;
步骤SS7:所述步骤SS6中划分中的训练集用于模型训练,并且通过在验证集上进行评估,得到在验证集上效果最好的模型作为目标模型;
步骤SS8:用所述步骤SS7获得的目标模型对测试集中的数据进行预测,生成预测的注释。
作为一种较佳的实施例,所述步骤SS1具体包括:通过从GitHub中获取Stars数排名靠前的Java项目,得到5281个项目,下载到本地之后,通过静态分析工具JDT来提取Java方法中的信息,提取代码和注释,每个注释信息包括唯一路径(、注释文本、类型、开始行、结束行,语句列表;所述唯一路径包含文件名+类名+方法名+参数名),所述类型包含行注释还是块注释)、所述开始行和所述结束行包含单行注释的开始行和结束行相同。
作为一种较佳的实施例,所述步骤SS2具体包括:对步骤SS1中的数据进行处理,根据注释和代码的位置与关系确定注释的目标代码;首先确定注释的初始目标语句列表为注释的下一行到以空行分割或者代码块结束的所有语句;然后通过变量的定义使用依赖、代码的语义相似性依赖、代码-注释依赖来更加精确的选择注释对应的目标语句列表;每个数据表项为:<注释信息,目标语句列表,方法语句列表>。
作为一种较佳的实施例,所述步骤SS3具体包括:对步骤SS2中的注释进行处理,通过Stanford coreNLP工具集对注释进行磁性标注和依存分析,选择以动词开头并且包含dobj直接宾语结构的注释,进一步的去除包含的被注释的代码、技术债。
作为一种较佳的实施例,所述步骤SS4具体包括:基于步骤SS3中的目标语句列表和方法语句列表,通过数据流分析,提取目标语句列表和方法语句列表中存在的变量定义使用关系与变量的使用定义关系,构建出上下文语句列表;最终每一个数据表项为:<注释信息,目标语句列表,上下文语句列表>。
作为一种较佳的实施例,所述步骤SS5具体包括:对步骤SS4中的数据进行处理,首先对于语句中的标识符,通过驼峰式命名法进行切分,通过正则表达式设计完成标识符的处理过程;然后将Java代码通过标点符号进行切分,将代码转换为深度学习模型可以识别的单词序列;同时对由标点和空格隔开的英文注释进行分词,最后将注释以及代码转换为小写,每个数据的表现形式为:<注释,目标代码,上下文代码>。
作为一种较佳的实施例,所述步骤SS6具体包括:对于步骤SS5得到的数据集进行划分,按照80%:10%:10%的比例进行随机划分,训练集包含的数据为336457,验证集和测试集各包含42056条数据;同时整个模型采用编码器解码器结构,编码器CodeBERT在预训练阶段使用双模态数据实例作为输入进行训练,并且解码器采用6层的Transformer解码层进行堆叠,构建好整个网络。
作为一种较佳的实施例,所述步骤SS7具体包括:使用步骤SS6中的训练集作为模型输入,进行训练和优化,通过设置目标代码长度为100、上下文代码长度为300、注释长度为30进行训练,通过验证集进行模型选择,选择在验证集上表现最好的模型作为目标模型。
作为一种较佳的实施例,所述步骤SS8具体包括:将步骤SS6中剩余10%的测试集作为步骤SS7中目标模型的输入,最后生成目标注释。
本发明还提出基于深度学习的Java程序内部注释的生成系统,包括:
注释列表提取模块,用于执行:通过从GitHub中获取Stars数排名靠前的项目,然后通过静态分析工具JDT提取Java源码中的方法信息,然后识别出对应的方法信息,提取出对应的内部注释和方法语句列表;
注释代码对提取模块,用于执行:根据注释的位置,遍历方法信息中的语句,通过位置信息和数据流信息得到注释对应的语句列表,得到:<注释,目标代码>对;
注释类型过滤模块,用于执行:根据注释的类型进行过滤,选择Verb-dobj形式的注释;
代码上下文生成模块,用于执行:分析方法信息内部实现的数据流信息,根据变量之间的定义使用关系,得到和目标代码段相关联的代码上下文;
预处理模块,用于执行:对注释、目标代码以及上下文进行预处理,所述预处理过程包括分词、标识符切分,单词小写化;最终处理完成得到:<注释,目标代码,代码上下文>组成的三元组数据集;
数据集划分模块,用于执行:对构建的数据集随机划分成训练集、验证集和测试集,同时构建编码器解码器网络;
模型训练模块,用于执行:所述数据集划分模块中划分中的训练集用于模型训练,并且通过在验证集上进行评估,得到在验证集上效果最好的模型作为目标模型;
预测注释生成模块,用于执行:用所述模型训练模块获得的目标模型对测试集中的数据进行预测,生成预测的注释。
本发明所达到的有益效果:1.本发明通过使用深度学习方法,自动的生成内部注释,帮助开发者更好的理解代码。现有技术主要关注与生成Java方法的摘要注释,然而生成内部注释的任务难度更大,因此我们通过构建数据集,提出模型进行训练和测试,最终通过评估表明本发明的生成内部注释的效果高于现有方法。2.本发明通过结合内部注释对应的目标代码和上下文代码,可以生成质量更高的内部注释。我们通过对输入的控制,发现使用目标代码和上下文代码相结合的效果高于只使用目标代码,这是现有方法无法利用的。3.本发明通过预训练的程序设计语言模型CodeBERT来作为编码器,提高了模型的学习能力,相对于现有方法,生成的注释质量更高。
附图说明
图1是本发明的基于深度学习的Java程序内部注释的生成方法的优选实施例的流程图;
图2是本发明的对一个注释进行词性标注和依存分析的示例示意图;
图3是本发明的步骤SS6构建的网络结构示意图。
具体实施方式
下面结合附图对本发明作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
实施例1:如图1所示,本发明具体采用如下技术方案:基于深度学习的Java程序内部注释的生成方法,包括如下步骤:
步骤SS1:通过从GitHub中获取Stars数排名靠前的项目,然后通过静态分析工具JDT提取Java源码中的方法信息,然后识别出对应的方法信息,提取出对应的内部注释和方法语句列表;
步骤SS2:根据注释的位置,遍历方法信息中的语句,通过位置信息和数据流信息得到注释对应的语句列表,得到:<注释,目标代码>对;
步骤SS3:根据注释的类型进行过滤,选择Verb-dobj形式的注释;
步骤SS4:分析方法信息内部实现的数据流信息,根据变量之间的定义使用关系,得到和目标代码段相关联的代码上下文;
步骤SS5:对注释、目标代码以及上下文进行预处理,所述预处理过程包括分词、标识符切分,单词小写化;最终处理完成得到:<注释,目标代码,代码上下文>组成的三元组数据集;
步骤SS6:对构建的数据集随机划分成训练集、验证集和测试集,同时构建编码器解码器网络;
步骤SS7:所述步骤SS6中划分中的训练集用于模型训练,并且通过在验证集上进行评估,得到在验证集上效果最好的模型作为目标模型;
步骤SS8:用所述步骤SS7获得的目标模型对测试集中的数据进行预测,生成预测的注释。
优选的,所述步骤SS1具体包括:通过从GitHub中获取Stars数排名靠前的Java项目,得到5281个项目,下载到本地之后,通过静态分析工具JDT来提取Java方法中的信息,提取代码和注释,每个注释信息包括唯一路径(、注释文本、类型、开始行、结束行,语句列表;所述唯一路径包含文件名+类名+方法名+参数名),所述类型包含行注释还是块注释)、所述开始行和所述结束行包含单行注释的开始行和结束行相同。
优选的,所述步骤SS2具体包括:对步骤SS1中的数据进行处理,根据注释和代码的位置与关系确定注释的目标代码;首先确定注释的初始目标语句列表为注释的下一行到以空行分割或者代码块结束的所有语句;然后通过变量的定义使用依赖、代码的语义相似性依赖、代码-注释依赖来更加精确的选择注释对应的目标语句列表;每个数据表项为:<注释信息,目标语句列表,方法语句列表>。
优选的,所述步骤SS3具体包括:对步骤SS2中的注释进行处理,通过StanfordcoreNLP工具集对注释进行磁性标注和依存分析,选择以动词开头并且包含dobj直接宾语结构的注释,进一步的去除包含的被注释的代码、技术债,图2显示的是对一个注释进行词性标注和依存分析的示例示意图。
优选的,所述步骤SS4具体包括:基于步骤SS3中的目标语句列表和方法语句列表,通过数据流分析,提取目标语句列表和方法语句列表中存在的变量定义使用关系与变量的使用定义关系,构建出上下文语句列表;最终每一个数据表项为:<注释信息,目标语句列表,上下文语句列表>。
优选的,所述步骤SS5具体包括:对步骤SS4中的数据进行处理,首先对于语句中的标识符,通过驼峰式命名法进行切分,通过正则表达式设计完成标识符的处理过程;然后将Java代码通过标点符号进行切分,将代码转换为深度学习模型可以识别的单词序列;同时对由标点和空格隔开的英文注释进行分词,最后将注释以及代码转换为小写,每个数据的表现形式为:<注释,目标代码,上下文代码>。
优选的,所述步骤SS6具体包括:对于步骤SS5得到的数据集进行划分,按照80%:10%:10%的比例进行随机划分,训练集包含的数据为336457,验证集和测试集各包含42056条数据;同时整个模型采用编码器解码器结构,编码器CodeBERT在预训练阶段使用双模态数据实例(自然语言NL和编程语言PL)作为输入进行训练,并且解码器采用6层的Transformer解码层进行堆叠,构建好整个网络,网络结构如图3所示。
优选的,所述步骤SS7具体包括:使用步骤SS6中的训练集作为模型输入,进行训练和优化,通过设置目标代码长度为100、上下文代码长度为300、注释长度为30进行训练,通过验证集进行模型选择,选择在验证集上表现最好的模型作为目标模型。
优选的,所述步骤SS8具体包括:将步骤SS6中剩余10%的测试集作为步骤SS7中目标模型的输入,最后生成目标注释。
实施例2:本发明还提出基于深度学习的Java程序内部注释的生成系统,包括:
注释列表提取模块,用于执行:通过从GitHub中获取Stars数排名靠前的项目,然后通过静态分析工具JDT提取Java源码中的方法信息,然后识别出对应的方法信息,提取出对应的内部注释和方法语句列表;
注释代码对提取模块,用于执行:根据注释的位置,遍历方法信息中的语句,通过位置信息和数据流信息得到注释对应的语句列表,得到:<注释,目标代码>对;
注释类型过滤模块,用于执行:根据注释的类型进行过滤,选择Verb-dobj形式的注释;
代码上下文生成模块,用于执行:分析方法信息内部实现的数据流信息,根据变量之间的定义使用关系,得到和目标代码段相关联的代码上下文;
预处理模块,用于执行:对注释、目标代码以及上下文进行预处理,所述预处理过程包括分词、标识符切分,单词小写化;最终处理完成得到:<注释,目标代码,代码上下文>组成的三元组数据集;
数据集划分模块,用于执行:对构建的数据集随机划分成训练集、验证集和测试集,同时构建编码器解码器网络;
模型训练模块,用于执行:所述数据集划分模块中划分中的训练集用于模型训练,并且通过在验证集上进行评估,得到在验证集上效果最好的模型作为目标模型;
预测注释生成模块,用于执行:用所述模型训练模块获得的目标模型对测试集中的数据进行预测,生成预测的注释。
需要说明的是:本发明一种基于深度学习的Java程序中方法内部注释的生成方法及系统,使用编码器解码器网络来生成方法中的内部注释。首先,本发明关注与Java程序。目前Java作为软件开发领域中最受欢迎的编程语言之一,广泛应用于各种领域和行业。其实,本发明使用编码器解码器模型,并且通过预训练的CodeBERT,在构建的大规模数据集上进行训练,优化模型。最后,本发明通过对生成结果进行评估,和现有方法进行比较,生成质量更好的注释。本发明的具体技术方案包括数据集构建、模型构建、训练评估三个方面。
数据集构建方面,本发明通过从GitHub开源项目中获取Java源代码,并从中提取源码信息,识别出对应的方法,提取内部注释以及对应的代码。根据注释的位置,遍历方法体中的语句,通过位置信息和数据流信息得到注释对应的语句列表,得到<注释,目标代码>对。然后根据注释的类型进行过滤,选择Verb-dobj形式的注释,这种类型的注释以固定的模式描述代码的行为,可以很好的帮助开发者理解代码。通过分析方法内部实现的数据流信息,根据变量之间的定义使用关系,得到和目标代码段相关联的代码上下文,并且对注释、目标代码以及上下文进行预处理,预处理过程主要包括分词、标识符切分,单词小写化等,得到最终数据集。
模型构建方面,本发明采用编码器解码器网络,其中编码器部分采用预训练的语言模型CodeBERT,解码器采用6个Transformer解码层堆叠,输入内部注释以及对应的目标代码和上下文代码。
对于模型训练评估方面,本发明对构建的数据集随机划分成训练集、验证集和测试集,将训练集用于模型训练和优化,并且通过在验证集上进行评估,选择在验证集上效果最好的模型作为目标模型。用目标模型对测试集中的数据进行预测,将生成的预测注释和标记注释进行对比,评估各个模型的性能差异,通过BLEU指标评估,本发明的方法可以生成质量良好的内部注释。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

Claims (10)

1.基于深度学习的Java程序内部注释的生成方法,其特征在于,包括如下步骤:
步骤SS1:通过从GitHub中获取Stars数排名靠前的项目,然后通过静态分析工具JDT提取Java源码中的方法信息,然后识别出对应的方法信息,提取出对应的内部注释和方法语句列表;
步骤SS2:根据注释的位置,遍历方法信息中的语句,通过位置信息和数据流信息得到注释对应的语句列表,得到:<注释,目标代码>对;
步骤SS3:根据注释的类型进行过滤,选择Verb-dobj形式的注释;
步骤SS4:分析方法信息内部实现的数据流信息,根据变量之间的定义使用关系,得到和目标代码段相关联的代码上下文;
步骤SS5:对注释、目标代码以及上下文进行预处理,所述预处理过程包括分词、标识符切分,单词小写化;最终处理完成得到:<注释,目标代码,代码上下文>组成的三元组数据集;
步骤SS6:对构建的数据集随机划分成训练集、验证集和测试集,同时构建编码器解码器网络;
步骤SS7:所述步骤SS6中划分中的训练集用于模型训练,并且通过在验证集上进行评估,得到在验证集上效果最好的模型作为目标模型;
步骤SS8:用所述步骤SS7获得的目标模型对测试集中的数据进行预测,生成预测的注释。
2.根据权利要求1所述的基于深度学习的Java程序内部注释的生成方法,其特征在于,所述步骤SS1具体包括:通过从GitHub中获取Stars数排名靠前的Java项目,得到5281个项目,下载到本地之后,通过静态分析工具JDT来提取Java方法中的信息,提取代码和注释,每个注释信息包括唯一路径、注释文本、类型、开始行、结束行,语句列表;所述唯一路径包含文件名+类名+方法名+参数名,所述类型包含行注释还是块注释,所述开始行和所述结束行包含单行注释的开始行和结束行相同。
3.根据权利要求1所述的基于深度学习的Java程序内部注释的生成方法,其特征在于,所述步骤SS2具体包括:对步骤SS1中的数据进行处理,根据注释和代码的位置与关系确定注释的目标代码;首先确定注释的初始目标语句列表为注释的下一行到以空行分割或者代码块结束的所有语句;然后通过变量的定义使用依赖、代码的语义相似性依赖、代码-注释依赖来更加精确的选择注释对应的目标语句列表;每个数据表项为:<注释信息,目标语句列表,方法语句列表>。
4.根据权利要求1所述的基于深度学习的Java程序内部注释的生成方法,其特征在于,所述步骤SS3具体包括:对步骤SS2中的注释进行处理,通过Stanford coreNLP工具集对注释进行磁性标注和依存分析,选择以动词开头并且包含dobj直接宾语结构的注释,进一步的去除包含的被注释的代码、技术债。
5.根据权利要求1所述的基于深度学习的Java程序内部注释的生成方法,其特征在于,所述步骤SS4具体包括:基于步骤SS3中的目标语句列表和方法语句列表,通过数据流分析,提取目标语句列表和方法语句列表中存在的变量定义使用关系与变量的使用定义关系,构建出上下文语句列表;最终每一个数据表项为:<注释信息,目标语句列表,上下文语句列表>。
6.根据权利要求1所述的基于深度学习的Java程序内部注释的生成方法,其特征在于,所述步骤SS5具体包括:对步骤SS4中的数据进行处理,首先对于语句中的标识符,通过驼峰式命名法进行切分,通过正则表达式设计完成标识符的处理过程;然后将Java代码通过标点符号进行切分,将代码转换为深度学习模型可以识别的单词序列;同时对由标点和空格隔开的英文注释进行分词,最后将注释以及代码转换为小写,每个数据的表现形式为:<注释,目标代码,上下文代码>。
7.根据权利要求1所述的基于深度学习的Java程序内部注释的生成方法,其特征在于,所述步骤SS6具体包括:对于步骤SS5得到的数据集进行划分,按照80%:10%:10%的比例进行随机划分,训练集包含的数据为336457,验证集和测试集各包含42056条数据;同时整个模型采用编码器解码器结构,编码器CodeBERT在预训练阶段使用双模态数据实例作为输入进行训练,并且解码器采用6层的Transformer解码层进行堆叠,构建好整个网络。
8.根据权利要求1所述的基于深度学习的Java程序内部注释的生成方法,其特征在于,所述步骤SS7具体包括:使用步骤SS6中的训练集作为模型输入,进行训练和优化,通过设置目标代码长度为100、上下文代码长度为300、注释长度为30进行训练,通过验证集进行模型选择,选择在验证集上表现最好的模型作为目标模型。
9.根据权利要求1所述的基于深度学习的Java程序内部注释的生成方法,其特征在于,所述步骤SS8具体包括:将步骤SS6中剩余10%的测试集作为步骤SS7中目标模型的输入,最后生成目标注释。
10.基于深度学习的Java程序内部注释的生成系统,其特征在于,包括:
注释列表提取模块,用于执行:通过从GitHub中获取Stars数排名靠前的项目,然后通过静态分析工具JDT提取Java源码中的方法信息,然后识别出对应的方法信息,提取出对应的内部注释和方法语句列表;
注释代码对提取模块,用于执行:根据注释的位置,遍历方法信息中的语句,通过位置信息和数据流信息得到注释对应的语句列表,得到:<注释,目标代码>对;
注释类型过滤模块,用于执行:根据注释的类型进行过滤,选择Verb-dobj形式的注释;
代码上下文生成模块,用于执行:分析方法信息内部实现的数据流信息,根据变量之间的定义使用关系,得到和目标代码段相关联的代码上下文;
预处理模块,用于执行:对注释、目标代码以及上下文进行预处理,所述预处理过程包括分词、标识符切分,单词小写化;最终处理完成得到:<注释,目标代码,代码上下文>组成的三元组数据集;
数据集划分模块,用于执行:对构建的数据集随机划分成训练集、验证集和测试集,同时构建编码器解码器网络;
模型训练模块,用于执行:所述数据集划分模块中划分中的训练集用于模型训练,并且通过在验证集上进行评估,得到在验证集上效果最好的模型作为目标模型;
预测注释生成模块,用于执行:用所述模型训练模块获得的目标模型对测试集中的数据进行预测,生成预测的注释。
CN202110449761.5A 2021-04-25 2021-04-25 基于深度学习的Java程序内部注释的生成方法及系统 Active CN113076133B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110449761.5A CN113076133B (zh) 2021-04-25 2021-04-25 基于深度学习的Java程序内部注释的生成方法及系统
PCT/CN2021/089827 WO2022226716A1 (zh) 2021-04-25 2021-04-26 基于深度学习的Java程序内部注释的生成方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110449761.5A CN113076133B (zh) 2021-04-25 2021-04-25 基于深度学习的Java程序内部注释的生成方法及系统

Publications (2)

Publication Number Publication Date
CN113076133A CN113076133A (zh) 2021-07-06
CN113076133B true CN113076133B (zh) 2023-09-26

Family

ID=76618775

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110449761.5A Active CN113076133B (zh) 2021-04-25 2021-04-25 基于深度学习的Java程序内部注释的生成方法及系统

Country Status (2)

Country Link
CN (1) CN113076133B (zh)
WO (1) WO2022226716A1 (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114880022A (zh) * 2022-04-28 2022-08-09 南通大学 一种基于CodeBERT微调和检索增强的Bash代码注释生成方法
CN117539538B (zh) * 2023-11-16 2024-05-17 南京数睿数据科技有限公司 程序说明文档生成方法、装置、电子设备和可读介质
CN117742683A (zh) * 2023-12-28 2024-03-22 北京嘉瑞华通科技有限公司 一种软件开发操作系统
CN117873487A (zh) * 2024-01-15 2024-04-12 广东工业大学 一种基于gvg的代码注释生成方法
CN117648079B (zh) * 2024-01-29 2024-05-14 浙江阿里巴巴机器人有限公司 任务处理、代码补全、代码问答及任务处理模型训练方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001005650A (ja) * 1999-06-23 2001-01-12 Kawasaki Steel Corp コンピュータプログラムのコメント文生成方法及び装置
CN109783079A (zh) * 2018-12-21 2019-05-21 南京航空航天大学 一种基于程序分析和循环神经网络的代码注释生成方法
US10303466B1 (en) * 2016-09-07 2019-05-28 Amazon Technologies, Inc. Semantic annotations in source code
CN110018820A (zh) * 2019-04-08 2019-07-16 浙江大学滨海产业技术研究院 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7610191B2 (en) * 2004-10-06 2009-10-27 Nuance Communications, Inc. Method for fast semi-automatic semantic annotation
CN108345457B (zh) * 2018-01-24 2021-03-09 上海交通大学 一种对程序源代码自动生成功能描述性注释的方法
CN109960506B (zh) * 2018-12-03 2023-05-02 复旦大学 一种基于结构感知的代码注释生成方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001005650A (ja) * 1999-06-23 2001-01-12 Kawasaki Steel Corp コンピュータプログラムのコメント文生成方法及び装置
US10303466B1 (en) * 2016-09-07 2019-05-28 Amazon Technologies, Inc. Semantic annotations in source code
CN109783079A (zh) * 2018-12-21 2019-05-21 南京航空航天大学 一种基于程序分析和循环神经网络的代码注释生成方法
CN110018820A (zh) * 2019-04-08 2019-07-16 浙江大学滨海产业技术研究院 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法

Also Published As

Publication number Publication date
WO2022226716A1 (zh) 2022-11-03
CN113076133A (zh) 2021-07-06

Similar Documents

Publication Publication Date Title
CN113076133B (zh) 基于深度学习的Java程序内部注释的生成方法及系统
Flickinger et al. DeepBank. A dynamically annotated treebank of the Wall Street Journal
CN109471793B (zh) 一种基于深度学习的网页自动化测试缺陷定位方法
CN111651198A (zh) 代码摘要自动化生成方法及装置
CN113138920B (zh) 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置
CN115357719B (zh) 基于改进bert模型的电力审计文本分类方法及装置
US7853595B2 (en) Method and apparatus for creating a tool for generating an index for a document
CN112463424A (zh) 一种基于图的端到端程序修复方法
CN113190219A (zh) 一种基于递归神经网络模型的代码注释生成方法
Panthaplackel et al. Associating natural language comment and source code entities
Wax Automated grammar engineering for verbal morphology
CN113361252B (zh) 基于多模态特征和情感词典的文本抑郁倾向检测系统
Alexandru et al. Replicating parser behavior using neural machine translation
CN112433754B (zh) 一种基于程序分析的Java函数注释自动生成方法
CN116166789A (zh) 一种方法命名精准推荐和审查方法
CN117289938A (zh) 一种软件开发用智能辅助系统
Siyam et al. Arabic arithmetic word problems solver
CN114385491A (zh) 一种基于深度学习的js转译器缺陷检测方法
Rosén et al. Syntactic annotation of learner corpora
Bonnell et al. Rule-based Adornment of Modern Historical Japanese Corpora using Accurate Universal Dependencies.
Zhang et al. Discriminant ranking for efficient treebanking
CN112698836B (zh) 一种针对复杂用户评论的代码质量属性判断方法
CN116910646B (zh) So网站中知识单元的内部链接目的分类方法
Yao et al. Question Generation from Code Snippets and Programming Error Messages
Schumann et al. Using finite-state machines to automatically scan Ancient Greek hexameter

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant