一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于神经网络的智能编程语言程序翻译方法系统

2022-11-23 18:23:33 来源:中国专利 TAG:


1.本发明涉及程序代码转换、程序生成、程序翻译和自然语言处理技术领域,并特别涉及一种基于神经网络的智能编程语言程序翻译方法系统。


背景技术:

2.智能芯片作为深度学习算法的重要物质载体,已经在不同的领域之中得到了广泛使用。作为智能计算系统中系统软件的重要组成部分,专用于智能计算系统的智能编程语言不断涌现,例如cuda编程语言和bang语言等。由于深度学习算法的快速发展,开发者为了在智能芯片上部署自定义的算法,需要用智能编程语言开发用户程序。然而,这些编程语言具有很高的编程难度,对程序员提出了很高的要求。由于智能芯片的庞大的运算单元设计,往往具有数据和任务上的并行性,程序员在使用这些编程语言时需要遵循并行编程模型。此外,不同于通用处理器上缓存(cache)等对程序员透明的存储结构,程序员在使用智能编程语言时,还需要手动对不同类型的存储空间进行显式的声明和管理等。这些难点无疑都加大了程序员在智能芯片上开发用户程序的挑战。
3.基于串行编程模型的传统编程语言的用户程序很容易获得,这得益于以下两方面的原因:(1)串行编程模型上存在大量已经开发并优化过的遗产代码;(2)串行编程模型符合程序员的使用习惯,用户可以轻松地使用传统编程语言编写用户程序。因此,如果能够利用传统编程语言的用户程序,将其迁移到智能编程语言的用户程序,能够极大的减少程序员在智能芯片上开发用户程序的开销。
4.目前,已经有一些工作进行了在不同自然语言之间的翻译工作(如英语翻译成中文),还有一些人进行了程序语言翻译的工作(如将c语言翻译成cuda语言)。目前现有技术transcoder可以将神经网络用于程序语言翻译,它能够完成针对c、python、java等用户程序的自动翻译。它由基本的transformer架构组成,包含一个编码器和一个译码器,编码器和译码器分别有独立的6层。该模型对于多种编程语言是共用的,采用三种无监督训练方式进行训练。
5.第一个任务是跨编程语言的预训练,该任务与掩码语言模型(mlm,masked language model)的训练方法类似,随机遮挡住一部分输入序列的词元,训练模型根据被遮挡住词元的上下文预测出词元。在训练过程中,交替更换不同语言的训练数据以让模型更高质量地学习不同语言的表示。
6.第二个任务:降噪自编码:经过掩码语言模型的预训练后,编码器已经学会了词的表征。但是翻译任务需要编码器和译码器的共同参与,而此时的译码器还没有学会如何解码。因此transcoder引入了降噪自编码的任务来训练译码器。该方法是通过对输入序列加入噪声,例如随机遮挡,删除某个词元或打乱顺序,然后让模型预测出原来的序列。这种训练方式让译码器也参与了训练,同时也让模型的稳定性更强,能够应对输入噪声。
7.第三个任务:反向翻译。经过前两步的训练之后,模型已经可以初步生成翻译结果了。但是生成结果的质量较差,因为模型还无法做到从指定语言翻译到另一个指定语言。为
了解决这个问题,引入了反向翻译,反向翻译是一种缺乏监督语料情况下的解决方案,是一种弱监督学习模型。反向翻译由两部分组成,分别是源语言到目标语言和目标语言到源语言的翻译模型。首先目标语言的语料作为输入,经过模型翻译得到源语言,这时会生成一个带有噪声的源语言语料,然后该源语言的语料和目标语言的语料可以近似认为是一对监督语料,因此从源语言到目标语言的过程就可以以一种弱监督的方式进行。训练过程中,两个方向同时训练直到收敛。
8.以下主要讲现有技术transcoder存在的问题和缺点。
9.transcoder主要是针对传统的串行编程语言,如c、java、python设计的,完成这些在语义上相近(指都是串行程序),仅仅在语法上有所不同(指不同编程语言关键字的不同,如c的void、python中的def)的编程语言之间的翻译较为容易。然而,传统编程语言,如c语言(以下都用c语言作为传统编程语言的代表)是串行编程模型,通过具有循环嵌套结构的标量表示描述复杂的运算。智能编程语言,如cuda语言(以下都用cuda语言作为智能编程语言的代表)是并行编程模型,需要对数据进行并行处理。c编程模型和cuda编程模型在语法和语义上都有很大的不同。在语法层面上,cuda编程模型存在特殊关键字,如并行变量threadidx.x。在语义层面上,需要将c程序中的循环嵌套结构翻译成cuda程序中的并行变量。这些问题都加剧了完成c程序到cuda程序自动翻译的难度。
10.现有的技术transcoder,并没有对程序语义,特别是并行语义进行分析。因此在面临将c语言翻译成cuda语言的问题时,表现欠佳,不能够很好的检测到c串行程序中的循环结构并将其翻译成对应的cuda程序。


技术实现要素:

11.本发明的目的是解决上述现有技术中,没有考虑智能编程语言与传统编程语言在程序语义上的区别,提出了一种用于建模程序并行语义的指标和一种用来对生成程序进行重排序的方法及系统。解决现有技术缺陷可以通过引入对并行语义的建模,并通过一个额外的重排序模型,在生成的cuda程序中挑选最优的解来解决。
12.现有技术transcoder可以被认为是能够得到一个翻译模型,该翻译模型能够以c程序作为输入,得到一组cuda程序的输出作为候选。然后,通过本发明引入的新的重排序模型,根据并行语义建模指标对其进行打分,从而挑出最优的cuda程序。
13.具体来说,本发明提出一种基于神经网络的智能编程语言程序翻译方法,其中包括:
14.步骤1、构建用于将源语言程序翻译为目标语言程序的正向模型,以及将目标语言程序为源语言程序的反向模型;根据源语言程序库和目标语言程序库,通过反向翻译训练该正向模型和该反向模型,得到正翻译模型和反翻译模型;
15.步骤2、将待翻译的源语言程序输入该正翻译模型,将得到的多个候选结果输入重排序模型,得到各候选结果的分数,选择分数最高的候选结果作为该源语言程序的翻译结果。
16.所述的基于神经网络的智能编程语言程序翻译方法,其中该步骤1包括:
17.从源语言程序库中选定程序作为第一训练目标输入该正向模型,得到第一目标语言,将该中间目标语言输入该反向模型,得到第一源语言,根据该第一源语言和该第一训练
目标构建第一损失,训练该正向模型和该反向模型;
18.同时从目标语言程序库中选定程序作为第二训练目标输入该反向模型,得到第二源语言,将该第二源语言输入该正向模型,得到第二目标语言,根据该第二目标语言和该第二训练目标构建第二损失,训练该正向模型和该反向模型;
19.直到该第一损失和该第二损失收敛,分别保存当前正向模型和反向模型作为该正翻译模型和该反翻译模型;
20.所述的基于神经网络的智能编程语言程序翻译方法,其中该重排序模型的训练包括:
21.从该目标语言程序库中选择程序x输入该反翻译模型,生成一个中间源程序,将该中间源程序输入该正翻译模型,得到多个候选结果,归一化重排序模型对每个候选结果的预测分数,得到输出分布;
22.以该程序x作为基准,得到每个候选结果的正确分数,作为输出分布,通过最小化该输出分布和该输出分布之间的散度,对该重排序模型进行训练。
23.所述的基于神经网络的智能编程语言程序翻译方法,其中该源语言为c、python或java语言,该目标语言为cuda语言或bang语言。
24.本发明还提出了一种基于神经网络的智能编程语言程序翻译系统,其中包括:
25.初始模块,用于构建将源语言程序翻译为目标语言程序的正向模型,以及将目标语言程序为源语言程序的反向模型;根据源语言程序库和目标语言程序库,通过反向翻译训练该正向模型和该反向模型,得到正翻译模型和反翻译模型;
26.翻译模块,用于将待翻译的源语言程序输入该正翻译模型,将得到的多个候选结果输入重排序模型,得到各候选结果的分数,选择分数最高的候选结果作为该源语言程序的翻译结果。
27.所述的基于神经网络的智能编程语言程序翻译系统,其中该初始模块用于:
28.从源语言程序库中选定程序作为第一训练目标输入该正向模型,得到第一目标语言,将该中间目标语言输入该反向模型,得到第一源语言,根据该第一源语言和该第一训练目标构建第一损失,训练该正向模型和该反向模型;
29.同时从目标语言程序库中选定程序作为第二训练目标输入该反向模型,得到第二源语言,将该第二源语言输入该正向模型,得到第二目标语言,根据该第二目标语言和该第二训练目标构建第二损失,训练该正向模型和该反向模型;
30.直到该第一损失和该第二损失收敛,分别保存当前正向模型和反向模型作为该正翻译模型和该反翻译模型;
31.所述的基于神经网络的智能编程语言程序翻译系统,其中该重排序模型的训练包括:
32.从该目标语言程序库中选择程序x输入该反翻译模型,生成一个中间源程序,将该中间源程序输入该正翻译模型,得到多个候选结果,归一化重排序模型对每个候选结果的预测分数,得到输出分布;
33.以该程序x作为基准,得到每个候选结果的正确分数,作为输出分布,通过最小化该输出分布和该输出分布之间的散度,对该重排序模型进行训练。
34.所述的基于神经网络的智能编程语言程序翻译系统,其中该源语言为c、python或
java语言,该目标语言为cuda语言或bang语言。
35.本发明还提出了一种存储介质,用于存储执行所述任意一种基于神经网络的智能编程语言程序翻译方法的程序。
36.本发明还提出了一种客户端,用于所述任意一种基于神经网络的智能编程语言程序翻译系统。
37.由以上方案可知,本发明的优点在于:
38.本发明能够实现将传统编程语言的程序到智能编程语言程序的自动翻译,并能够相较于现有技术,在机器翻译评价指标bleu(bilingual evaluation understudy)上从72.21提升到74.00,提升1.79。在生成的智能编程语言程序的编译通过率上从83.8%提升到92.8%。此外,生成的智能编程语言的程序,相较于原始的传统编程语言的程序,能够在运行速度上最高提升347倍。本发明还能够用于辅助程序员编写用户程序,将程序员编写智能编程语言程序的开发效率最高提升3.8倍。
附图说明
39.图1为本发明整体的训练流程图;
40.图2为本发明第一、二阶段训练流程图;
41.图3为本发明第三阶段训练流程图;
42.图4为本发明第四阶段训练流程图;
43.图5为本发明翻译过程整体流程图。
具体实施方式
44.为了实现上述技术效果,本发明主要包括如下关键技术点:
45.关键点1,并行语义建模;技术效果,能够对用智能编程语言编写的程序进行打分,评价生成的程序的并行语义;
46.关键点2,重排序模型(或者翻译模型和重排序模型的组合);技术效果,能够利用关键点1(即并行语义建模)进行重排序,提升从传统编程语言的程序翻译到智能编程语言的程序的效果。
47.为让本发明的上述特征和效果能阐述的更明确易懂,下文特举实施例,并配合说明书附图作详细说明如下。
48.并行语义建模:
49.本发明基于bleu,提出一个评价指标parableu:
50.parableu=α
·
bleu β
·
bleu
weight

·
match
ast
δ
·
match
df
)
×
sim
cudakeywords
×
sim
loops
×
sim
parallel
51.式中bleu
weight
是带有权值的bleu,match为匹配程度,ast是abstract syntax trees,抽象语法树的缩写,match
ast
指的是假设程序和参考程序在抽象语法树上的匹配程度,df是数据流dataflow的缩写。match
df
指的是假设程序和参考程序在数据流上的匹配程度,sim是相似程度similarity缩写。cudakeywords是cuda相关的关键字。sim
cudakeywords
是假设程序和参考程序在cuda相关的关键字的相似程度。loops是循环结构,是cuda程序的重要组成部分。sim
loops
指的是假设程序和参考程序在循环结构的相似程度;parallel表达的是
并行语义,即在哪些循环轴上可以并行,在那些循环轴上不能并行。sim
parallel
指的是假设程序和参考程序在并行语义的相似程度。α,β,γ,δ是预设的权重,通常情况下可为0.25。
52.该指标考虑到了智能编程语言的关键字相似度、循环结构相似度和并行语义相似性。
53.关键字匹配度是为了在语法层面将cuda代码与c代码区分开,比如判断_global_等cuda专有的关键字的出现与否等等。循环结构相似度用来检查循环结构的匹配程度。并行语义相似性在循环结构相似性的基础上,进一步判断是否正确的把原本串行的程序翻译成并行的程序。特别地,本发明采用相似度距离而不是匹配分数来评估循环结构相似性和并行语义相似性。相似度距离能更好的的评价并行语义的相似性,并且对不匹配的并行语义进行惩罚。
54.通过该评价指标parableu,能够更好的对生成的程序进行打分。
55.重排序模型(或者翻译模型和重排序模型的组合):
56.训练时的简略流程图:
57.因c语言是传统编程语言的典型,故以c语言为例,在本实施例中作为程序翻译的源语言。因cuda语言是智能编程语言的典型,故以cuda语言为例,在本实施例中作为程序翻译的目标语言。
58.如图1所示,本发明训练分为四个阶段:预训练、降噪自编码、反向翻译和判别式重排序。
59.第一个阶段-预训练:如图2(上半部分)所示,通过收集通过c语言和cuda语言编写的程序,分别作为c单语料库和cuda单语料库。然后通过预训练方法得到基本的语言模型(language model,lm)。语言模型是让计算机能够“学会”c语言和cuda语言,但此时还不能建立c语言和cuda语言之间的关系。后续的翻译模型能够让计算机学会c语言和cuda语言之间的关系。
60.第二个阶段-降噪自编码:如图2(下半部分)所示。该方法训练了翻译模型的译码器,主要是为了让模型的稳定性更强,能够应对输入噪声。
61.第三个阶段-反向翻译:如图3所示,在反向翻译的训练过程中,源语言到目标语言的转换模型c-》cuda和目标语言到源语言cuda-》c的转换模型是同时训练的。具体地,通常,由于缺少从源语言和目标语言组成的程序对,不能够使用监督学习的方法对翻译模型进行训练。所以,本发明通过反向翻译的方法,对于在c单语料库中的输入程序,生成与之相对的cuda程序,然后再翻译回c程序,这样本发明就能够将原始的输入c程序作为参考,将c-cuda-c之后的c程序作为假设,通过最小化它俩之间的差别,去训练翻译模型(machine translation model,mt model);cuda-c-cuda方向亦然。
62.第四个阶段-重排序模型:如图4所示,经过先前的反向翻译的训练过程后,翻译模型已经能够进行c到cuda的转换,但是生成的cuda程序的质量不能满足需求。判别式重排序的训练过程依赖对程序进行并行语义评估的监督数据。因此,本发明利用反向模型的训练结果,如图所示,在cuda-c-cuda的反向翻译过程之中,生成重排序模型的数据。
63.首先给定cuda代码x为输入,通过cuda-c翻译模型生成c代码u,该过程本发明将集束搜索(beam search)设置为1,即只生成1结果。然后将u作为c-cuda翻译模型的输入,该过程集束搜索设置为50,生成结果为wi,i∈[1,50].
[0064]
本发明将这n个候选结果作为重排序模型d的输入。重排序模型d可采取一个简单的mlp网络。结构为:mlp-》tanh(激活函数)-》mlp。重排序模型分别对每一个候选结果wi预测一个parableu分数,通过归一化处理得到模型d的输出分布pd。同时,本发明采用同样的方法,以原始的cuda输入x作为基准,以每个wi作为假设,得到模型d训练的目标分布p。通过最小化pd和p之间的kullback-leibler散度来对重排序模型d进行训练,整个训练过程如公式所示:
[0065][0066]
式中d:重排序模型;u:c-cuda翻译模型的输入;wi,i∈[1,50].在集束搜索中50个解的顺序;exp:指数函数;上述第一个公式:重排序模型的分布pd,分母是集束模型50个解的指数的和,分子是每个解的指数值,代表了当前解wi的概率。上述第二个公式:max min取最大最小,相当于一个归一化函数,把score归一化到[0,1]之间。上述第三个公式:与第一个公式类似,用公式2中的score算出目标分布p,其中τ为一个温度参数,可取值0.5。最后一个公式即第四个公式l=loss。公式左边即代表重排序模型的loss。公式右边是kullback-leibler散度(即kl散度)的计算公式。kl散度拟合的是重排序模型d的分布和score算出来的目标分布。
[0067]
训练完成后,本发明就得到了一个翻译模型和一个重排序模型。
[0068]
如图5所示,推理时,给定源语言的程序x,首选通过翻译模型,用集束搜索的方法生成一组候选解,然后用重排序模型,在该组候选解中跳出parableu最高的解,作为最终程序翻译的效果。
[0069]
以下为与上述方法实施例对应的系统实施例,本实施方式可与上述实施方式互相配合实施。上述实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在上述实施方式中。
[0070]
本发明还提出了一种基于神经网络的智能编程语言程序翻译系统,其中包括:
[0071]
初始模块,用于构建将源语言程序翻译为目标语言程序的正向模型,以及将目标语言程序为源语言程序的反向模型;根据源语言程序库和目标语言程序库,通过反向翻译训练该正向模型和该反向模型,得到正翻译模型和反翻译模型;
[0072]
翻译模块,用于将待翻译的源语言程序输入该正翻译模型,将得到的多个候选结果输入重排序模型,得到各候选结果的分数,选择分数最高的候选结果作为该源语言程序的翻译结果。
[0073]
所述的基于神经网络的智能编程语言程序翻译系统,其中该初始模块用于:
[0074]
从源语言程序库中选定程序作为第一训练目标输入该正向模型,得到第一目标语
言,将该中间目标语言输入该反向模型,得到第一源语言,根据该第一源语言和该第一训练目标构建第一损失,训练该正向模型和该反向模型;
[0075]
同时从目标语言程序库中选定程序作为第二训练目标输入该反向模型,得到第二源语言,将该第二源语言输入该正向模型,得到第二目标语言,根据该第二目标语言和该第二训练目标构建第二损失,训练该正向模型和该反向模型;
[0076]
直到该第一损失和该第二损失收敛,分别保存当前正向模型和反向模型作为该正翻译模型和该反翻译模型;
[0077]
所述的基于神经网络的智能编程语言程序翻译系统,其中该重排序模型的训练包括:
[0078]
从该目标语言程序库中选择程序x输入该反翻译模型,生成一个中间源程序,将该中间源程序输入该正翻译模型,得到多个候选结果,归一化重排序模型对每个候选结果的预测分数,得到输出分布;
[0079]
以该程序x作为基准,得到每个候选结果的正确分数,作为输出分布,通过最小化该输出分布和该输出分布之间的散度,对该重排序模型进行训练。
[0080]
所述的基于神经网络的智能编程语言程序翻译系统,其中该源语言为c、python或java语言,该目标语言为cuda语言或bang语言。
[0081]
本发明还提出了一种存储介质,用于存储执行所述任意一种基于神经网络的智能编程语言程序翻译方法的程序。
[0082]
本发明还提出了一种客户端,用于所述任意一种基于神经网络的智能编程语言程序翻译系统。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献