一种通过self-attention机制生成多维度aspect的句向量模型

这篇博客主要借鉴了IBM沃森实验室的2017年ICLR会议的论文《A STRUCTURED SELF-ATTENTIVE SENTENCE EMBEDDING》。根据self-attention机制生成针对一个句子的多维度表征向量。就我个人来看,过去一提到attention这种基于注意力的模型,特别是用在情感分类方面,一般来说一定要和一个具体的任务联系在一起,这样才有attention的对象,比方说aspect这种任务,是分析一句话针对某个话题的情感,就像作者自己在论文里说的“For some tasks people propose to use attention mechanism on top of the CNN or LSTM model to introduce extra source of information to guide the extraction of sentence embedding. However, for some other tasks like sentiment classification, this is not directly applicable since there is no such extra information: the model is only given one single sentence as input.”。我之前也一直以为,针对单条句子的情感分析,是无法引入attention机制的,但是这边文章提出的一种方法,确很巧妙的解决了这个问题,下面来讲一下他们的策略。

首先我们假设一句话有n个单词, S = ( w 1 , w 2 , . . . . w n ) S=(w_1,w_2,....w_n) S=(w1,w2,....wn),然后使用双向LSTM对这个句子分别处理,我们假设LSTM1是从左到右处理,LSTM2是从右到左处理,那么就有如下的迭代公式:
h t 1 = L S T M 1 ( w t , h t 1 − 1 ) h_{t1}=LSTM1(w_t,h_{t1-1}) ht1=LSTM1(wt,ht11)
h t 2 = L S T M 2 ( w t , h t 2 − 1 ) h_{t2}=LSTM2(w_t,h_{t2-1}) ht2=LSTM2(wt,ht21)
然后把 h t 1 h_{t1} ht1 h t 2 h_{t2} ht2进行拼接,那么就能够形成一个h,如果单独的LSTM的输出维度是u,那么这个h的维度就是2u。这样一句话就变成了如下的形式 H = ( h 1 , h 2 , . . . . h n ) H=(h_1,h_2,....h_n) H=(h1,h2,....hn),很显然H的维度是2un。然后作者按照如下的方式构造多维度的attention向量:
A = s o f t m a x ( W s 2 t a n h ( W s 1 H T ) ) A=softmax(W_{s2}tanh(W_{s1}H^{T})) A=softmax(Ws2tanh(Ws1HT))
注意这个A的生成方式是整个文章的精华所在,其中A的维度是r
n, W s 2 W_{s2} Ws2的维度是rd, W s 1 W_{s1} Ws1的维度是d2u, H T H^{T} HT的维度是2un。其中 W s 1 W_{s1} Ws1 W s 2 W_{s2} Ws2是模型的训练参数。我们不难看出这个A矩阵的维度rn中,r就代表了多少个维度的词向量,将这个权值矩阵和H句子相乘,就得到了原始句子的r种表征方式,作者的解释是从r个角度来描述一个句子。

其实说到这里,整个模型其实已经介绍完了,可以看出整体的模型还是相对来说比较简单的,但是还有下面几个点需要注意:
1 既然模型的初衷是想针对一个句子的r个角度来生成r个系数向量,那么我们肯定希望这r个角度要尽可以的不同,不然如果优化出的权值矩阵A的r行都是相似的权值分布,那么整个模型就失去了最开始的设计目标。如何能够保证模型生成的权值矩阵A中的r套权值系数的分布尽可能的不同,这就需要增加一个正则项来对模型进行约束,这个约束保证生成的r个分布具有最大的差异性,作者自己构造了一种独特的正则项,如下所示:
P = ∣ ∣ ( A A T − I ) ∣ ∣ F 2 P=||(AA^{T}-I)||_{F}^2 P=(AATI)F2
这个F代表了一个矩阵的frobenius范数,定义如下:
∣ ∣ A ∣ ∣ F = ∑ i = 1 m ∑ j = 1 n ( a i j ) 2 ||A||_F=\sum_{i=1}^m\sum_{j=1}^n(a_{ij})^2 AF=i=1mj=1n(aij)2
其实简单就求矩阵里所有元素的平方和,下面我们再回到计算p的那个式子中去,可以看出p中的对角线元素是r个系数向量本身各自的内积,他们和单位矩阵相减,相对于 ∑ i = 1 ( a i i − 1 ) 2 \sum_{i=1}(a_{ii}-1)^2 i=1(aii1)2,只有越接近1才越小,而A中的r向量只有当系数分布在少数几个位置的时候才能达到接近1的效果,这也就意味着r中的单独一个系数向量只把注意力集中在原始句子中的少数几个词上;p中非对角线元素,他们是由r中两两不同的系数向量求内积得到的,也就是说两两之间只要正交就是0,即最小,这样就保证了生成的r中的系数向量之间能够把注意力集中在原始句子中的不同位置,从而提取原始句子不同角度的信息。
总而言之加上了上述的正则项,就能保证模型在优化时候得到的解能够使模型提取到系数向量提取到原始句子中不同角度的信息。

2 就是说在生成了r套系数向量之后,我们根据每一套系数向量结合隐藏层状态句子H都能得到一个句向量,也就是说原始的句子我们可以得到r套句向量,即原始句子的r个表征。常规来说,如果是情感分类那就是把这个r向量进行拼接,直接一个全连接层加上softmax,但是这样就会导致模型的参数十分的复杂,为了解决这个问题,作者提出了一种简化的方法,如下图所示:
这里写图片描述
最底层那个ur 维度的M矩阵,就是r套系数向量生成的原始句子的表征形式,相反的是再往上不是直接和全连接层相连,而是采取一种简化的方式,使M中的部分元素和中间缓冲层的矩阵 M v M^v Mv M h M^h Mh部分元素全连接。从图中可以看出, M v M^v Mv矩阵的维度是pr,那么就让 M M M M v M^v Mv两个矩阵中r对应维度的元素全连接,而 M h M^h Mh的维度是u*q,那么就让 M M M M h M^h Mh两个矩阵中u对应维度的元素全连接。这样在经过了中间的缓冲层矩阵处理之后,整个网络的参数量就会大大降低,最高层的输出层就和这两个缓冲矩阵采用全连接的方式相连。作者在论文中提到,他这样的简化方法虽然降低了一定的准确率,却大大提升了模型的速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值