CS22N 学习笔记(七)NMT seq2seq attention

Machine Translation

采用机器,将源语言翻译成目标语言。
CS22N 学习笔记(七)NMT seq2seq attention

Statistical Machine Translation (统计机器翻译)

翻译模型的实质是给了原语言xx,计算目标语言序列yy的概率:
CS22N 学习笔记(七)NMT seq2seq attention
利用贝叶斯法则可以将上述概率分解为:
CS22N 学习笔记(七)NMT seq2seq attention
根据课程的解释,左边P(xy)P(x|y)是一个翻译模型,将词和短语进行对照翻译,右边P(y)P(y)是一个语言模型,用于生成流畅的目标语言。如图所示:
CS22N 学习笔记(七)NMT seq2seq attention
进行机器翻译需要大量的并行数据的语料库,之后计算P(xy)P(x|y),这里继续拆分,考虑P(x,ay)P(x,a|y)
a是alignment,表示目标语言y和源语言x的一种对应关系,包括一对一,多对多等很多关系。
CS22N 学习笔记(七)NMT seq2seq attention
CS22N 学习笔记(七)NMT seq2seq attention
去计算P(x,ay)P(x,a|y)是要考虑很多东西,如图了解一下:
CS22N 学习笔记(七)NMT seq2seq attention
接着需要寻找概率的最大值argmaxy{argmax}_y,用的是探索式的搜索算法(heuristic search algorithm),这一过程又叫解码(decoding),如图所示:
CS22N 学习笔记(七)NMT seq2seq attention
CS22N 学习笔记(七)NMT seq2seq attention
统计机器翻译的问题:太复杂,其中特征点特别多,还有很多的子系统,耗费大量的人力物力。(课程里面仅是介绍,所以基本也没说太明白)。

Neural MachineTranslation

NMT它由两个RNN组成,分别是encoderRNN和DecoderRNN。encoderRNN负责输入,将源语言序列分时间步输入到RNN中进行编码,最终得到一个隐藏层,作为DecoderRNN的初始状态。DecoderRNN作为解码,是一个语言模型。每一个时间步输出一个结果(概率分布),将这个结果作为下一个时间步的输入,这样直到输出完整的句子。
CS22N 学习笔记(七)NMT seq2seq attention
NMT采用的是seq2seq模型,许多NLP的都用到了seq2seq模型,比如:

  • 总结(长文本→短文版)
  • 对话(之前的话→之后的话)
  • parsing(输入文本→输出parse)
  • 代码生成(自然语言→python代码)

seq2seq是一种条件语言模型,因为它在之前给定了一些条件,然后输出语言序列。

NMT其实是直接计算概率P(yx)P(y|x),如图:
CS22N 学习笔记(七)NMT seq2seq attention
可以理解为,NMT把已知前面的词计算后面的词的条件概率求出来了,然后相乘得到总的概率。

Training a Neural MachineTranslation system

训练NMT模型是,encoder部分不变,decoder部分原来的输入由前一个时间步的输出改为固定的输入。之后一样计算代价函数JJ,然后对反向传播求导数,更新参数,如图所示:
CS22N 学习笔记(七)NMT seq2seq attention

搜索最佳的输出序列

前面说到了NMT最终要求P(yx)P(y|x)的最大值,但它的输出是单个的条件概率,所以要通过这写条件概率计算P(yx)P(y|x)的最大值。
一种搜索的方法是贪婪搜索,取每一个条件概率的最大值作为输出的单词,如图:
CS22N 学习笔记(七)NMT seq2seq attention
这样有个问题,这个只是单步的最大值,由于每一步选择不同的词,所以总的概率不一定是最大值。
另外一个思路是穷尽的搜索方法,每个都选,最后再比较选择总概率的最大值,但是这种方法计算代价太大。

Beam search decoding

在解码的每一步,总的取k个最大的可能的选择,k成为beam size(通常大小在5-10之间)。
这里评价的得分是对数概率(其实就是原本概率相乘,取对数变成相加),得分公式如图所示:
CS22N 学习笔记(七)NMT seq2seq attention
得分全都是负的,并且越大越好。

以k=2为例,课程介绍了整个的decoderRNN解码的过程,如图所示:
CS22N 学习笔记(七)NMT seq2seq attention
这种方法也会出现问题,有的句子会输出提前结束,有的句子会拖很长都不结束,因此需要指定一个结束的标准。
在beam search 算法中,当序列的提前输出end后,我们把这个输出结束的序列给储存下来用于之后的比较。
然后指定比如搜寻时间步T步后结束搜索,或者已经得到n个完成的句子后结束搜索。
结束搜索后,把所有的句子(hypothesis)拿出来,比较
score。
这个score也有点问题,它倾向于给短的句子高评分,因此需要平均一下句子长度:
CS22N 学习笔记(七)NMT seq2seq attention

NMT模型的优缺点:

NMT模型相对于SMT有很多优点:

  • 更好的性能(更流程,更好的利用文本,更好的词语间的相似性)
  • 它是一种直接的,端到到的优化(没有其余的子系统)
  • 它耗费更少的人力物力(没有定义很多的预压特点,对所有的语言对通用)

NMT模型也有很多缺点:

  • 它不太可说明( less interpretable)(难以调试)
  • 它难控制(无法改变它的翻译的风格等)

How do we evaluateMachine Translation?

采用BELU((Bilingual Evaluation Understudy)得分。
现在有一个机器翻译的结果,和一个人工翻译结果。通过n-gram和惩罚较短的机器翻译,建立一个相似性的score评分。

Attention模型

常规的seq2seq模型有一个瓶颈(bottleneck problem)问题:
所有的输入的序列的信息最终都包含在一个encoderRNN中的隐藏状态,然后再由这个隐藏状态去生成输入序列。这样原语言序列会导致很久之前时间步信息无法充分提取。如图所示:
CS22N 学习笔记(七)NMT seq2seq attention
为了更好的解决这个问题,提出了attention模型。
模型步骤:

  • 首先,把decoderRNN的一个隐藏层和encoder的所有隐藏层做内积,得到attentionscore
  • 接着对所有attentionscore做softmax处理,得到attention的分布。
  • 接着我们将attention分布分别乘以encoder的隐藏层,并求和得到attentionoutput
  • 然后这个attentionoutput跟decoderRNN中的那个隐藏层做连接,用它作为新的decode的隐藏层输出y。
    CS22N 学习笔记(七)NMT seq2seq attention
    公式如图:
    CS22N 学习笔记(七)NMT seq2seq attention

attention 模型取得了很好的效果:

  • 它显著改善了NMT模型的表现。
  • 它解决了seq2seq模型中的瓶颈问题。
  • 它中间相当于加入了跳远连接,缓解了梯度消失问题。

Attention is a general Deep Learning technique

attention在各种深度学习模型中有着广泛的应用。
比如:如果有一个vector value得集合,有一个vector query,attention方法就是根据query计算得到一个value的和的权重。
CS22N 学习笔记(七)NMT seq2seq attention
如图是更通用的注意力模型的步骤:
CS22N 学习笔记(七)NMT seq2seq attention
对于attentionscore,有多种计算方法,如图:
CS22N 学习笔记(七)NMT seq2seq attention