CN111625276B - 基于语义与语法信息融合的代码摘要生成方法及系统 - Google Patents

基于语义与语法信息融合的代码摘要生成方法及系统 Download PDF

Info

Publication number
CN111625276B
CN111625276B CN202010387446.XA CN202010387446A CN111625276B CN 111625276 B CN111625276 B CN 111625276B CN 202010387446 A CN202010387446 A CN 202010387446A CN 111625276 B CN111625276 B CN 111625276B
Authority
CN
China
Prior art keywords
vector
node
graph
code
nodes
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
CN202010387446.XA
Other languages
English (en)
Other versions
CN111625276A (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.)
Hangzhou Geek Growth Technology Co.,Ltd.
Original Assignee
Shandong Normal 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 Shandong Normal University filed Critical Shandong Normal University
Priority to CN202010387446.XA priority Critical patent/CN111625276B/zh
Publication of CN111625276A publication Critical patent/CN111625276A/zh
Application granted granted Critical
Publication of CN111625276B publication Critical patent/CN111625276B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/049Temporal neural networks, e.g. delay elements, oscillating neurons or pulsed inputs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Machine Translation (AREA)

Abstract

本公开公开了基于语义与语法信息融合的代码摘要生成方法及系统,包括:获取待生成摘要的代码;从待生成摘要的代码中分别提取图嵌入向量和节点嵌入向量;将图嵌入向量和节点嵌入向量,输入到预训练的深度学习模型中,输出代码的摘要。将代码语义和语法信息与自动摘要模型结合的方式可自动获得更高质量的代码注释和摘要,从而提高程序员的软件开发速度,具有很大的现实意义。

Description

基于语义与语法信息融合的代码摘要生成方法及系统
技术领域
本公开涉及为代码生成自然语言摘要的技术领域,特别是涉及基于语义与语法信息融合的代码摘要生成方法及系统。
背景技术
本部分的陈述仅仅是提到了与本公开相关的背景技术,并不必然构成现有技术。
伴随着互联网技术的快速发展,各大软件,系统已经快速渗透入人们的生活并在衣食住行中发挥着重大的作用,各类软件系统层出不穷,日益优化改良服务于人们的生活,在各大应用系统后的支撑性编写方式就是代码,在信息技术蓬勃发展的今天,代码容量也发生了井喷式的增长,一个小型的软件应用少则几千行代码,多则几万行。在如此庞大的代码规模下,程序员进行软件或系统的维护和优化则成了一个大问题,是否可以采用一种方法或技术,辅助程序员快速理解代码,迅速定位要优化或维护的代码段,节省其开发时间成本。这已经成为当前软件工程领域的研究热点。
在软件的开发周期中,程序员需花费60%-70%的时间去理解和浏览源代码,这是非常耗时的工作,程序员有时须将软件代码整体浏览才可确定当前代码片段的功能。为更快定位相关代码段,多数程序员一般会采取代码注释和摘要的方式,以便通过浏览注释定位和理解相关代码片段。常见添加代码注释和摘要的手段包含以下两种方式:一种是手动添加,该方法可有效提高软件后续维护和优化的效率,但其无疑增加了程序员在开发过程中的负担;另一种是使用代码自动摘要技术,该方式可以最大限度的解放程序员编写代码注释的时间,可令其更大程度的关注代码编写。目前,较为流行的代码摘要工具包括基于传统文本摘要方法和基于深度神经网络的技术。
发明人发现,传统文本摘要方法通过将代码识别成自然语言文本的形式进行处理,未能考虑到代码具有特殊的语义和语法结构,且无法大批量的处理,效果较差;现行的基于深度神经网络的方法考虑到了代码蕴含的语义信息,从而生成的代码摘要更加精确。但对于代码语法信息却没能很好的体现,因而无法获得高质量的代码摘要。
发明内容
为了解决现有技术的不足,本公开提供了基于语义与语法信息融合的代码摘要生成方法及系统;
第一方面,本公开提供了基于语义与语法信息融合的代码摘要生成方法;
基于语义与语法信息融合的代码摘要生成方法,包括:
获取待生成摘要的代码;
从待生成摘要的代码中分别提取图嵌入向量和节点嵌入向量;
将图嵌入向量和节点嵌入向量,输入到预训练的深度学习模型中,输出代码的摘要。
第二方面,本公开提供了基于语义与语法信息融合的代码摘要生成系统;
基于语义与语法信息融合的代码摘要生成系统,包括:
获取模块,其被配置为:获取待生成摘要的代码;
向量提取模块,其被配置为:从待生成摘要的代码中分别提取图嵌入向量和节点嵌入向量;
摘要生成模块,其被配置为:将图嵌入向量和节点嵌入向量,输入到预训练的深度学习模型中,输出代码的摘要。
第三方面,本公开还提供了一种电子设备,包括:一个或多个处理器、一个或多个存储器、以及一个或多个计算机程序;其中,处理器与存储器连接,上述一个或多个计算机程序被存储在存储器中,当电子设备运行时,该处理器执行该存储器存储的一个或多个计算机程序,以使电子设备执行上述第一方面所述的方法。
第四方面,本公开还提供了一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成第一方面所述的方法。
第五方面,本公开还提供了一种计算机程序(产品),包括计算机程序,所述计算机程序当在一个或多个处理器上运行的时候用于实现前述第一方面任意一项的方法。
与现有技术相比,本公开的有益效果是:
1、本公开创新性的提出了将代码的语义信息与语法信息相融合。通过对目标代码片段进行AST的树建模和图卷积网络(GCN),得到的AST的图嵌入向量代表目标代码片段的语法信息;通过对源代码数据集进行图建模和归纳节点算法,得到的节点嵌入向量代表语义信息;在解码器端通过将AST的图嵌入向量作为初始时间步的背景向量与经过节点注意力机制的节点嵌入向量一同输入到解码器LSTM中进行融合,最终在解码器端输出目标代码摘要。通过融合使生成的代码摘要更加准确的描述了代码片段的功能,鲁棒性更好。
2、本公开创新性的将图卷积网络(GCN)引入生成AST的图嵌入向量,通过图卷积网络(GCN)的强大聚合能力,使得生成的AST的图嵌入向量更多的包含了代码片段的语法信息,最终使生成的代码摘要更加准确自然。
3、本公开创新性的使用了一种归纳节点算法,通过将节点划分为前向邻居和后向邻居,分别进行k次节点聚合,最后将前向节点向量与后向节点向量连接作为最终的节点嵌入向量,保留了最大化的代码调用关系图信息,使得生成的代码摘要获得高质量的语义信息,提高了模型的优越性。
4、本公开通过设计一个端到端的神经网络模型,通过深度学习技术进行训练,可以将目标代码片段输出为自然语言摘要,提高了程序员的效率并优化了软件开发周期,实现了优良的代码管理。
5、与现有的技术相比,基于语义与语法信息融合的代码自动摘要技术对于相应的代码片段自动生成代码摘要;所生成的代码摘要更加通畅自然并能准确的反映代码片段功能,鲁棒性更好。
附图说明
构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。
图1为本公开实施例一的基于语义与语法信息融合的代码自动摘要技术的总示意图;
图2为本公开实施例一的节点嵌入模块的示意图;
图3为本公开实施例一的图嵌入模块的示意图;
图4为本公开实施例一的解码器模块的示意图;
图5为本公开实施例一的图建模的示意图;
图6为本公开实施例一的AST的树建模的示意图。
具体实施方式
应该指出,以下详细说明都是示例性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
高质量的代码注释和摘要可有效提升程序员的软件开发和维护效率,减少程序员浏览代码和生成代码注释的时间。由于现有自动程序摘要方法缺乏全面的代码语义和语法信息的表示模型和有效的融合手段,因此将代码语义和语法信息与自动摘要模型结合的方式可自动获得更高质量的代码注释和摘要,从而提高程序员的软件开发速度,具有很大的现实意义。
术语解释:
抽象语法生成树(Abstract Syntax Tree,AST):又称语法树,是代码语法结构的抽象树状表示,树中每个节点表示代码代码的一种结构。
实施例一
本实施例提供了基于语义与语法信息融合的代码摘要生成方法;
如图1所示,基于语义与语法信息融合的代码摘要生成方法,包括:
S101:获取待生成摘要的代码;
S102:从待生成摘要的代码中分别提取图嵌入向量和节点嵌入向量;
S103:将图嵌入向量和节点嵌入向量,输入到预训练的深度学习模型中,输出代码的摘要。
作为一个或多个实施例,提取图嵌入向量的步骤包括:
对待生成摘要的代码,进行AST的树建模;
对树建模中的节点进行向量表示,得到每个节点的语法表示向量;
将所有节点的语法表示向量进行聚合,得到AST的图嵌入向量。
进一步地,对待生成摘要的代码,进行AST的树建模;具体包括:
使用编译器对待生成摘要的代码进行语法提取,生成待生成摘要的代码的抽象语法树AST。
示例性的,这里的编译器例如是JDT编译器。
进一步地,对树建模中的节点进行向量表示,得到每个节点的语法表示向量;具体包括:
对抽象语法树AST节点进行向量编码,通过第一嵌入矩阵与节点的向量点乘得到节点的初始化向量,同理得到每个节点的初始化向量表示;即得到每个节点的语法表示向量。
示例性的,这里的向量编码例如是one-hot向量编码。
进一步地,将所有节点的表示向量进行聚合,是采用两个串联的图卷积网络GCN来实现对所有节点的表示向量的聚合,具体是将所有节点的表示向量输入到第一图卷积网络中,将第一图卷积网络的输出值再输入到第二图卷积网络中,第二图卷积网络的输出值再输入到全连接层中,全连接层的输出即为AST的图嵌入向量。
应理解的,AST的图嵌入向量,用于表示代码的语法信息。
作为一个或多个实施例,提取节点嵌入向量的步骤包括:
对待生成摘要的代码,进行图建模;
对图建模中的节点进行向量表示,得到每个节点的初始化表示向量;
对每个节点的初始化表示向量,计算出每个节点的节点嵌入向量;
进一步地,所述对待生成摘要的代码,进行图建模;具体步骤包括:
对待生成摘要的代码,根据代码之间的调用依赖关系,进行图建模;获得待生成摘要代码的代码调用关系图。
进一步地,所述对图建模中的节点进行向量表示,得到每个节点的初始化表示向量;具体步骤包括:
对待生成摘要代码的代码调用关系图的节点进行向量编码,通过第二嵌入矩阵与节点的向量进行点乘,得到节点的初始化表示向量。
示例性的,所述向量编码例如是one-hot向量编码。
应理解的,所述第一嵌入矩阵和第二嵌入矩阵不同,但是,所述第一嵌入矩阵和第二嵌入矩阵的获取步骤是一致的。
示例性的,所述第二嵌入矩阵,是将代码调用关系入图的节点表示为一个节点集,所述节点集包括N个节点,为每个节点进行M个特征表示(例如节点1为第1个特征赋值为0.8),以此类推,每个节点都有M个特征表示,特征与节点集之间形成的矩阵M×N,被称为嵌入矩阵。
进一步地,所述对每个节点的初始化表示向量,计算出每个节点的节点嵌入向量,是通过归纳节点算法来计算每个节点的节点嵌入向量。
进一步地,所述对每个节点的初始化表示向量,计算出每个节点的节点嵌入向量,是利用归纳节点算法获取代码调用关系图节点的前向和后向嵌入向量,将节点前向嵌入向量与后向嵌入向量连接,得到最终的节点嵌入向量。同理可得每个节点的嵌入向量。
应理解的,节点嵌入向量,用于表示代码的语义信息。
应理解的,将代码调用关系图中的节点指向关系进行如下分类:由该节点指向的节点称为前向邻居;指向该节点的节点称为后向邻居。节点进行聚合时使用K次迭代索引,在迭代时,仅使用k-1时生成的节点嵌入表示。
应理解的,通过节点之间的指向关系将代码调用关系图划分为前向邻和后向邻;将节点前向邻的前向表示聚合为单个向量并与当前的前向表示连接起来送入全连接层中,输出的向量即为当前节点的前向表示,将聚合过程重复k次并应用于后向邻,最终使用前向向量表示与后向向量表示的连接作为最终节点嵌入表示。
作为一个或多个实施例,所述S103中,将图嵌入向量和节点嵌入向量,输入到预训练的深度学习模型中,输出代码的摘要;具体步骤包括:
在输入到预训练的深度学习模型之前,对每个节点嵌入向量分配不同的权重;将AST的图嵌入向量作为初始背景向量输入到预训练的深度学习模型中;预训练的深度学习模型对节点嵌入向量和AST的图嵌入向量进行融合,输出输出代码的摘要。
进一步地,所述预训练的深度学习模型对节点嵌入向量和AST的图嵌入向量进行融合,是使用长短时记忆网络(LSTM)进行融合。
作为一个或多个实施例,所述深度学习模型,为解码器。
进一步地,所述深度学习模型,包括:
依次连接的长短时记忆网络LSTM、前馈网络、全连接层和Softmax函数层。
作为一个或多个实施例,所述预训练的深度学习模型,其训练步骤包括:
构建深度学习模型;
构建训练集;所述训练集,包括:已知源代码的AST图嵌入向量、已知源代码的节点嵌入向量和已知源代码的摘要对应的向量序列;
将训练集输入到深度学习模型中,对深度学习模型进行训练,当损失函数达到最小值,或者满足迭代次数时,得到预训练的深度学习模型。
示例性的,所述训练集是通过Github获取的源代码数据集。
示例性的,所述已知源代码的摘要对应的向量序列,是使用one-hot向量编码将已知源代码的摘要转化为目标向量序列。
示例性的,所述已知源代码的摘要对应的向量序列,是使用one-hot编码方式对目标代码摘要进行编码,将语料库中所包含的每一个词汇都编码为一个一维one-hot向量,形成词汇-(one-hot)对,随后将当前目标代码摘要包含的词汇与one-hot向量进行对应替代,形成最终的目标向量序列。
示例性的,将训练集输入到深度学习模型中,对深度学习模型进行训练,是AST的图嵌入向量作为解码器初始背景向量在解码器LSTM中与节点嵌入向量融合,得到代码片段与目标代码摘要的神经网络参数,构建端到端的神经网络模型。
本公开解码器利用长短时记忆网络(LSTM)对解码器的输入进行训练,解码器中所含注意力机制模型对节点嵌入向量和AST图嵌入向量进行运算,并通过匹配函数与正切变化分配节点嵌入向量与目标向量序列的权重值。在解码器,AST的图嵌入向量作为初始背景向量与节点嵌入进行融合,实现了语义与语法信息的交互。
解码器使用长短时记忆网络(LSTM),初始背景向量为AST的图嵌入向量,节点嵌入向量(z1,...,zn)通过注意力机制进行权重分配,并输入到解码器与AST的图嵌入向量进行融合。具体来说:通过对上一个时间步的背景向量与各个节点嵌入向量匹配程度进行权重设定,即上一时刻的输出向量与各个节点嵌入向量匹配程度越高,权重越大,注意力越集中。
所述技术针对于Java语言,但应可以适用于其他代码语言。
提取图嵌入向量的步骤,具体分成两部分:树建模和图卷积。树建模对目标代码片段进行数据处理,使用JDT编译器进行语法提取,生成该代码片段抽象语法树AST。同时将抽象语法树转化为初始向量序列;图卷积是将树建模生成的初始向量表示输入到两层图卷积神经网络,并通过非线性的全连接层进行输出。
所述树建模用来对目标代码片段进行处理构建生成抽象语法树AST并生成初始向量表示,如图6,过程如下:
步骤(201):使用JDT编译器进行语法提取,生成该代码片段抽象语法树AST;
步骤(202):使用嵌入矩阵将代码调用关系图中节点的进行初始化向量表示,步骤如下:
步骤(202-1):使用one-hot编码方式对抽象语法树AST中每个节点的方法名都进行一维的向量表示,每一个节点向量长度为AST树节点个数R;
步骤(202-2):构造嵌入矩阵,将抽象语法树AST中节点进行特征表示,有R个节点,假设每个节点有P个特征,则可形成P×R大小的嵌入矩阵;
步骤(202-3):将步骤(202-2)嵌入矩阵与步骤(202-1)one-hot编码后节点向量表示点乘,得到节点的初始化向量表示;即假设一节点的特征矩阵为P×R,one-hot向量为R×1,则该节点的初始化向量表示为P×1。
所述图卷积具体为:
假设树建模生成的初始向量表示为H(0)=N×F即
Figure BDA0002484577040000111
将抽象语法树AST的邻接矩阵(N×N)表示为A,度矩阵(N×N)表示为D。如图3,聚合步骤如下:
步骤(301):将X,A,D输入到第一层图卷积网络(GCN)中,聚合节点的特征信息,并通过一个非线性激活的全连接层进行输出。计算方式如下:
Figure BDA0002484577040000112
其中H(1)代表第一层卷积后的隐藏层向量矩阵,矩阵中的每一行表示第一次信息聚合后的AST节点向量表示,记为
Figure BDA0002484577040000113
δ是激活函数,A表示邻接矩阵A与单位矩阵E之和,即:A=A+E,D表示为A的度矩阵,H(0)是初始向量表示,W(1)是第一层图卷积网络层的权重参数。
步骤(302):根据步骤(301),进行第二层得到图卷积网络得到第二层卷积后的隐藏层向量矩阵,矩阵中的每一行表示第二次信息聚合后的AST节点向量表示:
Figure BDA0002484577040000114
步骤(303):将第二次聚合后的AST向量表示输入到非线性激活的全连接层中,最终得到目标代码片段的AST图嵌入向量。
Figure BDA0002484577040000121
将源代码数据集表示为节点嵌入向量通过图建模部和归纳节点算法得到。
图建模部分对源代码数据集进行数据处理,将其表达为代码调用关系图并得到图中节点的初始化向量表示;归纳节点算法通过对初始化的向量进行操作,得到各个节点嵌入向量,具体实现方式如下:
所述图建模部分将源代码数据集表示为代码调用关系图并得到初始化的向量表示,如图5,过程如下:
步骤(401):使用Javaassist和Spoon工具将方法和方法的输入输出、参数类型、输入输出参数从源代码数据集中提取出来。
步骤(402):通过方法的输入输出参数获得方法之间的调用依赖关系,步骤如下:
步骤(402-1):源代码数据集中的每个方法与代码调用关系图中的节点一一对应,节点之间的连接关系设置为:若源代码数据集中的两个方法之间存在调用依赖关系,则在这两个方法之间可构造一条边。
步骤(402-2):节点之间边指向关系设定如下:如果在调用方法gj之前获得了方法gi的输出参数,则可形成由gi指向gj的一条边。
步骤(403):根据步骤(402)的节点生成方法构建源代码数据集的代码调用关系图。
步骤(404):使用嵌入矩阵将代码调用关系图中节点的进行初始化向量表示,步骤如下:
步骤(404-1):使用one-hot编码方式对图中每个节点的方法名都进行一维的向量表示,每一个节点one-hot向量维度均为代码节点数N。
步骤(404-2):构造嵌入矩阵,将图中节点进行特征表示,假设有N个节点,每个节点有M个特征,则可形成M×N大小的嵌入矩阵。
步骤(404-3):将步骤(404-2)嵌入矩阵与步骤(404-1)one-hot编码后节点向量表示点乘,得到节点初始化向量表示。即假设一节点one-hot向量为N×1,步骤(404-2)的嵌入矩阵为M×N,则该节点的初始化向量表示为M×1。使用
Figure BDA0002484577040000135
表示节点v的初始向量表示。
所述归纳节点算法通一种节点聚合算法对K跳内节点的前向邻居和后向邻居进行信息的聚合生成双向节点嵌入,如图2所示,过程如下:
步骤(501):根据指向方向将v的邻居分为前向邻居N(v)和后向邻居N(v),前向邻居N(v)是v指向的节点;后向邻居N(v)是指向v的节点。
步骤(502):将节点v的前向邻居的前向表示聚合成为单个向量,聚合方式为:
Figure BDA0002484577040000131
其中
Figure BDA0002484577040000132
表示第k次聚合时将节点v前向邻居的前向表示聚合而成的向量,
Figure BDA0002484577040000133
表示均值聚合器,
Figure BDA0002484577040000134
是第k-1次聚合时节点v前向邻居的前向表示向量,u代表v的前向邻居,N(v)表示节点v的前向邻居集,k∈{1,...,k}为迭代次数。
步骤(503):将节点v当前的前向表示与步骤(3)生成的新向量结合起来输入到非线性激活的全连接层中,从而更新节点的前向表示,计算方式如下:
Figure BDA0002484577040000141
其中
Figure BDA0002484577040000142
表示节点v当前前向向量表示,δ为激活函数,wk表示权重参数,CONCAT表示将两个向量进行连接的连接函数,
Figure BDA0002484577040000143
表示节点v当前的前向表示向量,
Figure BDA0002484577040000144
是步骤(503)中生成的向量表示。
步骤(504):将步骤(503)和步骤(504)作用于节点v的后向表示,生成节点v当前后向向量表示。
步骤(505):连接迭代完成后的节点v的前向表示向量和后向向量表示。生成节点v的最终嵌入表示。
所述解码器端输入为各个节点嵌入向量,目标代码片段AST的图嵌入向量以及目标代码摘要向量序列,解码器设定为LSTM,AST的图嵌入向量与节点嵌入向量在LSTM中进行融合,随后通过前馈网络、全连接层、Softmax运算,对该模块进行训练得到端到端神经网络模型。如图4,具体实现过程如下:
步骤(601):将目标代码摘要转化为向量序列{v1,...,vt},步骤如下:
步骤(601-1):将自然语言语料库中的所有词汇转化为二进制的向量,向量维度是所有词汇数;
步骤(601-2):将目标代码摘要中的词汇使用二进制向量进行描述,假设要对第i个词汇进行向量表示,则二进制向量索引里第i个位置记为为1,其他位置记为0,即{0,0,...,1,0,...,0};
步骤(601-3):按照以上步骤对目标代码摘要中的词汇进行向量化表达,最终目标代码摘要转化为向量序列;
步骤(602):训练解码器,通过目标代码摘要向量序列{v1,...,vt},代码调用关系图生成的节点嵌入向量{z1,..,zn},AST的图嵌入向量S进行联合训练,具体方式如下:
步骤(602-1):将目标代码摘要向量序列,节点嵌入向量,AST的图嵌入向量输入到含有1层长短时记忆网络(LSTM)中进行训练,输出得到的隐含层向量将输入到下一时间步的注意力机制与LSTM单元中进行训练,其中AST的图嵌入向量S作为初始背景向量与经过注意力机制的节点嵌入向量ct在LSTM中进行融合,融合公式如下:
g1=LSTMenc(y0,c1,S)  (5)
其中y0是目标向量序列初始输入,可设定为SOS,c1为节点嵌入向量经过注意力机制分配权重计算得来的。S是AST的图嵌入向量,作为初始背景向量。
之后的时间步计算公式如下:
gt=LSTMenc(yt-1,ct,gt-1)  (6)
其中yt-1表示解码器上一时间步的输出,gt-1是上一个时间步的隐含层向量,值得一提的是,初始时间步时的隐含层变量为AST图嵌入向量。ct表示该时间步的背景向量。
步骤(603):应用注意力机制为,通过对节点向量的加权求和方式,进行权重分配,使得解码器在输出时更加关注与其自身相关的信息,忽略不重要的信息,并生成当前时间步的背景向量ct输入到解码器中,具体计算方式如下:
Figure BDA0002484577040000151
其中
Figure BDA0002484577040000152
表示输出端输出第i个单词时输入端第j个节点的注意力分配系数即每个节点表示的权重。zj表示第j个节点嵌入向量。
步骤(603-1):
Figure BDA0002484577040000161
表示为每个节点嵌入向量分配的权重大小,它的计算方式如下:
Figure BDA0002484577040000162
其中eij表示一个标量,通过上一时间步的隐含层变量和节点嵌入向量计算而得到的。
步骤(603-2):eij的计算方式如下:
eij=a(gt-1,zj)  (9)
其中a表示用来计算第j个输入节点和第i个输出序列匹配的对齐模型,gt-1表示上一时间步的隐含层变量,zj是第j个节点嵌入向量。
步骤(603-3):a表示第j个输入节点和第i个输出序列匹配的分数值,对它的设计将导致eij计算方式的不同,因此我们进行如下设计:
Figure BDA0002484577040000163
其中
Figure BDA0002484577040000164
wa均是可以训练的模型参数。
步骤(604):解码器通过反向传播的方式进行训练,使用自定义的输出层和softmax运算来计算当前时间步的概率分布并得到该序列的损失,计算如下:
Figure BDA0002484577040000165
Figure BDA0002484577040000166
实施例二
本实施例提供了基于语义与语法信息融合的代码摘要生成系统;
基于语义与语法信息融合的代码摘要生成系统,包括:
获取模块,其被配置为:获取待生成摘要的代码;
向量提取模块,其被配置为:从待生成摘要的代码中分别提取图嵌入向量和节点嵌入向量;
摘要生成模块,其被配置为:将图嵌入向量和节点嵌入向量,输入到预训练的深度学习模型中,输出代码的摘要。
此处需要说明的是,上述获取模块、向量提取模块和摘要生成模块对应于实施例一中的步骤S101至S103,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为系统的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
上述实施例中对各个实施例的描述各有侧重,某个实施例中没有详述的部分可以参见其他实施例的相关描述。
所提出的系统,可以通过其他的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如上述模块的划分,仅仅为一种逻辑功能划分,实际实现时,可以有另外的划分方式,例如多个模块可以结合或者可以集成到另外一个系统,或一些特征可以忽略,或不执行。
实施例三
本实施例还提供了一种电子设备,包括:一个或多个处理器、一个或多个存储器、以及一个或多个计算机程序;其中,处理器与存储器连接,上述一个或多个计算机程序被存储在存储器中,当电子设备运行时,该处理器执行该存储器存储的一个或多个计算机程序,以使电子设备执行上述实施例一所述的方法。
应理解,本实施例中,处理器可以是中央处理单元CPU,处理器还可以是其他通用处理器、数字信号处理器DSP、专用集成电路ASIC,现成可编程门阵列FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据、存储器的一部分还可以包括非易失性随机存储器。例如,存储器还可以存储设备类型的信息。
在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。
实施例一中的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器、闪存、只读存储器、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
本领域普通技术人员可以意识到,结合本实施例描述的各示例的单元即算法步骤,能够以电子硬件或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
实施例四
本实施例还提供了一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成实施例一所述的方法。
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

Claims (11)

1.基于语义与语法信息融合的代码摘要生成方法,其特征是,包括:
获取待生成摘要的代码;
从待生成摘要的代码中分别提取图嵌入向量和节点嵌入向量;
将图嵌入向量和节点嵌入向量,输入到预训练的深度学习模型中,输出代码的摘要;
提取图嵌入向量的步骤包括:
对待生成摘要的代码,进行AST的树建模;
对树建模中的节点进行向量表示,得到每个节点的语法表示向量;
将所有节点的语法表示向量进行聚合,得到AST的图嵌入向量;
提取节点嵌入向量的步骤包括:
对待生成摘要的代码,进行图建模;
对图建模中的节点进行向量表示,得到每个节点的初始化表示向量;
对每个节点的初始化表示向量,计算出每个节点的节点嵌入向量;
将图嵌入向量和节点嵌入向量,输入到预训练的深度学习模型中,输出代码的摘要;具体步骤包括:
在输入到预训练的深度学习模型之前,对每个节点嵌入向量分配不同的权重;将AST的图嵌入向量作为初始背景向量输入到预训练的深度学习模型中;预训练的深度学习模型对节点嵌入向量和AST的图嵌入向量进行融合,输出输出代码的摘要。
2.如权利要求1所述的方法,其特征是,对待生成摘要的代码,进行AST的树建模;具体包括:
使用编译器对待生成摘要的代码进行语法提取,生成待生成摘要的代码的抽象语法树AST。
3.如权利要求2所述的方法,其特征是,对树建模中的节点进行向量表示,得到每个节点的语法表示向量;具体包括:
对抽象语法树AST节点进行向量编码,通过第一嵌入矩阵与节点的向量点乘得到节点的初始化向量,同理得到每个节点的初始化向量表示;即得到每个节点的语法表示向量。
4.如权利要求3所述的方法,其特征是,将所有节点的表示向量进行聚合,是采用两个串联的图卷积网络GCN来实现对所有节点的表示向量的聚合,具体是:将所有节点的表示向量输入到第一图卷积网络中,将第一图卷积网络的输出值再输入到第二图卷积网络中,第二图卷积网络的输出值再输入到全连接层中,全连接层的输出即为AST的图嵌入向量。
5.如权利要求1所述的方法,其特征是,
所述对待生成摘要的代码,进行图建模;具体步骤包括:
对待生成摘要的代码,根据代码之间的调用依赖关系,进行图建模;获得待生成摘要代码的代码调用关系图。
6.如权利要求5所述的方法,其特征是,
所述对图建模中的节点进行向量表示,得到每个节点的初始化表示向量;具体步骤包括:
对待生成摘要代码的代码调用关系图的节点进行向量编码,通过第二嵌入矩阵与节点的向量进行点乘,得到节点的初始化表示向量。
7.如权利要求6所述的方法,其特征是,
所述对每个节点的初始化表示向量,计算出每个节点的节点嵌入向量,是通过归纳节点算法来计算每个节点的节点嵌入向量;
或者,
所述对每个节点的初始化表示向量,计算出每个节点的节点嵌入向量,是利用归纳节点算法获取代码调用关系图节点的前向和后向嵌入向量,将节点前向嵌入向量与后向嵌入向量连接,得到最终的节点嵌入向量;同理可得每个节点的嵌入向量。
8.如权利要求1所述的方法,其特征是,所述预训练的深度学习模型,其训练步骤包括:
构建深度学习模型;
构建训练集;所述训练集,包括:已知源代码的AST图嵌入向量、已知源代码的节点嵌入向量和已知源代码的摘要对应的向量序列;
将训练集输入到深度学习模型中,对深度学习模型进行训练,当损失函数达到最小值,或者满足迭代次数时,得到预训练的深度学习模型。
9.基于语义与语法信息融合的代码摘要生成系统,其特征是,包括:
获取模块,其被配置为:获取待生成摘要的代码;
向量提取模块,其被配置为:从待生成摘要的代码中分别提取图嵌入向量和节点嵌入向量;
摘要生成模块,其被配置为:将图嵌入向量和节点嵌入向量,输入到预训练的深度学习模型中,输出代码的摘要;
提取图嵌入向量的步骤包括:
对待生成摘要的代码,进行AST的树建模;
对树建模中的节点进行向量表示,得到每个节点的语法表示向量;
将所有节点的语法表示向量进行聚合,得到AST的图嵌入向量;
提取节点嵌入向量的步骤包括:
对待生成摘要的代码,进行图建模;
对图建模中的节点进行向量表示,得到每个节点的初始化表示向量;
对每个节点的初始化表示向量,计算出每个节点的节点嵌入向量;
将图嵌入向量和节点嵌入向量,输入到预训练的深度学习模型中,输出代码的摘要;具体步骤包括:
在输入到预训练的深度学习模型之前,对每个节点嵌入向量分配不同的权重;将AST的图嵌入向量作为初始背景向量输入到预训练的深度学习模型中;预训练的深度学习模型对节点嵌入向量和AST的图嵌入向量进行融合,输出输出代码的摘要。
10.一种电子设备,其特征是,包括:一个或多个处理器、一个或多个存储器、以及一个或多个计算机程序;其中,处理器与存储器连接,上述一个或多个计算机程序被存储在存储器中,当电子设备运行时,该处理器执行该存储器存储的一个或多个计算机程序,以使电子设备执行权利要求1-8任一项所述的方法。
11.一种计算机可读存储介质,其特征是,用于存储计算机指令,所述计算机指令被处理器执行时,完成权利要求1-8任一项所述的方法。
CN202010387446.XA 2020-05-09 2020-05-09 基于语义与语法信息融合的代码摘要生成方法及系统 Active CN111625276B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010387446.XA CN111625276B (zh) 2020-05-09 2020-05-09 基于语义与语法信息融合的代码摘要生成方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010387446.XA CN111625276B (zh) 2020-05-09 2020-05-09 基于语义与语法信息融合的代码摘要生成方法及系统

Publications (2)

Publication Number Publication Date
CN111625276A CN111625276A (zh) 2020-09-04
CN111625276B true CN111625276B (zh) 2023-04-21

Family

ID=72270942

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010387446.XA Active CN111625276B (zh) 2020-05-09 2020-05-09 基于语义与语法信息融合的代码摘要生成方法及系统

Country Status (1)

Country Link
CN (1) CN111625276B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112162775A (zh) * 2020-10-21 2021-01-01 南通大学 一种基于Transformer和混合代码表示的Java代码注释自动生成方法
CN113064633A (zh) * 2021-03-26 2021-07-02 山东师范大学 一种代码摘要自动生成方法及系统
CN113342318B (zh) * 2021-04-19 2022-06-10 山东师范大学 基于多视图代码特征的细粒度代码自动生成方法及系统
CN113342343B (zh) * 2021-04-20 2022-05-27 山东师范大学 基于多跳推理机制的代码摘要生成方法及系统
CN117407051B (zh) * 2023-12-12 2024-03-08 武汉大学 一种基于结构位置感知的代码自动摘要方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110018820A (zh) * 2019-04-08 2019-07-16 浙江大学滨海产业技术研究院 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法
CN110399162A (zh) * 2019-07-09 2019-11-01 北京航空航天大学 一种源代码注释自动生成方法
WO2019233112A1 (zh) * 2018-06-05 2019-12-12 北京航空航天大学 一种软件源代码的向量化表征方法
US10528731B1 (en) * 2017-09-21 2020-01-07 Area 1 Security, Inc. Detecting malicious program code using similarity of hashed parsed trees
CN110673840A (zh) * 2019-09-23 2020-01-10 山东师范大学 一种基于标签图嵌入技术的自动代码生成方法及系统

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016134183A1 (en) * 2015-02-19 2016-08-25 Digital Reasoning Systems, Inc. Systems and methods for neural language modeling
CN104750484B (zh) * 2015-03-23 2018-07-06 福建工程学院 一种基于最大熵模型的代码摘要生成方法
US10157045B2 (en) * 2016-11-17 2018-12-18 The Mathworks, Inc. Systems and methods for automatically generating code for deep learning systems
US10732966B2 (en) * 2017-09-08 2020-08-04 Devfactory Innovations Fz-Llc Library model addition
CN108519890B (zh) * 2018-04-08 2021-07-20 武汉大学 一种基于自注意力机制的鲁棒性代码摘要生成方法
US11562186B2 (en) * 2018-09-05 2023-01-24 Siemens Aktiengesellschaft Capturing network dynamics using dynamic graph representation learning
CN109783079A (zh) * 2018-12-21 2019-05-21 南京航空航天大学 一种基于程序分析和循环神经网络的代码注释生成方法
CN110162297A (zh) * 2019-05-07 2019-08-23 山东师范大学 一种源代码段自然语言描述自动生成方法及系统
CN111090461B (zh) * 2019-11-18 2023-04-28 中山大学 一种基于机器翻译模型的代码注释生成方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10528731B1 (en) * 2017-09-21 2020-01-07 Area 1 Security, Inc. Detecting malicious program code using similarity of hashed parsed trees
WO2019233112A1 (zh) * 2018-06-05 2019-12-12 北京航空航天大学 一种软件源代码的向量化表征方法
CN110018820A (zh) * 2019-04-08 2019-07-16 浙江大学滨海产业技术研究院 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法
CN110399162A (zh) * 2019-07-09 2019-11-01 北京航空航天大学 一种源代码注释自动生成方法
CN110673840A (zh) * 2019-09-23 2020-01-10 山东师范大学 一种基于标签图嵌入技术的自动代码生成方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李振 ; .代码自动生成及代码上下文分析研究综述.数据通信.2020,(第02期),全文. *

Also Published As

Publication number Publication date
CN111625276A (zh) 2020-09-04

Similar Documents

Publication Publication Date Title
CN111625276B (zh) 基于语义与语法信息融合的代码摘要生成方法及系统
CN111310438B (zh) 基于多粒度融合模型的中文句子语义智能匹配方法及装置
Kim et al. Structured attention networks
CN110673840B (zh) 一种基于标签图嵌入技术的自动代码生成方法及系统
CN108073711B (zh) 一种基于知识图谱的关系抽取方法和系统
CN112487807B (zh) 一种基于膨胀门卷积神经网络的文本关系抽取方法
CN109101235A (zh) 一种软件程序的智能解析方法
JP6838161B2 (ja) エンドツーエンドモデリング方法及びシステム
CN101751385B (zh) 一种采用层次管道过滤器体系结构的多语言信息抽取方法
Zhang et al. Semi-supervised structured prediction with neural CRF autoencoder
US20220383127A1 (en) Methods and systems for training a graph neural network using supervised contrastive learning
CN110851566A (zh) 一种改进的可微分网络结构搜索的方法
CN112347756B (zh) 一种基于序列化证据抽取的推理阅读理解方法及系统
CN113641819A (zh) 基于多任务稀疏共享学习的论辩挖掘系统及方法
CN112560456A (zh) 一种基于改进神经网络的生成式摘要生成方法和系统
Wang et al. Image to latex with densenet encoder and joint attention
CN114327483A (zh) 图张量神经网络模型建立方法及源代码语义识别方法
CN113935489A (zh) 基于量子神经网络的变分量子模型tfq-vqa及其两级优化方法
Cox Syntactically informed text compression with recurrent neural networks
CN113868432A (zh) 一种用于钢铁制造企业的知识图谱自动构建方法和系统
CN117094325B (zh) 水稻病虫害领域命名实体识别方法
CN113342343A (zh) 基于多跳推理机制的代码摘要生成方法及系统
CN116629361A (zh) 基于本体学习和注意力机制的知识推理方法
CN114648005A (zh) 一种多任务联合学习的多片段机器阅读理解方法及装置
CN115544307A (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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20231206

Address after: Room 619, 6th Floor, Building 2, No. 312 Jiangling South Road, Xixing Street, Binjiang District, Hangzhou City, Zhejiang Province, 310000

Patentee after: Hangzhou Geek Growth Technology Co.,Ltd.

Address before: 250014 No. 88, Wenhua East Road, Lixia District, Shandong, Ji'nan

Patentee before: SHANDONG NORMAL University