CN112732264A - 一种高级编程语言间代码自动转换方法 - Google Patents

一种高级编程语言间代码自动转换方法 Download PDF

Info

Publication number
CN112732264A
CN112732264A CN202011617567.5A CN202011617567A CN112732264A CN 112732264 A CN112732264 A CN 112732264A CN 202011617567 A CN202011617567 A CN 202011617567A CN 112732264 A CN112732264 A CN 112732264A
Authority
CN
China
Prior art keywords
language
programming languages
training
model
translation
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.)
Pending
Application number
CN202011617567.5A
Other languages
English (en)
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.)
709th Research Institute of CSIC
Original Assignee
709th Research Institute of CSIC
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 709th Research Institute of CSIC filed Critical 709th Research Institute of CSIC
Priority to CN202011617567.5A priority Critical patent/CN112732264A/zh
Publication of CN112732264A publication Critical patent/CN112732264A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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
    • G06F8/315Object-oriented languages

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)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种高级编程语言间代码自动转换方法,包括如下步骤:S1、搜集各种编程语言大量的源代码,作为神经模型训练的语料库;S2、采用自然语言翻译中使用的跨语言的seq2seq模型进行训练,该模型采用transformer架构。本发明采用人工智能技术,将自然语言机器翻译中的神经模型借鉴到编程语言转换中,经过模型训练,实现高级编程语言间代码自动转换的目的,可以广泛应用于计算机编程语言领域。

Description

一种高级编程语言间代码自动转换方法
技术领域
本发明涉及计算机编程语言和人工智能领域,特别是涉及一种高级编程语言间代码自动转换方法。
背景技术
将高级编程语言写成的源代码转自动换成另一种语言(如将C++转换成JAVA),能够提高代码的复用性、减少软件开发的工作量、缩短项目周期,具有重要的现实意义。目前主要采用源到源编译器技术实现该功能,它通常依赖于手动编写的重写规则,并应用于源代码抽象语法树。但是,源到源编译器存在一些缺陷,如转换结果通常缺乏可读性,无法遵循目标编程语言的规范,需要程序员进行手动修改才能准确运行。整个转换过程不仅耗时,还需要程序员能够同时掌握源语言和目标语言的专业知识,因此使用该方法进行代码转换项目的工作量很大,实际应用较困难。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种高级编程语言间代码自动转换方法,使其针对目前高级编程语言间代码自动转换问题没有好的解决办法、自动化程度低的问题,采用人工智能技术,将自然语言机器翻译中的神经模型借鉴到编程语言转换中,经过模型训练,实现高级编程语言间代码自动转换的目的。
本发明提供的一种高级编程语言间代码自动转换方法,包括如下步骤:S1、搜集各种编程语言大量的源代码,作为神经模型训练的语料库;S2、采用自然语言翻译中使用的跨语言的seq2seq模型进行训练,该模型采用transformer架构。
在上述技术方案中,所述步骤S1中,编程语言包括C++和JAVA。
在上述技术方案中,所述步骤S2的具体步骤如下:S21、预训练编码器和解码器,产生跨语言的句子表征;S22、语言建模,训练同语种翻译,利用去噪自编码,训练解码器生成有效的序列;S23、利用回译训练跨语种翻译。
在上述技术方案中,所述步骤S21的具体步骤如下:S211、采用XLM来分别预训练编码和解码器,把各种编程语言语料库放在一起,每次batch选择一种语言;S212、使用MLM模型和TLM模型进行训练和交互。
在上述技术方案中,所述步骤S22的具体步骤如下:S221、给输入加上干扰,然后把它传给机器翻译模型;S222、解码器重新把正确的代码恢复,即自己翻译自己。
在上述技术方案中,所述步骤S23的具体步骤如下:S231、利用步骤S22产生的模型进行两次翻译,从A语言翻译到B语言,再从B语言到A语言,构建有监督的数据集;S232、将有监督的数据集当做信号回传给翻译模型进行训练。
在上述技术方案中,还包括步骤S3、使用测试集进行对比测试,验证模型训练后自动转换不同编程语言间代码的转换对齐质量。
在上述技术方案中,所述步骤S3的具体过程为:测试使用三个评估度量指标:BLEU值、参考匹配和计算准确率。
在上述技术方案中,所述步骤S3中,所述BLEU值用于评估生成函数的质量;参考匹配用于评估转换结果完美匹配真值参考的比例;计算准确率用于评估当输入相同时,假设函数是否生成与参考相同的输出。
本发明高级编程语言间代码自动转换方法,具有以下有益效果:
1)仅需单语源代码即可实现编程语言转换,无需任何源语言或目标语言的专业知识;
2)能够成功掌握每种语言的特定复杂模式,并将其迁移至其他高级语言;
3)代码转换效率和质量大幅超过利用规则的源到源编译器方法;
4)能够缩短项目开发周期,提高软件代码复用率、降低人工成本。
附图说明
图1为本发明高级编程语言间代码自动转换方法的整体流程示意图;
图2为本发明高级编程语言间代码自动转换方法中步骤S211的跨语言掩盖语言模型预训练的代码示意图;
图3为本发明高级编程语言间代码自动转换方法中步骤S22的去噪自编码的代码示意图;
图4为本发明高级编程语言间代码自动转换方法中步骤S23的回译的代码示意图;
图5为本发明高级编程语言间代码自动转换方法中步骤S3的代码自动转换测试用例示意图。
具体实施方式
下面结合附图及实施例对本发明作进一步的详细描述,但该实施例不应理解为对本发明的限制。
本发明的主要思想是:采用人工智能方法,将自然语言机器翻译中的神经模型应用到编程语言代码的转换中,通过模型训练,实现高级编程语言间代码的自动转换。该方法首先要搜集大量的单语料库作为训练集,然后选择自然语言翻译中使用的seq2seq模型作为训练模型进行不断训练和优化,实现高质量的编程语言代码的自动转换,最后使用测试集对模型进行验证,评估代码转换的准确率,详细流程如图1所示,具体描述为:
第一步:搜集大量的单语料库作为训练集,包括C++、Java等编程语言的大量源代码。
第二步:采用seq2seq模型进行训练,所述seq2seq模型由编码器、解码器和transformer架构组成,该模型的设计中采用transformer架构,设置为6个层、8个注意力头,并将模型维度设置为1024,对所有编程语言均使用同一个编码器和解码器。在跨语言语言模型预训练过程中,在C++和Java和这二种语言的批次中交替进行,由32个源代码序列构成,每个序列包含512个token。在训练阶段,去噪自编码和回译目标过程交替进行,使用批大小约为6000个token。模型优化过程使用的是Adam优化器,学习率为10^-4。训练过程包括三个步骤,包括初始化、语言建模和回译三个过程,具体过程包括:
1)预训练编码器和解码器,利用跨语言遮蔽语言模型预训练进行模型初始化,将表达相同指令的代码段映射至相同的表示,从而产生高质量的跨语言的句子表征:采用XLM(跨语言模型,通过将预训练模型用于初始化翻译模型,提升翻译效果)来分别预训练编码和解码器,把不同的编程语言语料库放在一起,每次batch(模型训练时,往往不是一次性把所有的训练集输入到模型中,而是把训练集分成较小的批,即分成一个个的batch)选择一种语言,然后使用MLM(masked language mode,掩盖语言建模)模型和TLM(translationlanguage model,翻译语言模型)模型进行训练和交互。我们的目的是训练一个多语言共享的编码器,所有必须在编码端区分不同的语言。作为对比,在多语种句子嵌入能够制造出多语言的编码器,而在解码器一端作为输入的一部分出现,此过程与具体编程语言无关,如图2所示。
2)训练同语种“翻译”:首先给输入加上干扰,比如随机遮掩、去掉或者打乱一些词的位置,然后把它传给机器翻译模型。在解码器这一端重新把正确的代码恢复,也就是自己"翻译"自己。这种翻译就是利用去噪自编码,训练解码器生成有效的序列,增强编码器对输入噪声的稳健性。它的优点是让解码器学会了解码并让编码器在面对有噪音的输入时更加健壮,从而学到更优的表征。
如图3所示,函数名part被替代成了MASK,piv+1去掉了1,piv-1只保留了-,机器翻译模型负责把噪音输入还原。该阶段仍然是针对单一编程语言的编码解码。在解码端,我们用一个标志语言的token来作为解码序列的初始值,比如用JAVA来代表第一个token,在输入JAVA代码之后,在解码器一端用C++来作为第一个初始token引导后续的翻译。翻译的质量取决于模型"跨语言"的能力,如果编码器能够把一个JAVA片段和它的对应的C++翻译投影在相近的位置,那么解码器应该可以给出较好的C++翻译。这个时候我们的机器翻译翻译从来没有进行过真正的语言间的互译,翻译的质量仍然不够。这需要第三步来完成。
3)训练跨语种“翻译”:我们进行两次翻译,利用前两步产生的模型,从A语言翻译到B语言,再从B语言到A语言,利用去噪自编码,生成可用于训练的平行数据。这样我们就自动构建了一个"有监督"的数据集,它包括原A语言和经过两次翻译而产生的A,它可以当做信号回传给翻译模型进行训练。如图4所示,我们可以进行两次翻译,利用前两步产生的模型,从JAVA翻译到C++,再从C++到JAVA。这样我们就自动构建了一个"有监督"的数据集,它包括原JAVA代码和经过两次翻译而产生的JAVA代码,这些可以当做信号来回传给原来的翻译模型。
第三步:验证模型训练结果,测试使用三个评估度量指标:BLEU(bilingualevaluation understudy,BLEU算法的思想就是机器翻译的译文越接近人工翻译的结果,它的翻译质量就越高)值、参考匹配(reference match)和计算准确率。BLEU值用于评估生成函数的质量;参考匹配用于评估转换结果完美匹配真值参考的比例;计算准确率用于评估当输入相同时,假设函数是否生成与参考相同的输出。表1展示了编程语言转换模型在测试集上的结果,模型使用了贪婪解码(greedy search,集束大小为1)。下表2展示了使用束搜索(beam search)解码后的结果,并对比了编程语言转换模型和现有基线方法的性能,编程语言代码自动转换测试用例如图5所示。
表1编程语言转换模型测试结果
C++转换JAVA JAVA转换C++
BLEU 3.1 24.7
参考匹配 85.4 97.0
计算准确率 60.9 80.9
表2编程语言转换模型beam算法测试结果
Figure BDA0002872934590000061
Figure BDA0002872934590000071
从测试结果看出,本发明的编程语言自动转换模型源码翻译效果较好,弥补了目前编程语言间转换自动化程度低,需要人工干预,不能规模应用的问题。该方法能够实现编程语言间的自动转换,提高了代码的转换效率和质量,并降低人工成本、缩短项目开发周期,提高软件代码的复用率。
本发明的技术原理如下:
自然语言机器翻译是在保持语义一致性的基础上,利用计算机软件实现两种语言的转换的过程,属于计算语言学(computational linguistics)的子领域,将人工智能与自然语言处理相结合是其重要的研究内容。机器翻译大体经历了2个阶段:早期的基于规则的机器翻译和近期的统计机器翻译。将神经网络研究用于机器翻译以来,采用端到端的神经机器翻译获得了迅速发展。它采用一种全新的方法体系,直接使用神经网络实现源语言文本到目标语言文本的映射。与统计机器翻译不同,由于神经机器翻译不再需要进行词对齐、短语切分等步骤,也无需句法分析等语言学知识支持。具有人工成本低、开发周期短的优点,并且较好的克服了统计机器翻译所面临的语义表示、错误传播等问题,成为机器翻译系统的核心技术。
seq2seq模型是2014年由Google提出来,主要关注是机器翻译相关的问题。而seq2seq模型,简单来说就是一个翻译模型,把一个语言序列翻译成另一种语言序列,整个处理过程是通过使用长短记忆网络,或者递归神经网络将一个序列作为输入影射为另外一个输出序列。该技术突破了传统的固定大小输入问题框架,开通了将经典深度神经网络模型运用于翻译与职能问答这一类序列型任务的先河,在各主流语言之间的相互翻译中有着非常好的效果。
Transformer模型是2017年由Google提出来,该模型可以达到很好的翻译效果,依赖注意力机制、挖掘输入和输出之间的关系实现并行计算,包括Encoder(编码器)和Decoder(解码器)两部分:Encoder负责将输入文本转化成特征表示;Decoder则负责通过前面的特征表示生成翻译内容。Transformer模型利用注意力机制实现了并行化捕捉序列依赖,并且同时处理序列的每个位置的tokens,使得Transformer模型在性能优异的同时大大减少了训练时间。
为实现本发明的目的,本发明的技术要点在于:
搜集大量的单语料库作为训练集,包括C++、Java等编程语言的大量源代码,同时需要搜集平行函数测试集,测试数据包含不同编程语言直接对齐的高质量源代码,用于检查转换结果准确性。然后是选择训练模型,方法中是采用跨语言模型进行训练,具体使用的是带注意力的seq2seq模型,它由编码器、解码器和transformer架构组成,模型训练包括三个过程:
1)初始化,预训练编码器和解码器;利用跨语言遮蔽语言模型预训练进行模型初始化,将表达相同指令的代码段映射至相同的表示,此过程与具体编程语言无关。
2)语言建模,训练同语种“翻译”;利用去噪自编码(Denoising Auto-Encoding,DAE),训练解码器使之总能生成有效的序列,即使输入数据带有噪声也是如此,增强编码器对输入噪声的稳健性。
3)回译,训练跨语种“翻译”;模型生成可用于训练的平行数据,例如当C++转换到JAVA模型质量不错时,用它为JAVA转换到C++模型生成更精确的数据,反之亦然。
训练完成需要进行测试,使用准备好的测试集进行对比测试,验证模型训练后自动转换不同编程语言的代码对齐质量。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (9)

1.一种高级编程语言间代码自动转换方法,其特征在于:包括如下步骤:
S1、搜集各种编程语言大量的源代码,作为神经模型训练的语料库;
S2、采用自然语言翻译中使用的跨语言的seq2seq模型进行训练,该模型采用transformer架构。
2.根据权利要求1所述的高级编程语言间代码自动转换方法,其特征在于:所述步骤S1中,编程语言包括C++和JAVA。
3.根据权利要求2所述的高级编程语言间代码自动转换方法,其特征在于:所述步骤S2的具体步骤如下:
S21、预训练编码器和解码器,产生跨语言的句子表征;
S22、语言建模,训练同语种翻译,利用去噪自编码,训练解码器生成有效的序列;
S23、利用回译训练跨语种翻译。
4.根据权利要求3所述的高级编程语言间代码自动转换方法,其特征在于:所述步骤S21的具体步骤如下:
S211、采用XLM来分别预训练编码和解码器,把各种编程语言语料库放在一起,每次batch选择一种语言;
S212、使用MLM模型和TLM模型进行训练和交互。
5.根据权利要求4所述的高级编程语言间代码自动转换方法,其特征在于:所述步骤S22的具体步骤如下:
S221、给输入加上干扰,然后把它传给机器翻译模型;
S222、解码器重新把正确的代码恢复,即自己翻译自己。
6.根据权利要求5所述的高级编程语言间代码自动转换方法,其特征在于:所述步骤S23的具体步骤如下:
S231、利用步骤S22产生的模型进行两次翻译,从A语言翻译到B语言,再从B语言到A语言,构建有监督的数据集;
S232、将有监督的数据集当做信号回传给翻译模型进行训练。
7.根据权利要求6所述的高级编程语言间代码自动转换方法,其特征在于:还包括步骤S3、使用测试集进行对比测试,验证模型训练后自动转换不同编程语言间代码的转换对齐质量。
8.根据权利要求7所述的高级编程语言间代码自动转换方法,其特征在于:所述步骤S3的具体过程为:测试使用三个评估度量指标:BLEU值、参考匹配和计算准确率。
9.根据权利要求7所述的高级编程语言间代码自动转换方法,其特征在于:所述步骤S3中,所述BLEU值用于评估生成函数的质量;参考匹配用于评估转换结果完美匹配真值参考的比例;计算准确率用于评估当输入相同时,假设函数是否生成与参考相同的输出。
CN202011617567.5A 2020-12-30 2020-12-30 一种高级编程语言间代码自动转换方法 Pending CN112732264A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011617567.5A CN112732264A (zh) 2020-12-30 2020-12-30 一种高级编程语言间代码自动转换方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011617567.5A CN112732264A (zh) 2020-12-30 2020-12-30 一种高级编程语言间代码自动转换方法

Publications (1)

Publication Number Publication Date
CN112732264A true CN112732264A (zh) 2021-04-30

Family

ID=75610447

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011617567.5A Pending CN112732264A (zh) 2020-12-30 2020-12-30 一种高级编程语言间代码自动转换方法

Country Status (1)

Country Link
CN (1) CN112732264A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115268868A (zh) * 2022-07-26 2022-11-01 中国海洋大学 一种基于有监督学习的智能源码转换方法
CN115904338A (zh) * 2022-11-10 2023-04-04 北京百度网讯科技有限公司 预训练语言模型的训练方法、语言处理方法和装置
CN116909532A (zh) * 2023-09-12 2023-10-20 深圳须弥云图空间科技有限公司 一种代码生成与缺陷修复方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109614111A (zh) * 2018-12-28 2019-04-12 北京百度网讯科技有限公司 用于生成代码的方法和装置
CN110334361A (zh) * 2019-07-12 2019-10-15 电子科技大学 一种面向小语种语言的神经机器翻译方法
CN110956045A (zh) * 2018-09-26 2020-04-03 北京三星通信技术研究有限公司 机器翻译方法、训练方法、相应的装置及电子设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110956045A (zh) * 2018-09-26 2020-04-03 北京三星通信技术研究有限公司 机器翻译方法、训练方法、相应的装置及电子设备
CN109614111A (zh) * 2018-12-28 2019-04-12 北京百度网讯科技有限公司 用于生成代码的方法和装置
CN110334361A (zh) * 2019-07-12 2019-10-15 电子科技大学 一种面向小语种语言的神经机器翻译方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
TRIPLEMENG: "TransCoder介绍", 《HTTPS://BLOG.CSDN.NET/TRIPLEMENG/ARTICLE/DETAILS/106849239》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115268868A (zh) * 2022-07-26 2022-11-01 中国海洋大学 一种基于有监督学习的智能源码转换方法
CN115904338A (zh) * 2022-11-10 2023-04-04 北京百度网讯科技有限公司 预训练语言模型的训练方法、语言处理方法和装置
CN116909532A (zh) * 2023-09-12 2023-10-20 深圳须弥云图空间科技有限公司 一种代码生成与缺陷修复方法和装置
CN116909532B (zh) * 2023-09-12 2024-01-05 深圳须弥云图空间科技有限公司 一种代码生成与缺陷修复方法和装置

Similar Documents

Publication Publication Date Title
Roziere et al. Unsupervised translation of programming languages
Chen et al. Tree-to-tree neural networks for program translation
Chen et al. Sequence-to-action: End-to-end semantic graph generation for semantic parsing
Prakash et al. Neural paraphrase generation with stacked residual LSTM networks
CN112732264A (zh) 一种高级编程语言间代码自动转换方法
Harer et al. Tree-transformer: A transformer-based method for correction of tree-structured data
Liu et al. Deep learning based program generation from requirements text: Are we there yet?
Li et al. Setransformer: A transformer-based code semantic parser for code comment generation
CN110084323B (zh) 端到端语义解析系统及训练方法
Yao et al. Learning structural edits via incremental tree transformations
Haije et al. Automatic comment generation using a neural translation model
CN113190219A (zh) 一种基于递归神经网络模型的代码注释生成方法
Shin et al. A survey of automatic code generation from natural language
CN113657123A (zh) 基于目标模板指导和关系头编码的蒙语方面级情感分析方法
CN115577362A (zh) 基于源代码和汇编代码跨模态特征增强的漏洞检测方法
Liu et al. Syntax and domain aware model for unsupervised program translation
Zheng et al. CodeAttention: translating source code to comments by exploiting the code constructs
Jiang et al. An AST structure enhanced decoder for code generation
Liu et al. Augmenting multi-turn text-to-SQL datasets with self-play
Espejel et al. A comprehensive review of state-of-the-art methods for Java code generation from natural language text
CN117093222A (zh) 一种基于改进转换器模型的代码参数摘要生成方法和系统
Wen et al. Babeltower: Learning to auto-parallelized program translation
White et al. TestNMT: Function-to-test neural machine translation
Huang et al. Program Translation via Code Distillation
CN116681087B (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20210430