自注意力机制(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研究进展的大概趋势。

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)。

下面我们重点关注一下这篇论文中的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可视化来验证。

那么在整个模型中,是如何使用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

原文地址:https://www.cnblogs.com/tectal/p/10796881.html

时间: 2024-11-09 03:50:38

自注意力机制(Self-attention Mechanism)——自然语言处理(NLP)的相关文章

深度学习之注意力机制(Attention Mechanism)

这篇文章整理有关注意力机制(Attention Mechanism )的知识,主要涉及以下几点内容: 1.注意力机制是为了解决什么问题而提出来的? 2.软性注意力机制的数学原理: 3.软性注意力机制与Encoder-Decoder框架: 4.自注意力模型的原理. 一.注意力机制可以解决什么问题? 神经网络中的注意力机制(Attention Mechanism)是在计算能力有限的情况下,将计算资源分配给更重要的任务,同时解决信息超载问题的一种资源分配方案.在神经网络学习中,一般而言模型的参数越多则

Hulu机器学习问题与解答系列 | 十二:注意力机制

几天不见想死你们啦~ 今儿的课题很好玩,跟上队伍一起来读! 今天的内容是 [注意力机制] 场景描述 作为生物体,我们的视觉和听觉会不断地获得带有序列的声音和图像信号,并交由大脑理解:同时我们在说话.打字.开车等过程中,也在不断地输出序列的声音.文字.操作等信号.在互联网公司日常要处理的数据中,也有很多是以序列形式存在的,例如文本.语音.视频.点击流等.因此如何更好的对序列进行建模,一向是研究的要点. 为了解决这些问题,注意力机制(attention mechanism)被引入Seq2Seq模型中

各种attention注意力机制之间的比较

1.Show, Attend and Tell: Neural Image Caption Generation with Visual Attention.Kelvin Xu, Jimmy Ba, Ryan Kiros, Kyunghyun Cho, Aaron Courville, Ruslan Salakhudinov, Rich Zemel, Yoshua Bengio ; Proceedings of the 32nd International Conference on Machi

关于《注意力模型--Attention注意力机制》的学习

关于<注意力模型--Attention注意力机制>的学习 此文大部分参考深度学习中的注意力机制(2017版) 张俊林的博客,不过添加了一些个人的思考与理解过程.在github上找到一份基于keras框架实现的可运行的注意模型代码:Attention_Network_With_Keras (对这个模型的详细理解可参考:<注意力模型的一个实例代码的实现与分析>) 注意力模型:对目标数据进行加权变化.人脑的注意力模型,说到底是一种资源分配模型,在某个特定时刻,你的注意力总是集中在画面中的

[转] 深度学习中的注意力机制

from: https://zhuanlan.zhihu.com/p/37601161 注意力模型最近几年在深度学习各个领域被广泛使用,无论是图像处理.语音识别还是自然语言处理的各种不同类型的任务中,都很容易遇到注意力模型的身影.所以,了解注意力机制的工作原理对于关注深度学习技术发展的技术人员来说有很大的必要. 人类的视觉注意力 从注意力模型的命名方式看,很明显其借鉴了人类的注意力机制,因此,我们首先简单介绍人类视觉的选择性注意力机制. 图1 人类的视觉注意力 视觉注意力机制是人类视觉所特有的大

深度学习之注意力机制

一.前提 该篇为基于实现LSTM中文情感倾向分析的基础上,为提高情感倾向预测的准确度,而引入的一个注意力机制模块,通过翻阅相关学术文献和其他资料所作的归纳总结. 二.注意力机制简介 简单来说,注意力机制与人类视觉注意力相似,正如人在看事物一样,会选择重点的对象,而忽略次要对象.近几年来,注意力机制在图片处理领域和自然语言处理领域得到广泛的应用,并展现出显著的效果.注意力机制主要是利用神经网络找到输入特征的有效部分. 三.Encoder-Decoder模型 注意力机制的框架主要是基于Encoder

注意力机制

参考:https://www.jianshu.com/p/ecaac3d8296d所谓的注意力机制,其实就是让系统学会注意力-即关注重点信息忽略无关信息.带有注意力机制的系统,不仅可以自主学习注意力,还可以帮助我们更好的理解神经网络. 提出了两种注意力方法:使用基本反向传播训练的Soft Attetnion方法和使用强化学习训练的Hard Attention方法.论文关于注意力机制的表述主要在以下几个方面:1)强注意力机制2)软注意力机制与强注意力机制不同,软注意力机制对所有的区域都关注,但关注

机器翻译注意力机制及其PyTorch实现

前面阐述注意力理论知识,后面简单描述PyTorch利用注意力实现机器翻译 Effective Approaches to Attention-based Neural Machine Translation 简介 Attention介绍 在翻译的时候,选择性的选择一些重要信息.详情看这篇文章 . 本着简单和有效的原则,本论文提出了两种注意力机制. Global 每次翻译时,都选择关注所有的单词.和Bahdanau的方式 有点相似,但是更简单些.简单原理介绍. Local 每次翻译时,只选择关注一

Seq2Seq模型与注意力机制

Seq2Seq模型 基本原理 核心思想:将一个作为输入的序列映射为一个作为输出的序列 编码输入 解码输出 解码第一步,解码器进入编码器的最终状态,生成第一个输出 以后解码器读入上一步的输出,生成当前步输出 组成部件: Encoder Decoder 连接两者的固定大小的State Vector 解码方法 最核心部分,大部分的改进 贪心法 选取一种度量标准后,在当前状态下选择最佳的一个结果,直到结束 计算代价低 局部最优解 集束搜索(Beam Search) 启发式算法 保存beam size个当