【Sentiment Analysis – Attention】
最近在看情感分析这一块的内容,与传统的情感分析不同,现在的研究的方向更多的还是在ABSA(Aspect Based Sentiment Analysis)这一块比较多,ABSA任务的不同点在于其是Aspect Based的方法,其针对的并非是整个句子的情感偏向,而是对于某一个Aspect的情感偏向。举个小例子
我很喜欢广州,可惜美中不足的一点就是那儿的食物不够辣。
上面有两个Aspect分别是广州以及食物,如果是针对广州的话,这句话的情感偏向就是一个正向的偏好,但是如果是针对食物的话,可能就是一个偏负向的偏好。
对于上述的问题的解决方法,我初步整理的方法大概可以分成是六个不同的方向,第一种方法是使用Attention的机制,第二种方法是融入一些知识或者就是使用Graph的方法进行处理,第三种方法是融入到Multi-Task的框架之中进行处置,第四种方法是使用强化学习/对抗学习/主动学习这些技巧提升,第五种方法就是从Embedding上面进行入手,最后的一种自己也不好分类,就暂且称之为Others的方法。那么我应该也会分着几天把这些方法给介绍、总结一下。在本文之中所要总结的就是Attention Based的方法,是普通Attention的不同拓展和变种。
Constrained Attention Networks
Attention的方法可能是一种比较直接的方法了,首先需要明确,之所以Attention的方法可以奏效,是因为Attention可以看成是一种赋权的操作,通过这样的一种赋权的方式,消除掉了句子之中的无关的单词的影响,从而使得模型的表现上升。
但是事实上,在ABSA之中有时候可能反而通过Attention机制会引入噪声(noise),比如下面的这个例子是在2016年的一篇论文之中得到的结果
在上面的这个例子之中,有很大一部分的Attention集中到了Sometimes这个词语上面,甚至这个单词所获得的关注要甚于形容事物的Good这个单词。
而为了解决这样的一个问题,作者引入了一个正则化项希望解决这样的一个问题,并且通过一个辅助任务(Aspect Category Detection,ACD)以获得更好的泛化能力,ACD的任务的目标是将句子之中的不同Aspect都分进一些之前所设定好的Category之中。模型的整体架构图如下所示
在数据集之中存在了$K$个预先设定好的Category $A = \{A_{1},\cdots ,A_{N}\}$,对于一个给定的句子$S = \{w_1 , \cdots,w_{L}\}$,其中含有$K$个不同的Aspects $A^s = \{A_{1}^{s} ,\cdots,A_{K}^{s}\} $, 那么对于多任务训练而言,其中的第一个任务就是预测这K个不同的Aspects的情感极性是怎么样的,而第二个任务就是去确认在句子之中Mention了多少个Aspects.需要注意的一点是,在本文所涉及的任务里面,并不是直接对于Aspect-Category Term进行处理,而是以一种更加General的角度,即Aspect Category的角度来处理问题。这样的方法自然会提高Robust的程度,不过也相当依赖于人类的主观分类吧。
传统的Single-Aspect的情感分类方法是在同一个时间段仅仅是处理一个Aspect,也就是说,对于一个具有K个Aspects的句子,其会创造出K个不同的Instance,再对于这K个不同的Instance分别进行情感的预测工作。但是在本文之中的方法,还是在同一个时间段进行处理不同的Aspect。用数学化语言表示的话,在传统的方法之中一个句子如果有两个Aspects,那么其Input会有两个,分别是$<S,A_{1}^{s},p_1>$与 $<S,A_{2}^{s},p_2>$ ,但是在本文的方法之中,则是仅仅生成一个Input $<S,[A_1^{s} , A_{2}^{s}],[p_1,p_2]>$ .
对于Input Sentence$\{w_1,w_w\cdots,w_{L}\}$使用其词向量的表示,对于K个不同的Aspect也使用向量进行表示,然后将Sentence丢进LSTM里面,这都是很常见的方法。那么丢进LSTM之中,获得了Hidden States之后呢?Multi-Task开始了,两个任务共享同一个Hidden States.然后之后的发展就是使用这个Hidden States计算属于他们的Attention。
Sentiment Classification Attention
对于一个含有K个Aspects的句子,他的Attention的计算公式如下
$$\alpha_{k} = softmax(z^{a T} tanh (W_{1}^{a} H +W_{2}^{a}(u_{k}^{s}\otimes e_{L} ) ))$$
其中的$u_{k}^{s}$是第$k$个Aspect的Embedding表示,而$e_{L}$则是一个单位向量,表示在Horizon上面Concat $u_{k}^s$ 共$L$次。
ACD Attention
ACD的任务可以被看成是一个多标签的分类问题,对于每一个Aspect A_{n},他的Attention的Weight都可以通过
$$\beta_{n} = softmax(z^{bT} tanh(W_{1}^{b} H +W_{2}^{b})(u_{n}\otimes e_{L})))$$
其中的$u_n$表示的是对于Aspect $A_{n}$的一个Embedding.
可以发现,对于这两个任务的Attention的计算的方式都是非常类似的,但是他们并不共享参数。
本文的还有一个重头戏的部分就是正则化的使用了,在本文之中作者使用了两种不同的正则化的方式,第一种是对于不同的Aspect使用的Sparse Regularization,还有一种是对于不同的Aspects使用的Orthogonal Regularization项。
Sparse Regularization
对于每一个Aspect,Sparse Regularization都是对于他们的Attention的权重的分布的限制,希望这些Attention可以更加集中于某些单词上面,比如说原来的分布是0.3 ,0.4,0.3,现在的分布可能就会变成了0.1,0.8,0.1,从某种角度上来看,也是使得这个Distribution的Entropy变得更小的一个约束条件。
$$R_s = |\sum_{l = 1}^{L}\alpha_{kl}^{2} – 1|$$
Orthogonal Regularization
这里的正则化项使得在不同的Aspects上面的Attention会变得更加正交,假如存在K个Aspects的话,K个Aspects就会产生K个Attention的Score,那么我们使用一个矩阵$M\in R^{K\times L}$进行记录的话,为了鼓励正交,通过下面的Term作为惩罚项。
$$R_{0 } = ||M^{T}M- I||_2$$
那么之后便是熟悉的传入MLP然后进行训练的过程了,我也不再赘述了。
Aspect-Guide Deep Transition Model
作者提出了一种新的模型叫做是AGDT,其由三个不同的部分组成,分别是Aspect-Guided Encoder, Aspect-Reconstruction 以及 Aspect Concatenated Embedding所构成。
Aspect-Guided Encoder
AGDT之中的核心组件就是这个Aspect-Guided Encoder,其中包含了两个成分分别是Aspect-Guided GRU以及Transition GRU.对于第一个成分,即Aspect-Guided GRU而言,其有一个特殊的门控机制,即Aspect-Gate的方法来控制模型的信息流传导。
在每一个时间步$t$上面,其Hidden State $h_{t}$的计算方式如下
$$h_{t} = (1-z_{t})\odot h_{t-1}+z_{t}\odot \tilde{h_{t}}$$
其中的$\odot$表示的是点乘。
而$\tilde{h_{t}}$的计算的方法是
$$\tilde{h_{t}} = tanh(g_{t}\odot (W_{xh} x_{t}) + r_{t} \odot (W_{hh}h_{t-1} ))+l_{t}\odot H_{1}(x_{t}) +g_{t}\odot H_{2}(x_{t})$$
其中的$g_{t}$表示的是Aspect-Gate的门控机制,$x_{t}$表示的是在时间步$t$上面的Word Embedding,而$r_{t}$表示的是遗忘门,$H_{1}(x_{t})$以及$H_{2}(x_{t})$表示的是对于输入$x_{t}$的一个线性转换,而$l_{t}$则表示的是一个另外的线性转换Gate
$$r_{t} = \sigma(W_{xr}x_{t} + W_{hr}h_{t-1})\\
z_{t} = \sigma(W_{xz}x_{t} + W_{hz}h_{t-1})\\
l_{t} = \sigma(W_{xl}x_{t} + W_{hl}h_{t-1})\\
g_{t} = relu(W_{a}a + W_{hg}h_{t-1} )\\
H_{1}(x_{t}) = W_{1}x_{t}\\
H_{2}(x_{t}) = W_{2}x_{t}$$
上面的公式里面的$a$表示的是对于给定的Aspect的Embedding。而Update Gate以及Reset的设定和普通的GRU都是类似的。通过这样的一个门控机制的话,就可以在考虑Aspect的因素的情况下,同时调整输入$x_{t}$的线性变化以及非线性变化的方向。
还有另外的一个核心组件叫做是T-GRU即Transition GRU,对于A-GRU的输出或者是上一个T-GRU的输出传导到这个T-GRU之中,可以看成是几层GRU的一种堆叠的形式。结合模型图可以更好的理解吧
在红色框出的那一个部分里面的第一个绿色的圈圈(带红色的那个)就是A-GRU然后其输出传导到下一个的T-GRU之中,然后再不断的传导直至最后一个T-GRU,然后从最后的一个T-GRU节点传导到下一个的A-GRU之中并直至结束。
那么在Encoder之后就是对于Aspect的一个Reconstruction的过程。以保证那些Aspect-Specific的信息都完全的传入了模型之中。而作者为了达成这样的一个目标的话,其实也是做了一种Multi-Task Learning的技巧。我们已经知道了对于Aspect的相关问题,可以从Category这样一种更加宏大的角度思考也可以从Word这样一个比较微观的角度进行处理,那么作者通过加入一个损失函数即
$$L_{c}= \min (-\sum_{i = 0}^{C1} y_{i}^{c} \log (p_{I}^{c}))$$
的方式Force模型去对于Category进行正确的分类。
同时也使用了
$$L_{t} = \min \{-\sum_{i=0}^{C2}[y_{i}^{t}\log(p_{i}^{t}) +(1- y_{i}^{t}\log(1- p_{i}^{t}))] \}$$
的方式Force模型去对于Term进行正确的处理。
那么最后的模型的目标就是同时最小化传统的训练目标以及上述的这两个Loss.不同的目标之间的权重通过$\lambda$进行调节。
而第三个部分的话即Aspect Concatenated Embedding,作者在文中并没有进行叙述,不过在上面的那张图里面还是有一定的提及的。就是将Aspect Embedding与GRU的输出结果进行Concat以增加更多的Aspect的信息。
Dual Attention
我以最近的一篇文章来解释在判断Conflict Opinions上面的应用吧。作者在文中所给的例子是
The Atmosphere is Attractive, but a little uncomfortable.
这种看似自相矛盾的话在现实世界之中其实是广泛存在的,但是大多数的如今的研究忽略了这种Conflict的Opinions的特性。之所以忽略的一个很重要的原因可能是这种话语在数据集之中可能并不多吧。在数据集之中,如果一段话包含了一些负向的表达,但是可能其Label还是一个Positive的,Vice Versa. 这样的情况当然对于模型的预测可能会产生很多的Confusion。根据作者的观察,现有的模型在对于这种Conflict Opinions上面的准确率其实并不高,作者也给出了他的两个解释,分别是现有的可用的数据集上面并不包含很多这种数据,还有一种解释就是现有的模型在识别这种Conflict的表达上面存在着不足。
作者用了一种蛮漂亮的方法解决这里的问题,原本的多分类问题是将一个句子分成四类,但是现在作者将其看成是一个Multi-Label Classification的问题,也就是是不是表达了正向的感情,和是不是表达了一种负向的感情。如果同时表达了正向的感情以及负向的感情的话,我们就认为其是存在着Conflict Opinion的现象了,也更好的利用了已有的数据集。
当然这还并不够,如果想要提升效果,当然是得从模型的架构上面进行下手,所以作者就给了一个Dual Attention的机制。
模型的结构看起来并不复杂,词向量丢进GRU之后获得Hidden表示,然后Hidden表示连接Aspect Embedding也是一个常见的操作了,然后使用两个Attention Head分别记录正向的Attention以及负向的Attention.然后输入得到最终的文档表示并进行分类。
自己在这的一个小思考就是这个和Multi-Head Attention有什么不同,纠结了一下然后也想明白了,这里的两个Attention是针对于不同的任务进行分别负责的,也就是说在预测正向的情绪所出现的错误对于$\alpha_p$就会比对于$\alpha_n$的惩罚更大,这种分离的过程其实还是蛮有意思的,其实在设计董事会和管理层的架构的时候也会采用这种分离的方法。(时时不忘自己是学商科的)
然后就常规的优化、学习参数的流程了。
Inter-Aspect Relation Modeling
在情感分类的任务里面其实很多时候都忽略了在Aspect之间的关系,比如说我喜欢可乐甚于啤酒,那么在这里如果可以考虑在Aspects之间的关系的话,那么对于最终的预测可能也是会有帮助的,而一个很明显的Signals就是语句之中是不是有连接词 (Conjunctions).比如说And, But , Also之类的连接词,(这种方法之前在一篇使用传统的统计学的方法做Sentiment Analysis的论文之中也有见到过)
作者的这篇文章和其他的文章的不同的一点就是作者假设他的模型是可以对于Aspect之间的关系进行建模的,模型的架构如下
模型还是蛮有意思的,将词向量与Aspect Embedding进行Concat之后输入GRU之中,然后将这个Concat丢进GRU获得一个AASR的整体的Rep再把不同的AASR的Rep丢进GRU之中,进行后续的操作。
需要注意的是在模型的底部的最右端存在一个$S,a_{t}$的AASR的block,说实话作者这里存在一点记号乱用的行为,看了蛮久才意识到这个并不是句子之中的最后一个Aspect,而是希望获得的Inter-Aspect Relationship的那个Target Aspect.
将这个Target的表示传入一个单层的神经网络就可以得到$q$,即Query State的表示。所有在句子之中的Aspects都被存放在了Memory之中,在Q之中也有其对应的一个表示。而通过使用Query与Q之中存放的Aspect进行点乘就可以获得一个类似于Attention的东西。在本文之中的含义就是在Target Aspect与第$i$个Aspect之间联系的强弱。
然后再将Q丢进GRU之中进行参数的更新并以其作为最终的表示形态,结合上面算出的Attention进行加权之后,就可以输出到Classification Layer之中了。作者还使用了Multi-Hops的方法来增强模型,不过这个和主模型的关系不大我也就不浪费空间了。
Conclusion
使用Attention机制的还有其他的一些比较经典的文章,不过经典的文章可能带来的Insights就没有这些文章更直接,我就先附上这些文章,然后以后看见有其他的方法再来更新。
Reference
2015_Document Modeling with Gated Recurrent Neural Network for Sentiment Classification_Tang, Qin, Liu
2016_Aspect Level Sentiment Classification with Deep Memory Network_Tang, Qin
2016_Attention-based LSTM for Aspect-level Sentiment Classification_Wang et al
2016_Natural Language Model Re-usability for Scaling to Different Domains_Kim, Rochette, Sarikaya
2017_Recurrent Attention Network on Memory for Aspect Sentiment Analysis_Sun et al
2018_Improving Multi-label Emotion Classification via Sentiment Classification with Dual Attention Transfer Network_Yu
2019_A Novel Aspect-Guided Deep Transition Model for Aspect Based Sentiment Analysis_Liang et al
2019_CAN Constrained Attention Networks for Multi-Aspect Sentiment Analysis_Hu et al
2019_Capsule Network with Interactive Attention for Aspect-Level Sentiment Classification_Du, Sun, Wang
2019_Recognizing Conflict Opinions in Aspect-level Sentiment Classification with Dual Attention Networks_Tan, Cai, Zhu
Comments
Leave a Comment