Machine Translation
Statistical Machine Translation
早期的机器翻译的方法是 SMT,S 代表 statistic 表示统计的意思,然后 14 年的时候,一切都变了。。。
Neural Machine Translation
NMT 降临了,吊打了 SMT,所以 SMT 我就不学啦,哈哈哈
Seq-to-Seq model
传统的深度神经网络的输入和输出都是固定的,但是在翻译这样的任务中,对于某个长度的句子,它的输出长度是不确定的。。
seq2seq 模型的出现解决了这个问题
- 上图称为 sequence-to-sequence 模型,有两个 RNN
- 待翻译的句子为输入 $x$,翻译的结果称为 $y$
- 第一个 RNN 用来将 $x$ 做一个 encoding,类似于将输入生成一个特征
- 生成这个特征的结果放到下一个 RNN 中做 Decodeing
- Decoding 的过程相当于做一连串的单词预测
- 这是 seq2seq 模型的训练过程
- 要注意的是,seq2seq 模型最后的 loss 是根据 gt 和 gt 长度内的 predicts 来比较生成的
Beam search decoding
对于每一个单词后面一个单词的预测,最简单的方法就是上面的贪心法 (greedy decoding), 每一步直接输出概率最高的,但是其实这并不是一定我们期望的最优解,甚至离最优解的很远,一组输出的概率表示形式如下:
我们希望输出的值概率尽可能的大,要想获得最大值,最粗暴有效的方法就是遍历上面的所有取值,但是上面的所有取值的复杂度是 $O(V^T)$,于是我们可以做一个在 greedy 和 optimal 之间做一个折衷,这个方法就叫 Beam Search。
Beam search: On each step of decoder, keep track of the k most probable partial translations
举个 $k=2$ 的例子
每个单词我们生成它最大概率的 2 个,然后每次选取概率最大的两个分支继续进行生成
.