声明:本文在paddle book NMT一节的基础上进行了补充,解释decoder cost、attention模型中的对齐公式、decoder引入word embedding,以及深层RNN的一种方式。
编码阶段分为三步:
one-hot vector表示:将源语言句子的每个词表示成一个列向量,这个向量的维度与词汇表大小相同,并且只有一个维度上有值1其余全是0。映射到低维语义空间的词向量:one-hot vector表示存在两个问题, 1) 生成的向量维度往往很大,容易造成维数灾难; 2) 难以刻画词与词之间的语义关系。用RNN编码源语言词序列,隐向量更新公式如下: hi=Φθ(hi−1,si) 整句话的向量表示可以采用h在最后一个时间步T的状态编码,或使用时间维上的池化(pooling)结果。Beam Search 是一种启发式图搜索算法,用于在图或树中搜索有限集合中的最优扩展节点,通常用在解空间非常大的系统(如机器翻译、语音识别)中,原因是内存无法装下图或树中所有展开的解。
柱搜索算法使用广度优先策略建立搜索树,在树的每一层,按照启发代价(生成词的log概率之和)对节点进行排序,然后仅留下预先确定的个数(beam size)的节点。只有这些节点会在下一层继续扩展,其他节点就被剪掉了,也就是说保留了质量较高的节点,剪枝了质量较差的节点。因此,搜索所占用的空间和时间大幅减少,但缺点是无法保证一定获得最优解。
beam search前两步的操作和训练过程是一样,不同之处是第三步,根据 pi 采样 ui ,而非计算交叉熵。
ci=∑j=1Taijhj,ai=[ai1,ai2,ai3,...,aiT]
aij=exp(eij)∑Tk=1exp(eik)
eij=align(zi,hj)
align(zi,hj)=vTatanh(Wazi+Uahj)