一种基于有监督学习的智能源码转换方法技术

技术编号:35457761 阅读:29 留言:0更新日期:2022-11-03 12:19
本发明专利技术公开了一种基于有监督学习的智能源码转换方法,包括:从代码网站中抓取大量的并行数据,将获取的并行数据进行预处理;构造词典,将预处理后的并行数据划分为对应的训练集、测试集以及验证集;构造编程语言之间的映射,将语言代码转换为机器识别的编码,将机器识别的编码输入至模型中进行训练,获取代码翻译模型;将输入待翻译的源语言代码输入所述代码翻译模型,基于代码翻译模型对源语言代码进行翻译,获取目标语言的相应代码。实现了将源代码从高级编程语言(如C或Python)转换为另一种语言(如C++或Java),并且提升了翻译的准确率,翻译结果比较理想。翻译结果比较理想。翻译结果比较理想。

【技术实现步骤摘要】
一种基于有监督学习的智能源码转换方法


[0001]本专利技术涉及智能源码转换
,尤其涉及一种基于有监督学习的智能源码转换方法。

技术介绍

[0002]近年来,依赖于大规模的平行语料库,有监督的机器翻译在某些语言对上已经取得了巨大的成功。然而,由于缺乏编程语言的并行数据,关于程序代码之间的翻译系统少之又少,并且翻译结果也并不理想。构建一个翻译器在实践中是困难的,不同的语言可以有不同的语法,并且依赖于不同的平台API和标准库功能。但是,编程语言有严格的语法,不容忍错别字和语法错误。
[0003]大多数都是基于规则的转换工具,它们基本上对输入源代码进行标记,并将其转换为抽象语法树(AST),在此基础上应用手工编写的重写规则,而创建它们需要大量的时间,以及源语言和目标语言的高级知识。此外,从动态类型的语言翻译(例如Python)到静态类型的语言(例如Java)需要推断变量类型,这些类型本身是困难的。当然,除了基于规则的系统(例如J2C#)之外,也出现了一些基于短语的SMT系统(IpSMT)、基于多阶段短语的SMT系统(mppSMT)、树到树的程序翻译神经网络等,虽然代码翻译的结果在不断改善,但是,整体的效果仍然不尽如人意。

技术实现思路

[0004]本专利技术提供一种基于有监督学习的智能源码转换方法,以解决现有技术中存在的问题。近年来,依赖于大规模的平行语料库,有监督的机器翻译在某些语言对上已经取得了巨大的成功。然而,由于缺乏编程语言的并行数据,关于程序代码之间的翻译系统少之又少,并且翻译结果也并不理想。构建一个翻译器在实践中是困难的,不同的语言可以有不同的语法,并且依赖于不同的平台API和标准库功能。但是,编程语言有严格的语法,不容忍错别字和语法错误。大多数都是基于规则的转换工具,它们基本上对输入源代码进行标记,并将其转换为抽象语法树(AST),在此基础上应用手工编写的重写规则,而创建它们需要大量的时间,以及源语言和目标语言的高级知识。此外,从动态类型的语言翻译(例如Python)到静态类型的语言(例如Java)需要推断变量类型,这些类型本身是困难的。当然,除了基于规则的系统(例如J2C#)之外,也出现了一些基于短语的SMT系统(IpSMT)、基于多阶段短语的SMT系统(mppSMT)、树到树的程序翻译神经网络等,虽然代码翻译的结果在不断改善,但是,整体的效果仍然不尽如人意的上述问题。
[0005]为了达到上述目的,本专利技术提供如下技术方案:
[0006]一种基于有监督学习的智能源码转换方法,包括:
[0007]S101:从代码网站中抓取大量的并行数据,将获取的并行数据进行预处理;
[0008]S102:构造词典,将预处理后的并行数据划分为对应的训练集、测试集以及验证集;
[0009]S103:构造编程语言之间的映射,将语言代码转换为机器识别的编码,将机器识别的编码输入至模型中进行训练,获取代码翻译模型;
[0010]S104:将输入待翻译的源语言代码输入所述代码翻译模型,基于代码翻译模型对源语言代码进行翻译,获取目标语言的相应代码。
[0011]其中,所述S101步骤包括:
[0012]S1011:基于编写的代码从对应网站中获取代码数据;
[0013]S1012:将代码数据进行筛选和去噪的预处理。
[0014]其中,所述S102步骤包括:
[0015]基于Java的javalang标记器、Python标准库的标记器以及C语言的clang标记器,将预处理后的代码划分为训练集、测试集以及验证集,构造词典。
[0016]其中,所述S103步骤包括:
[0017]S1031:构造编程语言之间的映射,将源代码转换为机器可识别的编码;
[0018]S1032:将训练集输入至模型中进行训练,获取智能源码转换模型,智能源码转换模型包括编码器和解码器;
[0019]S1033:将测试集输入至智能源码转换模型,通过对测试集设置对应参数获取预测结果;
[0020]S1034:基于预测结果,对测试集进行重新调参,经过多次反复训练获取代码翻译模型。
[0021]其中,所述S104步骤包括:基于代码翻译模型对输入的待翻译源语言代码进行翻译,获取目标语言代码,根据预测结果和目标语言代码进行对比,根据对比结果不断调整测试集参数迭代训练。
[0022]其中,所述S1032包括:
[0023]在智能源码转换模型中输入代码序列,通过编码器端将代码序列编码成向量序列,其中包括输入序列的信息,将向量序列再作为输入传递给解码器端生成新的序列。
[0024]其中,包括:通过编码器提取代码特征,通过获取的代码特征为解码器提供语义信息,其中,编码器包括双向长短期记忆神经网络层和注意力层,解码器包括长短期记忆神经网络层和SoftMax层,解码器端的长短期记忆神经网络层接收编码器的经注意力层加权后的输出和解码器上一步预测代码的词嵌入作为输入。
[0025]其中,在编码器中加入注意力机制,基于注意力机制保留双向长短期记忆神经网络层对输入序列的中间输出结果,基于训练模型对输入代码序列进行选择性的学习,在模型输出时将输出代码序列与输入代码序列进行关联。
[0026]其中,创建词汇表,生成对应的训练集,对应训练集包括src

train、src

test、src

val、tgt

train、tgt

test、tgt

val。
[0027]其中,所述S1033步骤包括:对测试集进行超参数定义,超参数定义包括迭代次数、LSTM层数、嵌入词向量维度、epoch个数、学习率。
[0028]与现有技术相比,本专利技术具有以下优点:
[0029]一种基于有监督学习的智能源码转换方法,包括:从代码网站中抓取大量的并行数据,将获取的并行数据进行预处理;构造词典,将预处理后的并行数据划分为对应的训练集、测试集以及验证集;构造编程语言之间的映射,将语言代码转换为机器识别的编码,将
机器识别的编码输入至模型中进行训练,获取代码翻译模型;将输入待翻译的源语言代码输入所述代码翻译模型,基于代码翻译模型对源语言代码进行翻译,获取目标语言的相应代码。实现了将源代码从高级编程语言(如C或Python)转换为另一种语言(如C++或Java),并且提升了翻译的准确率,翻译结果比较理想。
[0030]本专利技术的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本专利技术而了解。本专利技术的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
[0031]下面通过附图和实施例,对本专利技术的技术方案做进一步的详细描述。
附图说明
[0032]附图用来提供对本专利技术的进一步理解,并且构成说明书的一部分,与本专利技术的实施例一起用于解释本本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于有监督学习的智能源码转换方法,其特征在于,包括:S101:从代码网站中抓取大量的并行数据,将获取的并行数据进行预处理;S102:构造词典,将预处理后的并行数据划分为对应的训练集、测试集以及验证集;S103:构造编程语言之间的映射,将语言代码转换为机器识别的编码,将机器识别的编码输入至模型中进行训练,获取代码翻译模型;S104:将输入待翻译的源语言代码输入所述代码翻译模型,基于代码翻译模型对源语言代码进行翻译,获取目标语言的相应代码。2.根据权利要求1所述的一种基于有监督学习的智能源码转换方法,其特征在于,所述S101步骤包括:S1011:基于编写的代码从对应网站中获取代码数据;S1012:将代码数据进行筛选和去噪的预处理。3.根据权利要求2所述的一种基于有监督学习的智能源码转换方法,其特征在于,所述S102步骤包括:基于Java的javalang标记器、Python标准库的标记器以及C语言的clang标记器,将预处理后的代码划分为训练集、测试集以及验证集,构造词典。4.根据权利要求1所述的一种基于有监督学习的智能源码转换方法,其特征在于,所述S103步骤包括:S1031:构造编程语言之间的映射,将源代码转换为机器可识别的编码;S1032:将训练集输入至模型中进行训练,获取智能源码转换模型,智能源码转换模型包括编码器和解码器;S1033:将测试集输入至智能源码转换模型,通过对测试集设置对应参数获取预测结果;S1034:基于预测结果,对测试集进行重新调参,经过多次反复训练获取代码翻译模型。5.根据权利要求4所述的一种基于有监督学习的智能源码转换方法,其特征在于,所述S104步骤包括:基于代码翻译模型对输入的待翻译源语言代码进行翻译,获取目标语言代码,根据预测结果和目标语言代码进行对比,根据对比结果不断调整测试集参数迭代训练。6.根据...

【专利技术属性】
技术研发人员:杨永全张东晓刘园园魏志强
申请(专利权)人:青岛海洋科学与技术国家实验室发展中心
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1