Attention Model in NLP

这里整理一下最近看的有关Attention Model的资料,貌似网上的相关blog都大同小异。

AM模型是2015年NLP领域重要的进展之一。

一、引言

感受:从认知心理学里面的人脑注意力模型引入的概念。

人脑注意力模型:在某个特定的时刻t,意识和注意力的焦点是集中在画面的某一个部分上的。本质是一个资源分配模型。

深度学习中的注意力模型工作机制,和看见心动异性时荷尔蒙驱动的注意力分配机制是一样的。

二、Encoder-Decoder框架

在图片处理或者图文生成等任务中也有很多场景会用到AM模型,本文只讨论文本处理领域的AM模型。

AM模型是附着在Encoder-Decoder框架下的。Encoder-Decoder框架适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型。Encoder-Decoder是一个通用的计算框架,Encoder和Decoder具体使用的模型可以自己选择,常见的比如CNN、RNN、BIRNND、GRU、LSTM、Deep LSTM等,变化组合非常多,比如CNN作为Encoder,用RNN作为Decoder。

应用场景:机器翻译、文本摘要、人机对话等等

三、Attention Model

上面的通用框架,在Decoder过程中,生产目标单词Y时(Y1,Y2,…,Yn)的输入,都是相同的Encoder的输出,即原始输入的语义编码C,没有任何区别,如下:

Y1=F(C)

Y2=F(C,Y1)

Y3=F(C,Y1,Y2)

而语义编码C是由全部原始输入X中的单词经过Encoder编码产生的,也就是说,不论是生成哪个单子,Y1,Y2或是Y3,输入X中的任意单词对生成摸个目标单词Yi来说影响力是相同的,没有任何区别(Tips:其实如果Encoder是RNN,理论上越是后输入的单词影响越大,并非等权的,也是为何Google提出的Sequence to Sequence模型时,发现把输入句子逆序输入做翻译效果会更好的trick原因)。

因此,Encoder-Decoder框架实际上是没有体现注意力的。

没有引入注意力的模型在输入句子比较短的时候影响不大,但是输入句子比较长时,所有语义完全通过一个中间语义向量来表示,单词自身的信息已经消失,丢失很多细节信息。

这意味着在生成每个单词Yi的时候,原先都是相同的中间语义表示C会替换成根据当前生成单词而不断变化的Ci。理解AM模型的关键就是这里,即由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci。增加了AM模型的Encoder-Decoder框架理解起来如图2所示。
在这里插入图片描述
在这里插入图片描述
Decoder过程的如下:

Y1=F(C1)

Y2=F(C2,Y1)

Y3=F(C3,Y1,Y2)

每个Ci对应着不同的源语句子单词的注意力分配概率分布

具体实例:
在这里插入图片描述

接下来的问题是:AM模型所需要的输入句子单词注意力分配的概率分布值,如何获得?

以Encoder和Decoder都是RNN为例(也是比较常见的一种模型配置),如下图:
在这里插入图片描述
那么可以用下图较为便捷的说明注意力分配概率分布值的通用计算过程:
在这里插入图片描述
对于采用RNN的Decoder来说,如果要生成yi单词,在时刻i,我们是可以知道在生成Yi之前的隐层节点i时刻的输出值Hi的,而我们的目的是要计算生成Yi时的输入句子单词“Tom”、“Chase”、“Jerry”对Yi来说的注意力分配概率分布,那么可以用i时刻的隐层节点状态Hi去一一和输入句子中每个单词对应的RNN隐层节点状态hj进行对比,即通过函数F(hj,Hi)来获得目标单词Yi和每个输入单词对应的对齐可能性,这个F函数在不同论文里可能会采取不同的方法,然后函数F的输出经过Softmax进行归一化就得到了符合概率分布取值区间的注意力分配概率分布数值。图5显示的是当输出单词为“汤姆”时刻对应的输入句子单词的对齐概率。绝大多数AM模型都是采取上述的计算框架来计算注意力分配概率分布信息,区别只是在F的定义上可能有所不同。

——上述内容就是论文里面常常提到的Soft Attention Model的基本思想,你能在文献里面看到的大多数AM模型基本就是这个模型,区别很可能只是把这个模型用来解决不同的应用问题。

如何理解AM模型的物理意义呢?

一般文献里会把AM模型看作是单词对齐模型。在机器翻译语境下是非常直观的:传统的统计机器翻译一般在做的过程中会专门有一个短语对齐的步骤,而注意力模型其实起的是相同的作用。

四、静态AM
其实还有一种AM叫做静态AM。所谓静态AM,其实是指对于一个文档或者句子,计算每个词的注意力概率分布,然后加权得到一个向量来代表这个文档或者句子的向量表示。跟soft AM的区别是,soft AM在Decoder的过程中每一次都需要重新对所有词计算一遍注意力概率分布,然后加权得到context vector,但是静态AM只计算一次得到句子的向量表示即可。(这其实是针对于不同的任务而做出的改变)

在这里插入图片描述

另外,一个非常好的blog:
Text Classification, Part 3 - Hierarchical attention network
对应的github:
richliao/textClassifier

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值