一种基于离散型注意力机制的神经机器翻译解码加速方法
技术领域
本发明涉及一种神经机器翻译解码加速技术,具体为基于离散型注意力机制的神经机器翻译解码加速方法。
背景技术
机器翻译(Machine Translation)是利用计算机程序将一种自然语言翻译成另一种自然语言,属于计算语言学的范畴。1949年,沃伦·韦弗(Warren Weaver)发表了一份以《翻译》为题的备忘录标志着基于现代计算机的机器翻译正式登上历史舞台。机器翻译既涉及到人类对自身语言和思维方式的认知,又涉及到人工智能、信息论、知识工程和软件工程等很多领域,是一个多种技术深度交叉的学科。近十几年来,机器翻译研究及产业化在各国政府和产业界的大力推动下,取得了快速进展。我国政府把包括机器翻译技术在内的自然语言理解研究列入国家中长期科技发展规划纲要中,以此推进语言信息处理及机器翻译领域快速发展。谷歌、百度和微软等互联网巨头也将机器翻译作为在线服务的重要入口。据报道,谷歌翻译每天为全球两亿多个用户提供服务,每天翻译次数达10亿次,每天翻译处理的文字数量相当于100万册图书,超过了全世界的专业翻译人员一年能够翻译的文字规模。机器翻译对推动各国政治、经济、文化、商务、旅游等领域交流起到了重要的作用。
随着机器翻译研究的深入及机器学习等相关学科的进步,人们逐渐发现统计机器翻译存在着许多难以回避的问题,比如,翻译过程依赖隐藏结构的假设、翻译特征的定义需要人工设计、特征工程耗时耗力而且往往不具有普适意义。对于这些问题,人们又尝试了一种全新的思路——神经机器翻译。所谓神经机器翻译是使用神经元网络直接对翻译问题建模,这个过程并不假设翻译具有隐藏结构,同时也不依赖人工定义的特征,整个翻译模型都可以在一种端到端的模式下训练完成,而翻译解码也就变成对神经网络进行前向计算或推断的过程。
端到端的神经机器翻译通过神经网络模型直接实现从源语言到目标语言的翻译,所采用的主要框架是编码器-解码器(Encoder-Decoder)框架。编码器-解码器框架将翻译任务看作序列到序列的转换,即将翻译过程看作从源语言序列转换成目标语言序列的过程。该过程主要包括两个步骤:(1)源语言端,编码器将源语言序列编码成源语言上下文向量;(2)目标语言端,解码器根据编码器提供的源语言上下文向量生成目标语言序列。
注意力机制是神经机器翻译模型中重要的组成部分。在最初的编码器-解码器框架中,由于上述原因导致神经网络难以学习到源端和目标端的对应信息,翻译系统对输入较长的句子的翻译效果较差。针对这一问题,研究人员提出了基于注意力机制的神经机器翻译,此模型可以动态的计算源语言的上下文,有利于神经网络学到更多的全局信息,该方法的核心思想在于通过引入源语和目标语句中词汇之间的关联程度来补充网络中的全局信息,增加网络可获得的关于文本的语义信息。
注意力机制可以帮助神经网络在生成目标端单词时有选择性的关注不同的源语言位置,投入更多的注意力在更重要的位置,而对不太重要的位置只需投入较少的注意力,使神经网络更容易的捕获到和当前目标端单词更相关的源语信息,从而使得神经网络对目标语言的预测更为准确。在生成一个目标语单词时,基于注意力机制的神经网络会基于得到的不同的注意力对不同源语位置向量进行加权求和,得到不同的上下文向量。注意力机制的引入使得不同源语言位置对目标语单词生成的贡献度不同,使得神经网络中信息流的传递变得更为高效,有助于神经网络模型的学习。
Google于2017年提出了完全基于注意力机制的模型结构,称为Transformer,该模型摒弃了传统的基于循环神经网络和基于卷积网络的方法,达到了更好的性能,并且有效提高了模型的并行程度,加快了训练速度。
虽然当前基于注意力机制的神经网络已经取得了不错的性能,但仍存在着一个问题:当前的神经网络模型都过度依赖于单精度和双精度的浮点运算。虽然浮点运算已经被证明了有诸多好处,比如运算稳定、表示空间比较大,但相对于整数运算等定点运算,浮点运算复杂度高、芯片制作复杂。
发明内容
针对现有技术中机器翻译的方法过度依赖于单精度和双精度浮点而无法发挥低精度数值运算优势,本发明要解决的技术问题是提供一种基于离散型注意力机制的神经机器翻译解码加速方法,充分利用定点数的运算复杂度低这种天然的优势,能够在快速推理的最新实现基础上,且在模型性能几乎没有下降的前提下,提升实时相应速度。
为解决上述技术问题,本发明采用的技术方案是:
本发明一种基于离散型注意力机制的神经机器翻译解码加速方法,包括以下步骤:
1)构建训练平行语料及基于注意力机制的神经机器翻译的模型,利用平行语料生成机器翻译词表,进一步训练得到训练收敛后的模型参数,作为基线系统;
2)通过对模型参数数值的缩放将网络中注意力机制部分参数转换为整型数值,将浮点数映射到整型数值的整型区间内;
3)将无法用整型计算的归一化部分替换为有利于整型计算的线性结构;
4)在线性结构之前通过阈值来控制是否所有数值均参与运算;
5)通过在训练数据中随机抽取的1%~2%的数据上调整所选取的阈值,使其能够达到更好的翻译结果。
在步骤1)中,基于注意力机制的神经机器翻译模型包括编码端和解码端,使用注意力机制,当使用多头注意力机制时,注意力机制计算方式为:MultiHead(Q,K,V)=Concat(head1,head2,...,headh)WO
head1,head2,...,headh代表模型中的h个头,其种每个头的注意力计算公式为:
其中softmax(·)为归一化函数,Q、K和V分别为参与计算的不同的线性变换矩阵,dk为K矩阵每个头的维度大小。
步骤2)中通过对模型参数数值的缩放将网络中注意力机制部分参数转换为整型数值,将浮点数映射到整型数值的整型区间内,具体为:
201)计算出每层的注意力权重S
m=s(Q
m,K
m),其中s(·)为注意力权重的
计算公式,m为模型中第m层;
202)通过注意力权重的值计算出进行缩放的缩放因子scale,
其中target为需要进行缩放的目标参数,Max和Min分别为需要缩放区域的最大阈值和最小阈值;
203)根据计算出的scale值计算缩放后的值:
Ascale=round(Afloat·scale)
其中Ascale为缩放后的值,Afloat为进行操作的浮点数值,scale为202)中计算出的缩放因子,round为四舍五入操作。
步骤3)中,用整型计算的归一化部分替换为有利于整型计算的线性结构,步骤为:
其中MIN代表每次计算参数中最小的值,j代表进行归一化操作时单个数的索引值,zj代表j所对应的数值,k代表归一化部分共有k个数,zk代表k个数求和时的每一个数。
步骤4)中,在线性结构之前通过阈值来控制是否所有数值均参与运算,具体为:根据步骤2)中计算出的映射后的整型数值,若网络中整型数值所映射的模型参数高于或等于阈值则参与计算,否则直接将此参数舍弃。
本发明具有以下有益效果及优点:
1.本发明能够在快速推理的最新实现基础上,充分利用定点数的运算复杂度低这种天然的优势,能够在快速推理的最新实现基础上,且在模型性能几乎没有下降的前提下,提升实时相应速度。
2.本发明能够在具备更多模型参数和使用更多的训练数据的前提下,减小模型训练和存储的硬件成本代价。
附图说明
图1为神经机器翻译编码解码注意力机制示意图;
图2为多头注意力机制示意图;
图3为注意力机制计算示意图;
图4为本发明中改进后注意力机制计算示意图。
具体实施方式
下面结合说明书附图对本发明作进一步阐述。
本发明将从低精度数值运算角度对基于注意力机制的神经机器翻译系统解码速度进行优化,旨在以较小性能损失为代价,大幅度提升翻译系统的解码速度,达到性能和速度上的平衡。
本发明一种基于离散型注意力机制的神经机器翻译解码加速方法,包括以下步骤:
1)构建训练平行语料及基于注意力机制的神经机器翻译的模型,利用平行语料生成机器翻译词表,进一步训练得到训练收敛后的模型参数,作为基线系统;
2)通过对模型参数数值的缩放将网络中注意力机制部分参数转换为整型数值,将浮点数映射到整型数值的整型区间内;
3)将无法用整型计算的归一化部分替换为有利于整型计算的线性结构;
4)为了防止整型数值的溢出问题,在线性结构之前通过阈值来控制是否所有数值均参与运算;
5)通过在训练数据中随机抽取的1%~2%的数据上调整所选取的阈值,使其能够达到更好的翻译结果。
在步骤1)中,基于注意力机制的神经机器翻译模型包括编码端和解码端,使用注意力机制,当使用多头注意力机制时,注意力机制计算方式为:WultiHead(Q,K,V)=ConCat(head1,head2,...,headh)WO
head1,head2,...,headh代表模型中的h个头,其种每个头的注意力计算公式为:
其中softmax(·)为归一化函数,Q、K和V分别为参与计算的不同的线性变换矩阵,dk为K矩阵每个头的维度大小。
步骤1)中基于注意力机制的神经机器翻译模型包括编码端和解码端,结构如图1所示。注意力机制是神经机器翻译模型中重要的组成部分。在最初的编码器-解码器框架中,由于上述原因导致神经网络难以学习到源端和目标端的对应信息,翻译系统对输入较长的句子的翻译效果较差。针对这一问题,研究人员提出了基于注意力机制的神经机器翻译,此模型可以动态的计算源语言的上下文,有利于神经网络学到更多的全局信息,还可以帮助神经网络在生成目标端单词时有选择性的关注不同的源语言位置,投入更多的注意力在更重要的位置,而对不太重要的位置只需投入较少的注意力,使神经网络更容易的捕获到和当前目标端单词更相关的源语信息,从而使得神经网络对目标语言的预测更为准确。
在生成一个目标语单词时,基于注意力机制的神经网络会基于得到的不同的注意力对不同源语位置向量进行加权求和,得到不同的上下文向量。注意力机制的引入使得不同源语言位置对目标语单词生成的贡献度不同,使得神经网络中信息流的传递变得更为高效,有助于神经网络模型的学习。
步骤2)中通过对模型参数数值的缩放将网络中注意力机制部分参数转换为整型数值,将浮点数映射到整型数值的整型区间内,具体为:
201)计算出每层的注意力权重S
m=s(Q
m,K
m),其中s(·)为注意力权重的
计算公式,m为模型中第m层,Q与K都是下层的输出变换而来,这一操作对于编码端解码段的各个注意力操作都需要进行操作,同时需要注意的是对于编码解码注意力来说,其Q与K使用的是编码端的输出;
202)通过注意力权重的值计算出进行缩放的缩放因子scale,
其中target为需要进行缩放的目标参数,Max和Min分别为需要缩放区域的最大阈值和最小阈值,通过计算Min和Max可以分析模型中参数值的分布特点,结合模型参数特点进行参数值缩放可使模型性能损失达到最小;
203)根据计算出的scale值计算缩放后的值:
A5cale=round(Afloat·scale)
其中Ascale为缩放后的值,Afloat为进行操作的浮点数值,scale为202)中计算出的缩放因子,round为四舍五入操作。
本步骤主要计算将网络种注意力机制部分参数转换为整型数值的缩放值得大小,将浮点数映射到整型区间内,为离散型数值解码得加速效果做准备。
如图2所示,矩阵Q包括了l个词向量,组成了一个查询(Query)矩阵,矩阵KT包括了l个词向量的转置,组成了一个关键值(Key)矩阵,其中词向量为模型中间层的数值表示。在具体实施中,这些参数矩阵都需要进行缩放,将大量的浮点运算转换为整数运算,从而降低模型解码过程中的运算量,实现加速的目的。
步骤3)中,用整型计算的归一化部分替换为有利于整型计算的线性结构,具体为:
其中MIN代表每次计算参数中最小的值,j代表进行归一化操作时单个数的索引值,zj代表j所对应的数值,k代表归一化部分共有k个数,zk代表k个数求和时的每一个数。
步骤301)中原有的归一化结构是用softmax归一化函数计算,注意力机制的本质可以看作是一个查询(Query)到一系列键(Key)-值(Value)的映射。在计算过程中,首先对Query和Key进行相似度计算,得到一个权重,然后该权重通过Softmax函数归一化,最后通过权重对Value进行加权求和,得到对关注信息的表示。在自注意力机制中,Query、Key和Value都是相同的,从而可以实现对自身的关注。
softmax由于含有指数运算,因此不适用于基于离散数值的神经网络模型。
步骤302)将原有的归一化计算方式替换为,
先偏移再进行运算可以保证在保证原有模型参数大小关系的情况下,得到更适用于离散型数值运算的归一化分布。
步骤4)中,为了防止整型数值的溢出问题,在线性结构之前通过阈值来控制是否所有数值均参与运算;根据步骤2)中计算出的映射后的整型数值,若网络种参数高于阈值则参与计算,如果网络参数低于阈值则直接将此参数舍弃。
401)若网络种参数高于阈值,则让参数参与计算;
402)如果网络参数低于阈值则直接将此参数舍弃;
步骤5)中,通过将原有的计算方式(如图3所示)转换为本发明方法(如图4所示),最终通过在校验集上调整所选取的阈值,使其能够达到最好的翻译结果。
在基于自注意力机制的神经机器翻译系统中,从某种程度上而言,模型结构的可解释性更强了。以编码端为例,在每一层内主要包含自注意力的子层和前馈网络的子层。其中前馈网络的结构主要目的在于增加模型的表达能力,将自注意力子层的信息进行整合后送入下一层。而自注意力机制的操作则可以看作是对源语词向量的富集抽象,但这部分操作非常繁重,在推断的过程中注意力机制的时间占比占到整体推断时间的60%以上,通过提升计算注意力权重的效率可以提升系统在推断过程中的效率。
本发明提出了一种基于离散型注意力机制的神经机器翻译解码加速方法,在IWSLT14德英口语数据集上进行实验,可以获得1.68倍的加速比,在WMT14英德数据集上进行测试,可以获得1.77倍的加速比,平均可在整体推断速度上获得1.73倍的加速比,同时模型性能几乎没有下降。本发明方法在以上两种通用数据集上的性能都表现良好,同时带来了可观的性能提升,证明了此方法的实用性和通用性。
当前基于注意力机制的神经网络模型已经被广泛应用于神经机器翻译任务中,深层模型更是进一步提升了神经机器翻译的性能,并且我们发现,不断的增加解码器的层数可以不断的增加模型的性能,但是考虑到训练的时间成本和硬件的限制,往往不能无限制的增加编码器的层数,而且层数越深,模型也难以收敛。同时,网络的发展使我们能够获得更多双语训练数据。然而更多模型参数和更多的训练数据在带来更强大的翻译性能的同时也增大了模型训练的代价,我们需要更多的训练时间,更强大的硬件。在此情景下本发明方法可以极大的减少训练的时间代价和硬件成本代价,同时模型性能不会受到影响。