一种基于多模态的代码摘要生成方法与系统技术方案

技术编号:36422741 阅读:14 留言:0更新日期:2023-01-20 22:31
本发明专利技术公开了一种基于多模态的代码摘要生成方法与系统,首先收集带有注释文档的代码方法,提取代码摘要,从源代码中提取抽象语法树并转换为序列,将代码转换为token序列;然后构建基于孪生网络架构的检索器及训练数据集,使用对比学习策略对检索器进行训练,以代码token序列输入到训练好的检索器,检索相似代码,提取对应摘要;最后将代码token序列,抽象语法树结点序列和检索而来的摘要的序列拼接后作为生成器模型的输入,生成相应的摘要。本发明专利技术基于对比学习策略训练检索器,使得检索而来的摘要与代码在语义上更加相关,综合考虑了代码的词法,语法和语义特征,在更深刻理解代码的基础上生成更符合代码意图的摘要。码的基础上生成更符合代码意图的摘要。码的基础上生成更符合代码意图的摘要。

【技术实现步骤摘要】
一种基于多模态的代码摘要生成方法与系统


[0001]本专利技术涉及计算机软件工程
,主要涉及基于多模态的代码摘要生成方法与系统。

技术介绍

[0002]在软件开发和维护过程中,编程理解非常重要。在软件工程中,软件开发人员面对众多大规模复杂的软件系统,需要快速准确地读取代码。但最近的一项研究表明,开发人员在程序理解上花费了大约59%的时间。源代码摘要可以帮助开发人员和维护人员更快地阅读源代码,更好地理解代码的思想和行为。因此,代码摘要可以大大节省开发人员和维护人员的宝贵时间,从而提高工作效率。然而,由于手工编写摘要既耗时又费力,因此有许多尝试自动生成源代码摘要。
[0003]在代码摘要的早期阶段,研究人员更多地关注基于模板的方法。随着开源代码语料库的出现,研究人员开始探索基于信息检索的方法。基于信息检索的方法挖掘代码仓库,找到与目标代码相似的代码片段,并利用这些相似代码的摘要。这种方法可以生成高质量的摘要,但由于目标代码和类似代码之间的差异,检索而来的摘要不能直接用作结果摘要,并且现有的代码摘要检索方法多使用词汇级的检索器,仅关注了代码表面上的相似性,导致检索出含义上不相关的代码,继而降低最终生成摘要的表现。近年来,随着深度学习技术的快速发展,许多研究人员开始将该任务建模为神经机器翻译任务。他们主要采用序列到序列的神经网络将代码翻译成摘要。虽然这种方法可以产生更通用的摘要,但它仍然面临跨模态翻译的挑战。代码摘要模型需要能够表示和生成两种不同的模态:源代码和自然语言摘要。虽然它们表达相同的语义,但结构不同。与弱结构的自然语言文本相比,源代码有较强的结构性。这意味着不应该像自然语言翻译中通常采用的那样,只以相同的方式表示输入和输出。如果这样做,将失去有意义的结构和语义信息,并生成低质量的摘要。
[0004]为了获得更好的代码表示以生成更好的摘要,许多研究人员试图利用源代码中的不同信息,一般称之为模态。一些研究人员试图引入语法信息,即抽象语法树来表示源代码。这些方法利用了代码的结构性质来帮助模型更好地理解代码。还有一些研究试图使用不同种类的语义信息来进一步增强代码表示,例如API序列、方法名称和上下文信息。这些信息丰富了代码的语义表示。但是在不同的代码语义信息中,代码摘要本身就是一种使用自然语言对代码语义的重述,该语言高度描述了代码的功能,并提供了有关源代码的关键信息。但是,由于任务是为缺失摘要的代码生成摘要,因此不能利用不存在的摘要。

技术实现思路

[0005]专利技术目的:针对上述
技术介绍
中存在的问题,本专利技术提供了一种基于多模态的代码摘要生成方法,结合了基于语义相似度检索而来的相似摘要,使得代码可以获得更完善的表征,继而生成更好的代码摘要。
[0006]技术方案:为实现上述目的,本专利技术采用的技术方案为:
[0007]一种基于多模态的代码摘要生成方法,包括以下步骤:
[0008]步骤S1、收集带有注释文档的代码方法,提取代码摘要;从源代码中提取抽象语法树AST,并将其转换为序列信息;将代码转换为token序列;
[0009]步骤S2、构建基于孪生网络架构的检索器模型及检索器训练数据集,将每一个代码方法与其对应摘要构成代码

摘要对,将摘要最为相似的两对代码

摘要对视为相似样本,对于一个代码

摘要对,选取相似样本作为其正样本,随机抽取一个样本为负样本,以代码token序列为输入,使用对比学习策略对检索器进行训练;
[0010]步骤S3、将待生成摘要的代码与候选代码的token序列输入到训练好的检索器,检索相似度分数最高的代码为相似代码,提取对应摘要作为相似摘要;
[0011]步骤S4、将代码token序列、AST序列和检索而来的相似摘要token序列拼接后作为生成器模型的输入,输出相应的代码摘要。
[0012]作为优选,所述步骤S2中对于一个代码

摘要对,选取摘要BM25分数最高的代码

摘要对作为其相似样本;
[0013]其中,BM25分数的计算方式如下:
[0014][0015]其中Q表示一个摘要,q
i
表示摘要中的一个单词,d表示一个搜索结果摘要;W
i
表示一个词q
i
与候选摘要d的相关性权重;R(q
i
,d)代表一个词q
i
与候选摘要d的相关性得分。
[0016]作为优选,所述步骤S2中检索器模型构造方式如下:
[0017]检索器模型包括两个基于Transformer的编码器,分别是E
x
和E
y
,分别将源代码token序列x和候选代码token序列y映射到嵌入向量e
x
和e
y

[0018]e
x
=E
x
(x)=MaxPool(Trans
x
(x))
[0019]e
y
=E
y
(y)=MaxPool(Trans
y
(y))
[0020]其中Trans
x
和Trans
y
是Transformer编码器,编码器之间共享参数,MaxPool表示最大池层;相似度分数计算为:
[0021][0022]检索具有最高sim(x,y)分数的候选代码,取其摘要作为相似摘要。
[0023]作为优选,所述步骤S2中使用对比学习策略对检索器进行训练,样本xi的训练目标损失函数为:
[0024][0025]其中x
i
和是一对正样本,x
i
和是一对负样本,N是批大小;τ是温度参数。
[0026]作为优选,所述步骤S4中生成器采用Transformer模型,输入端的代码多模态表征形式为:将代码的token序列,AST序列与代码的相似摘要序列拼接成一个完整序列,用以表征代码。
[0027]一种基于多模态的代码摘要生成系统,包括:
[0028]代码预处理模块,用于收集带有注释文档的代码方法,提取代码摘要;从源代码中
提取抽象语法树AST,并将其转换为序列信息;将代码转换为token序列;
[0029]检索器训练模块,用于构建基于孪生网络架构的检索器模型及检索器训练数据集,将每一个代码方法与其对应摘要构成代码

摘要对,将摘要最为相似的两对代码

摘要对视为相似样本,对于一个代码

摘要对,选取相似样本作为其正样本,随机抽取一个样本为负样本,以代码token序列为输入,使用对比学习策略对检索器进行训练;
[0030]摘要检索模块,用于将待生成摘要的代码与候选代码的token序列输入到训练好的检索器,检索相似度分数最高的代码为相似代码,提取对应摘要作为相似摘要;
[0031]以及摘本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于多模态的代码摘要生成方法,其特征在于,包括以下步骤:步骤S1、收集带有注释文档的代码方法,提取代码摘要;从源代码中提取抽象语法树AST,并将其转换为序列信息;将代码转换为token序列;步骤S2、构建基于孪生网络架构的检索器模型及检索器训练数据集,将每一个代码方法与其对应摘要构成代码

摘要对,将摘要最为相似的两对代码

摘要对视为相似样本,对于一个代码

摘要对,选取相似样本作为其正样本,随机抽取一个样本为负样本,以代码token序列为输入,使用对比学习策略对检索器进行训练;步骤S3、将待生成摘要的代码与候选代码的token序列输入到训练好的检索器,检索相似度分数最高的代码为相似代码,提取对应摘要作为相似摘要;步骤S4、将代码token序列、AST序列和检索而来的相似摘要token序列拼接后作为生成器模型的输入,输出相应的代码摘要。2.根据权利要求1所述的基于多模态的代码摘要生成方法,其特征在于,所述步骤S2中对于一个代码

摘要对,选取摘要BM25分数最高的代码

摘要对作为其相似样本;其中,BM25分数的计算方式如下:其中Q表示一个摘要,q
i
表示摘要中的一个单词,d表示一个搜索结果摘要;W
i
表示一个词q
i
与候选摘要d的相关性权重;R(q
i
,d)代表一个词q
i
与候选摘要d的相关性得分。3.根据权利要求1所述的基于多模态的代码摘要生成方法,其特征在于,所述步骤S2中检索器模型构造方式如下:检索器模型包括两个基于Transformer的编码器,分别是E
x
和E
y
,分别将源代码token序列x和候选代码token序列y映射到嵌入向量e
x
和e
y
:e
x
=E
x
(x)=MaxPool(Trans
x
(x))e
y
=E
y
(y)=MaxPool(Trans
y
(y))其中Trans
x
和Trans
y
是Transformer编码器,编码器之间共享参数,MaxPool表示最大池层;相似度分数计算为:检索具有最高sim(x,y)分数的候选代码,取其摘要作为相似摘要。4.根据权利要求3所述的基于多模态的代码摘要生成方法,其特征在于,所述步骤S2中使用对比学习策略对检索器进行训练,样本x
i
的训练目标损失函数为:其中x
i
和是一对正样本,x
i
和是一对负样本,N是批大小;τ是温度参数。5.根据权利要求1所述的基于多模态的代码摘要生成方法,其特征在于,所述步骤S4中生成器采用Transformer模型,输入端的代码多模态表征形式为:将代码的token序列,AST序列与代码的相似摘要序列拼接成一个完整...

【专利技术属性】
技术研发人员:黄志球林李乐李伟湋
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:

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

1