CN110673840A - 一种基于标签图嵌入技术的自动代码生成方法及*** - Google Patents

一种基于标签图嵌入技术的自动代码生成方法及*** Download PDF

Info

Publication number
CN110673840A
CN110673840A CN201910898025.0A CN201910898025A CN110673840A CN 110673840 A CN110673840 A CN 110673840A CN 201910898025 A CN201910898025 A CN 201910898025A CN 110673840 A CN110673840 A CN 110673840A
Authority
CN
China
Prior art keywords
sequence
natural language
nodes
dimensional
language description
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
CN201910898025.0A
Other languages
English (en)
Other versions
CN110673840B (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.)
Shenzhen Datong Information 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 CN201910898025.0A priority Critical patent/CN110673840B/zh
Publication of CN110673840A publication Critical patent/CN110673840A/zh
Application granted granted Critical
Publication of CN110673840B publication Critical patent/CN110673840B/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Machine Translation (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本公开提供了一种基于标签图嵌入技术的自动代码生成方法及***,读取自然语言描述并将其转化为对应语句的二维one‑hot向量序列,读取目标代码中的方法调用序列并将方法转化为初始化的二维one‑hot向量序列,对提取出的方法调用序列进行标签图建模,并合并标签图中邻居节点的同类节点,再利用标签图嵌入方法将合并节点后的图模型中的节点信息转化为代码片段的二维图嵌入向量序列;对上述二维向量序列进行训练得到自然语言描述与目标代码相对应的神经网络参数,得到训练好的序列到序列神经网络模型;根据序列到序列神经网络模型,基于自然语言描述的特征值并进行解码,生成对应目标代码;通过将自然语言描述与目标代码转换为对应的向量序列,并通过深度学习技术训练出一个序列到序列的模型,能够将给定的自然语言描述自动转化为目标代码,从而减轻了程序人员的工作负担并提高软件的开发效率。

Description

一种基于标签图嵌入技术的自动代码生成方法及***
技术领域
本公开涉及软件开发与自动化维护技术领域,特别涉及一种基于标签图嵌入技术的自动代码生成方法及***。
背景技术
本部分的陈述仅仅是提供了与本公开相关的背景技术,并不必然构成现有技术。
伴随着互联网的发展,特别是移动互联网的大规模普及,程序人员面临越来越多的软件需求。
本公开发明人发现:(1)由于自然语言描述的不同,程序人员在面对相同的软件需求时,往往会书写大量重复的代码,不仅会对程序人员带来繁重的工作量,而且难以提高效率;(2)现存的自动代码生成的方法往往是针对一项特定的任务或需求,这样的方法难以处理程序语言的灵活性以及随机性。
发明内容
为了解决现有技术的不足,本公开提供了一种基于标签图嵌入技术的自动代码生成方法及***,通过将自然语言描述与目标代码转换为对应的向量序列,并通过深度学习技术训练出一个序列到序列的模型,能够将给定的自然语言描述自动转化为目标代码,从而减轻程序人员的工作负担并提高软件的开发效率。
为了实现上述目的,本公开采用如下技术方案:
第一方面,本公开提供了一种基于标签图嵌入技术的自动代码生成方法,步骤如下:
读取自然语言描述并将其转化为对应语句的二维one-hot向量序列,读取目标代码中的方法调用序列并将方法转化为初始化的二维one-hot向量序列;
对提取出的方法调用序列进行标签图建模,并合并标签图中邻居节点的同类节点,再利用标签图嵌入方法将合并后图模型中的节点信息转化为代码片段的二维图嵌入向量序列;
对自然语言描述的二维one-hot向量序列和目标代码的二维图嵌入向量序列进行训练得到自然语言描述与目标代码相对应的神经网络参数,构建序列到序列神经网络模型;
根据序列到序列神经网络模型,基于自然语言描述的特征值并进行解码,生成对应目标代码。
作为可能的一些实现方式,利用one-hot编码对自然语言描述所形成的语料库进行处理,将语料库所属的每一个词汇映射为一个一维one-hot向量后,对当前读取的自然语言描述片段中包含的词汇向量序列进行合并得到当前读取自然语言描述语句的二维one-hot向量序列。
作为可能的一些实现方式,利用one-hot编码对目标代码中提取出的方法调用序列进行初始化,对方法调用序列所形成的语料库进行编码,将语料库所属的每个方法名称映射为一个一维one-hot向量,合并得到初始化后所有节点对应的二维one-hot向量序列。
作为可能的一些实现方式,所述标签图建模的方法具体为:利用程序依赖分析工具提取目标代码的方法依赖关系,根据方法之间的输入输出关系构造标签图,并将标签图存放在邻接矩阵中。
作为可能的一些实现方式,所述标签图嵌入方法具体为:当目标代码转化为标签图后,根据节点的调用关系,将节点的后向节点按照相同的标签进行分组,分组完成后,按照组别对该节点的后向节点进行均值聚合,得到虚拟节点,根据合并节点后的图模型中节点调用关系产生的时序序列,对节点特征进行融合,将融合邻居节点特征后的每个节点映射到一个一维图嵌入向量,对当前读取的自然语言描述片段对应的目标代码片段包含的节点向量序列进行合并得到当前对应目标代码片段的二维图嵌入向量序列。
作为可能的一些实现方式,所述序列到序列神经网络模型包括编码器、基于标签图嵌入方法的解码器和注意力机制模型,所述编码器利用长短时记忆网络进行自然语言描述特征的训练;所述基于标签图嵌入方法的解码器利用长短时记忆网络对标签图嵌入方法生成的代码片段的节点向量特征进行训练;所述注意力机制模型利用匹配函数与正切变化计算自然语言描述特征与目标代码特征之间对应的权重值。
第二方面,本公开提供了一种基于标签图嵌入技术的自动代码生成***,包括:
预处理模块,被配置为:读取自然语言描述并将其转化为对应语句的二维one-hot向量序列,读取目标代码并对目标代码中的方法调用序列进行提取,将提取出方法调用序列中的方法初始化为二维one-hot向量序列;
模型构建模块,被配置为:对目标代码中提取出的方法调用序列进行标签图建模,并对该标签图中邻居节点的同类节点进行合并,将标签图嵌入方法应用于合并节点后的图模型,得到代码片段对应的二维图嵌入向量序列;对得到的自然语言描述和目标代码的二维向量序列进行训练得到自然语言描述与目标代码相对应的神经网络参数,得到训练好的序列到序列神经网络模型;
预测模块,被配置为:根据序列到序列神经网络模型,基于自然语言描述的特征值并进行解码,生成对应目标代码。
作为可能的一些实现方式,所述预处理模块利用one-hot编码对自然语言描述所形成的语料库进行处理,将语料库所属的每一个词汇映射为一个一维one-hot向量后,对当前读取的自然语言描述片段中包含的词汇向量序列进行合并得到当前读取自然语言描述语句的二维one-hot向量序列。。
作为可能的一些实现方式,所述预处理模块利用one-hot编码对目标代码中提取出的方法调用序列进行初始化,对方法调用序列所形成的语料库进行编码,将语料库所属的每个方法名称映射为一个一维one-hot向量,合并得到初始化后所有节点对应的二维one-hot向量序列。
作为可能的一些实现方式,所述标签图建模的方法具体为:利用程序依赖分析工具提取目标代码的方法依赖关系,根据方法之间的输入输出关系构造标签图,并将标签图存放在邻接矩阵中。
作为可能的一些实现方式,所述标签图嵌入方法具体为:当目标代码转化为标签图后,根据节点的调用关系,将节点的后向节点按照相同的标签进行分组,分组完成后,按照组别对该节点的后向节点进行均值聚合,得到虚拟节点,根据合并节点后的图模型中节点调用关系产生的时序序列,对节点特征进行融合,将融合邻居节点特征后的每个节点映射到一个一维图嵌入向量,对当前读取的自然语言描述片段对应的目标代码片段包含的节点向量序列进行合并得到当前对应目标代码片段的二维图嵌入向量序列。
作为可能的一些实现方式,所述序列到序列神经网络模型包括编码器、基于标签图嵌入方法的解码器和注意力机制模型,所述编码器利用长短时记忆网络进行自然语言描述特征的训练;所述基于标签图嵌入方法的解码器利用长短时记忆网络对标签图嵌入方法生成的代码片段的节点向量特征进行训练;所述注意力机制模型利用匹配函数与正切变化计算自然语言描述特征与目标代码特征之间对应的权重值。
第三方面,本公开提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开所述的基于标签图嵌入技术的自动代码生成方法中的步骤。
第四方面,本公开提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现本公开所述的基于标签图嵌入技术的自动代码生成方法中的步骤。
与现有技术相比,本公开的有益效果是:
1、本公开改善了前人使用抽象语法树(Abstract Syntax Tree,AST)对于程序结构表达不足的问题,将目标程序代码库进行图建模,可以捕捉完整的程序结构以及目标代码所含方法在整个类库中的调用依赖关系,促进了模型对程序全局结构的表达能力。
2、本公开首次将标签图嵌入技术应用于代码生成领域,考虑了构建的标签图中节点的特殊可达性以及程序代码中方法调用的时序信息,弥补了传统的图嵌入技术只能无差别聚合邻居节点特征信息的缺陷。
3、本公开利用注意力机制模型,根据当前的目标代码序列对自然语言描述特征进行权重值的计算,强调对于当前影响最大的部分,改善了目前基于序列到序列神经网络的自动代码生成方法中只能依赖内部固定长度的限制,大大提高了开发效率。
4、通过将自然语言描述与目标代码转换为对应的向量序列,并通过深度学习技术训练出一个序列到序列的模型,可以将给定的自然语言描述自动转化为目标代码,从而减轻程序人员的工作负担并提高软件的开发效率。
附图说明
图1为本公开实施例1所述的基于标签图嵌入技术的自动代码生成方法流程示意图。
图2为本公开实施例1所述的图建模示意图。
图3为本公开实施例1所述的用于提取标签图节点特征信息的标签图嵌入技术示意图。
图4为本公开实施例1所述的用于特征学习的序列到序列神经网络示意图。
图5为本公开实施例1所述的长短期记忆网络结构图,包括输入门、遗忘门和输出门三个输入部分。
图6为本公开实施例1所述的用于语义相似度计算的注意力机制模型示意图。
具体实施方式
应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
实施例1:
如图1所示,本公开实施例1提供了一种基于标签图嵌入技术的自动代码生成方法,步骤如下:
读取自然语言描述并将其转化为对应语句的二维one-hot向量序列,读取目标代码中的方法调用序列并将方法转化为初始化的二维one-hot向量序列;
对提取出的方法调用序列进行标签图建模,并合并标签图中邻居节点的同类节点,再利用标签图嵌入方法将合并后图模型中的节点信息转化为代码片段的二维图嵌入向量序列;
对自然语言描述的二维one-hot向量序列和目标代码的二维图嵌入向量序列进行训练得到自然语言描述与目标代码相对应的神经网络参数,构建序列到序列神经网络模型;
根据序列到序列神经网络模型,基于自然语言描述的特征值并进行解码,生成对应目标代码。
利用one-hot编码对自然语言描述所形成的语料库进行处理,将语料库所属的每一个词汇映射为一个一维one-hot向量后,对当前读取的自然语言描述片段中包含的词汇向量序列进行合并得到当前读取自然语言描述语句的二维one-hot向量序列。
利用one-hot编码对目标代码中提取出的方法调用序列进行初始化,对方法调用序列所形成的语料库进行编码,将语料库所属的每个方法名称映射为一个一维one-hot向量,合并得到初始化后所有节点对应的二维one-hot向量序列。
所述标签图建模的方法具体为:利用程序依赖分析工具提取目标代码的方法依赖关系,根据方法之间的输入输出关系构造标签图,并将标签图存放在邻接矩阵中。
所述标签图嵌入方法具体为:当目标代码转化为标签图后,根据节点的调用关系,将节点的后向节点按照相同的标签进行分组,分组完成后,按照组别对该节点的后向节点进行均值聚合,得到虚拟节点,根据合并节点后的图模型中节点调用关系产生的时序序列,对节点特征进行融合,将融合邻居节点特征后的每个节点映射到一个一维图嵌入向量,对当前读取的自然语言描述片段对应的目标代码片段包含的节点向量序列进行合并得到当前对应目标代码片段的二维图嵌入向量序列。
所述序列到序列神经网络模型包括编码器、基于标签图嵌入方法的解码器和注意力机制模型,所述编码器利用长短时记忆网络进行自然语言描述特征的训练;所述基于标签图嵌入方法的解码器利用长短时记忆网络对标签图嵌入方法生成的代码片段的节点向量特征进行训练;所述注意力机制模型利用匹配函数与正切变化计算自然语言描述特征与目标代码特征之间对应的权重值,权重值代表注意力机制模型分配给不同自然语言描述特征的注意力大小的概率分布,具体为:目标代码中的每个方法名都对应一个或几个对其影响力最大的自然语言描述特征,代表每个自然语言描述特征对当前所对应目标代码中方法名的贡献是不同的,体现出自然语言描述特征对于生成当前目标代码不同的影响程度。
所述的目标代码为开源在GitHub上的程序代码片段或程序代码库。
本实施例针对的目标代码为Java语言和Python语言。
将自然语言描述和目标代码分别转化成为二维向量序列,自然语言描述的预处理过程具体为:为自然语言描述进行one-hot编码,将自然语言描述中的全部词汇使用二进制向量来表示,向量维度为全部词汇数,其中第i个词汇的表示方法为,第i索引被标记为值1,其他索引被标记为值0,即{0,...,0,1,0,...,0},将当前输入的自然语言描述语句中所对应的词汇的向量序列进行合并,组成代表当前自然语言描述语句的二维one-hot向量序列,即{{1,0,...,0,0,...,0},...,{0,...,0,0,...,0,1}};目标代码的初始化具体过程同样对目标代码提取出的方法调用序列进行one-hot编码,将方法调用序列中的全部方法名使用二进制向量来表示,向量维度为全部方法名数,其中第i个方法名的表示方法为,第i索引被标记为值1,其他索引被标记为值0,即{0,...,0,1,0,...,0},将当前读取的自然语言描述片段对应的目标代码片段包含的节点向量序列进行合并得到当前对应目标代码片段的初始化二维one-hot向量序列,即{{1,0,...,0,0,...,0},...,{0,...,0,0,...,0,1}}。
所述的图建模过程如图2所示,将标签图定义为:
Figure BDA0002210908040000061
其中M表示标签图中节点的集合,也表示目标代码中方法的集合,E表示标签图中边的集合,定义的该标签图为有向无环图,mk表示标签图中的节点,也表示目标代码中的方法,ek表示标签图中的边,表示每一条边用于的标签,也表示目标代码库中的输入输出参数。在标签图中,每个节点mk存在多个输入参数I,代表多个前置条件,并且只存在一个输出参数o,对应目标代码中,只有方法mk多个输入参数全部满足,才可以调用该方法。
图建模的具体过程如下:
步骤(1):利用Javaassist和Spoon工具提取目标代码库中的方法mk和方法的输入输出参数类型以及输入输出参数。
步骤(2):根据方法的输入输出参数确定方法之间的调用关系,确定过程如下:
步骤(2-1):假设存在两个方法mi和mj,对应标签图中的两个节点,如果在这两个方法中存在调用关系,那么我们可以确定节点mi和mj之间存在边ei,j
步骤(2-2):为标签图中的每条边ek分配一个标签
Figure BDA0002210908040000063
例如,节点mi和mj之间存在边ei,j,那么我们可以确定在边ei,j上存在标签
Figure BDA0002210908040000077
步骤(2-3):如果两个方法之间存在这样的联系,调用方法mj的前提条件是获取方法mi的输出参数,那么可以得到节点mi和mj之间存在由mi指向mj的边ei,j
步骤(3):根据方法的调用关系,构造表示目标代码库的标签图,并将标签图存储在邻接矩阵中。
所述的标签图嵌入技术如图3所示,标签图嵌入技术的动机基于两方面:首先考虑标签图中每个节点的特殊可达性,如果节点的某一个前置条件没有满足,则无法调用该节点;其次是考虑节点调用之间的时序关系,根据时序关系构造时序序列。
针对标签图G=(M,E)的标签图嵌入技术如图3所示,具体过程包括:
步骤(1):对标签图G=(M,E)中的每个节点进行初始化,采用one-hot编码,节点初始化后的向量为xm,
Figure BDA0002210908040000071
并且定义权重参数Wk,
Figure BDA0002210908040000072
通过训练权重参数更新节点的特征值。
步骤(2):对k=1时节点m的后向节点进行分组,其中前向节点指m指向的节点,后向节点指指向m的节点,分组方式为:根据标签
Figure BDA0002210908040000073
进行分组,标签相同的节点分为一组,并对分组后的后向节点进行均值聚合,得到虚拟节点,并生成k=1时对应的合并节点后的图模型。如果节点m的前向节点存在标签相同的两个及两个以上节点,则同样划为一组,对该组节点也进行均值聚合,得到虚拟节点。
步骤(3):对节点m虚拟化后生成的合并节点后的图模型中的后向节点、前向节点以及当前节点m进行拓扑排序,构造有序集,有序集表示以节点m为例的时序序列。
步骤(4):通过长短时记忆网络聚合器对节点m生成的有序集中的时序序列进行聚合,融合节点m的时序关系,得到表示节点m特征的中间向量。利用全连接神经网络对中间向量进行训练并利用非线性函数σ进行激活,激活过程为
Figure BDA0002210908040000074
其中Wk表示第k次迭代时的权重参数,
Figure BDA0002210908040000075
表示通过长短时网络聚合器对节点m生成的有序集中的时序序列进行聚合之后得到的表示节点m特征的中间向量,通过该过程得到k=1时表示当前节点m的中间向量
Figure BDA0002210908040000076
用于输入到解码器中。之后更新k=2时节点m的前向节点和后向节点,重复步骤2,得到k=2时对应的合并节点后的图模型,用于下一次迭代使用。
步骤(5):对步骤(3)至步骤(4)循环k,
Figure BDA0002210908040000081
次,循环结束得到的向量表示节点m最终向量表示。
序列到序列神经网络模型的训练如图4所示,具体包括:
步骤(1):训练编码器,用于自然语言描述特征的训练,内容如下:
通过长短时记忆网络作为编码器进行自然语言描述特征的训练,如图5所示。
具体地,将输入的自然语言描述预处理为二维向量序列输入到1层长短时记忆网络中进行训练,最终得到的隐含层向量用于输入到下一步注意力机制模型和解码器进行训练。
这一过程可以被定义为:
Ht=LSTMenc(Xt,Ht-1) (2)
其中Xt表示自然语言描述特征向量,Ht-1为神经网络隐含层状态。
在长短时记忆网络中,当时间步为t时,遗忘门Ft、输入门It和和输出门Ot的计算公式为:
Ft=σ(XtWxf+Ht-1Whf+bf) (3)
It=σ(XtWxi+Ht-1Whi+bi) (4)
Ot=σ(XtWxo+Ht-1Who+bo) (5)
其中Wxi、Wxf、Wxo、Whi、Whf和Who分别为对应的权重参数,bi、bf和bo分别为对应的偏差,σ为激活函数,目的是为神经网络引入非线性因素。
步骤(2):训练基于标签图嵌入方法的解码器,实现从自然语言描述到目标代码的解码工作。与编码器相同,该部分同样使用1层长短时记忆网络来实现解码器的工作,内容如下:
步骤(2-1):通过编码器的长短时记忆网络训练得到自然语言描述的隐含层向量Ht,使用注意力机制模型给每个自然语言描述特征赋予一个权重Cit,如图6所示,权重Cit的计算公式为:
αit=Wtσ(WhHt-1+b) (6)
Figure BDA0002210908040000082
其中Wt和Wh表示权重,b表示偏差,Ht-1表示编码器中长短时记忆网络生成的隐含层向量。
步骤(2-2):第一轮训练,将初始化得到的目标代码特征和使用注意力模型得到的上下文权重向量进行拼接Y't=Yt⊕Cit输入到解码器的长短时记忆网络中进行训练,时间步t的遗忘门F't、输入门I't和和输出门O't的计算公式为:
F't=σ(Y'tW'xf+St-1W'hf+b'f) (8)
I't=σ(Y'tW'xi+St-1W'hi+b'o) (9)
O't=σ(Y'tW'xo+St-1W'ho+b'o) (10)
其中St-1表示基于标签图嵌入方法的解码器中长短时记忆网络生成的隐含层向量,得到表示目标代码中对应的节点向量的one-hot编码。
定义序列模型的损失函数为:
Figure BDA0002210908040000091
其中,yt表示t时刻输入真实特征值,Ht表示t时刻长短时记忆网络的预测值,采用交叉熵损失函数对序列模型中的神经网络参数以及标签图嵌入算法中的权重参数进行调整。
步骤(2-3):利用交叉熵损失函数计算第一轮训练得到的损失值,所有训练集重复步骤(2-2)的过程,计算所有数据的聚合损失值,利用该损失值进行梯度下降,同时调整序列模型以及标签图嵌入方法中的网络参数。
步骤(2-4):利用调整后的网络参数对标签图嵌入方法下的节点向量进行更新。
步骤(2-5):迭代执行步骤(2-2)至(2-4)直至计算出的损失值达到期望值,彼时完成整个训练过程。
将自然语言描述特征输入到编码器模块由长短时记忆网络进行特征提取,利用解码器的长短时记忆网络对目标代码的方法名进行预测,即可得到相应的目标代码。
实施例2:
本公开实施例2提供了一种基于标签图嵌入技术的自动代码生成***,包括:
预处理模块,被配置为:读取自然语言描述并将其转化为对应语句的二维one-hot向量序列,读取目标代码并对目标代码中的方法调用序列进行提取,将提取出方法调用序列中的方法初始化为二维one-hot向量序列;
模型构建模块,被配置为:对目标代码中提取出的方法调用序列进行标签图建模,生成标签图,并对该标签图中邻居节点的同类节点进行合并,将标签图嵌入方法应用于合并节点后的图模型,得到代码片段对应的二维图嵌入向量序列。对得到自然语言描述和目标代码的二维向量序列进行训练得到自然语言描述与目标代码相对应的神经网络参数,得到训练好的序列到序列神经网络模型;
预测模块,被配置为:根据序列到序列神经网络模型,基于自然语言描述的特征值并进行解码,生成对应目标代码。
所述预处理模块利用one-hot编码对自然语言描述所形成的语料库进行处理,将语料库所属的每一个词汇映射为一个一维one-hot向量后,对当前读取的自然语言描述片段中包含的词汇向量序列进行合并得到当前读取自然语言描述语句的二维one-hot向量序列。
所述预处理模块利用one-hot编码对目标代码中提取出的方法调用序列进行初始化,对方法调用序列所形成的语料库进行编码,将语料库所属的每个方法名称映射为一个一维one-hot向量,合并得到初始化后所有节点对应的二维one-hot向量序列。
所述标签图建模的方法具体为:利用程序依赖分析工具提取目标代码的方法依赖关系,根据方法之间的输入输出关系构造标签图,并将标签图存放在邻接矩阵中。
所述标签图嵌入方法具体为:当目标代码转化为标签图后,根据节点的调用关系,将节点的后向节点按照相同的标签进行分组,分组完成后,按照组别对该节点的后向节点进行均值聚合,得到虚拟节点,根据合并节点后的图模型中节点调用关系产生的时序序列,对节点特征进行融合,将融合邻居节点特征后的每个节点映射到一个一维图嵌入向量,对当前读取的自然语言描述片段对应的目标代码片段包含的节点向量序列进行合并得到当前对应目标代码片段的二维图嵌入向量序列。
所述序列到序列神经网络模型包括编码器、基于标签图嵌入方法的解码器和注意力机制模型,所述编码器利用长短时记忆网络进行自然语言描述特征的训练;所述基于标签图嵌入方法的解码器利用长短时记忆网络对标签图嵌入方法生成的代码片段的节点向量特征进行训练;所述注意力机制模型利用匹配函数与正切变化计算自然语言描述特征与目标代码特征之间对应的权重值。
实施例3:
本公开实施例3提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本公开实施例1所述的基于标签图嵌入技术的自动代码生成方法中的步骤。
实施例4:
本公开实施例4提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现本公开实施例1所述的基于标签图嵌入技术的自动代码生成方法中的步骤。
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

Claims (10)

1.一种基于标签图嵌入技术的自动代码生成方法,其特征在于,步骤如下:
读取自然语言描述并将其转化为对应语句的二维one-hot向量序列,读取目标代码中的方法调用序列并将方法转化为初始化的二维one-hot向量序列;
对提取出的方法调用序列进行标签图建模,并合并标签图中邻居节点的同类节点,再利用标签图嵌入方法将合并后图模型中的节点信息转化为代码片段的二维图嵌入向量序列;
对自然语言描述的二维one-hot向量序列和目标代码的二维图嵌入向量序列进行训练得到自然语言描述与目标代码相对应的神经网络参数,构建序列到序列神经网络模型;
根据序列到序列神经网络模型,基于自然语言描述的特征值并进行解码,生成对应目标代码。
2.如权利要求1所述的基于标签图嵌入技术的自动代码生成方法,其特征在于,利用one-hot编码对自然语言描述所形成的语料库进行处理,将语料库所属的每一个词汇映射为一个一维one-hot向量后,对当前读取的自然语言描述片段中包含的词汇向量序列进行合并得到当前读取自然语言描述语句的二维one-hot向量序列。
3.如权利要求1所述的基于标签图嵌入技术的自动代码生成方法,其特征在于,利用one-hot编码对目标代码中提取出的方法调用序列进行初始化,对方法调用序列所形成的语料库进行编码,将语料库所属的每个方法名称映射为一个一维one-hot向量,合并得到初始化后所有节点对应的二维one-hot向量序列。
4.如权利要求1所述的基于标签图嵌入技术的自动代码生成方法,其特征在于,所述标签图建模的方法具体为:利用程序依赖分析工具提取目标代码的方法依赖关系,根据方法之间的输入输出关系构造标签图,并将标签图存放在邻接矩阵中。
5.如权利要求1所述的基于标签图嵌入技术的自动代码生成方法,其特征在于,所述标签图嵌入方法具体为:当目标代码转化为标签图后,根据节点的调用关系,将节点的后向节点按照相同的标签进行分组,分组完成后,按照组别对该节点的后向节点进行均值聚合,得到虚拟节点,根据合并节点后的图模型中节点调用关系产生的时序序列,对节点特征进行融合,将融合邻居节点特征后的每个节点映射到一个一维图嵌入向量,对当前读取的自然语言描述片段对应的目标代码片段包含的节点向量序列进行合并得到当前对应目标代码片段的二维图嵌入向量序列。
6.如权利要求1所述的基于标签图嵌入技术的自动代码生成方法,其特征在于,所述序列到序列神经网络模型包括编码器、基于标签图嵌入方法的解码器和注意力机制模型,所述编码器利用长短时记忆网络进行自然语言描述特征的训练;所述基于标签图嵌入方法的解码器利用长短时记忆网络对标签图嵌入方法生成的代码片段的节点向量特征进行训练;所述注意力机制模型利用匹配函数与正切变化计算自然语言描述特征与目标代码特征之间对应的权重值。
7.一种基于标签图嵌入技术的自动代码生成***,其特征在于,包括:
预处理模块,被配置为:读取自然语言描述并将其转化为对应语句的二维one-hot向量序列,读取目标代码并对目标代码中的方法调用序列进行提取,将提取出方法调用序列中的方法初始化为二维one-hot向量序列;
模型构建模块,被配置为:对目标代码中提取出的方法调用序列进行图建模,生成标签图,并对该标签图中邻居节点的同类节点进行合并,将标签图嵌入方法应用于合并节点后的图模型,得到代码片段对应的二维图嵌入向量序列。对得到自然语言描述和目标代码的二维向量序列进行训练得到自然语言描述与目标代码相对应的神经网络参数,得到训练好的序列到序列神经网络模型;
预测模块,被配置为:根据序列到序列神经网络模型,基于自然语言描述的特征值并进行解码,生成对应目标代码。
8.如权利要求7所述的基于标签图嵌入技术的自动代码生成***,其特征在于,利用one-hot编码对自然语言描述所形成的语料库进行处理,将语料库所属的每一个词汇映射为一个一维one-hot向量后,对当前读取的自然语言描述片段中包含的词汇向量序列进行合并得到当前读取自然语言描述语句的二维one-hot向量序列;
或,所述预处理模块利用one-hot编码对目标代码中提取出的方法调用序列进行初始化,对方法调用序列所形成的语料库进行编码,将语料库所属的每个方法名称映射为一个一维one-hot向量,合并得到初始化后所有节点对应的二维one-hot向量序列;
或,所述标签图建模的方法具体为:利用程序依赖分析工具提取目标代码的方法依赖关系,根据方法之间的输入输出关系构造标签图,并将标签图存放在邻接矩阵中;
或,所述标签图嵌入方法具体为:当目标代码转化为标签图后,根据节点的调用关系,将节点的后向节点按照相同的标签进行分组,分组完成后,按照组别对该节点的后向节点进行均值聚合,得到虚拟节点,根据合并节点后的图模型中节点调用关系产生的时序序列,对节点特征进行融合,将融合邻居节点特征后的每个节点映射到一个一维图嵌入向量,对当前读取的自然语言描述片段对应的目标代码片段包含的节点向量序列进行合并得到当前对应目标代码片段的二维图嵌入向量序列;
或,所述序列到序列神经网络模型包括编码器、基于标签图嵌入方法的解码器和注意力机制模型,所述编码器利用长短时记忆网络进行自然语言描述特征的训练;所述基于标签图嵌入方法的解码器利用长短时记忆网络对标签图嵌入方法生成的代码片段的节点向量特征进行训练;所述注意力机制模型利用匹配函数与正切变化计算自然语言描述特征与目标代码特征之间对应的权重值。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6任一项所述的基于标签图嵌入技术的自动代码生成方法中的步骤。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-6任一项所述的基于标签图嵌入技术的自动代码生成方法中的步骤。
CN201910898025.0A 2019-09-23 2019-09-23 一种基于标签图嵌入技术的自动代码生成方法及*** Active CN110673840B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910898025.0A CN110673840B (zh) 2019-09-23 2019-09-23 一种基于标签图嵌入技术的自动代码生成方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910898025.0A CN110673840B (zh) 2019-09-23 2019-09-23 一种基于标签图嵌入技术的自动代码生成方法及***

Publications (2)

Publication Number Publication Date
CN110673840A true CN110673840A (zh) 2020-01-10
CN110673840B CN110673840B (zh) 2022-10-11

Family

ID=69077512

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910898025.0A Active CN110673840B (zh) 2019-09-23 2019-09-23 一种基于标签图嵌入技术的自动代码生成方法及***

Country Status (1)

Country Link
CN (1) CN110673840B (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111625276A (zh) * 2020-05-09 2020-09-04 山东师范大学 基于语义与语法信息融合的代码摘要生成方法及***
CN111966818A (zh) * 2020-07-26 2020-11-20 复旦大学 一种基于深度学习的交互式api代码片段推荐方法
CN112230905A (zh) * 2020-10-29 2021-01-15 中国人民解放军国防科技大学 一种结合深度学习与后向切片的程序自动生成方法
CN112255962A (zh) * 2020-10-30 2021-01-22 浙江佳乐科仪股份有限公司 基于人工智能的plc编程***
CN112764738A (zh) * 2021-01-19 2021-05-07 山东师范大学 基于多视图程序特征的代码自动生成方法及***
CN113064633A (zh) * 2021-03-26 2021-07-02 山东师范大学 一种代码摘要自动生成方法及***
CN113157255A (zh) * 2021-03-22 2021-07-23 成都淞幸科技有限责任公司 一种面向语法树解码器的代码生成方法
CN113238797A (zh) * 2021-04-16 2021-08-10 山东师范大学 基于分层对比学习的代码特征提取方法及***
CN113342318A (zh) * 2021-04-19 2021-09-03 山东师范大学 基于多视图代码特征的细粒度代码自动生成方法及***
CN113849162A (zh) * 2021-09-28 2021-12-28 哈尔滨工业大学 一种利用模型驱动和深度神经网络相结合的代码生成方法
CN113886520A (zh) * 2021-08-26 2022-01-04 广东工业大学 一种基于图神经网络的代码检索方法、***及计算机可读存储介质
CN116700684A (zh) * 2022-09-30 2023-09-05 荣耀终端有限公司 一种代码生成方法和终端
CN116884503A (zh) * 2023-09-06 2023-10-13 北京齐碳科技有限公司 序列和后验矩阵的处理方法、装置和计算设备

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102360291A (zh) * 2011-10-07 2012-02-22 云南爱迪科技有限公司 面向服务的基于业务规则引擎的业务规则设计方法
CN103827855A (zh) * 2011-10-27 2014-05-28 诺基亚公司 用于在网络内容订阅中应用的网络内容结构建模的方法和设备
US20160307072A1 (en) * 2015-04-17 2016-10-20 Nec Laboratories America, Inc. Fine-grained Image Classification by Exploring Bipartite-Graph Labels
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
CN108446540A (zh) * 2018-03-19 2018-08-24 中山大学 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与***
US20190130221A1 (en) * 2017-11-02 2019-05-02 Royal Bank Of Canada Method and device for generative adversarial network training
CN110018820A (zh) * 2019-04-08 2019-07-16 浙江大学滨海产业技术研究院 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法
CN110162297A (zh) * 2019-05-07 2019-08-23 山东师范大学 一种源代码段自然语言描述自动生成方法及***
US20190265955A1 (en) * 2016-07-21 2019-08-29 Ramot At Tel-Aviv University Ltd. Method and system for comparing sequences

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102360291A (zh) * 2011-10-07 2012-02-22 云南爱迪科技有限公司 面向服务的基于业务规则引擎的业务规则设计方法
CN103827855A (zh) * 2011-10-27 2014-05-28 诺基亚公司 用于在网络内容订阅中应用的网络内容结构建模的方法和设备
US20160307072A1 (en) * 2015-04-17 2016-10-20 Nec Laboratories America, Inc. Fine-grained Image Classification by Exploring Bipartite-Graph Labels
US20170212829A1 (en) * 2016-01-21 2017-07-27 American Software Safety Reliability Company Deep Learning Source Code Analyzer and Repairer
US20190265955A1 (en) * 2016-07-21 2019-08-29 Ramot At Tel-Aviv University Ltd. Method and system for comparing sequences
US20190130221A1 (en) * 2017-11-02 2019-05-02 Royal Bank Of Canada Method and device for generative adversarial network training
CN108446540A (zh) * 2018-03-19 2018-08-24 中山大学 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与***
CN110018820A (zh) * 2019-04-08 2019-07-16 浙江大学滨海产业技术研究院 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法
CN110162297A (zh) * 2019-05-07 2019-08-23 山东师范大学 一种源代码段自然语言描述自动生成方法及***

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
CHEN LYU 等: "Embedding API dependency graph for neural code generation", 《EMPIRICAL SOFTWARE ENGINEERING》 *
JACOB MATTINGLEY 等: "CVXGEN: A code generator for embedded convex optimization", 《OPTIMIZATION AND ENGINEERING》 *
LILI MOU 等: "On End-to-End Program Generation from User Intention by Deep Neural Networks", 《SOFTWARE ENGINEERING》 *
张菡文: "基于标签图嵌入的自动代码生成方法研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *
邹雅琴: "面向自主飞行器的嵌入式***仿真平台及其扩展应用", 《中国优秀硕士学位论文全文数据库 工程科技Ⅱ辑》 *

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111625276B (zh) * 2020-05-09 2023-04-21 山东师范大学 基于语义与语法信息融合的代码摘要生成方法及***
CN111625276A (zh) * 2020-05-09 2020-09-04 山东师范大学 基于语义与语法信息融合的代码摘要生成方法及***
CN111966818B (zh) * 2020-07-26 2024-03-08 复旦大学 一种基于深度学习的交互式api代码片段推荐方法
CN111966818A (zh) * 2020-07-26 2020-11-20 复旦大学 一种基于深度学习的交互式api代码片段推荐方法
CN112230905A (zh) * 2020-10-29 2021-01-15 中国人民解放军国防科技大学 一种结合深度学习与后向切片的程序自动生成方法
CN112230905B (zh) * 2020-10-29 2022-06-21 中国人民解放军国防科技大学 一种结合深度学习与后向切片的程序自动生成方法
CN112255962A (zh) * 2020-10-30 2021-01-22 浙江佳乐科仪股份有限公司 基于人工智能的plc编程***
CN112764738A (zh) * 2021-01-19 2021-05-07 山东师范大学 基于多视图程序特征的代码自动生成方法及***
CN113157255A (zh) * 2021-03-22 2021-07-23 成都淞幸科技有限责任公司 一种面向语法树解码器的代码生成方法
CN113157255B (zh) * 2021-03-22 2022-07-05 成都淞幸科技有限责任公司 一种面向语法树解码器的代码生成方法
CN113064633A (zh) * 2021-03-26 2021-07-02 山东师范大学 一种代码摘要自动生成方法及***
CN113238797A (zh) * 2021-04-16 2021-08-10 山东师范大学 基于分层对比学习的代码特征提取方法及***
CN113342318A (zh) * 2021-04-19 2021-09-03 山东师范大学 基于多视图代码特征的细粒度代码自动生成方法及***
CN113886520A (zh) * 2021-08-26 2022-01-04 广东工业大学 一种基于图神经网络的代码检索方法、***及计算机可读存储介质
CN113886520B (zh) * 2021-08-26 2024-05-14 广东工业大学 一种基于图神经网络的代码检索方法、***及计算机可读存储介质
CN113849162A (zh) * 2021-09-28 2021-12-28 哈尔滨工业大学 一种利用模型驱动和深度神经网络相结合的代码生成方法
CN113849162B (zh) * 2021-09-28 2024-04-02 哈尔滨工业大学 一种利用模型驱动和深度神经网络相结合的代码生成方法
CN116700684A (zh) * 2022-09-30 2023-09-05 荣耀终端有限公司 一种代码生成方法和终端
CN116700684B (zh) * 2022-09-30 2024-04-12 荣耀终端有限公司 一种代码生成方法和终端
CN116884503A (zh) * 2023-09-06 2023-10-13 北京齐碳科技有限公司 序列和后验矩阵的处理方法、装置和计算设备
CN116884503B (zh) * 2023-09-06 2023-12-26 北京齐碳科技有限公司 序列和后验矩阵的处理方法、装置和计算设备

Also Published As

Publication number Publication date
CN110673840B (zh) 2022-10-11

Similar Documents

Publication Publication Date Title
CN110673840B (zh) 一种基于标签图嵌入技术的自动代码生成方法及***
CN111625276B (zh) 基于语义与语法信息融合的代码摘要生成方法及***
CN109101235A (zh) 一种软件程序的智能解析方法
CN113641819B (zh) 基于多任务稀疏共享学习的论辩挖掘***及方法
CN110781686B (zh) 一种语句相似度计算方法、装置及计算机设备
CN112764738A (zh) 基于多视图程序特征的代码自动生成方法及***
CN110807335A (zh) 基于机器学习的翻译方法、装置、设备及存储介质
CN114528398A (zh) 一种基于交互双重图卷积网络的情感预测方法及***
CN114327483A (zh) 图张量神经网络模型建立方法及源代码语义识别方法
CN111597816A (zh) 一种自注意力命名实体识别方法、装置、设备及存储介质
CN112148879B (zh) 一种自动给代码打数据结构标签的计算机可读存储介质
CN115937516B (zh) 一种图像语义分割方法、装置、存储介质及终端
CN111259673A (zh) 一种基于反馈序列多任务学习的法律判决预测方法及***
CN113392929B (zh) 一种基于词嵌入与自编码器融合的生物序列特征提取方法
CN111126047B (zh) 一种同义文本生成的方法及装置
CN114255379A (zh) 基于编解码的数学公式识别方法及装置、可读存储介质
Thingom et al. A Review on Machine Learning in IoT Devices
CN117573096B (zh) 一种融合抽象语法树结构信息的智能代码补全方法
CN112530414B (zh) 迭代式大规模发音词典构建方法及装置
CN117573085B (zh) 一种基于层次结构特征和序列特征的代码补全方法
CN111158640B (zh) 一种基于深度学习的一对多需求分析识别方法
CN114610321A (zh) 基于c和c++软件的依赖结构的文件特征表示方法
CN116595981A (zh) 实体抽取方法、装置、设备和存储介质
CN115168858A (zh) 基于双通道双向lstm的恶意代码家族分类方法及***
CN117609005A (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: 20240130

Address after: 518000 West New City Mansion, Shennan Middle Road, Futian District, Shenzhen, Guangdong 501

Patentee after: Hu Qin

Country or region after: China

Address before: No.88, Wenhua East Road, Lixia District, Jinan City, Shandong Province

Patentee before: SHANDONG NORMAL University

Country or region before: China

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20240510

Address after: B113, Comprehensive Building, 3rd Branch of Leibai Zhongcheng Life Science Park, No. 22 Jinxiu East Road, Jinsha Community, Kengzi Street, Pingshan District, Shenzhen City, Guangdong Province, 518000

Patentee after: Shenzhen Datong Information Technology Co.,Ltd.

Country or region after: China

Address before: 518000 West New City Mansion, Shennan Middle Road, Futian District, Shenzhen, Guangdong 501

Patentee before: Hu Qin

Country or region before: China