自注意力机制(Self-attention Mechanism)——天然语言处理(NLP)

近年来,注意力(Attention)机制被普遍应用到基于深度学习的天然语言处理(NLP)各个任务中。随着注意力机制的深刻研究,各式各样的attention被研究者们提出。在2017年6月google机器翻译团队在arXiv上放出的《Attention is all you need》论文受到了你们普遍关注,自注意力(self-attention)机制开始成为神经网络attention的研究热点,在各个任务上也取得了不错的效果。对这篇论文中的self-attention以及一些相关工做进行了学习总结(其中也参考借鉴了张俊林博士的博客"深度学习中的注意力机制(2017版)"和苏剑林的"《Attention is All You Need》浅读(简介+代码)"),和你们一块儿分享。网络

1 背景知识

Attention机制最先是在视觉图像领域提出来的,应该是在九几年思想就提出来了,可是真正火起来应该算是2014年google mind团队的这篇论文《Recurrent Models of Visual Attention》,他们在RNN模型上使用了attention机制来进行图像分类。随后,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用相似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工做算是第一个将attention机制应用到NLP领域中。接着attention机制被普遍应用在基于RNN/CNN等神经网络模型的各类NLP任务中。2017年,google机器翻译团队发表的《Attention is all you need》中大量使用了自注意力(self-attention)机制来学习文本表示。自注意力机制也成为了你们近期的研究热点,并在各类NLP任务上进行探索。下图维attention研究进展的大概趋势。app

 

Attention机制的本质来自于人类视觉注意力机制。人们视觉在感知东西的时候通常不会是一个场景从到头看到尾每次所有都看,而每每是根据需求观察注意特定的一部分。并且当人们发现一个场景常常在某部分出现本身想观察的东西时,人们会进行学习在未来再出现相似场景时把注意力放到该部分上。框架

下面我先介绍一下在NLP中经常使用attention的计算方法(里面借鉴了张俊林博士"深度学习中的注意力机制(2017版)"里的一些图)。Attention函数的本质能够被描述为一个查询(query)到一系列(键key-值value)对的映射,以下图。函数

在计算attention时主要分为三步,第一步是将query和每一个key进行类似度计算获得权重,经常使用的类似度函数有点积,拼接,感知机等;而后第二步通常是使用一个softmax函数对这些权重进行归一化;最后将权重和相应的键值value进行加权求和获得最后的attention。目前在NLP研究中,key和value经常都是同一个,即key=value。学习

2 Attention is all you need[1]

接下来我将介绍《Attention is all you need》这篇论文。这篇论文是google机器翻译团队在2017年6月放在arXiv上,最后发表在2017年nips上,到目前为止google学术显示引用量为119,可见也是受到了你们普遍关注和应用。这篇论文主要亮点在于1)不一样于以往主流机器翻译使用基于RNN的seq2seq模型框架,该论文用attention机制代替了RNN搭建了整个模型框架。2)提出了多头注意力(Multi-headed attention)机制方法,在编码器和解码器中大量的使用了多头自注意力机制(Multi-headed self-attention)。3)在WMT2014语料中的英德和英法任务上取得了先进结果,而且训练速度比主流模型更快。优化

该论文模型的总体结构以下图,仍是由编码器和解码器组成,在编码器的一个网络块中,由一个多头attention子层和一个前馈神经网络子层组成,整个编码器栈式搭建了N个块。相似于编码器,只是解码器的一个网络块中多了一个多头attention层。为了更好的优化深度网络,整个网络使用了残差链接和对层进行了规范化(Add&Norm)。google

下面咱们重点关注一下这篇论文中的attention。在介绍多头attention以前,咱们先看一下论文中提到的放缩点积attention(scaled dot-Product attention)。对比我在前面背景知识里提到的attention的通常形式,其实scaled dot-Product attention就是咱们经常使用的使用点积进行类似度计算的attention,只是多除了一个(为K的维度)起到调节做用,使得内积不至于太大。编码

多头attention(Multi-head attention)结构以下图,Query,Key,Value首先进过一个线性变换,而后输入到放缩点积attention,注意这里要作h次,其实也就是所谓的多头,每一次算一个头。并且每次Q,K,V进行线性变换的参数W是不同的。而后将h次的放缩点积attention结果进行拼接,再进行一次线性变换获得的值做为多头attention的结果。能够看到,google提出来的多头attention的不一样之处在于进行了h次计算而不只仅算一次,论文中说到这样的好处是能够容许模型在不一样的表示子空间里学习到相关的信息,后面还会根据attention可视化来验证。.net

那么在整个模型中,是如何使用attention的呢?以下图,首先在编码器到解码器的地方使用了多头attention进行链接,K,V,Q分别是编码器的层输出(这里K=V)和解码器中都头attention的输入。其实就和主流的机器翻译模型中的attention同样,利用解码器和编码器attention来进行翻译对齐。而后在编码器和解码器中都使用了多头自注意力self-attention来学习文本的表示。Self-attention即K=V=Q,例如输入一个句子,那么里面的每一个词都要和该句子中的全部词进行attention计算。目的是学习句子内部的词依赖关系,捕获句子的内部结构。翻译

 

对于使用自注意力机制的缘由,论文中提到主要从三个方面考虑(每一层的复杂度,是否能够并行,长距离依赖学习),并给出了和RNN,CNN计算复杂度的比较。能够看到,若是输入序列n小于表示维度d的话,每一层的时间复杂度self-attention是比较有优点的。当n比较大时,做者也给出了一种解决方案self-attention(restricted)即每一个词不是和全部词计算attention,而是只与限制的r个词去计算attention。在并行方面,多头attention和CNN同样不依赖于前一时刻的计算,能够很好的并行,优于RNN。在长距离依赖上,因为self-attention是每一个词和全部词都要计算attention,因此无论他们中间有多长距离,最大的路径长度也都只是1。能够捕获长距离依赖关系。

最后咱们看一下实验结果,在WMT2014的英德和英法机器翻译任务上,都取得了先进的结果,且训练速度优于其余模型。

在模型的超参实验中能够看到,多头attention的超参h过小也很差,太大也会降低。总体更大的模型比小模型要好,使用dropout能够帮助过拟合。

做者还将这个模型应用到了句法分析任务上也取得了不错的结果。

最后咱们看一下attention可视化的效果(这里不一样颜色表明attention不一样头的结果,颜色越深attention值越大)。能够看到self-attention在这里能够学习到句子内部长距离依赖"making…….more difficult"这个短语。在两个头和单头的比较中,能够看到单头"its"这个词只能学习到"law"的依赖关系,而两个头"its"不只学习到了"law"还学习到了"application"依赖关系。多头可以从不一样的表示子空间里学习相关信息。

3 Self-attention in NLP

3.1 Deep Semantic Role Labeling with Self-Attention[8]

这篇论文来自AAAI2018,厦门大学Tan等人的工做。他们将self-attention应用到了语义角色标注任务(SRL)上,并取得了先进的结果。这篇论文中,做者将SRL做为一个序列标注问题,使用BIO标签进行标注。而后提出使用深度注意力网络(Deep Attentional Neural Network)进行标注,网络结构以下。在每个网络块中,有一个RNN/CNN/FNN子层和一个self-attention子层组成。最后直接利用softmax当成标签分类进行序列标注。

该模型在CoNLL-2005和CoNll-2012的SRL数据集上都取得了先进结果。咱们知道序列标注问题中,标签之间是有依赖关系的,好比标签I,应该是出如今标签B以后,而不该该出如今O以后。目前主流的序列标注模型是BiLSTM-CRF模型,利用CRF进行全局标签优化。在对比实验中,He et al和Zhou and Xu的模型分别使用了CRF和constrained decoding来处理这个问题。能够看到本论文仅使用self-attention,做者认为在模型的顶层的attention层可以学习到标签潜在的依赖信息。

3.2 Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction[7]

这篇论文是Andrew McCallum团队应用self-attention在生物医学关系抽取任务上的一个工做,应该是已经被NAACL2018接收。这篇论文做者提出了一个文档级别的生物关系抽取模型,里面作了很多工做,感兴趣的读者能够更深刻阅读原文。咱们这里只简单提一下他们self-attention的应用部分。论文模型的总体结构以下图,他们也是使用google提出包含self-attention的transformer来对输入文本进行表示学习,和原始的transformer略有不一样在于他们使用了窗口大小为5的CNN代替了原始FNN。

咱们关注一下attention这部分的实验结果。他们在生物医学药物致病数据集上(Chemical Disease Relations,CDR)取得了先进结果。去掉self-attention这层之后能够看到结果大幅度降低,并且使用窗口大小为5的CNN比原始的FNN在这个数据集上有更突出的表现。

4 总结

 

最后进行一下总结,self-attention能够是通常attention的一种特殊状况,在self-attention中,Q=K=V每一个序列中的单元和该序列中全部单元进行attention计算。Google提出的多头attention经过计算屡次来捕获不一样子空间上的相关信息。self-attention的特色在于无视词之间的距离直接计算依赖关系,可以学习一个句子的内部结构,实现也较为简单并行能够并行计算。从一些论文中看到,self-attention能够当成一个层和RNN,CNN,FNN等配合使用,成功应用于其余NLP任务。

除了Google提出的自注意力机制,目前也有很多其余相关工做,感兴趣的读者能够继续阅读。

参考文献

[1] Vaswani, Ashish, et al. Attention is all you need. Advances in Neural Information Processing Systems. 2017.

[2] Romain Paulus, Caiming Xiong, and Richard Socher. A deep reinforced model for abstractive summarization. arXiv preprint arXiv:1705.04304, 2017.

[3] Zhouhan Lin, Minwei Feng, Cicero Nogueira dos Santos, Mo Yu, Bing Xiang, Bowen Zhou, and Yoshua Bengio. A structured self-attentive sentence embedding. arXiv preprint arXiv:1703.03130, 2017.

[4] Jianpeng Cheng, Li Dong, and Mirella Lapata. Long short-term memory-networks for machine reading. arXiv preprint arXiv:1601.06733, 2016.

[5] Shen, T.; Zhou, T.; Long, G.; Jiang, J.; Pan, S.; and Zhang, C. Disan: Directional self-attention network for rnn/cnn-free language understanding. arXiv preprint arXiv:1709.04696, 2017.

[6] Im, Jinbae, and Sungzoon Cho. Distance-based Self-Attention Network for Natural Language InferencearXiv preprint arXiv:1712.02047, 2017.

[7] Verga P, Strubell E, McCallum A. Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction. arXiv preprint arXiv:1802.10569, 2018.

[8] Tan Z, Wang M, Xie J, et al. Deep Semantic Role Labeling with Self-Attention. AAAI 2018.

[9] Shaw, Peter, Jakob Uszkoreit, and Ashish Vaswani. Self-Attention with Relative Position RepresentationsarXiv preprint arXiv:1803.02155 ,2018.

参考博客

张俊林,深度学习中的注意力机制(2017版),https://blog.csdn.net/malefactor/article/details/78767781

苏剑林,《Attention is All You Need》浅读(简介+代码),https://kexue.fm/archives/4765

相关文章
相关标签/搜索