标签:增加 实现 seq answer 窗口 sla 语义 self 顺序
原文链接: https://blog.csdn.net/qq_41058526/article/details/80578932
参考:注意力机制(Attention Mechanism)在自然语言处理中的应用
Attention函数的本质可以被描述为一个查询(query)到一系列(键key-值value)对的映射
,如下图。
在计算attention时主要分为三步:
query和每个key进行相似度计算得到权重
,常用的相似度函数有点积,拼接,感知机等;使用一个softmax函数对这些权重进行归一化
;权重和相应的键值value进行加权求和得到最后的attention
。Attention在NLP中其实我觉得可以看成是一种自动加权,它可以把两个你想要联系起来的不同模块,通过加权的形式进行联系。目前主流的计算公式
有以下几种:
目前Attention在NLP中已经有广泛的应用。它有一个很大的优点就是可以可视化attention矩阵来告诉大家神经网络在进行任务时关注了哪些部分。不过在NLP中的attention机制和人类的attention机制还是有所区别,它基本还是需要计算所有要处理的对象
,并额外用一个矩阵去存储其权重,其实增加了开销。而不是像人类一样可以忽略不想关注的部分,只去处理关注的部分。
也就是编码-解码模型。所谓编码,就是将输入序列转化成一个固定长度的向量;解码,就是将之前生成的固定向量再转化成输出序列。
具体实现的时候,编码器和解码器都不是固定的,可选的有CNN/RNN/BiRNN/GRU/LSTM等等,你可以自由组合。比如说,你在编码时使用BiRNN,解码时使用RNN,或者在编码时使用RNN,解码时使用LSTM等等。
一般其作用为在给定context vector c和所有已预测的词去预测,故t时刻翻译的结果y为以下的联合概率分布
在RNN中(如上图所示),t时刻隐藏状态为:
而联合条件分布为:
使用传统编码器-解码器的RNN模型先用一些LSTM单元来对输入序列进行学习,编码为固定长度的向量表示;然后再用一些LSTM单元来读取这种向量表示并解码为输出序列。
采用这种结构的模型在许多比较难的序列预测问题(如文本翻译)上都取得了最好的结果,因此迅速成为了目前的主流方法。
这种结构在很多其他的领域上也取得了不错的结果。然而,它存在的一个问题在于:输入序列不论长短都会被编码成一个固定长度的向量表示,而解码则受限于该固定长度的向量表示。
这个问题限制了模型的性能,尤其是当输入序列比较长时,模型的性能会变得很差(在文本翻译任务上表现为待翻译的原始文本长度过长时翻译质量较差)。
“一个潜在的问题是,采用编码器-解码器结构的神经网络模型需要将输入序列中的必要信息表示为一个固定长度的向量,而当输入序列很长时则难以保留全部的必要信息(因为太多),尤其是当输入序列的长度比训练数据集中的更长时。”
参考博文:深度学习笔记(六):Encoder-Decoder模型和Attention模型
??这篇论文中首次将attention用到了nlp领域,论文中提出了一个想法,目前机器翻译的瓶颈在于无论是多长的输入,大家的普遍做法都是将所有输入通过一些方法合并成一个固定长度的向量去表示这个句子,这会造成的问题是,如果句子很长,那么这样的方法去作为decoder的输入,效果并不会很好。
?
该论文提出的加入attention的模型:
??相比于之前的encoder-decoder模型,attention模型最大的区别就在于它不在要求编码器将所有输入信息都编码进一个固定长度的向量之中。相反,此时编码器需要将输入编码成一个向量的序列,而在解码的时候,每一步都会选择性的从向量序列中挑选一个子集进行进一步处理。这样,在产生每一个输出的时候,都能够做到充分利用输入序列携带的信息。而且这种方法在翻译任务中取得了非常不错的成果。
此处并没有很多特殊,使用双向LSTM,第j个隐藏状态只能携带第j个单词本身以及之前的一些信息;而如果逆序输入,则包含第j个单词及之后的一些信息。如果把这两个结合起来,就包含了第 j 个输入和前后的信息。
1.2.1 context vector c
解码过程与传统encoder-decoder模型相同,只不过context vector c
变为了
其中的是对每一个输入的encoder后的隐状态进行weighted sum(如上图所示)
的值越高,表示第i个输出在第j个输入上分配的注意力越多,在生成第i个输出的时候受第j个输入的影响也就越大。
:encoder i处隐状态和decoder j-1 处的隐状态的匹配 match,此处的 alignment model a 是和其他神经网络一起去训练(即 joint learning),其反映了的重要性
1.2.2 其余部分
其余部分均与传统相同,y的联合概率分布
之前已经提过,每个输出都有一个长为Tx的注意力向量,那么将这些向量合起来看,就是一个矩阵。对其进行可视化,得到如下结果
其中x轴表示待翻译的句子中的单词(英语),y轴表示翻译以后的句子中的单词(法语)。可以看到尽管从英语到法语的过程中,有些单词的顺序发生了变化,但是attention模型仍然很好的找到了合适的位置。换句话说,就是两种语言下的单词“对齐”了。因此,也有人把注意力模型叫做对齐(alignment)模型。而且像比于用语言学实现的硬对齐,这种基于概率的软对齐更加优雅,因为能够更全面的考虑到上下文的语境。
这篇论文的看点:扩展attention的计算方式
,还有就是局部的attention
方法
文中提出了两种注意力机制,global attention和local attention
这和上一篇论文提出的attention的思路是一样的,它都是对源语言对所有词进行处理,不同的是在计算attention
矩阵值的时候,他提出了几种简单的扩展版本
。在他们最后的实验中general的计算方法效果是最好的。
灵感来自于图像中的soft attention和hard attention,soft attention对于源图片中每一小块都进行权重的求和,计算较为费时,而hard attention则计算图像区域 a 在时刻 t 被选中作为输入decoder的信息的概率,有且仅有1个区域被选中,它不可微分,需更加复杂的处理。
local attention是一种介于soft和hard之间的方式,使用了一个人工经验设定的参数D去选择一个以为中心,为窗口的区域,进行对应向量的weighted sum,故不像global attention,local alignment vector 的维数是固定的,不随输入序列长度变化而变化,它的维度固定为2D+1
此处使用了两种方法去选择:
单调对应(Monotonic alignment)
: 设定Predictive alignment
: 求和更加的偏好靠近位置
附近的向量
,又在求和时加入了一个高斯函数,该函数u =,使得周围的向量得到的权重更大,(s即为一般公式中的x,为u,为高斯分布峰值) 3.模型具体实现
将隐状态与进行拼接,产生输出
最后t时刻的输出
论文结果中,dot对于global更好,general对于local更好,-m表示Monotonic alignment,-p表示Predictive alignment
所谓Soft,意思是在求注意力分配概率分布的时候,对于输入句子X中任意一个单词都给出个概率,是个概率分布。
既然Soft是给每个单词都赋予一个单词对齐概率,那么如果不这样做,直接从输入句子里面找到某个特定的单词,然后把目标句子单词和这个单词对齐,而其它输入句子中的单词硬性地认为对齐概率为0,这就是Hard Attention Model的思想。
Hard AM在图像里证明有用,但是估计在文本里面用处不大,因为这种单词一一对齐明显要求太高,如果对不齐对后续处理负面影响很大,所以你在NLP的文献里看不到用Hard AM的,估计大家都试过了,效果不好。
Soft AM要求输入句子每个单词都要赋予单词对齐概率,Hard AM要求从输入句子中精确地找到一个单词来和输出单词对齐,那么可以放松Hard的条件,先找到Hard AM在输入句子中单词对齐的那个单词大致位置,然后以这个单词作为轴心,向左向右拓展出一个大小为D的窗口,在这个2D+1窗口内的单词内进行类似Soft AM的对齐概率计算即可。
这篇论文就提出了3中在CNN中使用attention的方法,是attention在CNN中较早的探索性工作。
attention机制将不同cnn通道的句对联系起来
。该论文提出了三种注意力机制
两个句子的向量表示进行match生成attention矩阵,在卷积之前
,加入attention矩阵,与表示矩阵s一起进行训练。
在卷积后
,对于卷积完成的两个矩阵,进行match,match后按照行和列的求和生成两个矩阵各自的权重,再使用权重对其进行
对于1和2的共同使用
本文提出了三种用于卷积神经网络的注意力机制来进行句子对建模,并在三个常见任务上达到了较好的效果,体现了方法的泛化能力。同时也作者也指出,在三个任务上,两层注意力网络并不会明显优于一层注意力网络,可能是由于相关数据集较小的原因。总的来说,在自然语言处理的相关任务上,卷积神经网络上的注意力机制研究相比长短时记忆网络(LSTM)来说还相对较少,本文是一个较为不错的实现方式。
参考:一文读懂「Attention is All You Need」| 附代码实现
自然语言处理中的自注意力机制(Self-attention Mechanism)
这篇论文主要亮点在于:
[NLP/Attention]关于attention机制在nlp中的应用总结
标签:增加 实现 seq answer 窗口 sla 语义 self 顺序
原文地址:https://www.cnblogs.com/kk17/p/10274413.html