声明:本文在paddle book NMT一节的基础上进行了补充,解释decoder cost、attention模型中的对齐公式、decoder引入word embedding,以及深层RNN的一种方式。
一、模型结构图
二、Encoder
编码阶段分为三步:
- one-hot vector表示:将源语言句子的每个词表示成一个列向量,这个向量的维度与词汇表大小相同,并且只有一个维度上有值1其余全是0。
- 映射到低维语义空间的词向量:one-hot vector表示存在两个问题,
1) 生成的向量维度往往很大,容易造成维数灾难;
2) 难以刻画词与词之间的语义关系。 - 用RNN编码源语言词序列,隐向量更新公式如下:
hi=Φθ(hi−1,si)
整句话的向量表示可以采用h在最后一个时间步T的状态编码,或使用时间维上的池化(pooling)结果。
三、Decoder
A. 训练过程 多分类交叉熵
- 每一个时刻,根据源语言句子的编码信息c、真实目标语言序列的第i个词ui和i时刻RNN的隐层状态zi,计算出下一个隐层状态zi+1
zi+1=Φθ(c,ui,zi)
实际上,真正计算 zi+1 时用的不是one-hot向量的 ui ,而是 ui 对应的embedding向量,这个地方需要注意:
zi+1=Φθ(c,Eui,zi) - 将zi+1通过softmax归一化,得到目标语言序列的第i+1个单词的概率分布pi+1
- 当前预测的词与真实词可以看做一个多分类问题,目标是希望模型给出的词与训练数据中的词是一致的,多分类交叉熵公式如下:
B. 预测过程 Beam Search
Beam Search 是一种启发式图搜索算法,用于在图或树中搜索有限集合中的最优扩展节点,通常用在解空间非常大的系统(如机器翻译、语音识别)中,原因是内存无法装下图或树中所有展开的解。
柱搜索算法使用广度优先策略建立搜索树,在树的每一层,按照启发代价(生成词的log概率之和)对节点进行排序,然后仅留下预先确定的个数(beam size)的节点。只有这些节点会在下一层继续扩展,其他节点就被剪掉了,也就是说保留了质量较高的节点,剪枝了质量较差的节点。因此,搜索所占用的空间和时间大幅减少,但缺点是无法保证一定获得最优解。
beam search前两步的操作和训练过程是一样,不同之处是第三步,根据 pi 采样 ui ,而非计算交叉熵。
五、Attention
ci=∑j=1Taijhj,ai=[ai1,ai2,ai3,...,aiT]
aij=exp(eij)∑Tk=1exp(eik)
eij=align(zi,hj)
align(zi,hj)=vTatanh(Wazi+Uahj)
六、Deep RNN
七、参考
- paddle book 机器翻译
- Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv preprint arXiv:1409.0473, 2014.
- Zhou J, Cao Y, Wang X, et al. Deep recurrent models with fast-forward connections for neural machine translation[J]. arXiv preprint arXiv:1606.04199, 2016.