CN113342318A - 基于多视图代码特征的细粒度代码自动生成方法及系统 - Google Patents

基于多视图代码特征的细粒度代码自动生成方法及系统 Download PDF

Info

Publication number
CN113342318A
CN113342318A CN202110418985.XA CN202110418985A CN113342318A CN 113342318 A CN113342318 A CN 113342318A CN 202110418985 A CN202110418985 A CN 202110418985A CN 113342318 A CN113342318 A CN 113342318A
Authority
CN
China
Prior art keywords
code
syntax tree
code segment
vector
abstract syntax
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
Application number
CN202110418985.XA
Other languages
English (en)
Other versions
CN113342318B (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.)
Chen Xiaolang
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 CN202110418985.XA priority Critical patent/CN113342318B/zh
Publication of CN113342318A publication Critical patent/CN113342318A/zh
Application granted granted Critical
Publication of CN113342318B publication Critical patent/CN113342318B/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/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Machine Translation (AREA)

Abstract

本发明公开了基于多视图代码特征的细粒度代码自动生成方法及系统,获取自然语言描述;将自然语言描述输入到训练后的编码器中,得到自然语言描述向量;将自然语言描述向量和代码字典对应的所有融合向量,均输入到训练后的解码器中,解码器输出对应的代码;本发明能够学习更加细粒度的多视图代码结构表示,并将其应用与代码生成任务。

Description

基于多视图代码特征的细粒度代码自动生成方法及系统
技术领域
本发明涉及代码生成技术领域,特别是涉及基于多视图代码特征的细粒度代码自动生成方法及系统。
背景技术
本部分的陈述仅仅是提到了与本发明相关的背景技术,并不必然构成现有技术。
伴随着互联网技术的深入发展以及现代软件规模的不断增大,应用软件的需求和开发环境变得越来越复杂,程序员面临着与日俱增的开发与维护负担。传统软件开发方法暴露出新技术环境下的缺陷,比如开发周期漫长,工作重复较大,同时也给系统的演进和维护造成了很大的困难。根据自然语言描述的请求进行程序的自动生成是一项极具挑战性的工作。比如,给出程序描述语句“调用sorted函数对my_list列表进行排序,并以相反的顺序返回结果”,如果没有熟练的程序人员对该描述语句进行代码书写,很难直接得出其对应的代码。
代码的自动生成是在程序理解的基础上展开的,所以说,代码自动生成的前期可以理解为一系列的代码理解工作。利用代码理解的相关知识,对代码片段进行分析,之后放入代码生成的模型中,完成代码生成的工作。
针对不同代码理解任务需求,代码可以被表示为多种形式,以便于对代码中包含的不同特性进行建模。目前主要有3种表示形式:
第一种是基于序列的代码理解模型,该模型主要应用场景是代码补全、程序注释生成、代码检索,存在的问题是:代码被表示为线性序列,其结构信息未被充分利用;序列较长时,模型无法对其充分建模;
第二种是基于结构的代码理解模型,该模型主要应用场景是代码生成、代码模式检测、注释生成,存在的问题是:AST建模存在长依赖问题;图建模存在网络复杂、较难训练的问题。
第三种是基于执行过程的代码理解模型,该模型主要应用场景是程序综合,存在的问题是程序轨迹的数目庞大、难以建模。
发明人发现现有代码生成方法存在以下技术问题没有克服:
第一,传统的代码表示只考虑单一特征;
第二,特征融合粒度粗,导致融合后的信息有损失,生成的代码不够精细。
发明内容
为了解决现有技术的不足,本发明提供了基于多视图代码特征的细粒度代码自动生成方法及系统;本发明能够学习更加细粒度的多视图代码结构表示,并将其应用与代码生成任务。
第一方面,本发明提供了基于多视图代码特征的细粒度代码自动生成方法;
基于多视图代码特征的细粒度代码自动生成方法,包括:
获取自然语言描述;
将自然语言描述输入到训练后的编码器中,得到自然语言描述向量;
将自然语言描述向量和代码字典对应的所有融合向量,均输入到训练后的解码器中,解码器输出对应的代码。
第二方面,本发明提供了基于多视图代码特征的细粒度代码自动生成系统;
基于多视图代码特征的细粒度代码自动生成系统,包括:
获取模块,其被配置为:获取自然语言描述;
编码模块,其被配置为:将自然语言描述输入到训练后的编码器中,得到自然语言描述向量;
解码模块,其被配置为:将自然语言描述向量和代码字典对应的所有融合向量,均输入到训练后的解码器中,解码器输出对应的程序。
第三方面,本发明还提供了一种电子设备,包括:一个或多个处理器、一个或多个存储器、以及一个或多个计算机程序;其中,处理器与存储器连接,上述一个或多个计算机程序被存储在存储器中,当电子设备运行时,该处理器执行该存储器存储的一个或多个计算机程序,以使电子设备执行上述第一方面所述的方法。
第四方面,本发明还提供了一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成第一方面所述的方法。
与现有技术相比,本发明的有益效果是:
(1)针对传统的代码表示模型仅使用单一特征的问题,本发明充分考虑源程序的多视图结构特征,即:抽象语法树(AST)语法结构信息,以及控制流程图(CFG)语义信息和API依赖图(ADG)等图的深层结构特性;
(2)针对融合的代码特征粒度粗而导致的信息损失问题,本发明将CFG以及ADG中的信息分别映射匹配到AST树中,匹配成功的节点蕴含三种特征信息;将CFG以及ADG的节点信息运用字符串匹配的方法匹配到AST树中,达到代码节点粒度的特征融合;
(3)设计匹配机制建立CFG、ADG以及AST树中相应节点或路径的对应关系,匹配成功的节点或路径可根据其嵌入表示向量进行特征融合,可获得更细粒度的且蕴含三种特征信息的嵌入向量,以便代码生成模型能够学习到更为精密细致的代码结构信息。
(4)采用concat连接函数,将三部分的嵌入向量连接融合,有效融合代码的语法语义以及方法参数调用信息,弥补代码结构表达不完整的缺陷。
本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1为第一个实施例的方法流程图;
图2为第一个实施例的AST建模示意图;
图3为第一个实施例的CFG建模示意图;
图4为第一个实施例的ADG建模示意图;
图5为第一个实施例的Seq2Seq序列学习模块训练步骤。
具体实施方式
应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
术语解释:
抽象语法树(Abstract Syntax Tree,AST);
控制流图(Control Flow Graph,CFG);
API依赖图(Application Programming Interface,ADG)。
由于多视图代码特征的粗粒度融合方法,只是对代码片段进行单视图的向量化,然后再对不同视图的向量进行融合,用于后续的代码检索、代码生成等任务。然而,与之不同的是,代码生成是一个token by token的预测过程,现有的方法融合的程序粒度较粗,不能对其细粒度的单位进行多视图的融合。为此,本发明进一步提出了一种基于多视图代码特征的细粒度融合学习框架,能够学习更加细粒度的多视图代码表示,并将其应用于代码生成的任务。
实施例一
本实施例提供了基于多视图代码特征的细粒度代码自动生成方法;
如图5所示,基于多视图代码特征的细粒度代码自动生成方法,包括:
S1:获取自然语言描述;
S2:将自然语言描述输入到训练后的编码器中,得到自然语言描述向量;
S3:将自然语言描述向量和代码字典对应的所有融合向量,均输入到训练后的解码器中,解码器输出对应的代码。
进一步地,S1:获取自然语言描述;其中,自然语言描述是指:对该段计算机程序或计算机代码实现的功能,用人类可以理解的语言进行的描述。
进一步地,所述编码器是Seq2Seq模型的编码器;所述解码器也是Seq2Seq模型的解码器,网络结构包括:
依次连接的编码器、解码器、softmax函数层和输出层。
示例性的,所述编码器采用长短时记忆网络来实现。
进一步地,所述训练后的编码器与训练后的解码器,是将编码器和解码器综合训练得到的,即对Seq2Seq模型进行训练,得到训练后的Seq2Seq模型,也就是得到了训练后的编码器与训练后的解码器。
进一步地,所述训练后的Seq2Seq模型;训练步骤包括:
构建训练集;所述训练集为已知代码的自然语言表述;
将自然语言表述作为Seq2Seq的编码器的输入值;
将编码器的输出值、和代码字典对应的所有融合向量,作为Seq2Seq模型的解码器的输入值,将已知代码作为Seq2Seq的解码器的输出值,对Seq2Seq模型进行训练,得到训练后的Seq2Seq模型。
应理解的,利用编解码器架构来训练模型。通过长短时记忆网络作为编码器进行自然语言描述特征的训练,基于多视图特征结构的嵌入方法的解码器,实现从自然语言描述到目标代码的解码工作。
在训练阶段中,解码器端输入为融合向量和编码器的词嵌入向量,目标输出为相应的目标代码。具体过程如图5所示:
1、Encoder部分
输入的自然语言描述预处理为二维向量序列输入到LSTM的编码器中进行训练,最终得到的隐含层向量用于下一步的输入,利用注意力机制进行权重分配和解码器进行训练。
这一过程可以被定义为:
Ht=LSTMenc(Xt,Ht-1)
其中Xt表示自然语言描述特征向量,Ht-1为神经网络隐含层状态。
2、Decoder部分
①训练阶段:解码器端输入为编码器的词嵌入向量和融合向量,输出为相应的目标代码。
步骤一:通过编码器的长短时记忆网络训练得到自然语言描述的隐含层向量Ht,使用注意力机制模型给每个自然语言描述特征赋予一个权重Cit。权重Cit的计算公式为:
αit=Wtσ(WhHt-1+b)
Figure BDA0003027077030000071
其中Wt和Wh表示权重,b表示偏差,Ht-1表示编码器中长短时记忆网络生成的隐含层向量。
解码器通过反向传播的方式进行训练,定义序列模型的损失函数为:
Figure BDA0003027077030000072
其中,yt表示t时刻输入真实特征值,Ht表示t时刻长短时记忆网络的预测值,采用交叉熵损失函数对序列模型中的神经网络参数以及融合嵌入算法中的权重参数进行调整。
②预测阶段:
预测阶段解码器的输入为从代码段中提取的特征嵌入向量。将融合的嵌入向量输入到解码器中进行预测,得到相应的目标程序。
3、预测结果将自然语言描述特征输入到编码器模块由长短时记忆网络进行特征提取,利用基于注意力机制的解码器对目标代码的进行预测,即可得到相应的目标代码。
进一步地,如图1所示,所述代码字典,获取步骤包括:
S30:获取若干个已知的代码片段;
S31:对每个代码片段进行单视图构建,得到每个代码片段的抽象语法树、控制流程图和API依赖图;
S32:对每个代码片段的抽象语法树、控制流程图和API依赖图,分别进行图嵌入,得到每个代码片段的抽象语法树特征向量、控制流程图特征向量和API依赖图特征向量;
S33:将每个代码片段的控制流程图特征向量和API依赖图特征向量,均匹配到对应代码片段的抽象语法树的节点上;
S34:将匹配成功的抽象语法树特征向量、控制流程图特征向量和API依赖图特征向量进行融合,得到当前代码片段对应的融合向量;
S35:重复步骤S31~S34;得到代码片段与融合向量一一对应的代码字典。
进一步地,所述S30:获取若干个已知的代码片段;其中,代码片段,是指:
包含若干行代码的片段,所述代码片段能够自然语言描述的功能。
例如,代码片段是用于实现自然语言描述为“求1-100的和”的功能的代码。
进一步地,所述S31对每个代码片段进行单视图构建,得到每个代码片段的抽象语法树、控制流程图和API依赖图;其中,得到每个代码片段的抽象语法树之后,还将抽象语法树中的每个节点映射到实值向量。
进一步地,如图2所示,所述将抽象语法树中的每个节点映射到实值向量;具体包括:
将节点x的向量表示为vec(x),其中,
Figure BDA0003027077030000091
Nf是特征维数。对于AST中的每个非叶节点p及其直接子节点c1,......,cn,目标是:
Figure BDA0003027077030000092
其中,
Figure BDA0003027077030000093
为节点ci对应的权值矩阵;
Figure BDA0003027077030000094
是偏差。
Figure BDA0003027077030000095
是叶子节点ci与非叶子节点p之比的权重系数。p为非叶节点,vec(x)为节点x的向量表示。
应理解的,在代码片段解析为抽象语法树之后,首先,把抽象语法树中的节点映射到实值向量。向量表示是通过编码准则来学习的。它的主要思想是一个节点的向量可以通过一个单层神经网络由它的子节点向量的组合来表示。上述公式通过最小化节点向量与子节点向量之间的欧氏距离,更新网络参数。
相似的符号具有相似的特征向量。例如,While和For符号是相似的,因为它们都与控制流相关,特别是循环。但是它们与ID不同,因为ID可能会代表一些数据。本发明希望子节点表示通过单个卷积层编码它们的父节点,在此期间向量表示和编码权重都被学习。
因为不同的节点可能有不同数量的子节点,所以Wi的数量不是固定的。为了克服这个问题,本发明引入了连续二叉树,其中只有两个权重矩阵Wl和Wr作为模型参数。任何权值Wi都是这两个参数矩阵的线性组合。简言之,不管子树有多少,本发明都把它当做二叉树。
进一步地,如图3所示,所述S31对每个代码片段进行单视图构建,得到每个代码片段的抽象语法树、控制流程图和API依赖图;其中,得到每个代码片段的控制流程图,具体包括:
使用开源工具control-flow来解析代码生成控制流程图;
使用word embedding词嵌入编码方式,对控制流程图CFG的节点指令进行编码,最终得到每个节点的初始化嵌入矩阵。
CFG是一个有向图。一个CFG,G表示为G=(B,E'),B为块集{b1,b2,......,bn},bn表示代码的一个基本块,E'有向边{(bi,bj),(bk,bl),......},(bk,bl)表示代码的控制流路径。
每个基本块包含一个代码指令序列,有一个入口节点指令(执行的第一条指令)和一个出口节点指令(执行的最后一条指令)。
进一步地,如图4所示,所述S31对每个代码片段进行单视图构建,得到每个代码片段的抽象语法树、控制流程图和API依赖图;其中,得到每个代码片段的API依赖图,具体包括:
将API依赖图定义为:
Figure BDA0003027077030000101
其中,M表示API依赖图中节点的集合,也表示目标程序中函数的集合;
E表示API依赖图中边的集合,定义的该API依赖图为有向无环图;
mk表示API依赖图中的节点,也表示目标程序中的函数;mi和mj代表两个函数;
ek表示API依赖图中的边;
Figure BDA0003027077030000102
表示用于每一条边的标签,也表示目标程序库中的输入输出参数。
在API依赖图中,每个节点mk存在多个输入参数I,代表调用函数的前提条件,并且只存在一个输出参数o,对应目标程序中,只有函数mk多个输入参数全部满足,才能够调用该函数。
利用Javaassist和Spoon工具,在代码片段中解析出的API依赖图进行向量建模,得到每个节点的初始化嵌入矩阵。
进一步地,所述S32:对每个代码片段的抽象语法树进行图嵌入,得到每个代码片段的抽象语法树特征向量;具体包括:
采用图卷积神经网络(Graph Convolutional Network,GCN),对每个代码片段的抽象语法树进行图嵌入,将节点特征向量组成的矩阵X(N*D维),以及节点的指向关系组成的矩阵A(N*N维),作为图卷积神经网络的输入;得到每个代码片段的抽象语法树特征向量。
示例性的,所述S32:对每个代码片段的抽象语法树进行图嵌入,得到每个代码片段的抽象语法树特征向量;具体包括:
利用公式进行层与层之间的信息传播:
Figure BDA0003027077030000111
Figure BDA0003027077030000112
表示邻接矩阵A与单位矩阵I之和,引入自身节点,即:
Figure BDA0003027077030000113
Figure BDA0003027077030000114
Figure BDA0003027077030000115
的度矩阵,H为每层特征,对于输入层,H为X;σ为非线性激活函数,H(0)是初始向量表示,W(l)是第l层图卷积网络层的权重参数。
构造两层GCN,激活函数分别用ReLU和Softmax,则整体的正向传播公式为:
Figure BDA0003027077030000116
进一步地,所述S32:对每个代码片段的控制流程图进行图嵌入,得到每个代码片段的控制流程图特征向量;具体包括:
采用图卷积神经网络(Graph Convolutional Network,GCN),对每个代码片段的控制流程图进行图嵌入,得到每个代码片段的控制流程图特征向量。
采用与AST图嵌入相同的方法,利用GCN网络提取特征,具体步骤不再赘述。
进一步地,所述S32:对每个代码片段的API依赖图进行图嵌入,得到每个代码片段的API依赖图特征向量;具体包括:
利用GraphSAGE算法,对每个代码片段的API依赖图进行图嵌入,得到每个代码片段的API依赖图特征向量。
示例性的,所述S32:对每个代码片段的API依赖图进行图嵌入,得到每个代码片段的API依赖图特征向量;具体包括:
利用GraphSAGE算法通过聚合函数为每个节点训练一个单独的嵌入向量,融合其邻居节点的信息;
S321:对于图G=(M,E),图上的每个结点v,设置它的初始词嵌入向量hv为它的输入特征xv
对邻居节点进行采样得到采样集,每个采样集中包含计算某一节点v的嵌入向量所需的邻居节点;
S322:进行K次迭代,在每次迭代中,对每个结点v,聚合它的邻居结点(采样后)的在上一轮迭代中生成的结点表示
Figure BDA0003027077030000121
生成当前结点的邻居结点表示
Figure BDA0003027077030000122
之后连接
Figure BDA0003027077030000123
输入一个前馈神经网络得到结点的当前表示
Figure BDA0003027077030000124
聚合函数:
Figure BDA0003027077030000125
其中,W为可学习的权重矩阵,MEAN将向量拼接之后,对向量的每个维度进行求均值的操作,σ为非线性激活函数;
S323:得到每个节点的表示
Figure BDA0003027077030000126
进一步地,所述S33:将每个代码片段的控制流程图特征向量,均匹配到对应代码片段的抽象语法树的节点上;具体包括:
S33a1:遍历象语法树,采用字符串匹配的方法在象语法树上找到“BlockStmt”节点,判断其父节点是否为“Method Declaration”;
S33a2:若是,则匹配失败继续遍历;
S33a3:否则,将控制流程图特征向量匹配到对应代码片段的抽象语法树的节点上;控制流程图的“BlockStmt”节点的父节点以及子节点,指向关系为父节点指向子节点;
S33a4:一直循环遍历,直到全部查找成功为止。
进一步地,所述S33:将每个代码片段的API依赖图特征向量,均匹配到对应代码片段的抽象语法树AST的节点上;具体包括:
S33b1:遍历抽象语法树进行字符串匹配,首先,匹配节点“Method Call Expr”,其子树包含所要查找的函数调用以及参数;
如果匹配失败,则继续遍历;
如果匹配成功,则遍历其子树,分别匹配代码段中的函数调用以及参数;
S33b2:如果代码段中的函数调用以及参数匹配失败,则继续遍历;
如果代码段中的函数调用以及参数匹配成功后,则对所匹配到的函数、参数进行拼接,得到API依赖图信息;
S33b3:一直遍历,直到全部匹配为止。
进一步地,所述S34:将匹配成功的抽象语法树特征向量、控制流程图特征向量和API依赖图特征向量进行融合,得到当前代码片段对应的融合向量;具体包括:
将匹配成功的抽象语法树特征向量、控制流程图特征向量和API依赖图特征向量利用CONCAT连接函数进行融合,得到当前代码片段对应的融合向量。
本发明是将AST、CFG、ADG向量表示建模之后,再分别对其进行图嵌入提取特征,使节点都表示为向量;本发明将CFG和ADG所蕴含的信息,分别映射到生成的AST树上,这样在匹配到的AST树节点中,同时包含程序的语法、语义以及函数参数调用的信息;
对CFG和ADG成功匹配到AST树上的节点,提取各自的嵌入向量,将提取到的嵌入向量利用最大池化算法固维。最后,可利用CONCAT连接函数分别对应嵌入向量融合,这样可将三类结构特征融合到一起,最终融合的嵌入向量蕴含三者的结构特征。
实施例二
本实施例提供了基于多视图代码特征的细粒度代码自动生成系统;
基于多视图代码特征的细粒度代码自动生成系统,包括:
获取模块,其被配置为:获取自然语言描述;
编码模块,其被配置为:将自然语言描述输入到训练后的编码器中,得到自然语言描述向量;
解码模块,其被配置为:将自然语言描述向量和代码字典对应的所有融合向量,均输入到训练后的解码器中,解码器输出对应的程序。
此处需要说明的是,上述获取模块、编码模块和解码模块对应于实施例一中的步骤S1至S3,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为系统的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
上述实施例中对各个实施例的描述各有侧重,某个实施例中没有详述的部分可以参见其他实施例的相关描述。
所提出的系统,可以通过其他的方式实现。例如以上所描述的系统实施例仅仅是示意性的,例如上述模块的划分,仅仅为一种逻辑功能划分,实际实现时,可以有另外的划分方式,例如多个模块可以结合或者可以集成到另外一个系统,或一些特征可以忽略,或不执行。
实施例三
本实施例还提供了一种电子设备,包括:一个或多个处理器、一个或多个存储器、以及一个或多个计算机程序;其中,处理器与存储器连接,上述一个或多个计算机程序被存储在存储器中,当电子设备运行时,该处理器执行该存储器存储的一个或多个计算机程序,以使电子设备执行上述实施例一所述的方法。
应理解,本实施例中,处理器可以是中央处理单元CPU,处理器还可以是其他通用处理器、数字信号处理器DSP、专用集成电路ASIC,现成可编程门阵列FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据、存储器的一部分还可以包括非易失性随机存储器。例如,存储器还可以存储设备类型的信息。
在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。
实施例一中的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器、闪存、只读存储器、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
本领域普通技术人员可以意识到,结合本实施例描述的各示例的单元及算法步骤,能够以电子硬件或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
实施例四
本实施例还提供了一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成实施例一所述的方法。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.基于多视图代码特征的细粒度代码自动生成方法,其特征是,包括:
获取自然语言描述;
将自然语言描述输入到训练后的编码器中,得到自然语言描述向量;
将自然语言描述向量和代码字典对应的所有融合向量,均输入到训练后的解码器中,解码器输出对应的代码。
2.如权利要求1所述的基于多视图代码特征的细粒度代码自动生成方法,其特征是,所述代码字典,获取步骤包括:
(1):获取若干个已知的代码片段;
(2):对每个代码片段进行单视图构建,得到每个代码片段的抽象语法树、控制流程图和API依赖图;
(3):对每个代码片段的抽象语法树、控制流程图和API依赖图,分别进行图嵌入,得到每个代码片段的抽象语法树特征向量、控制流程图特征向量和API依赖图特征向量;
(4):将每个代码片段的控制流程图特征向量和API依赖图特征向量,均匹配到对应代码片段的抽象语法树的节点上;
(5):将匹配成功的抽象语法树特征向量、控制流程图特征向量和API依赖图特征向量进行融合,得到当前代码片段对应的融合向量;
(6):重复步骤(2)~(5);得到代码片段与融合向量一一对应的代码字典。
3.如权利要求2所述的基于多视图代码特征的细粒度代码自动生成方法,其特征是,对每个代码片段的抽象语法树进行图嵌入,得到每个代码片段的抽象语法树特征向量;具体包括:
采用图卷积神经网络,对每个代码片段的抽象语法树进行图嵌入,将节点特征向量组成的矩阵X,以及节点的指向关系组成的矩阵A,作为图卷积神经网络的输入;得到每个代码片段的抽象语法树特征向量。
4.如权利要求2所述的基于多视图代码特征的细粒度代码自动生成方法,其特征是,将每个代码片段的控制流程图特征向量,均匹配到对应代码片段的抽象语法树的节点上;具体包括:
a1:遍历象语法树,采用字符串匹配的方法在象语法树上找到“BlockStmt”节点,判断其父节点是否为“Method Declaration”;
a2:若是,则匹配失败继续遍历;
a3:否则,将控制流程图特征向量匹配到对应代码片段的抽象语法树的节点上;控制流程图的“BlockStmt”节点的父节点以及子节点,指向关系为父节点指向子节点;
a4:一直循环遍历,直到全部查找成功为止。
5.如权利要求2所述的基于多视图代码特征的细粒度代码自动生成方法,其特征是,将每个代码片段的API依赖图特征向量,均匹配到对应代码片段的抽象语法树AST的节点上;具体包括:
b1:遍历抽象语法树进行字符串匹配,首先,匹配节点“Method Call Expr”,其子树包含所要查找的函数调用以及参数;
如果匹配失败,则继续遍历;
如果匹配成功,则遍历其子树,分别匹配代码段中的函数调用以及参数;
b2:如果代码段中的函数调用以及参数匹配失败,则继续遍历;
如果代码段中的函数调用以及参数匹配成功后,则对所匹配到的函数、参数进行拼接,得到API依赖图信息;
b3:一直遍历,直到全部匹配为止。
6.如权利要求2所述的基于多视图代码特征的细粒度代码自动生成方法,其特征是,将匹配成功的抽象语法树特征向量、控制流程图特征向量和API依赖图特征向量进行融合,得到当前代码片段对应的融合向量;具体包括:
将匹配成功的抽象语法树特征向量、控制流程图特征向量和API依赖图特征向量利用CONCAT连接函数进行融合,得到当前代码片段对应的融合向量。
7.如权利要求2所述的基于多视图代码特征的细粒度代码自动生成方法,其特征是,对每个代码片段进行单视图构建,得到每个代码片段的抽象语法树、控制流程图和API依赖图;其中,得到每个代码片段的抽象语法树之后,还将抽象语法树中的每个节点映射到实值向量。
8.基于多视图代码特征的细粒度代码自动生成系统,其特征是,包括:
获取模块,其被配置为:获取自然语言描述;
编码模块,其被配置为:将自然语言描述输入到训练后的编码器中,得到自然语言描述向量;
解码模块,其被配置为:将自然语言描述向量和代码字典对应的所有融合向量,均输入到训练后的解码器中,解码器输出对应的程序。
9.一种电子设备,其特征是,包括:一个或多个处理器、一个或多个存储器、以及一个或多个计算机程序;其中,处理器与存储器连接,上述一个或多个计算机程序被存储在存储器中,当电子设备运行时,该处理器执行该存储器存储的一个或多个计算机程序,以使电子设备执行上述权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其特征是,用于存储计算机指令,所述计算机指令被处理器执行时,完成权利要求1-7任一项所述的方法。
CN202110418985.XA 2021-04-19 2021-04-19 基于多视图代码特征的细粒度代码自动生成方法及系统 Active CN113342318B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110418985.XA CN113342318B (zh) 2021-04-19 2021-04-19 基于多视图代码特征的细粒度代码自动生成方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110418985.XA CN113342318B (zh) 2021-04-19 2021-04-19 基于多视图代码特征的细粒度代码自动生成方法及系统

Publications (2)

Publication Number Publication Date
CN113342318A true CN113342318A (zh) 2021-09-03
CN113342318B CN113342318B (zh) 2022-06-10

Family

ID=77468129

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110418985.XA Active CN113342318B (zh) 2021-04-19 2021-04-19 基于多视图代码特征的细粒度代码自动生成方法及系统

Country Status (1)

Country Link
CN (1) CN113342318B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115017294A (zh) * 2022-05-31 2022-09-06 武汉大学 代码搜索方法
CN115221061A (zh) * 2022-07-22 2022-10-21 中国电信股份有限公司 测试代码生成方法、装置、存储介质及电子设备
CN115577075A (zh) * 2022-10-18 2023-01-06 华中师范大学 一种基于关系图卷积网络的深度代码搜索方法
CN116578288A (zh) * 2023-05-30 2023-08-11 杭州行至云起科技有限公司 基于逻辑判断的结构化自定义灯效配置方法及其系统
CN116909574A (zh) * 2023-09-08 2023-10-20 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) 一种检索增强的结构化代码生成系统及方法
CN117539452A (zh) * 2024-01-10 2024-02-09 天翼电子商务有限公司 人脸识别方法和装置及电子设备
CN118132141A (zh) * 2024-05-06 2024-06-04 西安电子科技大学 基于代码特性图的函数自动重构方法及装置、电子设备

Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150135166A1 (en) * 2013-11-12 2015-05-14 Microsoft Corporation Source code generation, completion, checking, correction
CN109739483A (zh) * 2018-12-28 2019-05-10 北京百度网讯科技有限公司 用于生成语句的方法和装置
US20190179896A1 (en) * 2017-12-11 2019-06-13 Abbyy Development Llc Using autoencoders for training natural language text classifiers
CN110011986A (zh) * 2019-03-20 2019-07-12 中山大学 一种基于深度学习的源代码漏洞检测方法
CN110018820A (zh) * 2019-04-08 2019-07-16 浙江大学滨海产业技术研究院 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法
CN110489110A (zh) * 2019-08-20 2019-11-22 腾讯科技(深圳)有限公司 一种基于深度学习的代码生成方法及装置
CN110673840A (zh) * 2019-09-23 2020-01-10 山东师范大学 一种基于标签图嵌入技术的自动代码生成方法及系统
CN111258566A (zh) * 2020-02-16 2020-06-09 彭熹 一种从自然语言中提取逻辑流程生成代码的方法和系统
CN111625276A (zh) * 2020-05-09 2020-09-04 山东师范大学 基于语义与语法信息融合的代码摘要生成方法及系统
US20200293617A1 (en) * 2019-03-14 2020-09-17 International Business Machines Corporation Predictive natural language rule generation
US20200349052A1 (en) * 2019-05-03 2020-11-05 International Business Machines Corporation Representing source code in vector space to detect errors
US20210011694A1 (en) * 2019-07-09 2021-01-14 X Development Llc Translating between programming languages using machine learning
CN112306497A (zh) * 2020-11-03 2021-02-02 高炼 一种将自然语言转化为程序代码的方法及系统
CN112364352A (zh) * 2020-10-21 2021-02-12 扬州大学 可解释性的软件漏洞检测与推荐方法及系统
US20210056211A1 (en) * 2019-08-23 2021-02-25 Praetorian System and method for automatically detecting a security vulnerability in a source code using a machine learning model

Patent Citations (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150135166A1 (en) * 2013-11-12 2015-05-14 Microsoft Corporation Source code generation, completion, checking, correction
US20190179896A1 (en) * 2017-12-11 2019-06-13 Abbyy Development Llc Using autoencoders for training natural language text classifiers
CN109739483A (zh) * 2018-12-28 2019-05-10 北京百度网讯科技有限公司 用于生成语句的方法和装置
US20200293617A1 (en) * 2019-03-14 2020-09-17 International Business Machines Corporation Predictive natural language rule generation
CN110011986A (zh) * 2019-03-20 2019-07-12 中山大学 一种基于深度学习的源代码漏洞检测方法
CN110018820A (zh) * 2019-04-08 2019-07-16 浙江大学滨海产业技术研究院 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法
US20200349052A1 (en) * 2019-05-03 2020-11-05 International Business Machines Corporation Representing source code in vector space to detect errors
US20210011694A1 (en) * 2019-07-09 2021-01-14 X Development Llc Translating between programming languages using machine learning
CN110489110A (zh) * 2019-08-20 2019-11-22 腾讯科技(深圳)有限公司 一种基于深度学习的代码生成方法及装置
US20210056211A1 (en) * 2019-08-23 2021-02-25 Praetorian System and method for automatically detecting a security vulnerability in a source code using a machine learning model
CN110673840A (zh) * 2019-09-23 2020-01-10 山东师范大学 一种基于标签图嵌入技术的自动代码生成方法及系统
CN111258566A (zh) * 2020-02-16 2020-06-09 彭熹 一种从自然语言中提取逻辑流程生成代码的方法和系统
CN111625276A (zh) * 2020-05-09 2020-09-04 山东师范大学 基于语义与语法信息融合的代码摘要生成方法及系统
CN112364352A (zh) * 2020-10-21 2021-02-12 扬州大学 可解释性的软件漏洞检测与推荐方法及系统
CN112306497A (zh) * 2020-11-03 2021-02-02 高炼 一种将自然语言转化为程序代码的方法及系统

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
ANH TUAN NGUYEN: "Graph-based Statistical Language Model for Code", <2015 IEEE/ACM 37TH IEEE INTERNATIONAL CONFERENCE ON SOFTWARE ENGINEERING> *
李振: "代码自动生成及代码上下文分析研究综述", 《技术交流》 *
邹悦等: "面向高级别代码克隆检测方法的设计与实现", 《计算机工程与科学》 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115017294A (zh) * 2022-05-31 2022-09-06 武汉大学 代码搜索方法
CN115221061A (zh) * 2022-07-22 2022-10-21 中国电信股份有限公司 测试代码生成方法、装置、存储介质及电子设备
CN115221061B (zh) * 2022-07-22 2024-03-22 中国电信股份有限公司 测试代码生成方法、装置、存储介质及电子设备
CN115577075A (zh) * 2022-10-18 2023-01-06 华中师范大学 一种基于关系图卷积网络的深度代码搜索方法
CN115577075B (zh) * 2022-10-18 2024-03-12 华中师范大学 一种基于关系图卷积网络的深度代码搜索方法
CN116578288A (zh) * 2023-05-30 2023-08-11 杭州行至云起科技有限公司 基于逻辑判断的结构化自定义灯效配置方法及其系统
CN116578288B (zh) * 2023-05-30 2023-11-28 杭州行至云起科技有限公司 基于逻辑判断的结构化自定义灯效配置方法及其系统
CN116909574A (zh) * 2023-09-08 2023-10-20 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) 一种检索增强的结构化代码生成系统及方法
CN117539452A (zh) * 2024-01-10 2024-02-09 天翼电子商务有限公司 人脸识别方法和装置及电子设备
CN117539452B (zh) * 2024-01-10 2024-04-30 天翼电子商务有限公司 人脸识别方法和装置及电子设备
CN118132141A (zh) * 2024-05-06 2024-06-04 西安电子科技大学 基于代码特性图的函数自动重构方法及装置、电子设备

Also Published As

Publication number Publication date
CN113342318B (zh) 2022-06-10

Similar Documents

Publication Publication Date Title
CN113342318B (zh) 基于多视图代码特征的细粒度代码自动生成方法及系统
CN110018820B (zh) 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法
Cummins et al. End-to-end deep learning of optimization heuristics
Bunel et al. Leveraging grammar and reinforcement learning for neural program synthesis
CN112733137B (zh) 一种面向漏洞检测的二进制代码相似性分析方法
Shin et al. Improving neural program synthesis with inferred execution traces
CN112132179A (zh) 基于少量标注样本的增量学习方法及系统
CN107506414A (zh) 一种基于长短期记忆网络的代码推荐方法
US11353833B2 (en) Systems and methods for learning and predicting time-series data using deep multiplicative networks
CN111913702B (zh) 一种基于图神经网络的软件系统中关键类的识别方法
CN110673840A (zh) 一种基于标签图嵌入技术的自动代码生成方法及系统
CN113064586B (zh) 一种基于抽象语法树增广图模型的代码补全方法
CN109299479A (zh) 通过门控机制将翻译记忆融入神经机器翻译的方法
CN113722218B (zh) 一种基于编译器中间表示的软件缺陷预测模型构建方法
CN110807335A (zh) 基于机器学习的翻译方法、装置、设备及存储介质
CN113641819A (zh) 基于多任务稀疏共享学习的论辩挖掘系统及方法
CN112764738A (zh) 基于多视图程序特征的代码自动生成方法及系统
CN108388561A (zh) 神经网络机器翻译方法和装置
CN113157917B (zh) 基于OpenCL的优化分类模型的建立、优化分类方法及系统
CN114489669A (zh) 一种基于图学习的Python语言代码片段生成方法
CN116661852B (zh) 一种基于程序依赖图的代码搜索方法
CN113238798A (zh) 代码摘要生成方法、系统、设备及存储介质
CN113986251A (zh) 基于卷积和循环神经网络的gui原型图转代码方法
Bai et al. Gtco: Graph and tensor co-design for transformer-based image recognition on tensor cores
CN115270795A (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: 20231222

Address after: Room 0602, Unit 1, Building 2, No. 228 Changzhi Road, Xiaodian District, Taiyuan City, Shanxi Province, 030000

Patentee after: Chen Xiaolang

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

Patentee before: SHANDONG NORMAL University