一种基于有监督学习的智能源码转换方法与流程

专利2023-02-24  101



1.本发明涉及智能源码转换技术领域,尤其涉及一种基于有监督学习的智能源码转换方法。


背景技术:

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


技术实现要素:

4.本发明提供一种基于有监督学习的智能源码转换方法,以解决现有技术中存在的问题。近年来,依赖于大规模的平行语料库,有监督的机器翻译在某些语言对上已经取得了巨大的成功。然而,由于缺乏编程语言的并行数据,关于程序代码之间的翻译系统少之又少,并且翻译结果也并不理想。构建一个翻译器在实践中是困难的,不同的语言可以有不同的语法,并且依赖于不同的平台api和标准库功能。但是,编程语言有严格的语法,不容忍错别字和语法错误。大多数都是基于规则的转换工具,它们基本上对输入源代码进行标记,并将其转换为抽象语法树(ast),在此基础上应用手工编写的重写规则,而创建它们需要大量的时间,以及源语言和目标语言的高级知识。此外,从动态类型的语言翻译(例如python)到静态类型的语言(例如java)需要推断变量类型,这些类型本身是困难的。当然,除了基于规则的系统(例如j2c#)之外,也出现了一些基于短语的smt系统(ipsmt)、基于多阶段短语的smt系统(mppsmt)、树到树的程序翻译神经网络等,虽然代码翻译的结果在不断改善,但是,整体的效果仍然不尽如人意的上述问题。
5.为了达到上述目的,本发明提供如下技术方案:
6.一种基于有监督学习的智能源码转换方法,包括:
7.s101:从代码网站中抓取大量的并行数据,将获取的并行数据进行预处理;
8.s102:构造词典,将预处理后的并行数据划分为对应的训练集、测试集以及验证集;
9.s103:构造编程语言之间的映射,将语言代码转换为机器识别的编码,将机器识别的编码输入至模型中进行训练,获取代码翻译模型;
10.s104:将输入待翻译的源语言代码输入所述代码翻译模型,基于代码翻译模型对源语言代码进行翻译,获取目标语言的相应代码。
11.其中,所述s101步骤包括:
12.s1011:基于编写的代码从对应网站中获取代码数据;
13.s1012:将代码数据进行筛选和去噪的预处理。
14.其中,所述s102步骤包括:
15.基于java的javalang标记器、python标准库的标记器以及c语言的clang标记器,将预处理后的代码划分为训练集、测试集以及验证集,构造词典。
16.其中,所述s103步骤包括:
17.s1031:构造编程语言之间的映射,将源代码转换为机器可识别的编码;
18.s1032:将训练集输入至模型中进行训练,获取智能源码转换模型,智能源码转换模型包括编码器和解码器;
19.s1033:将测试集输入至智能源码转换模型,通过对测试集设置对应参数获取预测结果;
20.s1034:基于预测结果,对测试集进行重新调参,经过多次反复训练获取代码翻译模型。
21.其中,所述s104步骤包括:基于代码翻译模型对输入的待翻译源语言代码进行翻译,获取目标语言代码,根据预测结果和目标语言代码进行对比,根据对比结果不断调整测试集参数迭代训练。
22.其中,所述s1032包括:
23.在智能源码转换模型中输入代码序列,通过编码器端将代码序列编码成向量序列,其中包括输入序列的信息,将向量序列再作为输入传递给解码器端生成新的序列。
24.其中,包括:通过编码器提取代码特征,通过获取的代码特征为解码器提供语义信息,其中,编码器包括双向长短期记忆神经网络层和注意力层,解码器包括长短期记忆神经网络层和softmax层,解码器端的长短期记忆神经网络层接收编码器的经注意力层加权后的输出和解码器上一步预测代码的词嵌入作为输入。
25.其中,在编码器中加入注意力机制,基于注意力机制保留双向长短期记忆神经网络层对输入序列的中间输出结果,基于训练模型对输入代码序列进行选择性的学习,在模型输出时将输出代码序列与输入代码序列进行关联。
26.其中,创建词汇表,生成对应的训练集,对应训练集包括src-train、src-test、src-val、tgt-train、tgt-test、tgt-val。
27.其中,所述s1033步骤包括:对测试集进行超参数定义,超参数定义包括迭代次数、lstm层数、嵌入词向量维度、epoch个数、学习率。
28.与现有技术相比,本发明具有以下优点:
29.一种基于有监督学习的智能源码转换方法,包括:从代码网站中抓取大量的并行数据,将获取的并行数据进行预处理;构造词典,将预处理后的并行数据划分为对应的训练集、测试集以及验证集;构造编程语言之间的映射,将语言代码转换为机器识别的编码,将
机器识别的编码输入至模型中进行训练,获取代码翻译模型;将输入待翻译的源语言代码输入所述代码翻译模型,基于代码翻译模型对源语言代码进行翻译,获取目标语言的相应代码。实现了将源代码从高级编程语言(如c或python)转换为另一种语言(如c++或java),并且提升了翻译的准确率,翻译结果比较理想。
30.本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
31.下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
32.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
33.图1为本发明实施例中一种基于有监督学习的智能源码转换方法的流程图;
34.图2为本发明实施例中一种基于有监督学习的智能源码转换方法的网络结构图;
35.图3为本发明实施例中一种基于有监督学习的智能源码转换方法的模型结构图。
具体实施方式
36.以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。
37.本发明实施例提供了一种基于有监督学习的智能源码转换方法,请参照图1至图3,包括:
38.s101:从代码网站中抓取大量的并行数据,将获取的并行数据进行预处理;
39.s102:构造词典,将预处理后的并行数据划分为对应的训练集、测试集以及验证集;
40.s103:构造编程语言之间的映射,将语言代码转换为机器识别的编码,将机器识别的编码输入至模型中进行训练,获取代码翻译模型;
41.s104:将输入待翻译的源语言代码输入所述代码翻译模型,基于代码翻译模型对源语言代码进行翻译,获取目标语言的相应代码。
42.上述技术方案的工作原理为:在代码网站抓取并行数据进行预处理;基于编码器-解码器模型,通过双向长短期记忆网络(bi-lstm)、attention注意力机制、长短期记忆网络(lstm)来构建编码器和解码器;最后进行测试并调参。利用机器学习结合自然语言处理,实现了一个有监督的智能源码转换模型,让不同的编程语言之间可以随意转换,大大提高了程序代码翻译的精准度。
43.上述技术方案的有益效果为:在代码网站抓取并行数据进行预处理;基于编码器-解码器模型,通过双向长短期记忆网络(bi-lstm)、attention注意力机制、长短期记忆网络(lstm)来构建编码器和解码器;最后进行测试并调参。利用机器学习结合自然语言处理,实现了一个有监督的智能源码转换模型,让不同的编程语言之间可以随意转换,大大提高了程序代码翻译的精准度。
44.在另一实施例中,所述s101步骤包括:
45.s1011:基于编写的代码从对应网站中获取代码数据;
46.s1012:将代码数据进行筛选和去噪的预处理。
47.上述技术方案的工作原理为:采集大量多类编程语言平行语料进行筛选与去噪预处理。
48.上述技术方案的有益效果为:采集大量多类编程语言平行语料进行筛选与去噪预处理。
49.在另一实施例中,所述s102步骤包括:
50.基于java的javalang标记器、python标准库的标记器以及c语言的clang标记器,将预处理后的代码划分为训练集、测试集以及验证集,构造词典。
51.上述技术方案的工作原理为:将代码按照7:2:1分割成训练集、验证集和测试集。
52.上述技术方案的有益效果为:将代码按照7:2:1分割成训练集、验证集和测试集。
53.在另一实施例中,所述s103步骤包括:
54.s1031:构造编程语言之间的映射,将源代码转换为机器可识别的编码;
55.s1032:将训练集输入至模型中进行训练,获取智能源码转换模型,智能源码转换模型包括编码器和解码器;
56.s1033:将测试集输入至智能源码转换模型,通过对测试集设置对应参数获取预测结果;
57.s1034:基于预测结果,对测试集进行重新调参,经过多次反复训练获取代码翻译模型。
58.上述技术方案的工作原理为:对平行编程语言保留编程语言的大量重合的关键字,把平行语言之间对应片段映射在相近的潜在空间,获取相应代码的向量表示。最后,服务器把源语言代码和目标语言代码送入有监督的智能源码转换中进行训练得到智能源码翻译模型,可以实现服务器把源语言输入该模型输出目标语言。
59.上述技术方案的有益效果为:对平行编程语言保留编程语言的大量重合的关键字,把平行语言之间对应片段映射在相近的潜在空间,获取相应代码的向量表示。最后,服务器把源语言代码和目标语言代码送入有监督的智能源码转换中进行训练得到智能源码翻译模型,可以实现服务器把源语言输入该模型输出目标语言。
60.在另一实施例中,所述s104步骤包括:基于代码翻译模型对输入的待翻译源语言代码进行翻译,获取目标语言代码,根据预测结果和目标语言代码进行对比,根据对比结果不断调整测试集参数迭代训练。
61.上述技术方案的工作原理为:基于代码翻译模型对输入的待翻译源语言代码进行翻译,获取目标语言代码,根据预测结果和目标语言代码进行对比,根据对比结果不断调整测试集参数迭代训练。
62.上述技术方案的有益效果为:基于代码翻译模型对输入的待翻译源语言代码进行翻译,获取目标语言代码,根据预测结果和目标语言代码进行对比,根据对比结果不断调整测试集参数迭代训练。
63.在另一实施例中,所述s1032包括:
64.在智能源码转换模型中输入代码序列,通过编码器端将代码序列编码成向量序列,其中包括输入序列的信息,将向量序列再作为输入传递给解码器端生成新的序列。
65.上述技术方案的工作原理为:在智能源码转换模型中,我们输入一个代码序列,通过编码器端将代码序列编码成一个向量(contextvector)序列,其中包含了输入序列的信息,将这个向量序列再作为输入传递给解码器端生成新的序列。
66.上述技术方案的有益效果为:在智能源码转换模型中,我们输入一个代码序列,通过编码器端将代码序列编码成一个向量(contextvector)序列,其中包含了输入序列的信息,将这个向量序列再作为输入传递给解码器端生成新的序列。
67.在另一实施例中,包括:通过编码器提取代码特征,通过获取的代码特征为解码器提供语义信息,其中,编码器包括双向长短期记忆神经网络层和注意力层,解码器包括长短期记忆神经网络层和softmax层,解码器端的长短期记忆神经网络层接收编码器的经注意力层加权后的输出和解码器上一步预测代码的词嵌入作为输入。
68.上述技术方案的工作原理为:解码器端可以使用长短期记忆神经网络和softmax,通过编码器提取代码特征,通过获取的代码特征为解码器提供语义信息。
69.上述技术方案的有益效果为:解码器端可以使用长短期记忆神经网络和softmax,通过编码器提取代码特征,通过获取的代码特征为解码器提供语义信息。
70.在另一实施例中,在编码器中加入注意力机制,基于注意力机制保留双向长短期记忆神经网络层对输入序列的中间输出结果,基于训练模型对输入代码序列进行选择性的学习,在模型输出时将输出代码序列与输入代码序列进行关联。
71.上述技术方案的工作原理为:编码器端可以使用多层bi-lstm和attention注意力机制,解码器端可以使用多层长短期记忆神经网络(lstm网络)和softmax。程序代码将一个函数作为一个句子,某些函数具有很长的序列。rnn单元在面对长序列数据时,很容易便遭遇梯度弥散,使得rnn只具备短期记忆,即rnn面对长序列数据,仅可获取较近的序列的信息,而对较早期的序列不具备记忆功能,从而丢失信息。lstm的结构有效地解决了rnn的短期依赖瓶颈,它可以绕过某些单元从而记忆更长时间步的信息。对于一些复杂的序列,需要用到多层的网络进行学习,因此,用到了多层长短期记忆神经网络(lstm网络)。双向长短期记忆神经网络(bi-lstm)将捕捉双向的长时间依赖关系。在编码器中还加入了注意力机制,注意力机制的实现是通过保留bi-lstm编码器对输入序列的中间输出结果,然后训练一个模型来对这些输入进行选择性的学习并且在模型输出时将输出序列与之进行关联。在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。
72.上述技术方案的有益效果为:在编码器中加入注意力机制,基于注意力机制保留双向长短期记忆神经网络层对输入序列的中间输出结果,基于训练模型对输入代码序列进行选择性的学习,在模型输出时将输出代码序列与输入代码序列进行关联。编码器通过对输入序列的学习,将学习到的信息转化为一个向量序列传递给解码器,解码器再基于这个输入得到输出。一个神经网络只负责将代码编码成具体的一套特征,而另一个神经网络将这些特征解码还原回代码。深度学习可以搜索那些特定的特征,而不需要了解其特性。
73.在另一实施例中,创建词汇表,生成对应的训练集,对应训练集包括src-train、src-test、src-val、tgt-train、tgt-test、tgt-val。
74.上述技术方案的工作原理为:将收集到的多种编程语言的平行预料进行筛选,并对源代码和目标代码进行去噪处理。然后,创建词汇表vocab,生成相应所需的训练数据集src-train、src-test、src-val、tgt-train、tgt-test、tgt-val。最后对代码进行编码,转换
成机器可识别的编码。在双语词典中可以将不同编程语言对应的需要引入的包、库作为对应。
75.上述技术方案的有益效果为:将收集到的多种编程语言的平行预料进行筛选,并对源代码和目标代码进行去噪处理。然后,创建词汇表vocab,生成相应所需的训练数据集src-train、src-test、src-val、tgt-train、tgt-test、tgt-val。最后对代码进行编码,转换成机器可识别的编码。在双语词典中可以将不同编程语言对应的需要引入的包、库作为对应。
76.在另一实施例中,所述s1033步骤包括:对测试集进行超参数定义,超参数定义包括迭代次数、lstm层数、嵌入词向量维度、epoch个数、学习率。
77.上述技术方案的工作原理为:测试过程为定义超参数,并输入数据进行训练。可以根据需要进行超参数定义,迭代次数、lstm层数、嵌入词向量维度、epoch个数、学习率等等。根据训练结果我们可以重新调参进行反复多次训练。
78.上述技术方案的有益效果为:测试过程为定义超参数,并输入数据进行训练。可以根据需要进行超参数定义,迭代次数、lstm层数、嵌入词向量维度、epoch个数、学习率等等。根据训练结果我们可以重新调参进行反复多次训练。
79.显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

技术特征:
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.根据权利要求4所述的一种基于有监督学习的智能源码转换方法,其特征在于,所述s1032包括:在智能源码转换模型中输入代码序列,通过编码器端将代码序列编码成向量序列,其中向量序列包括输入序列的信息,将向量序列再作为输入传递给解码器端生成新的序列。7.根据权利要求6所述的一种基于有监督学习的智能源码转换方法,其特征在于,包括:通过编码器提取代码特征,通过获取的代码特征为解码器提供语义信息,其中,编码器包括双向长短期记忆神经网络层和注意力层,解码器包括长短期记忆神经网络层和softmax层,解码器端的长短期记忆神经网络层接收编码器的经注意力层加权后的输出和解码器上一步预测代码的词嵌入作为输入。8.根据权利要求7所述的一种基于有监督学习的智能源码转换方法,其特征在于,在编码器中加入注意力机制,基于注意力机制保留双向长短期记忆神经网络层对输入序列的中间输出结果,基于训练模型对输入代码序列进行选择性的学习,在模型输出时将输出代码序列与输入代码序列进行关联。
9.根据权利要求3所述的一种基于有监督学习的智能源码转换方法,其特征在于,所述将预处理后的代码划分为训练集包括:创建词汇表,生成对应的训练集,对应训练集包括src-train、src-test、src-val、tgt-train、tgt-test、tgt-val。10.根据权利要求4所述的一种基于有监督学习的智能源码转换方法,其特征在于,所述s1033步骤包括:对测试集进行超参数定义,超参数定义包括迭代次数、lstm层数、嵌入词向量维度、epoch个数、学习率,输入对应数据,根据定义后的超参数进行训练,获取预测结果。

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


技术研发人员:杨永全 张东晓 刘园园 魏志强
受保护的技术使用者:青岛海洋科学与技术国家实验室发展中心
技术研发日:2022.07.26
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-1327.html

最新回复(0)