CN117850870B - 一种代码注释生成方法、装置、电子设备及存储介质 - Google Patents
一种代码注释生成方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN117850870B CN117850870B CN202410264360.6A CN202410264360A CN117850870B CN 117850870 B CN117850870 B CN 117850870B CN 202410264360 A CN202410264360 A CN 202410264360A CN 117850870 B CN117850870 B CN 117850870B
- Authority
- CN
- China
- Prior art keywords
- code
- model
- target original
- annotation
- similar
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 73
- 230000006870 function Effects 0.000 claims abstract description 58
- 238000012549 training Methods 0.000 claims abstract description 40
- 238000012512 characterization method Methods 0.000 claims abstract description 14
- 238000003062 neural network model Methods 0.000 claims abstract description 13
- 238000010276 construction Methods 0.000 claims description 14
- 230000008569 process Effects 0.000 claims description 13
- 238000012360 testing method Methods 0.000 claims description 12
- 238000012795 verification Methods 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 10
- 238000004891 communication Methods 0.000 claims description 5
- 238000004364 calculation method Methods 0.000 claims description 4
- 238000013528 artificial neural network Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 241000270295 Serpentes Species 0.000 description 1
- 238000009825 accumulation Methods 0.000 description 1
- WYTGDNHDOZPMIW-RCBQFDQVSA-N alstonine Natural products C1=CC2=C3C=CC=CC3=NC2=C2N1C[C@H]1[C@H](C)OC=C(C(=O)OC)[C@H]1C2 WYTGDNHDOZPMIW-RCBQFDQVSA-N 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000002902 bimodal effect Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000000052 comparative effect Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Machine Translation (AREA)
Abstract
本申请提供了一种代码注释生成方法、装置、电子设备及存储介质,重命名原代码函数名并随机替换标识符信息构建相似代码;以原代码与对应相似代码为正样本对,以原代码与同一批次下其他相似代码为负样本对,通过预设对比学习辅助模型进行对比学习,生成原代码对应的代码向量表征;加载上述模型得到的参数信息,将目标原代码与相应注释信息输入至以代码预训练模型为基础构建的端到端神经网络模型进一步优化代码向量表征;将优化代码向量表征输入解码器输出代码注释。通过保留关键词的数据增强方式构造高质量代码,采用对比学习辅助任务得到高质量代码表征,同时使用两阶段训练策略防止数据增强带来偏差问题,并进一步学习代码高质量表征。
Description
技术领域
本申请涉及代码处理技术领域,具体而言,涉及一种代码注释生成方法、装置、电子设备及存储介质。
背景技术
代码注释是以自然语言形式对代码进行解释说明的文本描述,其目的是让人们能够快速的了解代码的语义逻辑。高质量的代码注释在程序开发以及维护过程中显得至关重要:在开发过程中,它帮助开发人员理解代码语义,加快开发效率;在维护过程中,它帮助代码维护人员快速发现问题,减少维护成本。然而,随着开发过程中代码量的不断积累,代码注释普遍面临内容错误、与所注释代码不匹配以及缺失等问题。由于人工补全代码注释费时耗力,因此,代码注释的自动生成具有广泛且重要的现实意义。
现有的代码注释方法主要分为基于信息检索、基于模板匹配以及基于神经网络三种方法。最近基于大规模代码数据预训练的通用代码模型已经受到广泛关注,然而上述基于神经网络的代码注释生成方法往往受限于数据质量以及数据大小的限制,一些研究人员在此基础上使用数据增强缓解神经网络方法的限制,他们提出使用信息检索技术从代码语料库中构造数据。然而受限于语料库大小,研究者又提出基于规则的方式增强代码数据,并对增强后数据进行融合或拼接使得模型充分学习代码表征。然而现有的数据增强方法往往在代码构造方面引入无关信息,导致构造得到的代码质量较低。现有的预训练模型忽略了具体下游任务的微调优化,限制了模型的性能,导致模型捕获代码表征能力有限。
发明内容
本申请至少提供一种代码注释生成方法、装置、电子设备及存储介质,提出保留关键词信息的数据增强的方式构造高质量代码,通过对比学习辅助任务得到高质量代码表征以提高模型效果,同时使用两阶段策略防止数据增强可能带来偏差问题的同时进一步学习代码高质量表征。
本申请提供了一种代码注释生成方法,应用于代码注释生成模型,所述方法包括:
获取目标原代码,重命名所述目标原代码对应的函数名,并随机替换原代码对应的标识符信息构建相似代码;
以所述目标原代码与对应所述相似代码为正样本对,以所述目标原代码与同一批次下其他所述相似代码为负样本对,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征并优化所述代码注释生成模型的模型参数;
加载所述模型参数,将所述目标原代码以及对应的注释信息,输入至以代码预训练模型为基础构建的端到端神经网络模型,进一步优化所述代码向量表征;
将所述优化代码向量表征输入至所述代码注释生成模型的解码器,根据所述解码器的输出生成代码注释。
可选的,重命名所述目标原代码对应的函数名,具体包括:
获取所述目标原代码对应的函数名;
确定所述函数名中包含的注释关键词信息以及特殊字符;
采用驼峰式命名规则和蛇形命名规则更改所述函数名,同时保留所述注释关键词信息;
过滤所述特殊字符。
可选的,随机替换原代码对应的标识符信息构建相似代码的过程包括:
针对所述代码注释生成模型的训练集、验证集以及测试集,分别构建对应的标识符词表,其中,训练集、验证集以及测试集对应的标识符只出现在各自数据集中;
将所述目标原代码输入至所述相似代码构建模型,提取所述目标原代码对应的标识符,并针对所述标识符进行重命名;
在所述标识符词表中,将已被重命名替换的所述标识符移除。
可选的,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征,具体包括:
分别确定所述正样本对对应的第一相似度,以及所述负样本对对应的第二相似度;
根据所述第一相似度以及所述第二相似度,构建对比损失函数;
将所述正样本对与所述负样本对输入至所述预设对比学习辅助模型,在所述对比损失函数的指导下,输出所述目标原代码对应的代码向量表征。
可选的,针对所述解码器的每一解码器层,该解码器层在编码器的最后一个隐藏层上执行交叉注意计算;
所述解码器层与所述隐藏层之间通过交叉注意连接。
本申请还提供一种代码注释生成装置,应用于代码注释生成模型,所述装置包括:
相似代码构建模块,用于获取目标原代码,重命名所述目标原代码对应的函数名,并随机替换原代码对应的标识符信息构建相似代码;
对比学习模块,用于以所述目标原代码与对应所述相似代码为正样本对,以所述目标原代码与同一批次下其他所述相似代码为负样本对,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征并优化所述代码注释生成模型的模型参数;
代码向量表征优化模块,用于加载所述模型参数,将所述目标原代码以及对应的注释信息,输入至以代码预训练模型为基础构建的端到端神经网络模型,进一步优化所述代码向量表征;
代码注释生成模块,用于将优化后的所述代码向量表征输入至所述代码注释生成模型的解码器,根据所述解码器的输出生成代码注释。
可选的,所述相似代码构建模块具体用于:
获取所述目标原代码对应的函数名;
确定所述函数名中包含的注释关键词信息以及特殊字符;
采用驼峰式命名规则和蛇形命名规则更改所述函数名,同时保留所述注释关键词信息;
过滤所述特殊字符。
可选的,所述相似代码构建模块具体还用于:
针对所述代码注释生成模型的训练集、验证集以及测试集,分别构建对应的标识符词表,其中,训练集、验证集以及测试集对应的标识符只出现在各自数据集中;
将所述目标原代码输入至所述相似代码构建模型,提取所述目标原代码对应的标识符,并针对所述标识符进行重命名;
在所述标识符词表中,将已被重命名替换的所述标识符移除。
本申请还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述代码注释生成方法,或上述代码注释生成方法中任一种可选方式中的步骤。
本申请还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述代码注释生成方法,或上述代码注释生成方法中任一种可选方式中的步骤。
本申请还提供一种计算机程序产品,包括计算机程序/指令,该计算机程序、指令被处理器执行时实现上述代码注释生成方法,或上述代码注释生成方法中任一种可选方式中的步骤。
本申请提供的一种代码注释生成方法、装置、电子设备及存储介质,应用于代码注释生成模型,通过获取目标原代码,重命名所述目标原代码对应的函数名,并随机替换原代码对应的标识符信息构建相似代码;以所述目标原代码与对应所述相似代码为正样本对,以所述目标原代码与同一批次下其他所述相似代码为负样本对,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征并优化所述代码注释生成模型的模型参数;加载所述模型参数,将所述目标原代码以及对应的注释信息,输入至以代码预训练模型为基础构建的端到端神经网络模型,进一步优化所述代码向量表征;将优化后的所述代码向量表征输入至所述代码注释生成模型的解码器,根据所述解码器的输出生成代码注释。提出保留关键词信息的数据增强的方式构造高质量代码,通过对比学习辅助任务得到高质量代码表征以提高模型效果,同时使用两阶段策略防止数据增强可能带来偏差问题的同时进一步学习代码高质量表征。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,此处的附图被并入说明书中并构成本说明书中的一部分,这些附图示出了符合本申请的实施例,并与说明书一起用于说明本申请的技术方案。应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例所提供的一种代码注释生成方法的流程图;
图2示出了本申请实施例所提供的一种函数重命名方法的流程图;
图3示出了本申请实施例所提供的一种代码注释生成装置的示意图;
图4示出了本申请实施例所提供的一种电子设备的示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,现有的代码注释方法主要分为基于信息检索、基于模板匹配以及基于神经网络三种方法。最近基于大规模代码数据预训练的通用代码模型已经受到广泛关注,然而上述基于神经网络的代码注释生成方法往往受限于数据质量以及数据大小的限制,一些研究人员在此基础上使用数据增强缓解神经网络方法的限制,他们提出使用信息检索技术从代码语料库中构造数据。然而受限于语料库大小,研究者又提出基于规则的方式增强代码数据,并对增强后数据进行融合或拼接使得模型充分学习代码表征。然而现有的数据增强方法往往在代码构造方面引入无关信息,导致构造得到的代码质量较低。现有的预训练模型忽略了具体下游任务的微调优化,限制了模型的性能,导致模型捕获代码表征能力有限。
基于上述研究,本申请提供了一种代码注释生成方法、装置、电子设备及存储介质,应用于代码注释生成模型,通过获取目标原代码,重命名所述目标原代码对应的函数名,并随机替换原代码对应的标识符信息构建相似代码;以所述目标原代码与对应所述相似代码为正样本对,以所述目标原代码与同一批次下其他所述相似代码为负样本对,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征并优化所述代码注释生成模型的模型参数;加载所述模型参数,将所述目标原代码以及对应的注释信息,输入至以代码预训练模型为基础构建的端到端神经网络模型,进一步优化所述代码向量表征;将优化后的所述代码向量表征输入至所述代码注释生成模型的解码器,根据所述解码器的输出生成代码注释。提出保留关键词信息的数据增强的方式构造高质量代码,通过对比学习辅助任务得到高质量代码表征以提高模型效果,同时使用两阶段策略防止数据增强可能带来偏差问题的同时进一步学习代码高质量表征。
为便于对本实施例进行理解,首先对本申请实施例所公开的一种代码注释生成方法进行详细介绍,本申请实施例所提供的代码注释生成方法的执行主体一般为具有一定计算能力的计算机设备,该计算机设备例如包括:终端设备或服务器或其它处理设备,终端设备可以为用户设备(User Equipment,UE)、移动设备、用户终端、终端、蜂窝电话、无绳电话、个人数字助理(Personal Digital Assistant,PDA)、手持设备、计算设备、车载设备、可穿戴设备等。在一些可能的实现方式中,该代码注释生成方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本申请实施例提供的一种代码注释生成方法的流程图,所述方法包括步骤S101~S104,其中:
S101、获取目标原代码,重命名所述目标原代码对应的函数名,并随机替换原代码对应的标识符信息构建相似代码。
在具体实施中,本申请实施例提供的代码注释生成方法应用于代码注释生成模型,该代码注释生成模型采用两阶段的训练策略,在第一阶段,给定目标原代码,为了构造高质量相似代码,在本申请实施例中使用代码注释生成模型中,保留关键词信息的数据增强模块生成相似代码。
这里,代码重用是软件开发中的一种常见做法,参考相似代码有助于人们理解代码。构建相似代码的关键在于不改变代码含义的情况下生成代码的多个版本。本申请实施例通过特殊规则的函数重命名、标识符重命名操作构造相似代码。
具体的,针对函数重命名,可以参见图2所示,为本申请实施例提供的一种函数重命名方法的流程图,所述方法包括步骤S1011~S1014,其中:
S1011、获取所述目标原代码对应的函数名;
S1012、确定所述函数名中包含的注释关键词信息以及特殊字符;
S1013、采用驼峰式命名规则和蛇形命名规则更改所述函数名,同时保留所述注释关键词信息;
S1014、过滤所述特殊字符。
在具体实施中,函数名是函数注释的简要介绍,函数名中包含注释关键词信息,因此函数名对于注释生成至关重要。以往的方法往往忽略了函数名对注释生成的影响,采用随时替换、随机mask等方式重命名函数名。在本申请实施例中,提出保留关键词的函数重命名。
这里,针对目标原代码中包含的Java、Python函数名,采用驼峰式命名规则和蛇形命名规则,确保函数名变化的同时保留关键词信息。
进一步的,去除下划线等特殊字符,避免因函数名不当对注释生成产生影响。
作为一种可能的实施方式,构建相似代码的过程还包括标识符重命名,标识符重命名过程可以通过如下步骤1-步骤3实现:
步骤1、针对所述代码注释生成模型的训练集、验证集以及测试集,分别构建对应的标识符词表,其中,训练集、验证集以及测试集对应的标识符只出现在各自数据集中。
步骤2、将所述目标原代码输入至所述相似代码构建模型,提取所述目标原代码对应的标识符,并针对所述标识符进行重命名。
步骤3、在所述标识符词表中,将已被重命名替换的所述标识符移除。
在具体实施中,标识符是代码中用来识别变量、类、模块等实体的名称。考虑到代码注释应与标识符无关,本申请实施例通过改变标识符来构建更为复杂的相似代码。
这里,相较于以往的方法重命名标识符往往受限于词表大小、未考虑标识符唯一性因素。本申请实施例提出根据训练集、验证集、测试集分别构建词表,保证了训练集、验证集以及测试集对应的标识符只出现在各自数据集中,同时将已替换的标识符移除词表。避免构建词表额外花销以及因标识符唯一性引起的代码质量低的影响。
这样,通过保留关键词信息的数据增强构造高质量代码的过程,上述变化通过不改变代码实现逻辑的情况下改变代码信息,让神经网络理解影响源代码注释生成深层次的原因。通过保留关键词的函数重命名以及标识符唯一性的标识符重命名构造高质量相似代码。
S102、以所述目标原代码与对应所述相似代码为正样本对,以所述目标原代码与同一批次下其他所述相似代码为负样本对,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征并优化所述代码注释生成模型的模型参数。
在具体实施中,为了解决现有的预训练模型忽略了具体下游任务的微调优化,导致模型捕获代码表征能力有限的问题,本申请实施例在微调阶段引入对比学习辅助任务。对比学习的核心目标是通过优化过程最大化正样本对之间的相似性,同时最小化负样本对之间的相似性。
这里,将通过数据增强模块得到的相似代码与目标原代码视为正样本对,将相似代码同一批次下的其他代码视为目标原代码的负样本对。
具体的,通过预设对比学习辅助模型进行对比学习,生成目标原代码对应的代码向量表征的步骤可以通过如下步骤1-步骤3实现:
步骤1、分别确定所述正样本对对应的第一相似度,以及所述负样本对对应的第二相似度;
步骤2、根据所述第一相似度以及所述第二相似度,构建对比损失函数;
步骤3、将所述正样本对与所述负样本对输入至所述预设对比学习辅助模型,在所述对比损失函数的指导下,输出所述目标原代码对应的代码向量表征。
在具体实施中,针对给定的目标原代码与对应的代码注释对(,/>),通过上述数据增强模块构造代码/>的高质量相似代码/>,由于代码结构严谨,因此认为同一批次下的不同代码/>与/>互为不相似代码。定义/>与/>互为正样本,/>和/>互为负样本。
这里,对于原代码和相似代码/>,使用余弦相似度计算其相似度,通过如下公式表示:
其中,代表正样本对对应的第一相似度;/>代表目标原代码;/>代表目标原代码对应的相似代码。
进一步的,对比损失函数通过如下公式表示:
其中,代表对比损失函数;/>代表正样本对对应的第一相似度;代表负样本对对应的第二相似度;/>代表目标原代码;/>代表目标原代码对应的相似代码;/>代表同一批次下其他所述相似代码;/>代表温度系数;B代表批次大小。
这里,模型通过对比学习有效地学习和区分代码的差别,学习代码深层次的表征,从而提高模型捕获代码表征的质量。
这样,第一阶段本申请实施例使用保留关键词信息的数据增强构造高质量代码样本,并通过对比学习优化模型参数。通过对比学习辅助任务辅助模型得到高质量代码表征。
S103、加载所述模型参数,将所述目标原代码以及对应的注释信息,输入至以代码预训练模型为基础构建的端到端神经网络模型,进一步优化所述代码向量表征。
在具体实施中,第一阶段中,虽然保留关键词信息的数据增强可以提高模型鲁棒性,但为了防止模型过度依赖数据增强后的数据,同时进一步学习代码高质量表征,本申请实施例提出两阶段训练策略。在第二阶段,本申请实施例使用第一阶段训练得到的高质量代码表征,并使用原代码数据对模型进一步优化,之后采用通用自回归任务生成代码注释。
其中,以代码预训练模型为基础构建的端到端神经网络模型为以CodeBERT预训练模型和UniXcoder预训练模型构建的端到端神经网络模型。
这里,分别采用CodeBERT和UniXcoder构建一个标准的Seq2Seq模型作为第二阶段的训练模型,CodeBERT是BERT模型在代码方向的变体,它一种基于Transformer架构编码器的编程语言和自然语言的双模态预训练模型。
CodeBERT在一个大规模的通用语料库上进行了预训练,它的两个预训练任务分别是屏蔽语言模型(Masked Language Modeling,MLM)和替代令牌检测(Replaced TokenDetection,RTD)。CodeBERT是预训练编码器模型。这种框架对于自回归任务是次优的。
进一步的,UniXcoder是一个统一的跨模态预训练模型。该模型利用带有前缀适配器的掩模注意矩阵来控制模型的行为,并利用AST和代码注释等跨模态内容来增强代码表示。此外,UniXcoder使用跨模态生成任务对齐编程语言之间的表示。
S104、将所述优化代码向量表征输入至所述代码注释生成模型的解码器,根据所述解码器的输出生成代码注释。
在具体实施中,针对解码器的每一解码器层,该解码器层在编码器的最后一个隐藏层上执行交叉注意计算;解码器层与隐藏层之间通过交叉注意连接。
这里,针对代码注释生成式任务,本申请实施例使用Transformer的解码器生成代码的注释。使用自回归机制,根据前文生成的内容预测下一个可能的词。
具体的,在解码器阶段,为了确保模型并不知道当前时刻的输入和未来时刻的单词信息,本申请实施例采用了掩码机制来屏蔽当前单词以及未来时刻的影响,并保证自回归的特性。
其中,解码器的每一层在编码器的最后一个隐藏层上执行额外的交叉注意计算,并通过交叉注意进行连接。每个解码器层对编码器输出的最终隐藏状态进行注意操作,这可以使生成的模型的输出更接近原始输出。得到解码器输出后,本申请实施例通过一个线性层和softmax层得到下一个词的预测概率。
需要说明的是,本申请实施例使用基于交叉熵的自回归损失函数训练模型,自回归损失函数可以通过如下公式表示:
其中,代表自回归损失函数;/>表示当前预测的单词;/>代表下一个单词的概率。
进一步的,第一阶段的损失函数我们使用基于交叉熵的损失函数和对比损失/>联合:/>训练模型参数。其中/>为常数,可以根据实际需要进行设置,在此不做具体限制。
本申请实施例提供的一种代码注释生成方法,应用于代码注释生成模型,通过获取目标原代码,重命名所述目标原代码对应的函数名,并随机替换原代码对应的标识符信息构建相似代码;以所述目标原代码与对应所述相似代码为正样本对,以所述目标原代码与同一批次下其他所述相似代码为负样本对,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征并优化所述代码注释生成模型的模型参数;加载所述模型参数,将所述目标原代码以及对应的注释信息,输入至以代码预训练模型为基础构建的端到端神经网络模型,进一步优化所述代码向量表征;将优化后的所述代码向量表征输入至所述代码注释生成模型的解码器,根据所述解码器的输出生成代码注释。提出保留关键词信息的数据增强的方式构造高质量代码,通过对比学习辅助任务得到高质量代码表征以提高模型效果,同时使用两阶段策略防止数据增强可能带来偏差问题的同时进一步学习代码高质量表征。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本申请实施例中还提供了与代码注释生成方法对应的代码注释生成装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述代码注释生成方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
请参阅图3,图3为本申请实施例提供的一种代码注释生成装置的示意图。如图3中所示,本申请实施例提供的代码注释生成装置300包括:
相似代码构建模块310,用于获取目标原代码,重命名所述目标原代码对应的函数名,并随机替换原代码对应的标识符信息构建相似代码。
对比学习模块320,用于以所述目标原代码与对应所述相似代码为正样本对,以所述目标原代码与同一批次下其他所述相似代码为负样本对,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征并优化所述代码注释生成模型的模型参数。
代码向量表征优化模块330,用于加载所述模型参数,将所述目标原代码以及对应的注释信息,输入至以代码预训练模型为基础构建的端到端神经网络模型,进一步优化所述代码向量表征。
代码注释生成模块340,用于将所述优化代码向量表征输入至所述代码注释生成模型的解码器,根据所述解码器的输出生成代码注释。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本申请实施例提供的一种代码注释生成装置,应用于代码注释生成模型,通过获取目标原代码,重命名所述目标原代码对应的函数名,并随机替换原代码对应的标识符信息构建相似代码;以所述目标原代码与对应所述相似代码为正样本对,以所述目标原代码与同一批次下其他所述相似代码为负样本对,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征并优化所述代码注释生成模型的模型参数;加载所述模型参数,将所述目标原代码以及对应的注释信息,输入至以代码预训练模型为基础构建的端到端神经网络模型,进一步优化所述代码向量表征;将优化后的所述代码向量表征输入至所述代码注释生成模型的解码器,根据所述解码器的输出生成代码注释。提出保留关键词信息的数据增强的方式构造高质量代码,通过对比学习辅助任务得到高质量代码表征以提高模型效果,同时使用两阶段策略防止数据增强可能带来偏差问题的同时进一步学习代码高质量表征。
对应于图1中的代码注释生成方法,本申请实施例还提供了一种电子设备400,如图4所示,为本申请实施例提供的电子设备400结构示意图,包括:
处理器41、存储器42、和总线43;存储器42用于存储执行指令,包括内存421和外部存储器422;这里的内存421也称内存储器,用于暂时存放处理器41中的运算数据,以及与硬盘等外部存储器422交换的数据,处理器41通过内存421与外部存储器422进行数据交换,当所述电子设备400运行时,所述处理器41与所述存储器42之间通过总线43通信,使得所述处理器41执行图1中的代码注释生成方法的步骤。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的代码注释生成方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本申请实施例还提供一种计算机程序产品,该计算机程序产品包括有计算机指令,所述计算机指令被处理器执行时可以执行上述方法实施例中所述的代码注释生成方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (10)
1.一种代码注释生成方法,其特征在于,应用于代码注释生成模型,所述方法包括:
获取目标原代码,重命名所述目标原代码对应的函数名,并随机替换原代码对应的标识符信息构建相似代码;
以所述目标原代码与对应所述相似代码为正样本对,以所述目标原代码与同一批次下其他所述相似代码为负样本对,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征并优化所述代码注释生成模型的模型参数;
加载所述模型参数,将所述目标原代码以及对应的注释信息,输入至以代码预训练模型为基础构建的端到端神经网络模型,进一步优化所述代码向量表征;
将优化后的所述代码向量表征输入至所述代码注释生成模型的解码器,根据所述解码器的输出生成代码注释。
2.根据权利要求1所述的方法,其特征在于,重命名所述目标原代码对应的函数名,具体包括:
获取所述目标原代码对应的函数名;
确定所述函数名中包含的注释关键词信息以及特殊字符;
采用驼峰式命名规则和蛇形命名规则更改所述函数名,同时保留所述注释关键词信息;
过滤所述特殊字符。
3.根据权利要求1所述的方法,其特征在于,随机替换原代码对应的标识符信息构建相似代码的过程包括:
针对所述代码注释生成模型的训练集、验证集以及测试集,分别构建对应的标识符词表,其中,训练集、验证集以及测试集对应的标识符只出现在各自数据集中;
将所述目标原代码输入至所述相似代码构建模型,提取所述目标原代码对应的标识符,并针对所述标识符进行重命名;
在所述标识符词表中,将已被重命名替换的所述标识符移除。
4.根据权利要求1所述的方法,其特征在于,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征,具体包括:
分别确定所述正样本对对应的第一相似度,以及所述负样本对对应的第二相似度;
根据所述第一相似度以及所述第二相似度,构建对比损失函数;
将所述正样本对与所述负样本对输入至所述预设对比学习辅助模型,在所述对比损失函数的指导下,输出所述目标原代码对应的代码向量表征。
5.根据权利要求1所述的方法,其特征在于:
针对所述解码器的每一解码器层,该解码器层在编码器的最后一个隐藏层上执行交叉注意计算;
所述解码器层与所述隐藏层之间通过交叉注意连接。
6.一种代码注释生成装置,其特征在于,应用于代码注释生成模型,所述装置包括:
相似代码构建模块,用于获取目标原代码,重命名所述目标原代码对应的函数名,并随机替换原代码对应的标识符信息构建相似代码;
对比学习模块,用于以所述目标原代码与对应所述相似代码为正样本对,以所述目标原代码与同一批次下其他所述相似代码为负样本对,通过预设对比学习辅助模型进行对比学习,生成所述目标原代码对应的代码向量表征并优化所述代码注释生成模型的模型参数;
代码向量表征优化模块,用于加载所述模型参数,将所述目标原代码以及对应的注释信息,输入至以代码预训练模型为基础构建的端到端神经网络模型,进一步优化所述代码向量表征;
代码注释生成模块,用于将优化后的所述代码向量表征输入至所述代码注释生成模型的解码器,根据所述解码器的输出生成代码注释。
7.根据权利要求6所述的装置,其特征在于,所述相似代码构建模块具体用于:
获取所述目标原代码对应的函数名;
确定所述函数名中包含的注释关键词信息以及特殊字符;
采用驼峰式命名规则和蛇形命名规则更改所述函数名,同时保留所述注释关键词信息;
过滤所述特殊字符。
8.根据权利要求6所述的装置,其特征在于,所述相似代码构建模块具体还用于:
针对所述代码注释生成模型的训练集、验证集以及测试集,分别构建对应的标识符词表,其中,训练集、验证集以及测试集对应的标识符只出现在各自数据集中;
将所述目标原代码输入至所述相似代码构建模型,提取所述目标原代码对应的标识符,并针对所述标识符进行重命名;
在所述标识符词表中,将已被重命名替换的所述标识符移除。
9.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至5中任一项所述的代码注释生成方法的步骤。
10.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至5中任一项所述的代码注释生成方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410264360.6A CN117850870B (zh) | 2024-03-08 | 2024-03-08 | 一种代码注释生成方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410264360.6A CN117850870B (zh) | 2024-03-08 | 2024-03-08 | 一种代码注释生成方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117850870A CN117850870A (zh) | 2024-04-09 |
CN117850870B true CN117850870B (zh) | 2024-05-07 |
Family
ID=90548456
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410264360.6A Active CN117850870B (zh) | 2024-03-08 | 2024-03-08 | 一种代码注释生成方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117850870B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10747651B1 (en) * | 2018-05-31 | 2020-08-18 | The Ultimate Software Group, Inc. | System for optimizing system resources and runtime during a testing procedure |
CN113190219A (zh) * | 2021-05-08 | 2021-07-30 | 南通大学 | 一种基于递归神经网络模型的代码注释生成方法 |
WO2021160242A1 (en) * | 2020-02-10 | 2021-08-19 | Telefonaktiebolaget Lm Ericsson (Publ) | Methods of evaluating source code using numeric array representations of source code elements |
CN113743064A (zh) * | 2021-09-10 | 2021-12-03 | 南通大学 | 基于决策的融合信息检索和深度学习的代码注释生成方法 |
CN113934450A (zh) * | 2020-07-13 | 2022-01-14 | 阿里巴巴集团控股有限公司 | 生成注释信息的方法、装置、计算机设备和介质 |
CN116661805A (zh) * | 2023-07-31 | 2023-08-29 | 腾讯科技(深圳)有限公司 | 代码表示的生成方法和装置、存储介质及电子设备 |
WO2023229946A1 (en) * | 2022-05-23 | 2023-11-30 | Salesforce, Inc. | Systems and methods for program synthesis |
CN117453861A (zh) * | 2023-11-28 | 2024-01-26 | 西安电子科技大学 | 基于对比学习与预训练技术的代码搜索推荐方法和系统 |
-
2024
- 2024-03-08 CN CN202410264360.6A patent/CN117850870B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10747651B1 (en) * | 2018-05-31 | 2020-08-18 | The Ultimate Software Group, Inc. | System for optimizing system resources and runtime during a testing procedure |
WO2021160242A1 (en) * | 2020-02-10 | 2021-08-19 | Telefonaktiebolaget Lm Ericsson (Publ) | Methods of evaluating source code using numeric array representations of source code elements |
CN113934450A (zh) * | 2020-07-13 | 2022-01-14 | 阿里巴巴集团控股有限公司 | 生成注释信息的方法、装置、计算机设备和介质 |
CN113190219A (zh) * | 2021-05-08 | 2021-07-30 | 南通大学 | 一种基于递归神经网络模型的代码注释生成方法 |
CN113743064A (zh) * | 2021-09-10 | 2021-12-03 | 南通大学 | 基于决策的融合信息检索和深度学习的代码注释生成方法 |
WO2023229946A1 (en) * | 2022-05-23 | 2023-11-30 | Salesforce, Inc. | Systems and methods for program synthesis |
CN116661805A (zh) * | 2023-07-31 | 2023-08-29 | 腾讯科技(深圳)有限公司 | 代码表示的生成方法和装置、存储介质及电子设备 |
CN117453861A (zh) * | 2023-11-28 | 2024-01-26 | 西安电子科技大学 | 基于对比学习与预训练技术的代码搜索推荐方法和系统 |
Non-Patent Citations (4)
Title |
---|
Retrieve and Refine: Exemplar-based Neural Comment Generation;Bolin Wei et.al;《2020 35th IEEE/ACM International Conference on Automated Software Engineering (ASE)》;20200925;全文 * |
Yet Another Combination of IR- and Neural-based Comment Generation;Yuchao Huang et.al;《arXiv.org》;20210727;全文 * |
基于指针生成网络的代码注释自动生成模型;牛长安等;《软件学报》;20210731;第32卷(第07期);2142-2165 * |
基于神经网络和信息检索的源代码注释生成;沈鑫等;《计算机系统应用》;20230731;第32卷(第07期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117850870A (zh) | 2024-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5128629B2 (ja) | 品詞タグ付けシステム、品詞タグ付けモデルのトレーニング装置および方法 | |
CN116775847B (zh) | 一种基于知识图谱和大语言模型的问答方法和系统 | |
US10169466B2 (en) | Persona-based conversation | |
CN112527998A (zh) | 一种答复推荐方法、答复推荐装置及智能设备 | |
CN114580382A (zh) | 文本纠错方法以及装置 | |
CN111194401B (zh) | 意图识别的抽象和可移植性 | |
CN109791570B (zh) | 高效且精确的命名实体识别方法和装置 | |
CN113672738A (zh) | 用于确定知识图谱的至少一部分的设备和方法 | |
CN111859950A (zh) | 一种自动化生成讲稿的方法 | |
CN116150621A (zh) | 文本模型的训练方法、装置、及设备 | |
CN115017335A (zh) | 知识图谱构建方法和系统 | |
CN113051384B (zh) | 基于对话的用户画像抽取方法及相关装置 | |
CN112632975B (zh) | 上下游关系的抽取方法、装置、电子设备及存储介质 | |
CN117850870B (zh) | 一种代码注释生成方法、装置、电子设备及存储介质 | |
CN111104520B (zh) | 一种基于人物身份的人物实体链接方法 | |
CN116414988A (zh) | 基于依赖关系增强的图卷积方面级情感分类方法及系统 | |
CN113272799B (zh) | 编码信息提取器 | |
CN116909435A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN108197100B (zh) | 情感分析方法、装置、计算机可读存储介质及电子设备 | |
CN114490946A (zh) | 基于Xlnet模型的类案检索方法、系统及设备 | |
Zhang et al. | Number entities recognition in multiple rounds of dialogue systems | |
CN104641367B (zh) | 用于格式化电子字符序列的格式化模块、系统和方法 | |
CN113076740A (zh) | 政务服务领域的同义词挖掘方法及装置 | |
Mai et al. | Pretraining multi-modal representations for chinese ner task with cross-modality attention | |
CN111159339A (zh) | 一种文本匹配处理方法和装置 |
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 |