Attention is all you need

阅读的第一篇NLP文章,大名鼎鼎的Transformer。由于缺乏较多的基础,因此这里也会参考别人的读书笔记进行阅读。

seq2seq是根据一个输入序列x,来生成另一个输出序列y。seq2seq有很多的应用,例如机器翻译,文档摘取,问答系统以及语音识别等等。在翻译中,输入序列是待翻译的文本,输出序列是翻译后的文本;在问答系统中,输入序列是提出的问题,而输出序列是答案;在语音识别中输入序列是一段语音,输出序列是翻译后的文字。(很贴合实际的一个问题!!)

本文需要掌握的基础知识

Seq2Seq基本概念、RNN、LSTM、CNN

创新点

抛弃传统的encoder-decoder模型必须结合RNN或者CNN的固有模式,只使用Attention。文章的主要目的在于减少计算量和提高并行效率的同时不损害最终的实验结果,提出了两个新的Attention机制。

Background

image.png
主流的处理序列问题,例如机器翻译,文档摘要,对话系统,QA等都是使用Encoder-Decoder框架,其中编码器:从单词序列到句子表示,解码器:从句子表示转化为单词序列分布。

传统的编码器解码器一般使用RNN,这也是机器翻译中最经典的模型,但RNN的缺点是:难以处理长序列句子,并且无法实现并行,且面临着对齐问题。之后这种Encoder-Decoder模型发展一般从三个方面入手:input的方向性——单向或双向,深层——单层或多层,类型——LSTM,RNN或GRU。然而,这种模型潜在的问题如下:
image.png

神经网络需要能够将源语句的所有必要信息压缩成固定长度的向量,这可能使得神经网络难以应付长序列的句子,特别是那些比训练语料库中的句子更长的句子;每个时间步的输出需要依赖于前面时间步的输出,这使得模型没有办法并行,效率低;仍然面临对齐问题。

之后有人提出将CNN运用到deep NLP中,CNN不能直接用于处理变长的序列样本但可以实现并行计算。完全基于CNN的Seq2Seq模型虽然可以并行实现,但非常占内存,很多的trick,大数据量上参数调整并不容易。
image.png

以上这些缺点的话就是由于无论输入如何变化,encoder给出的都是一个固定维数的向量,存在信息损失;在生成文本时,生成每个词所用到的语义向量都是一样的,这显然有些过于简单。为了解决上面提到的问题,一种可行的方案是引入attention mechanism。

随后就引入了Attention机制:
image.png

深度学习中的Attention机制就是模拟人脑的注意力模型,举个简单例子,当我们观赏一幅画时,虽然我们可以看到整幅画的全貌,但我们深入观察时只注意到其中的一小部分,这个时候人的大脑主要关注在这一小块图案上,也就是说这个时候人脑对整幅图的关注并不是均衡的,是有一定的权重区分的。这就是深度学习里的Attention Model的核心思想。

所谓注意力机制,就是说在生成每个词的时候,对不同的输入词给予不同的关注权重。我们可以看一下上面👆这幅图——通过注意力机制,我们将输入句子编码为一个向量序列,并自适应地选择这些向量的一个子集,同时对译文进行译码,例如where are you——>你在哪?现在我们在翻译“你”的时候给”you”更多的权重,那么就可以有效的解决对齐问题。

Attention

image.png

Neural machine translation by jointly learning to align and translate这篇论文首先将注意力机制运用在NLP上,提出了soft Attention Model,并将其应用到机器翻译上面。其中,Soft是在求注意力分配概率分布的时候,对于输入句子X中任意一个单词都给出一个概率,即概率分布。加入注意力机制的模型表现确实更好,但存在一定问题:attention mechanism通常和RNN结合使用,我们都知道RNN依赖t-1的历史信息来计算t时刻的信息,因此不能并行实现,计算效率比较低,特别是训练样本量非常大的时候。

CNN+Attention: Abstractive Sentence Summarization with Attentive Recurrent Neural Networks, 2016NAACL
image.png

基于CNN的Seq2Seq+attention的优点:基于CNN的Seq2Seq模型具有基于RNN的Seq2Seq模型捕捉long distance dependency的能力,此外,最大的优点是可以并行化实现,效率比基于RNN的Seq2Seq模型高。缺点:计算量与观测序列X和输出序列Y的长度成正比。

Transformer

image.png

参考出处

https://blog.csdn.net/u013713117/article/details/56014634

https://www.jianshu.com/p/3f2d4bc126e6

代码讲解:https://www.jianshu.com/p/b1030350aadb