CN117193848A - 基于知识增强预训练模型的代码摘要自动生成方法 - Google Patents

基于知识增强预训练模型的代码摘要自动生成方法 Download PDF

Info

Publication number
CN117193848A
CN117193848A CN202311042102.5A CN202311042102A CN117193848A CN 117193848 A CN117193848 A CN 117193848A CN 202311042102 A CN202311042102 A CN 202311042102A CN 117193848 A CN117193848 A CN 117193848A
Authority
CN
China
Prior art keywords
code
knowledge
model
training
abstract
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.)
Pending
Application number
CN202311042102.5A
Other languages
English (en)
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.)
Shanghai Jiaotong University
Original Assignee
Shanghai Jiaotong 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 Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN202311042102.5A priority Critical patent/CN117193848A/zh
Publication of CN117193848A publication Critical patent/CN117193848A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Machine Translation (AREA)

Abstract

一种基于知识增强的预训练模型的代码摘要方法及系统,通过构建知识图谱,将代码知识引入预训练数据并用于对Transfomer模型进行代码知识增强的预训练,经代码摘要生成任务的微调后,通过Transfomer模型进行代码知识预测,生成代码摘要。本发明将知识图谱与训练代码语料结合,使用代码知识预测任务对模型进行预训练,从而将知识隐式地结合到学到的表征中,在不影响效率的情况下提升其在下游代码摘要生成任务上的准确性和可靠性。

Description

基于知识增强预训练模型的代码摘要自动生成方法
技术领域
本发明涉及的是一种代码摘要生成的技术,具体是一种基于知识增强的预训练语言模型的代码文本摘要生成方法及系统。
背景技术
近年来,随着深度学习技术的发展,大型预训练语言模型的表征能力日益提高,并越来越多地应用于程序语言和自然语言结合的多模态应用中,如代码摘要生成。代码摘要生成任务是为一段代码生成一个可读的描述程序功能的自然语言摘要。为完成这一任务,语言模型首先通过预训练学习代码和自然语言的表示,再针对下游任务进行微调。模型可以通过预训练学习到诸如词语语义等通用知识,但现有的预训练方法存在着忽略外部知识的弊端。
因此大量研究工作尝试通过利用各种知识增强方法,将结构化知识注入预训练语言模型中,使之兼具通用知识和外界知识。这类工作被称为知识增强型预训练语言模型。对于代码相关任务,编程文档是一个重要的代码知识来源。如何更准确针对代码相关任务对预训练模型引入知识需要深入讨论。
发明内容
本发明针对现有预训练模型缺乏代码知识,现有技术在预测阶段引入知识,每次生成摘要时需要解析代码并动态链接知识,增加预测的时间成本的不足,提出一种基于知识增强的预训练模型的代码摘要方法及系统,将知识图谱与训练代码语料结合,使用代码知识预测任务对模型进行预训练,从而将知识隐式地结合到学到的表征中,在不影响效率的情况下提升其在下游代码摘要生成任务上的准确性和可靠性。
本发明是通过以下技术方案实现的:
本发明涉及一种基于知识增强的预训练模型的代码摘要生成方法,通过构建知识图谱,将代码知识引入预训练数据并用于对Transfomer模型进行代码知识增强的预训练,经代码摘要生成任务的微调后,通过Transfomer模型进行代码知识预测,生成代码摘要。
所述的构建知识图谱是指:从Java和Python官方文档中收集代码知识,并重构为三元组网络的形式。
所述的知识图谱为结构化的语义知识库,以符号形式描述概念及其相互关系,其基本组成单位是<实体-关系-实体>三元组,实体间通过关系相互连结,构成网状的有向图知识结构。
所述的实体包括:模块、包、类、函数、变量,每个实体的属性包括实体名与描述。
所述的关系包括:模块对包的包含关系、包对类的包含关系、类对函数的包含关系、类对成员变量的包含关系、类与类的继承关系、函数与函数的调用关系、函数与类的返回值关系、函数对参数类型的使用关系。
所述的代码知识包括:Java和Python两种语言的API结构知识与API描述性知识。API结构知识包括实体与关系。实体包括模块,包,类,函数,变量。关系包括模块对包的包含关系、包对类的包含关系、类对函数的包含关系、类对成员变量的包含关系、类与类的继承关系、函数与函数的调用关系、函数与类的返回值关系,函数对参数类型的使用关系。API描述性知识包括实体的自然语言描述。
所述的代码知识增强的预训练是指:使用代码代码知识预测任务训练CodeBERT模型,即先获取输入句子每个单词的表示向量,再将句子的单词向量表示矩阵输入编码器中从而得到所有单词的编码信息矩阵。
所述的CodeBERT模型以来自Transformer的双向编码器表示(BERT)模型结构为基础,使用自然语言和编程语言预训练,能够处理自然语言和编程语言的多模态任务,如代码搜索、代码摘要生成等。
所述的Transformer模型为完全基于注意力机制的编码器-解码器模型,包括:编码器和解码器,其中:编码器对输入进行编码,生成相应的编码信息矩阵;解码器对编码信息矩阵进行解码,生成文本内容。从左到右的语言模型,根据当前生成的1~i的标签生成下一个单词的标签i+1。
所述的微调是指:用代码摘要任务特定的数据对已预训练好的模型进行进一步训练,使得模型的参数适应代码知识预测,其中:代码摘要任务特定的数据是指代码和自然语言的平行语料,每个单独语料为一个代码段和一个对应的自然语言描述。
所述的微调,具体操作为:用预训练模型的参数初始化编码器-解码器模型中的编码器,通过该编码器获取输入代码的中间表示后将其传递给编码器-解码器模型中的解码器,再以解码器生成一个可变长度的序列,即预测的文本摘要。
所述的编码器-解码器模型中的参数均采用端到端方式的训练,使模型预测内容接近目标内容。
本发明涉及一种实现上述方法的系统,包括:代码知识抽取单元、代码知识增强的预训练单元、代码摘要微调单元和代码摘要预测单元,其中:代码知识抽取单元根据Java和Python官方文档获取代码知识,得到三元组网络形式的知识图谱;代码知识增强的预训练单元根据代码知识图谱,使用知识文本预测任务训练CodeBERT模型,获得代码知识增强的预训练模型;代码摘要微调单元根据代码知识增强的预训练模型,使用代码和自然语言的平行语料对其微调,获得适用于代码摘要任务的模型;代码摘要预测单元根据输入代码,使用上述微调过的模型输出该段代码对应的自然语言描述。
技术效果
本发明通过代码知识预测,将代码知识隐式引入预训练模型,存储在模型参数中,有效增强了模型表征的可靠性。
附图说明
图1为本发明流程图。
具体实施方式
如图1所示,为本实施例涉及的一种基于知识增强预训练模型的代码摘要自动生成方法,包括:
步骤1)对Java SDKAPI文档和Python的官方API文档分别进行知识抽取以构建知识图谱,具体包括:
1.1)抽取API结构知识,即实体与实体间的关系:首先爬取HTML文档的半结构化内容,如表格、列表,再使用解析工具从中提取文本与标签,并识别API元素及之间的关系。
1.2)抽取API属性知识,即文档中每个API元素都包含一段纯文本描述:将文本拆分成句子,删除其中的代码段,当语句没有主语(即API元素名称),则添加主语;查找文本中API的所有别名,并替换为完整名称。
步骤2)基于预训练数据中的代码对知识图谱进行查询,将知识引入预训练数据,具体为:基于远程监督算法思想,对于训练语料库中给定的一个代码段,首先在知识图谱中找到头实体或尾实体被提及的候选三元组,然后从候选三元组中选择头实体和尾实体都在该代码段中被提及的三元组,作为查询得到的相关知识。
例如,对于代码语句ClassDescriptor typeClassDescriptor=DescriptorFactory.getClassDescriptor(type),查询得到三元组(getClassDescriptor,return_value_type,ClassDescriptor)。这一过程的本质类似于关系提取任务中的远程监督算法。
所述的远程监督算法(distant supervision algorithm)是指:将文本与大规模知识图谱进行实体对齐,利用知识图谱已有的实体间关系对文本进行标注。远程监督算法假定,当两个实体参与某种关系,那么包含这两个实体的任何句子都可能表达这种关系。
步骤3)针对Transformer模型进行知识增强的预训练,具体包括:
3.1)根据一对代码语料和相应的知识图谱中的三元组,构建模型输入x为三个序列的拼接,以特殊字符[CLS]起始,以字符[EOS]结尾,序列间以字符[SEP]作为分割,具体为:x=[CLS],w1,w2,…,wn,[SEP],c1,c2,…,cn,[SEP],h,r,t[EOS],其中:第一个序列w=w1,w2,…,wn是代码段的自然语言描述,第二个序列c=c1,c2,…,cn是代码段,第三个序列h,r,t是与其相关的知识三元组,h为头实体,t为尾实体,r为实体间的关系。
3.2)按照Transformer处理文本的标准方式,使用分词器对输入序列进行分词。
3.3)随机选取输入序列x中的部分位置mi~unif{1,|x|}for i=1to|x|,遮盖这些位置上的字符,将被遮盖的字符替换为特殊字符[MASK],xmasked=REPLACE(x,m,[MASK])。每个序列中被遮盖字符所占的比例为15%。
3.4)模型输出序列中每个字符的上下文向量表示:代码知识预测任务的目标为使模型预测被遮盖的字符,采用的损失函数为L(θ)=∑i∈m-logp(xi|x^masked),其中:p为从大量词汇中预测字符的判别器。为预测三元组中的关系,模型需要检测代码中头实体和尾实体的提及,并确定它们在程序中的语义或语法关系。为预测三元组中的一个实体,模型需要检测代码中的实体提及,并根据三元组关系和代码语义推测出对应的另一个实体。为预测代码中的字符,该模型不仅要考虑代码本身的语义与结构信息,还要考虑三元组中的逻辑关系。
步骤4)针对代码摘要任务对模型进行微调:将代码摘要任务的输入和输出作为训练数据,并对所有参数进行端到端微调。输入为代码段,目标输出为描述该代码功能的自然语言文本。
步骤5)用微调后的模型进行摘要生成:将给定的代码段作为模型的输入序列c=c1,c2,…,cn,模型首先通过编码器获取输入序列的编码矩阵,将其作为中间状态输入给解码器,解码器生成一个可变长度的目标序列,即模型生成的文本摘要。
经过具体实际实验,设置预训练阶段批量大小(batch size)为64,学习率为5e-5,输入长度为256,输出长度为256。微调阶段批量大小(batch size)为64,学习率为5e-5,输入长度为256,输出长度为64。使用Adam优化器更新参数。
本实施例采用CodeSearchNet数据集进行实验。CodeSearchNet是一个代码数据集,包含2.1M自然语言和编程语言的多模态平行语料,每个单独语料为一个函数和一个对应的自然语言描述。本实施例选取其中Java和Python两种语言的测试集。
本实施例采用BLEU指标来评价生成的文本摘要的质量,BLEU反映的是模型生成的自然语言文本的精确度,即生成文本存在于目标文本的-grams比例,指标的取值范围均为0~1,分数越接近于1说明生成的摘要文本与目标文本越接近。
所述的-grams表示:假设有一个序列s,那么该字符串的-grams就是按照n的长度切分该序列得到的词段,也就是s中所有长度为n的子串。
本实施例选取以下几种方法进行对比实验:SEQ2SEQ,Transformer,RoBerTa,CodeBERT。SEQ2SEQ是一个基于递归神经网络的编码器-解码器模型。Transformer是基于自注意力机制的编码器-解码器模型。RoBERTa是在BERT基础上优化的自然语言预训练模型。CodeBERT是在RoBERTa基础上用代码数据预训练过的模型。
如表1所示,为各个方法对Java和Python两种语言在代码数据集CodeSearchNet上的BLEU-4测试结果。
表1不同方法与本方法的实验结果
方法 Java Python
BLEU-4 BLEU-4
SEQ2SEQ 15.09 15.93
TRANSFORMER 16.26 15.81
RoBERTa 16.47 18.14
CodeBERT 17.38 18.77
本方法 18.59 19.09
如表1所示,为多个不同方法与本方法在跨语言数据集上的实验结果。对测试数据的分析如下:本方法在Java和Python两个语言的数据集上的BLEU-4指标都优于其他方法,包括SEQ2SEQ,TRANSFORMER,RoBERTa和CodeBERT。其中,与CodeBERT模型对比,本方法在Java数据集上的BLEU-4分数提升了1.21,在Python数据集上的BLEU-4分数提高了0.32,达成了较为明显的性能提升。
本方法比起其他方法而言,采用的知识增强预训练任务使得模型学到更可靠的代码与自然语言表征,从而在多个跨语言的数据集上的代码摘要生成任务取得更好的效果。
上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。

Claims (9)

1.一种基于知识增强的预训练模型的代码摘要生成方法,其特征在于,通过构建知识图谱,将代码知识引入预训练数据并用于对Transfomer模型进行代码知识增强的预训练,经代码摘要生成任务的微调后,通过Transfomer模型进行代码知识预测,生成代码摘要;
所述的代码知识包括:Java和Python两种语言的API结构知识与API描述性知识,其中:API结构知识包括实体与关系,实体包括模块,包,类,函数,变量,关系包括模块对包的包含关系、包对类的包含关系、类对函数的包含关系、类对成员变量的包含关系、类与类的继承关系、函数与函数的调用关系、函数与类的返回值关系,函数对参数类型的使用关系;API描述性知识包括实体的自然语言描述。
2.根据权利要求1所述的基于知识增强的预训练模型的代码摘要生成方法,其特征是,所述的构建知识图谱是指:从Java和Python官方文档中收集代码知识,并重构为三元组网络的形式;
所述的知识图谱为结构化的语义知识库,以符号形式描述概念及其相互关系,其基本组成单位是<实体-关系-实体>三元组,实体间通过关系相互连结,构成网状的有向图知识结构;
所述的实体包括:模块、包、类、函数、变量,每个实体的属性包括实体名与描述;
所述的关系包括:模块对包的包含关系、包对类的包含关系、类对函数的包含关系、类对成员变量的包含关系、类与类的继承关系、函数与函数的调用关系、函数与类的返回值关系、函数对参数类型的使用关系。
3.根据权利要求1所述的基于知识增强的预训练模型的代码摘要生成方法,其特征是,所述的代码知识增强的预训练是指:使用代码代码知识预测任务训练CodeBERT模型,即先获取输入句子每个单词的表示向量,再将句子的单词向量表示矩阵输入编码器中从而得到所有单词的编码信息矩阵。
4.根据权利要求1或3所述的基于知识增强的预训练模型的代码摘要生成方法,其特征是,所述的Transformer模型为完全基于注意力机制的编码器-解码器模型,包括:编码器和解码器,其中:编码器对输入进行编码,生成相应的编码信息矩阵;解码器对编码信息矩阵进行解码,生成文本内容,从左到右的语言模型,根据当前生成的1~i的标签生成下一个单词的标签i+1。
5.根据权利要求1所述的基于知识增强的预训练模型的代码摘要生成方法,其特征是,所述的微调是指:用代码摘要任务特定的数据对已预训练好的模型进行进一步训练,使得模型的参数适应代码知识预测,其中:代码摘要任务特定的数据是指代码和自然语言的平行语料,每个单独语料为一个代码段和一个对应的自然语言描述。
6.根据权利要求1或5所述的基于知识增强的预训练模型的代码摘要生成方法,其特征是,所述的微调,具体操作为:用预训练模型的参数初始化编码器-解码器模型中的编码器,通过该编码器获取输入代码的中间表示后将其传递给编码器-解码器模型中的解码器,再以解码器生成一个可变长度的序列,即预测的文本摘要。
7.根据权利要求6所述的基于知识增强的预训练模型的代码摘要生成方法,其特征是,所述的编码器-解码器模型中的参数均采用端到端方式的训练,使模型预测内容接近目标内容。
8.根据权利要求1-7中任一所述的基于知识增强的预训练模型的代码摘要生成方法,其特征是,具体包括:
步骤1)对Java SDK API文档和Python的官方API文档分别进行知识抽取以构建知识图谱,具体包括:
1.1)抽取API结构知识,即实体与实体间的关系:首先爬取HTML文档的半结构化内容,如表格、列表,再使用解析工具从中提取文本与标签,并识别API元素及之间的关系;
1.2)抽取API属性知识,即文档中每个API元素都包含一段纯文本描述:将文本拆分成句子,删除其中的代码段,当语句没有主语,即API元素名称,则添加主语;查找文本中API的所有别名,并替换为完整名称;
步骤2)基于预训练数据中的代码对知识图谱进行查询,将知识引入预训练数据,具体为:基于远程监督算法思想,对于训练语料库中给定的一个代码段,首先在知识图谱中找到头实体或尾实体被提及的候选三元组,然后从候选三元组中选择头实体和尾实体都在该代码段中被提及的三元组,作为查询得到的相关知识;
步骤3)针对Transformer模型进行知识增强的预训练,具体包括:
3.1)根据一对代码语料和相应的知识图谱中的三元组,构建模型输入x为三个序列的拼接,以特殊字符[CLS]起始,以字符[EOS]结尾,序列间以字符[SEP]作为分割,具体为:x=[CLS],w1,w2,…,wn,[SEP],c1,c2,…,cn,[SEP],h,r,t[EOS],其中:第一个序列w=w1,w2,…,wn是代码段的自然语言描述,第二个序列c=c1,c2,…,cn是代码段,第三个序列h,r,t是与其相关的知识三元组,h为头实体,t为尾实体,r为实体间的关系;
3.2)按照Transformer处理文本的标准方式,使用分词器对输入序列进行分词;
3.3)随机选取输入序列x中的部分位置mi~unif{1,|x|}for i=1 to|x|,遮盖这些位置上的字符,将被遮盖的字符替换为特殊字符[MASK],xmasked=REPLACE(x,m,[MASK]);
3.4)模型输出序列中每个字符的上下文向量表示:代码知识预测任务的目标为使模型预测被遮盖的字符,采用的损失函数为L(θ)=∑i∈m-logp(xi|x^masked),其中:p为从大量词汇中预测字符的判别器;
为预测三元组中的关系,模型需要检测代码中头实体和尾实体的提及,并确定它们在程序中的语义或语法关系;
为预测三元组中的一个实体,模型需要检测代码中的实体提及,并根据三元组关系和代码语义推测出对应的另一个实体;
为预测代码中的字符,该模型不仅要考虑代码本身的语义与结构信息,还要考虑三元组中的逻辑关系;
步骤4)针对代码摘要任务对模型进行微调:将代码摘要任务的输入和输出作为训练数据,并对所有参数进行端到端微调;输入为代码段,目标输出为描述该代码功能的自然语言文本;
步骤5)用微调后的模型进行摘要生成:将给定的代码段作为模型的输入序列c=c1,c2,…,cn,模型首先通过编码器获取输入序列的编码矩阵,将其作为中间状态输入给解码器,解码器生成一个可变长度的目标序列,即模型生成的文本摘要。
9.一种实现权利要求1-8中任一所述基于知识增强的预训练模型的代码摘要生成方法的系统,其特征在于,包括:代码知识抽取单元、代码知识增强的预训练单元、代码摘要微调单元和代码摘要预测单元,其中:代码知识抽取单元根据Java和Python官方文档获取代码知识,得到三元组网络形式的知识图谱;代码知识增强的预训练单元根据代码知识图谱,使用知识文本预测任务训练CodeBERT模型,获得代码知识增强的预训练模型;代码摘要微调单元根据代码知识增强的预训练模型,使用代码和自然语言的平行语料对其微调,获得适用于代码摘要任务的模型;代码摘要预测单元根据输入代码,使用上述微调过的模型输出该段代码对应的自然语言描述。
CN202311042102.5A 2023-08-18 2023-08-18 基于知识增强预训练模型的代码摘要自动生成方法 Pending CN117193848A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311042102.5A CN117193848A (zh) 2023-08-18 2023-08-18 基于知识增强预训练模型的代码摘要自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311042102.5A CN117193848A (zh) 2023-08-18 2023-08-18 基于知识增强预训练模型的代码摘要自动生成方法

Publications (1)

Publication Number Publication Date
CN117193848A true CN117193848A (zh) 2023-12-08

Family

ID=88989638

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311042102.5A Pending CN117193848A (zh) 2023-08-18 2023-08-18 基于知识增强预训练模型的代码摘要自动生成方法

Country Status (1)

Country Link
CN (1) CN117193848A (zh)

Similar Documents

Publication Publication Date Title
CN108829722B (zh) 一种远程监督的Dual-Attention关系分类方法及系统
CN109992782B (zh) 法律文书命名实体识别方法、装置及计算机设备
CN111639175B (zh) 一种自监督的对话文本摘要方法及系统
CN111639171B (zh) 一种知识图谱问答方法及装置
CN111401049B (zh) 一种实体链接方法及装置
CN106202010B (zh) 基于深度神经网络构建法律文本语法树的方法和装置
CN108416058B (zh) 一种基于Bi-LSTM输入信息增强的关系抽取方法
CN110110054A (zh) 一种基于深度学习的从非结构化文本中获取问答对的方法
CN111160031A (zh) 一种基于词缀感知的社交媒体命名实体识别方法
US20130031113A1 (en) Query Parser Derivation Computing Device and Method for Making a Query Parser for Parsing Unstructured Search Queries
CN112183064B (zh) 基于多任务联合学习的文本情绪原因识别系统
CN110442880B (zh) 一种机器翻译译文的翻译方法、装置及存储介质
CN112699216A (zh) 端到端的语言模型预训练方法、系统、设备及存储介质
CN112183094A (zh) 一种基于多元文本特征的中文语法查错方法及系统
CN115599902B (zh) 一种基于知识图谱的油气百科问答方法及系统
CN113408287B (zh) 实体识别方法、装置、电子设备及存储介质
CN116661805B (zh) 代码表示的生成方法和装置、存储介质及电子设备
CN114676255A (zh) 文本处理方法、装置、设备、存储介质及计算机程序产品
CN113282711A (zh) 一种车联网文本匹配方法、装置、电子设备及存储介质
CN114757184B (zh) 实现航空领域知识问答的方法和系统
CN114372454B (zh) 文本信息抽取方法、模型训练方法、装置及存储介质
CN117828024A (zh) 一种插件检索方法、装置、存储介质及设备
CN116522165B (zh) 一种基于孪生结构的舆情文本匹配系统及方法
CN113095082A (zh) 一种基于多任务模型进行文本处理的方法、装置、计算机装置及计算机可读取存储介质
CN112148879B (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