读Attention文章2

    本文引入了self-attention,在句子层面,通过一个2维的矩阵来表示,之前是通过一个向量来表示(例如用RNN把句子压缩成一个固定的向量),这里的矩阵每行是捕获句子中不同的部分,另外在模型中提出了一个惩罚项。

 

简介部分:

当前获得词向量包含两种类型的方法:

1. 基于全局的语料库,用非监督的算法进行训练

2. 在做特定的任务的时候,利用监督学习做分类任务,顺便产生了词向量。通常这种方法效果比第1种类型的方法更好。一些模型利用RNN 和 CNN 作为一个分类或者排序任务中的中间步骤去表示句子,例如通过RNN的最后一个隐藏单元 或者 对n-gram做池化来表示。

3. 有些模型提出了在CNN和LSTM模型的上面增加attention机制,引入一些额外的信息去抽取句子的embedding,例如机器翻译中,target部分如果是一个sequence的话,这些target可以作为额外的信息去提取,博客中上篇文章中attention就是这样做的。但是,在一些情感分析中,target就是 正,中,负,没有更多额外的信息了,在这些例子中,通常会通过池化去遍历所有时间节点的步骤。

4. 提出了self-attention机制,去替换池化,可以抽取句子的不同部分到多个向量,在LSTM的上面使用,针对例如情感分析这种没有额外输入信息的例子中,self-atttention机制就可以发挥作用了,

 

模型结构:

包含两部分:

  • 第一部分:双向的LSTM
  • 第二部分:self-attention机制,对LSTM输出的隐藏状态的向量做加权求和,这个就是句子的embedding

结构图

图a 是做情感分析的整体流程

图b 是self-attention的流程,也就是权重如何产生的

 

输入:是一个二维矩阵,n*d的矩阵,d表示词向量的长度,n是输入sequence的长度

下一步做一个双向的LSTM模型,得到一个hidden cell 的序列,而不是采用最后一个hidden cell 

 

得到一个 2u * n 的矩阵, n是输入sequence的长度,u表示隐藏层的长度,因为是双向的,所以是2u 

接下去,对LSTM得到的输出,最attention

,M矩阵就是句子的embedding,大小为r * 2u

其中A 成为 annotation matrix , A只利用了输入S的信息,没有用到extra information的信息,所以有self-attentive 的意思!

 

这里我计算下,为什么M的大小是r*2u

H为 n*2u矩阵

H的转置为2u*n

Ws1为d*2u矩阵

Ws2为r*d矩阵

那么 A= r*d*d*2u*2u*n=r*n矩阵

M=A*H=r*n*n*2u=r*2u ,所以大小为r*2u的矩阵了!!

 

惩罚项:

引入一个惩罚项,希望A中的行向量分布的diversity更大,

类似于L2惩罚项,A*A.T 等于A的向量之间相乘,我们将惩罚项加入到损失函数中,并做最小化优化,那么A*A.T越接近于1最好,那么A的行向量中值的分布需要越分散越好,举个例子

 

经过softmax之后,行的和为1, 看如下两个情况

A_i = [0.5,0.5] , 那么 A_i *  A_i_T = 0.5*0.5+0.5*0.5=0.5

A_i=[0.8,0.2], 那么A_i *  A_i_T = 0.8*0.8+0.2*0.2=0.68 

这种情况 [0.8,0.2] 可以使得loss更小,而A代表对输入的注意力程度,更加diversity,可以理解为更加注意某些输入的词。

 

至于作者为什么考虑加入惩罚项,如果向量分布比较均匀,那么每个词的重要性是差不多的,那么M会涉及很多冗余的信息,

如果词向量分布更加diversity,会集中关注某些词。另外,提到了如果采用KL作为惩罚项的话,会出现很多为0或者很小值的情况,这样训练起来很困难。

 

作者试验中显示了加入惩罚项的效果,每个句子采用了30个hops,即r=30,从中抽取了6条样例就可以反映一些问题了,

任务是根据twitter的数据预测年龄段

 

 

 

 

 

 

 

refer:https://arxiv.org/pdf/1703.03130.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章