干货|深度学习在机器翻译中的应用

时间:2024-03-13 09:26:27

点击上方“中兴开发者社区”,关注我们

每天读一篇一线开发者原创好文

干货|深度学习在机器翻译中的应用

作者简介

作者戴硕是深度学习爱好者,主要关注NLP方向。这篇文章向对深度学习感兴趣的初学者介绍了机器翻译当前的现状,及其涉及的基本原理和流程。


本文只对相关应用作简要介绍,不涉及公式推导(本文部分图片来源于网络)。


1.机器翻译的发展

干货|深度学习在机器翻译中的应用


上世纪80年代之前,机器翻译主要依赖于语言学的发展,分析句法、语义、语用等;

之后,研究者开始将统计模型应用于机器翻译,这种方法是基于对已有的文本语料库的分析来生成翻译结果;

2012年至今,随着深度学习的兴起,神经网络开始被运用在机器翻译上,并在短短几年取得了非常大的成果。


2.神经网络机器翻译(Neural Machine Translation)

2013 年,Nal Kalchbrenner 和 Phil Blunsom 提出了一种用于机器翻译的新型端到端编码器-解码器结构。2014 年,Sutskever等开发了一种名叫序列到序列(seq2seq)学习的方法,google以此模型在其深度学习框架tensorflow的tutorial中给出了具体的实现方法,取得了很好的效果(见https://www.tensorflow.org/tutorials/seq2seq)。


2.1 (预)最快速度介绍神经网络

深度学习(名字很高大上),就是指多层神经网络。上图。

干货|深度学习在机器翻译中的应用

 

这是一个单层的神经网络,多层神经网络就是在中间再插入若干个隐层,每个隐层有若干个结点。但输入输出层都只有一层。

传统的编程是给了输入,确定每一个步骤,最后得到输出。神经网络的做法是给定已知的多组输入输出,称为训练样本,要做的步骤(即模型)是未知的,那怎么确定步骤(模型)呢?“回归/拟合”,用最简单的方程模型来打比方。。。直接上式子!

干货|深度学习在机器翻译中的应用

神经网络的训练过程与此相似,也是通过训练确定隐层结点中的若干个系数。只不过神经网络模型本身是非线性的,比较复杂。前馈、误差反向传播、梯度下降这些名词,都是训练过程中用到的方法。


2.2 基础的seq2seq模型

干货|深度学习在机器翻译中的应用

基础的Seq2Seq模型由Encoder、Decoder以及连接两者的中间状态向量三部分组成,Encoder通过学习输入,将其编码成一个固定大小的状态向量C,继而将C传给Decoder,Decoder再通过对状态向量C的学习来进行输出。


2.2.1 RNN与LSTM

Encoder、Decoder编解码器一般采用循环神经网络(Recurrent Neural Network,RNN)的变种——长短时记忆神经网络(Long Short-term Memory,LSTM)。LSTM与普通RNN的不同之处在于,对于长距离的状态存储有着较好的效果。见下图。

干货|深度学习在机器翻译中的应用

(a) 普通RNN

干货|深度学习在机器翻译中的应用

(b) LSTM

普通的多层神经网络(DNN)中隐层的状态信息h(就是隐层结点的输出形式的一种)独立的。

RNN在当前某一时刻的隐层状态信息ht受到来自前一时刻的隐层信息ht-1影响,即RNN能够保存之前的部分记忆。对于机器翻译来讲,例如输入”My coat is white, hers is blue”,使用RNN模型,翻译后半句时,前半句的”coat”就提供了一定的信息。但是这种记忆会随着序列间隔的增大而大幅减弱。具体原理这里不作详细说明。

LSTM的在每个隐层的单元中使用了加法器(门控思想)实现记忆的有选择存储,类似于我们对于小时候的记忆也是有选择的记住一样,从而大幅度地规避了使用RNN产生的问题。翻译”My coat is white, hers is blue”,翻译到”hers”,之前的”My coat”的信息就通过加法器的门控逐级保留了下来。

干货|深度学习在机器翻译中的应用

2.1.2 Encoder-Decoder模型

干货|深度学习在机器翻译中的应用

上图即为机器翻译中的基本seq2seq模型的基本结构,可以看到Encoder编码器接受输入(例如:我是学生),通过序列间状态的传递,得到状态信息C。然后将C分别输入到解码器当中得到翻译后的输出。

这种模型运用于机器翻译中存在一个问题,就是解码器中接受的信息C全局只有一个。如果翻译“我是学生”,当翻译到“学生”,其实并不需要关注之前的“我是”,而且翻译的句子如果很长,C是个有限的量,很难保存住所有信息。所以我们希望Encoder能有所侧重地输出给Decoder。类似于下图。

干货|深度学习在机器翻译中的应用

Decoder端可以在翻译序列的不同时刻接收不同的状态信息。这就是Attention机制。


2.2 Attention机制

Google的Tensorflow框架中使用了Luong在2015年提出的attention机制,上图中的Ci就可以表示为Encoder中每个hi的加权和。权重参数wi的确定又可以用到一个小的神经网络来训练。Attention机制的提出大幅提高了机器翻译的准确性。


3.Facebook与Google的较量

2017年5月,Facebook首次将卷积神经网络(CNN,现在在计算机视觉大行其道,背后又是一堆原理公式...)用于机器翻译,利用CNN的可并行化,再套上一堆RNN的优点,模型(名为Fairseq)训练速度快(提升9倍),翻译准确性又好(衡量指标BLEU)。

紧接着,一个月后,Google开始打脸,祭出一篇《Attention is all you need》。提出一种新的Attention机制,并舍弃CNN和RNN,直接建立翻译模型,BLEU继续提高。

这两种模型的原理,可以搜索相关论文。


4.一个完整的seq2seq模型的流程

前三部分是对当前NMT的相关研究的简要介绍。下面将给出一个完整的seq2seq模型的步骤说明,依然不涉及公式推导,但因为机器翻译属于自然语言处理(NLP)的一部分,所以会提到一些NLP的相关知识。

1) 获取到原始数据集,作训练样本,数据集中包含大量的英文——中文的翻译句子,分为train_source,train_target 两个文件。

I am a student      我是一名学生

You are so clever    你真聪明

...

2) 以单个单词为单位构造映射表,也可以称为词典库,key:value格式,key为索引。


  1. {

  2.     0 :  I,

  3.     1 :  am

  4. }

  5. {

  6.     0 :  我,

  7.     1 :  

  8. }

3) 这样就可以转换成类似于a=[2, 45, 2, 5, 6]这样的索引向量形式。这些向量本身都是独立的,因此还需要把训练样本中各个单词之间的相关性都找出来这就是embedding,embedding是一个矩阵,原始的向量经过embedding矩阵的映射,转换成另一个向量。

           

干货|深度学习在机器翻译中的应用

经过映射得到的embed向量之间就有了相关性(至于原理,这又是一堆让人抓狂的公式)。比如,训练样本中出现”go”, ”went”, ”walk”就可以表示成具有相关性的三个向量,相关性的衡量有多种(余弦相似度...)。

4) 就此得到了向量化的训练样本,计算机就可以认识并处理。因为样本太大了,可能有几百万组,一次性全部训练,时间太长,并且效果也不好。所以将样本分为多组,每一组叫一个batch,按照batch进行训练。

5) 训练过程如下:


  1. for i in 总训练轮数(100000次):

  2.     for j in batches(64个):

  3.     

  4.         编码器(Encoder)    入参:训练样本输入train_source,隐层结点数,隐层层数

  5.                         输出:编码器输出,隐层状态向量C

  6.         解码器(Decoder)    入参:训练样本输入train_target,隐层状态向量C

  7.                         输出:预测输出

  8.                          

  9.         计算损失函数(误差,用于训练校正)

  10.         

  11.         梯度下降法(对误差求偏导,求全局极值点,校正模型参数的具体方法)

  12.         

  13.         不断寻找最优的模型参数

  14.         

  15.         得到最优的模型参数

  16.         

  17. 保存模型

6) 输入测试样本,”you are so handsome”,得到翻译输出“你真帅”。


5.总结

以上就是基本的seq2seq模型的翻译流程,seq2seq不止可以用在机器翻译领域,在语言生成等领域也有较好的应用效果。

本文力求以简洁的方式介绍机器翻译领域的深度学习,文中可能存在一些表述不太贴切的地方,欢迎指正。

干货|深度学习在机器翻译中的应用