A Convolutional Encoder Model for Neural Machine Translation

Motivation

传统方法使用bi-LSTMs来做encoder,受限于RNN的时序关系,而使用CNN可以直接编码整个句子,能够大幅提升速度

RNN NMT

传统的基于RNN的解码器,使用前一个隐状态$s_{i}$,上一个输出词$y_{i}$的embedding$g_{i}$,以及位置上下文$c_{i}$来计算下一个隐状态$s_{i+1}$(通常是将$c_{i}$与$g_{i}$连接起来输入当前节点)

给出第i+1层的输出$h_{i+1}$,通过一个Linear层得到所有可能的输出词的概率分布如下

$c_{i}$使用attention计算如下

出于效率考虑一般使用点积attention函数

Non-recurrent Encoders

Pooling Encoder

源端句子编码$e_{j}$由词向量$w_{j}$和位置向量$l_{j}$决定

Convolutional Encoder

卷积层每层使用残差连接,然后经过非线性激活函数

使用两个CNN,左边的CNN-a用于生成z以计算attention weights,右边的CNN-c用于生成最后的c

Results

其中Deep Convolutional m/k表示核函数size为k的m层CNN