只是一个Seq2seq的在机器翻译中的简略笔记
Basic
背景知识
传统翻译是以词为核心一词一词翻译的,这样会切断句子本身的意思,翻译出来也很死板,不像我们人类说的话。
Encoder-Decoder
现在采用Encoder-Decoder
架构模型。如下图
Encoder会利用整个原始句子生成一个语义向量
,Decoder再利用这个向量翻译成其它语言的句子。这样可以把握整个句子的意思、句法结构、性别信息等等。具体框架可以参考Encoder-Decoder框架。
举个翻译的例子,原始句子\(X = (x_1, x_2, \cdots, x_m)\) ,翻译成目标句子\(Y = (y_1, y_2, \cdots, y_m)\) 。
Encoder对\(X\) 进行非线性变换得到中间语义\(C\) \[
C = \Gamma(x_1, x_2, \cdots, x_n)
\] Decoder根据语义\(C\) 和生成的历史信息\(y_1, y_2, \cdots, y_{i-1}\) 来生成第\(i\) 个单词 \(y_i\) \[
y_i = \Psi(C, y_1, y_2, \cdots, y_{i-1})
\] 当然,在Attention Model
中,Decoder生成Y的时候每个单词对应的\(C\)不一样,记作\(C_j, j \in [1, n]\) 。\(C_j\) 就是体现了源语句子中不同的单词对目标句子中不同的单词的注意力概率分布。即各个单词的对齐的概率,也就是student对"学生"更重要,而对"我"不那么重要。这个在后续会用到。
Encoder-Decoder是个创新大杀器,是个通用的计算框架。Encoder和Decoder具体使用什么模型,都可以自己选择。通常有CNN,RNN,BiRNN,GRU,LSTM, Deep LSTM。比如编码CNN-解码RNN, 编码BiRNN-解码Deep LSTM等等。
上面的内容任意组合,只要得到的效果好,就是一个创新,就可以毕业了。(当然别人没有提出过)
NMT模型选择
有3个维度需要选择。
- 方向性。是单向还是双向
- 深度:是一层还是多层
- 网络选择:encoder和decoder具体分别选什么
在本文的实现中,我们选择单向的、多层的、LSTM。基于这篇论文。如下图。