CN114860241A - 一种基于生成对抗网络的代码抽象语法树生成方法 - Google Patents
一种基于生成对抗网络的代码抽象语法树生成方法 Download PDFInfo
- Publication number
- CN114860241A CN114860241A CN202210791177.2A CN202210791177A CN114860241A CN 114860241 A CN114860241 A CN 114860241A CN 202210791177 A CN202210791177 A CN 202210791177A CN 114860241 A CN114860241 A CN 114860241A
- Authority
- CN
- China
- Prior art keywords
- syntax tree
- abstract syntax
- text
- source code
- converter
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Biophysics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Devices For Executing Special Programs (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明涉及一种基于生成对抗网络的代码抽象语法树生成方法,属于计算机领域,所述方法包含两个连续的迭代过程;第一层迭代为生成器‑文本转换器;生成器生成的文本进入文本转换器,经过自由拆分组合,构成抽象语法树,若无法与源代码的抽象语法树匹配,则返回生成器继续下一轮迭代;否则迭代结束,输出该语法树;进入第二层迭代文本转换器‑判别器,输出的抽象语法树经过特征提取进入判别器与源代码抽象语法树进行对比,若匹配失败则返回文本转换器,重新组合文本序列生成新的抽象语法树,进入下一轮迭代;否则迭代结束,输出该语法树,程序结束。
Description
技术领域
本发明属于计算机领域,具体地涉及一种基于生成对抗网络的代码抽象语法树生成方法。
背景技术
随着信息系统的深入应用,各企业和组织内部产生了大量作为业务支撑的遗留系统。由于它们的语言陈旧、结构老化,难以适应现有系统。如何将用过时或不推荐的语言编写的代码库移植到现代语言,或者将用不同语言编写的代码集成到现有的代码库中是一个亟需解决的问题。代码翻译可以实现程序在不同语言间的相互转换,是解决遗留系统语言陈旧问题的有效途径。与普通文本语言翻译不同,由于不同程序语言之间的语法结构差异,直接进行代码-代码翻译需要大量源语言和目标语言方面的专业知识且通常成本高昂。目标代码和源代码虽然语法不同,但为了完成同样的特定功能,其语法树结构是类似的。因此,找到与源代码的抽象语法树相似的目标代码的抽象语法树,是代码翻译中的一个关键步骤。然而现有技术只能将代码转换成文本序列,无法生成树形结构。
发明内容
本发明针对上述技术问题,提供一种基于生成对抗网络的代码抽象语法树生成方法。所述方法通过一个多重循环的生成对抗网络模型,将源代码的抽象语法树转换成目标代码的抽象语法树。通过判别器和文本转换器的双重迭代,训练模型以提高准确率。将预测模型和对抗学习相结合,预测误差和对抗损失相结合,有效地解决了预测目标代码抽象语法树的模糊问题,能够生成目标代码的抽象语法树。
本发明是通过如下技术方案来实现的:
一种基于生成对抗网络的代码抽象语法树生成方法,输入源代码,提取源代码抽象语法树,然后进行两个连续的迭代;
第一层迭代为生成器-文本转换器;用Seq2Seq构造生成器,提取源代码的抽象语法树后,将源代码的抽象语法树用广度优先遍历展开成第一文本序列,用Seq2Seq模型将第一文本序列翻译成与目标代码相对应的第二文本序列,生成的第二文本序列长度不固定,第二文本序列输入到文本转换器;
进一步,具体方法:在生成器中,Encoder对源代码抽象语法树展开的节点第一文本序列进行编码,将这些节点第一文本序列转换成一个固定长度的向量,然后通过Decoder将该向量转换成与目标代码相对应的第二文本序列输出;
第二层迭代为文本转换器-判别器;文本转换器对第二文本序列自由组合转换生成抽象语法树,转换器生成的抽象语法树经过特征提取进入判别器与源代码的抽象语法树进行对比,若匹配失败则返回文本转换器,重新组合第二文本序列生成新的抽象语法树,进入下一轮迭代;若匹配成功,则迭代结束,输出该语法树,程序结束。
进一步,第二文本序列转换成的新抽象语法树有一种以上可能的结构,通过统计源代码节点之间的逻辑关系出现的概率来规定文本转换器生成的新抽象语法树的顺序;
为了判别新抽象语法树是否为目标代码的抽象语法树,源代码的抽象语法树和转换器生成的新抽象语法树分别进入源代码和目标代码的特征提取模型,进行特征提取;若转换器生成的新抽象语法树特征和源代码的抽象语法树特征相同,则表明转换器生成的新抽象语法树和源代码的抽象语法树能够完成类似的功能,转换器生成的新抽象语法树就是目标代码的抽象语法树;
若判别器认为两个语法树不同,则返回失败给文本转换器,文本转换器继续迭代,再次生成新抽象语法树;如果判别过程中,判别器无法再区分源代码的抽象语法树和新抽象语法树,则新抽象语法树即为目标代码的抽象语法树,立即输出目标代码的抽象语法树,源代码的抽象语法树翻译结束。
进一步,如果判别器认为两个语法树不同,且文本转换器迭代达到次数上限T次或M次仍无法找到与源代码抽象语法树结构相似的抽象语法树,其中M为本次循环中文本序列所有可能的自由组合数,T为循环次数上限,说明生成器生成的第二文本序列不是目标代码的抽象语法树的节点文本,则返回生成器,继续迭代,生成新的第二文本序列,重复上述过程,直到判别器判别成功,找到目标代码的抽象语法树。
本发明与现有技术相比的有益效果:
本方法通过双层迭代,能够找到与源代码的抽象语法树相似的目标代码的抽象语法树,由于树形结构的特性,更好地保留了代码之间的逻辑嵌套关系。
附图说明
图1为本发明方法的流程图;
图2为Seq2Seq结构图;
图3为文本转换器结构图;
图4为Encoder-Decoder结构图;
图5为基于生成对抗网络的代码抽象语法树生成模型结构图。
具体实施方式
下面通过实施例结合附图来对本发明的技术方案做进一步解释,但本发明的保护范围不受实施例任何形式上的限制。
实施例1
本实施例的流程图如图1所示,模型结构图如图5所示。基于生成对抗网络进行有监督学习生成目标代码的抽象语法树,用Seq2Seq构造生成器,用判别器判别源代码和目标代码的抽象语法树的相似性,主要包含两个连续的迭代过程。第一层迭代为生成器-文本转换器。生成器生成的文本进入文本转换器,经过自由拆分组合,构成抽象语法树,若由该文本生成的所有抽象语法树都无法与源代码的抽象语法树匹配,则返回生成器继续下一轮迭代;若生成的抽象语法树进入判别器判别成功,则迭代结束,输出该语法树,程序结束。第二层迭代为文本转换器-判别器。文本转换器自由组合转换生成的抽象语法树经过特征提取进入判别器与源代码抽象语法树进行对比,若匹配失败则返回文本转换器,重新组合文本序列生成新的抽象语法树,进入下一轮迭代;若匹配成功,则迭代结束,输出该语法树,程序结束。
1、Seq2Seq模型
Seq2Seq模型的输入输出均为文本序列。源代码提取出抽象语法树后,将源代码的抽象语法树用广度优先遍历展开成文本序列,用Seq2Seq模型将该文本翻译成与目标代码相对应的文本序列,生成的文本序列长度不固定。在生成器中,Encoder对源代码抽象语法树展开的节点文本序列进行编码,将这些文本转换成一个固定长度的向量,然后通过Decoder将该向量转换成与目标代码相对应的文本序列输出。
所述生成器中用到的文本—文本翻译模型——Seq2Seq,如图2所示,其模型架构为Encoder-Decoder,如图4所示。Encoder用于编码由抽象语法树的节点展开的文本序列的信息,将任意长度的由抽象语法树的节点展开的文本序列信息变为固定长度的向量表达并编码到一个向量c中。而Decoder是解码器,解码器得到编码源代码抽象语法树节点文本信息的向量c之后将信息解码,并将这个固定长度的向量变成可变长度的目标代码抽象语法树的节点文本序列。
编码器Encoder的RNN接受输入x,即源代码抽象语法树的节点文本组成的词向量,最终输出一个编码源代码抽象语法树所有节点文本信息的上下文向量c,中间的神经元没有输出。Decoder主要传入的是上下文向量c,然后解码出需要的信息。其中,c由编码器所有神经元的隐藏状态计算得到。得到上下文向量c之后,需要传递到Decoder。Decoder中每一个神经元的输入包括:上一个神经元的隐藏层向量,上一个神经元输出的目标代码的节点文本词向量,当前的输入c。对于第一个神经元的输入,通常是句子起始标志位的embedding向量。
2、文本转换器
生成抽象语法树的过程需要文本转换器,通过文本转换器将该文本序列通过拆分、自由组合重组成抽象语法树,其中,拆分成的节点个数不确定,如图3所示。其中文本序列自由组合的顺序,由抽象语法树节点间逻辑关系的概率统计结果来确定,以减少额外时空开销。此外,为了控制生成语法树的数目,设置了三个参数n、M和T,其中n为自定义变量,用来记录迭代次数,M为所有可能的自由组合数,如文本被分成x个节点,则,T为迭代上限,n超过T时会占用大量时空资源;生成器生成的文本每重新组合一次,n就自增一次,直到n>M,即没有可能的自由组合或者n>T,达到迭代次数上限为止。此时说明生成器生成的文本不能重组成目标代码的抽象语法树,故返回生成器重新翻译生成新的文本,继续迭代,直到判别器无法区分文本转换器生成的抽象语法树与源代码的抽象语法树为止。
本实施例的具体方法如下:
步骤(1),如图5所示,提取源代码的抽象语法树后,将源代码的抽象语法树用广度优先遍历展开成第一文本序列,用Seq2Seq模型将第一文本序列翻译成与目标代码相对应的第二文本序列,生成的第二文本序列长度不固定;具体为:在生成器中,Encoder对源代码抽象语法树展开的节点文本序列进行编码,将这些节点文本序列转换成一个固定长度的向量,然后通过Decoder将该向量转换成与目标代码相对应的第二文本序列输出;
步骤(2),生成器将源代码的抽象语法树的第一文本序列翻译成目标代码相对应的第二文本序列之后,首先由文本转换器自由组合各种可能的情况,依次将生成器生成的第二文本序列转换为新抽象语法树结构;由于解码时源代码抽象语法树的节点之间的逻辑关系不确定,第二文本序列转换成的抽象语法树有一种以上可能的结构,一定程度上增加了判别的工作量,因此,通过统计源代码节点之间的逻辑关系出现的概率来规定文本转换器生成的抽象语法树的顺序;
步骤(3),为了判别步骤(2)转换器生成的抽象语法树是否为目标代码的抽象语法树,源代码的抽象语法树和转换器生成的抽象语法树分别进入源代码和目标代码的特征提取模型TBCNN,也即基于树型结构的卷积网络,进行特征提取;若转换器生成的新抽象语法树特征和源代码的抽象语法树特征相同,则表明转换器生成的新抽象语法树和源代码的抽象语法树能够完成类似的功能,转换器生成的新抽象语法树就是目标代码的抽象语法树。
步骤(3)中特征提取模型提取特征之后,需要使用判别器对提取出的源代码的抽象语法树和目标代码的新抽象语法树特征进行区分,若判别器认为两个语法树不同,则返回失败给文本转换器,文本转换器继续迭代,生成新的转换器生成的抽象语法树;如果判别过程中,判别器无法再区分源代码的抽象语法树和转换器生成的新抽象语法树,则转换器生成的新抽象语法树即为目标代码的抽象语法树,立即输出目标代码的抽象语法树,源代码的抽象语法树翻译结束。如果判别器认为两个语法树不同,且文本转换器迭代达到次数上限T次或M次仍无法找到与源代码抽象语法树结构相似的抽象语法树,其中M为本次循环中文本序列所有可能的自由组合数,说明生成器生成的第二文本序列可能不是目标代码的抽象语法树的节点文本,则返回生成器,继续迭代,生成新的第二文本序列,重复上述过程,直到判别器判别成功,找到目标代码的抽象语法树。
本实施例的具体应用实例举例:
将一段python代码转换成功能相同的c++代码的抽象语法树,首先提取出原python代码的特征文本序列,进行步骤(1),通过生成器将python的文本序列转换成c++的文本序列。接着进行步骤(2),文本转换器将生成的c++文本序列自由组合,特征提取后,进行步骤(3)判别器判别,双层迭代,直到生成目标c++代码的抽象语法树,立即输出该抽象语法树。
Claims (4)
1.一种基于生成对抗网络的代码抽象语法树生成方法,其特征在于,输入源代码,提取源代码抽象语法树,然后进行两个连续的迭代;
第一层迭代为生成器-文本转换器;用Seq2Seq构造生成器,提取源代码的抽象语法树后,将源代码的抽象语法树用广度优先遍历展开成第一文本序列,用Seq2Seq模型将第一文本序列翻译成与目标代码相对应的第二文本序列,生成的第二文本序列长度不固定,第二文本序列输入到文本转换器;
第二层迭代为文本转换器-判别器;文本转换器对第二文本序列自由组合转换生成新抽象语法树,转换器生成的新抽象语法树经过特征提取进入判别器与源代码的抽象语法树进行对比,若匹配失败则返回文本转换器,重新组合第二文本序列生成新抽象语法树,进入下一轮迭代;若匹配成功,则迭代结束,输出该语法树,程序结束。
2.根据权利要求1所述的一种基于生成对抗网络的代码抽象语法树生成方法,其特征在于,所述第一层迭代的具体方法:在生成器中,Encoder对源代码抽象语法树展开的节点第一文本序列进行编码,将这些节点第一文本序列转换成一个固定长度的向量,然后通过Decoder将该向量转换成与目标代码相对应的第二文本序列输出。
3.根据权利要求1所述的一种基于生成对抗网络的代码抽象语法树生成方法,其特征在于,所述第二层迭代中,第二文本序列转换成的新抽象语法树有一种以上可能的结构,通过统计源代码节点之间的逻辑关系出现的概率来规定文本转换器生成的新抽象语法树的顺序;
为了判别新抽象语法树是否为目标代码的抽象语法树,源代码的抽象语法树和转换器生成的新抽象语法树分别进入源代码和目标代码的特征提取模型,进行特征提取;若转换器生成的新抽象语法树特征和源代码的抽象语法树特征相同,则表明转换器生成的新抽象语法树和源代码的抽象语法树能够完成类似的功能,转换器生成的新抽象语法树就是目标代码的抽象语法树;
若判别器认为两个语法树不同,则返回失败给文本转换器,文本转换器继续迭代,再次生成新抽象语法树;如果判别过程中,判别器无法再区分源代码的抽象语法树和新抽象语法树,则新抽象语法树即为目标代码的抽象语法树,立即输出目标代码的抽象语法树,源代码的抽象语法树翻译结束。
4.据权利要求3所述的一种基于生成对抗网络的代码抽象语法树生成方法,其特征在于,所述第二层迭代中,如果判别器认为源代码的抽象语法树和新抽象语法树不同,且文本转换器迭代达到次数上限T次或M次仍无法找到与源代码抽象语法树结构相似的抽象语法树,其中M为本次循环中文本序列所有可能的自由组合数,说明生成器生成的第二文本序列不是目标代码的抽象语法树的节点文本,则返回生成器,继续迭代,生成新的第二文本序列,重复上述过程,直到判别器判别成功,找到目标代码的抽象语法树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210791177.2A CN114860241B (zh) | 2022-07-07 | 2022-07-07 | 一种基于生成对抗网络的代码抽象语法树生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210791177.2A CN114860241B (zh) | 2022-07-07 | 2022-07-07 | 一种基于生成对抗网络的代码抽象语法树生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114860241A true CN114860241A (zh) | 2022-08-05 |
CN114860241B CN114860241B (zh) | 2022-09-23 |
Family
ID=82626096
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210791177.2A Active CN114860241B (zh) | 2022-07-07 | 2022-07-07 | 一种基于生成对抗网络的代码抽象语法树生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114860241B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140282373A1 (en) * | 2013-03-15 | 2014-09-18 | Trinity Millennium Group, Inc. | Automated business rule harvesting with abstract syntax tree transformation |
CN110489102A (zh) * | 2019-07-29 | 2019-11-22 | 东北大学 | 一种从自然语言自动生成Python代码的方法 |
CN110737466A (zh) * | 2019-10-16 | 2020-01-31 | 南京航空航天大学 | 基于静态程序分析的源代码编码序列表示方法 |
CN112905188A (zh) * | 2021-02-05 | 2021-06-04 | 中国海洋大学 | 一种基于生成式对抗gan网络的代码翻译方法及系统 |
CN113138796A (zh) * | 2020-01-19 | 2021-07-20 | 上海商汤智能科技有限公司 | 代码生成方法及装置、电子设备和存储介质 |
-
2022
- 2022-07-07 CN CN202210791177.2A patent/CN114860241B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140282373A1 (en) * | 2013-03-15 | 2014-09-18 | Trinity Millennium Group, Inc. | Automated business rule harvesting with abstract syntax tree transformation |
CN110489102A (zh) * | 2019-07-29 | 2019-11-22 | 东北大学 | 一种从自然语言自动生成Python代码的方法 |
CN110737466A (zh) * | 2019-10-16 | 2020-01-31 | 南京航空航天大学 | 基于静态程序分析的源代码编码序列表示方法 |
CN113138796A (zh) * | 2020-01-19 | 2021-07-20 | 上海商汤智能科技有限公司 | 代码生成方法及装置、电子设备和存储介质 |
CN112905188A (zh) * | 2021-02-05 | 2021-06-04 | 中国海洋大学 | 一种基于生成式对抗gan网络的代码翻译方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114860241B (zh) | 2022-09-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111444311A (zh) | 语义理解模型训练方法、装置、计算机设备和存储介质 | |
CN110489102B (zh) | 一种从自然语言自动生成Python代码的方法 | |
CN112069199B (zh) | 一种基于中间语法树的多轮自然语言转sql方法 | |
CN114489669A (zh) | 一种基于图学习的Python语言代码片段生成方法 | |
CN113300813B (zh) | 基于注意力的针对文本的联合信源信道方法 | |
US10394960B2 (en) | Transliteration decoding using a tree structure | |
US10643028B1 (en) | Transliteration of text entry across scripts | |
CN101751385A (zh) | 一种采用层次管道过滤器体系结构的多语言信息抽取方法 | |
CN112764738A (zh) | 基于多视图程序特征的代码自动生成方法及系统 | |
CN111625276A (zh) | 基于语义与语法信息融合的代码摘要生成方法及系统 | |
CN115543437B (zh) | 一种代码注释生成方法和系统 | |
CN112560456A (zh) | 一种基于改进神经网络的生成式摘要生成方法和系统 | |
US20230325423A1 (en) | Method and system for improving performance of text summarization | |
CN115762489A (zh) | 语音识别模型的数据处理系统及方法、语音识别方法 | |
CN115630368A (zh) | 基于自然语言处理与深度森林的Java漏洞分类方法 | |
CN116661805A (zh) | 代码表示的生成方法和装置、存储介质及电子设备 | |
CN115455197A (zh) | 一种融合位置感知细化的对话关系抽取方法 | |
CN111563391A (zh) | 机器翻译方法、装置及电子设备 | |
CN113065322B (zh) | 一种代码段注释生成方法、系统及可读存储介质 | |
CN114816517A (zh) | 一种层次语义感知的代码表示学习方法 | |
CN114860241B (zh) | 一种基于生成对抗网络的代码抽象语法树生成方法 | |
CN110619877A (zh) | 应用于激光笔的语音识别人机交互方法、装置、系统和存储介质 | |
JP6550677B2 (ja) | 符号化装置、復号化装置、離散系列変換装置、方法、及びプログラム | |
CN110895660B (zh) | 一种基于句法依存关系动态编码的语句处理方法及装置 | |
Wu et al. | Structural string decoder for handwritten mathematical expression recognition |
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 |