CS22N 学习笔记(七)NMT seq2seq attention
Machine Translation
采用机器,将源语言翻译成目标语言。
Statistical Machine Translation (统计机器翻译)
翻译模型的实质是给了原语言,计算目标语言序列的概率:
利用贝叶斯法则可以将上述概率分解为:
根据课程的解释,左边是一个翻译模型,将词和短语进行对照翻译,右边是一个语言模型,用于生成流畅的目标语言。如图所示:
进行机器翻译需要大量的并行数据的语料库,之后计算,这里继续拆分,考虑
a是alignment,表示目标语言y和源语言x的一种对应关系,包括一对一,多对多等很多关系。
去计算是要考虑很多东西,如图了解一下:
接着需要寻找概率的最大值,用的是探索式的搜索算法(heuristic search algorithm),这一过程又叫解码(decoding),如图所示:
统计机器翻译的问题:太复杂,其中特征点特别多,还有很多的子系统,耗费大量的人力物力。(课程里面仅是介绍,所以基本也没说太明白)。
Neural MachineTranslation
NMT它由两个RNN组成,分别是encoderRNN和DecoderRNN。encoderRNN负责输入,将源语言序列分时间步输入到RNN中进行编码,最终得到一个隐藏层,作为DecoderRNN的初始状态。DecoderRNN作为解码,是一个语言模型。每一个时间步输出一个结果(概率分布),将这个结果作为下一个时间步的输入,这样直到输出完整的句子。
NMT采用的是seq2seq模型,许多NLP的都用到了seq2seq模型,比如:
- 总结(长文本→短文版)
- 对话(之前的话→之后的话)
- parsing(输入文本→输出parse)
- 代码生成(自然语言→python代码)
seq2seq是一种条件语言模型,因为它在之前给定了一些条件,然后输出语言序列。
NMT其实是直接计算概率,如图:
可以理解为,NMT把已知前面的词计算后面的词的条件概率求出来了,然后相乘得到总的概率。
Training a Neural MachineTranslation system
训练NMT模型是,encoder部分不变,decoder部分原来的输入由前一个时间步的输出改为固定的输入。之后一样计算代价函数,然后对反向传播求导数,更新参数,如图所示:
搜索最佳的输出序列
前面说到了NMT最终要求的最大值,但它的输出是单个的条件概率,所以要通过这写条件概率计算的最大值。
一种搜索的方法是贪婪搜索,取每一个条件概率的最大值作为输出的单词,如图:
这样有个问题,这个只是单步的最大值,由于每一步选择不同的词,所以总的概率不一定是最大值。
另外一个思路是穷尽的搜索方法,每个都选,最后再比较选择总概率的最大值,但是这种方法计算代价太大。
Beam search decoding
在解码的每一步,总的取k个最大的可能的选择,k成为beam size(通常大小在5-10之间)。
这里评价的得分是对数概率(其实就是原本概率相乘,取对数变成相加),得分公式如图所示:
得分全都是负的,并且越大越好。
以k=2为例,课程介绍了整个的decoderRNN解码的过程,如图所示:
这种方法也会出现问题,有的句子会输出提前结束,有的句子会拖很长都不结束,因此需要指定一个结束的标准。
在beam search 算法中,当序列的提前输出end后,我们把这个输出结束的序列给储存下来用于之后的比较。
然后指定比如搜寻时间步T步后结束搜索,或者已经得到n个完成的句子后结束搜索。
结束搜索后,把所有的句子(hypothesis)拿出来,比较
score。
这个score也有点问题,它倾向于给短的句子高评分,因此需要平均一下句子长度:
NMT模型的优缺点:
NMT模型相对于SMT有很多优点:
- 更好的性能(更流程,更好的利用文本,更好的词语间的相似性)
- 它是一种直接的,端到到的优化(没有其余的子系统)
- 它耗费更少的人力物力(没有定义很多的预压特点,对所有的语言对通用)
NMT模型也有很多缺点:
- 它不太可说明( less interpretable)(难以调试)
- 它难控制(无法改变它的翻译的风格等)
How do we evaluateMachine Translation?
采用BELU((Bilingual Evaluation Understudy)得分。
现在有一个机器翻译的结果,和一个人工翻译结果。通过n-gram和惩罚较短的机器翻译,建立一个相似性的score评分。
Attention模型
常规的seq2seq模型有一个瓶颈(bottleneck problem)问题:
所有的输入的序列的信息最终都包含在一个encoderRNN中的隐藏状态,然后再由这个隐藏状态去生成输入序列。这样原语言序列会导致很久之前时间步信息无法充分提取。如图所示:
为了更好的解决这个问题,提出了attention模型。
模型步骤:
- 首先,把decoderRNN的一个隐藏层和encoder的所有隐藏层做内积,得到attentionscore
- 接着对所有attentionscore做softmax处理,得到attention的分布。
- 接着我们将attention分布分别乘以encoder的隐藏层,并求和得到attentionoutput
- 然后这个attentionoutput跟decoderRNN中的那个隐藏层做连接,用它作为新的decode的隐藏层输出y。
公式如图:
attention 模型取得了很好的效果:
- 它显著改善了NMT模型的表现。
- 它解决了seq2seq模型中的瓶颈问题。
- 它中间相当于加入了跳远连接,缓解了梯度消失问题。
Attention is a general Deep Learning technique
attention在各种深度学习模型中有着广泛的应用。
比如:如果有一个vector value得集合,有一个vector query,attention方法就是根据query计算得到一个value的和的权重。
如图是更通用的注意力模型的步骤:
对于attentionscore,有多种计算方法,如图: