CN113076133A - 基于深度学习的Java程序内部注释的生成方法及系统 - Google Patents
基于深度学习的Java程序内部注释的生成方法及系统 Download PDFInfo
- Publication number
- CN113076133A CN113076133A CN202110449761.5A CN202110449761A CN113076133A CN 113076133 A CN113076133 A CN 113076133A CN 202110449761 A CN202110449761 A CN 202110449761A CN 113076133 A CN113076133 A CN 113076133A
- Authority
- CN
- China
- Prior art keywords
- annotation
- code
- target
- model
- training
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 104
- 238000013135 deep learning Methods 0.000 title claims abstract description 24
- 238000012549 training Methods 0.000 claims abstract description 52
- 238000012795 verification Methods 0.000 claims abstract description 33
- 238000012360 testing method Methods 0.000 claims abstract description 23
- 238000007781 pre-processing Methods 0.000 claims abstract description 18
- 230000000694 effects Effects 0.000 claims abstract description 13
- 238000004458 analytical method Methods 0.000 claims description 14
- 230000011218 segmentation Effects 0.000 claims description 14
- 238000001914 filtration Methods 0.000 claims description 10
- 102100036790 Tubulin beta-3 chain Human genes 0.000 claims description 9
- 102100036788 Tubulin beta-4A chain Human genes 0.000 claims description 9
- 238000012545 processing Methods 0.000 claims description 9
- 230000003068 static effect Effects 0.000 claims description 9
- 238000000605 extraction Methods 0.000 claims description 6
- 238000002372 labelling Methods 0.000 claims description 4
- 230000002902 bimodal effect Effects 0.000 claims description 3
- 238000013479 data entry Methods 0.000 claims description 3
- 238000013136 deep learning model Methods 0.000 claims description 3
- 238000005206 flow analysis Methods 0.000 claims description 3
- 238000000638 solvent extraction Methods 0.000 claims description 3
- 230000018109 developmental process Effects 0.000 description 5
- 238000010276 construction Methods 0.000 description 4
- 238000011156 evaluation Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/3331—Query processing
- G06F16/334—Query execution
- G06F16/3344—Query execution using natural language analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/279—Recognition of textual entities
- G06F40/289—Phrasal analysis, e.g. finite state techniques or chunking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (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程序内部注释的生成方法及系统,属于互联网技术领域。
背景技术
在软件开发和维护中,开发人员将大约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形式的注释;
代码上下文生成模块,用于执行:分析方法信息内部实现的数据流信息,根据变量之间的定义使用关系,得到和目标代码段相关联的代码上下文;
预处理模块,用于执行:对注释、目标代码以及上下文进行预处理,所述预处理过程包括分词、标识符切分,单词小写化;最终处理完成得到:<注释,目标代码,代码上下文>组成的三元组数据集;
数据集划分模块,用于执行:对构建的数据集随机划分成训练集、验证集和测试集,同时构建编码器解码器网络;
模型训练模块,用于执行:所述数据集划分模块中划分中的训练集用于模型训练,并且通过在验证集上进行评估,得到在验证集上效果最好的模型作为目标模型;
预测注释生成模块,用于执行:用所述模型训练模块获得的目标模型对测试集中的数据进行预测,生成预测的注释。
Priority Applications (3)
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程序内部注释的生成方法及系统 |
US18/554,899 US20240201984A1 (en) | 2021-04-25 | 2021-04-26 | Deep learning-based java program internal annotation generation method and syste |
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 true CN113076133A (zh) | 2021-07-06 |
CN113076133B 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 (3)
Country | Link |
---|---|
US (1) | US20240201984A1 (zh) |
CN (1) | CN113076133B (zh) |
WO (1) | WO2022226716A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114880022A (zh) * | 2022-04-28 | 2022-08-09 | 南通大学 | 一种基于CodeBERT微调和检索增强的Bash代码注释生成方法 |
CN118377940A (zh) * | 2024-06-25 | 2024-07-23 | 杭州智通福科技有限公司 | 一种微调语料生成方法、系统和存储介质 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117539538B (zh) * | 2023-11-16 | 2024-05-17 | 南京数睿数据科技有限公司 | 程序说明文档生成方法、装置、电子设备和可读介质 |
CN117742683B (zh) * | 2023-12-28 | 2024-08-16 | 兰州启源信息技术服务有限公司 | 一种软件开发操作系统 |
CN117873487B (zh) * | 2024-01-15 | 2024-06-21 | 广东工业大学 | 一种基于gvg的代码函数注释生成方法 |
CN117648079B (zh) * | 2024-01-29 | 2024-05-14 | 浙江阿里巴巴机器人有限公司 | 任务处理、代码补全、代码问答及任务处理模型训练方法 |
Citations (4)
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 (5)
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 | 复旦大学 | 一种基于结构感知的代码注释生成方法 |
US11928156B2 (en) * | 2020-11-03 | 2024-03-12 | International Business Machines Corporation | Learning-based automated machine learning code annotation with graph neural network |
US20240069878A1 (en) * | 2022-08-30 | 2024-02-29 | Mediatek Inc. | Instruction-based performance prediction for deep learning accelerator |
-
2021
- 2021-04-25 CN CN202110449761.5A patent/CN113076133B/zh active Active
- 2021-04-26 US US18/554,899 patent/US20240201984A1/en active Pending
- 2021-04-26 WO PCT/CN2021/089827 patent/WO2022226716A1/zh active Application Filing
Patent Citations (4)
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代码注释的方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114880022A (zh) * | 2022-04-28 | 2022-08-09 | 南通大学 | 一种基于CodeBERT微调和检索增强的Bash代码注释生成方法 |
CN118377940A (zh) * | 2024-06-25 | 2024-07-23 | 杭州智通福科技有限公司 | 一种微调语料生成方法、系统和存储介质 |
CN118377940B (zh) * | 2024-06-25 | 2024-09-10 | 杭州智通福科技有限公司 | 一种微调语料生成方法、系统和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20240201984A1 (en) | 2024-06-20 |
CN113076133B (zh) | 2023-09-26 |
WO2022226716A1 (zh) | 2022-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113076133B (zh) | 基于深度学习的Java程序内部注释的生成方法及系统 | |
CN109726293B (zh) | 一种因果事件图谱构建方法、系统、装置及存储介质 | |
WO2019223804A1 (zh) | 一种基于程序分析和循环神经网络的代码注释生成方法 | |
CN108170468B (zh) | 一种自动检测注释和代码一致性的方法及其系统 | |
CN113191148B (zh) | 一种基于半监督学习和聚类的轨道交通实体识别方法 | |
CN113138920B (zh) | 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置 | |
CN113987199B (zh) | 一种规范自动解译的bim智能审图方法、系统和介质 | |
CN112541337B (zh) | 一种基于递归神经网络语言模型的文档模板自动生成方法及系统 | |
CN115357719B (zh) | 基于改进bert模型的电力审计文本分类方法及装置 | |
CN113609838B (zh) | 文档信息抽取及图谱化方法和系统 | |
CN113190219A (zh) | 一种基于递归神经网络模型的代码注释生成方法 | |
CN109977205A (zh) | 一种计算机自主学习源代码的方法 | |
CN113934909A (zh) | 基于预训练语言结合深度学习模型的金融事件抽取方法 | |
WO2018174816A1 (en) | Method and apparatus for semantic coherence analysis of texts | |
Chua et al. | Text normalization infrastructure that scales to hundreds of language varieties | |
WO2018174815A1 (en) | Method and apparatus for semantic coherence analysis of texts | |
Alexandru et al. | Replicating parser behavior using neural machine translation | |
Setya et al. | Semi-supervised textual entailment on indonesian wikipedia data | |
CN117421226A (zh) | 一种基于生成式大语言模型的缺陷报告重构的方法及系统 | |
CN116166789A (zh) | 一种方法命名精准推荐和审查方法 | |
CN116663567A (zh) | 一种基于语义增强双编码器的方面级情感三元组抽取方法及系统 | |
CN115617989A (zh) | 一种中文专利关键信息语料库的构建方法、系统和计算机设备 | |
CN114661616A (zh) | 目标代码的生成方法及装置 | |
CN117951038B (zh) | 基于代码大模型的Rust语言文档测试自动生成方法及装置 | |
Bago et al. | Using machine learning for language and structure annotation in an 18th century dictionary |
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 |