流浪的RNN-使用CNN完成机器翻译

Attention Is All You Need-谷歌的”自注意力”中提到了为什么不在NLP中的原因。今天再分析一下由facebook提出采用卷积完成的seq2seq模型。这篇论文早于google的attention模型,其证明了CNN在NLP领域也能有较好的效果。

基本卷积结构

由于是对自然语言进行处理,因此模型的卷积与普通的图像卷积模型有一点点不同。从形式上看,更像是一维卷积,即卷积核只在句子的方向移动。这种卷积形式最早应该是[1]中提出。卷积的过程如图:

《流浪的RNN-使用CNN完成机器翻译》 文本卷积

这里假设词向量为《流浪的RNN-使用CNN完成机器翻译》,则卷积的核大小为《流浪的RNN-使用CNN完成机器翻译》即卷积核的宽度始终等于词向量的维度,《流浪的RNN-使用CNN完成机器翻译》为卷积窗口一次覆盖的词语个数。设卷积核个数为《流浪的RNN-使用CNN完成机器翻译》,输入《流浪的RNN-使用CNN完成机器翻译》。则卷积操作:
《流浪的RNN-使用CNN完成机器翻译》
此外,论文中还使用了一种新的非线性单元GLU(gated linear units)[2],其方法是
《流浪的RNN-使用CNN完成机器翻译》
《流浪的RNN-使用CNN完成机器翻译》表示逐个元素相乘。将输入进行两次不共享参数的卷积,其中一个输出通过sigmoid函数作为另一个输入的gate,这里类似于LSTMgate机制,因此叫做gated linear units。在[2]中已经证明了这种非线性机制在NLP任务中要优于其他的激活函数。

总体结构

《流浪的RNN-使用CNN完成机器翻译》 conv seq2seq

总体结构还是sequence to sequence。source 和 target都会先被编码,然后做attention。Attention输出再加上decoder输出用来做预测,不过这里编码的模型从RNN变为了CNN。但是从细节上来看,这里仍然有一些不同于传统RNN语言模型的东西:

残差连接

文中提到为了使得模型能够堆叠的更深使用了残差连接。对于decoder来说也就是:
《流浪的RNN-使用CNN完成机器翻译》
其中《流浪的RNN-使用CNN完成机器翻译》为decoder第《流浪的RNN-使用CNN完成机器翻译》层的输出。
《流浪的RNN-使用CNN完成机器翻译》

Multi-step Attention

这也论文对attention机制的一个改变,RNN中只会对decoder与encoder做一次attention。这里可以分解为3个步骤:

  1. 首先并不直接使用encoder state与decoder state计算attention,而是先对decoder state做一个变换再加上target的embeding:
    《流浪的RNN-使用CNN完成机器翻译》
    这里的《流浪的RNN-使用CNN完成机器翻译》也就是target的embeding。前面做变换是为了使得卷积输出维度变换与embedding一致。
  2. 然后进行attention:
    《流浪的RNN-使用CNN完成机器翻译》
    这里做了一个点乘attention,《流浪的RNN-使用CNN完成机器翻译》是encoder堆叠的层数。《流浪的RNN-使用CNN完成机器翻译》也就是encoder最后一层的输出。
  3. 计算出attention权重后,基于《流浪的RNN-使用CNN完成机器翻译》计算attention输出:
    《流浪的RNN-使用CNN完成机器翻译》
    这里计算attention输出的时候也并不是直接基于《流浪的RNN-使用CNN完成机器翻译》还加上了source的embedding 《流浪的RNN-使用CNN完成机器翻译》。这和传统的attention有一点差别。论文中给出的解释是:

Encoder outputs 《流浪的RNN-使用CNN完成机器翻译》 represent potentially large input contexts and 《流浪的RNN-使用CNN完成机器翻译》 provides point information about a specific input element that is useful when making a prediction

当计算出《流浪的RNN-使用CNN完成机器翻译》后,会直接与《流浪的RNN-使用CNN完成机器翻译》相加,作为下一层的输入。这也就是Multi-step Attention。

  1. 最终的预测方式为:
    《流浪的RNN-使用CNN完成机器翻译》

一点分析

论文中提到通过不断堆叠CNN层的方式同样可以capture long-range dependencies compared to the chain structure modeled by recurrent networks。而在Attention Is All You Need中的解决办法更为直接,既然要capture long-range dependencies,直接进行attention就对了。这样根本就不存在long-range dependencies,每个单词之间的依赖都变得shorter。

参考

[1] Convolutional Neural Networks for Sentence Classification
[2] Language modeling with gated linear units

    原文作者:l1n3x
    原文地址: https://www.jianshu.com/p/8fca4c8abec1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞