细粒度的情感分析Gated Convolutional Netw
首先简要介绍一下基于Aspect的情感分析(Aspect based sentiment analysis+——ABAS),ABAS的主要任务:是判断句子所在的场景在某一方面的情感极性。举个例子,假如我们拿到一条餐厅评价文本数据如下:这家餐厅的环境还不错,可以菜做的不怎么样。
ABSA的任务就是去判断出下面两方面的情感极性:
1.在‘环境’这个aspect,文本的情感是积极的,
2.在‘做菜’这个aspect,文本的情感是消极的。
和普通的情感分析的不同点是,此类情感分析任务除了需要给出文本的情感极性,还要确切知道这个情感是发生在哪个方面。
ABAS任务简介
ABAS有两个子任务:
-
1.基于aspect类的情感分析(aspect-category sentiment analysis ——ACSA),主要任务是判断关于句子中的某个实体(entity)的情感极性。举个任务例子:
输入:文本是“这块手表的颜色不错” 。 entity是“颜色 ”
输出:情感极性 -
2.基于aspect词的情感分析(aspect-term sentiment analysis ——ATSA):主要任务是判断判断句子在某方面的情感极性。
输入:文本是“这家餐厅的环境还不错,可以菜做的不怎么样”
输出 :环境方面的情感极性,交通便利方面的情感极性,做菜方面的情感极性。
其中ATSA类似于一个多标签(multi-label)的任务。
ABAS算法简介
由于ABAS一般会有两块输入
1.特征文本,
2.以及entity或者aspect词。
所以一般会使用entity或者apect词的信息,对特征文本做attention去提取出和entity和apect词关联度比较高的特征去做情感分析。所以基于注意力机制(attention-based)的LSTM,CNN是经常采用的算法,但是由于attention和LSTM的计算效率都比较低,但是为了充分利用entity和aspect词的信息,基于门控制机制(Gate-mechanisms)CNN也是一种重要的解决此类问题的算法。
实验部分:
这里我们会使用Aspect Based Sentiment Analysis with Gated Convolutional Networks论文(发表在2018年ACL会议)中介绍的一种基于Tanh-ReLU门控制机制的CNN模型在SemEval-2014 task4数据集上做ATSA的任务。我们会对原网络做一点修改,同时加入2018年谷歌提出Scaled Dot-Product Attention对网络进行加强。
GCAE(Gated Convolutional Networks Aspcet Embedding)
GCAE主要前向网络的流程如下图所示:
- 1,首先将句子使用的是Glove的词向量表示,然后通过一层CNN,得到句子的表示特征S_1,和S_2。
- 2.Aspect词则通过一层embedding层,得到其向量表示A。
- 3.最关键的一部则是门机制的部分:首先将句子的表示特征S_1通过激活函数tanh得到tanh(S_1),然后将表示特征S_2和A相加送入激活函数relu得到relu(S_2+A),最后将tanh(S_1)和 relu(S_2+A)做element-wise-product 得得到最终的特征向量。
- 使用max pooling处理特征向量之后经过一层全连接层(fully connected layer),然后使用softmax激活函数就得到最终分类的结果。
此网络的优点是摆脱了RNN和attention 等耗时耗内存的网络结构,同时门机制又很好的利用了aspect词的信息,使得模型的精度不减反增。
![](https://img.haomeiwen.com/i9168245/cf4408db5e8a2fbf.png)
模型架构如下,这里和原文有一点小小不同,就是apect词的表示采用的是Glove的词向量表示,然后通过了一层max pooling之后得到的。而不是采用原文的embedding层。
def gate_cnn_model(sentence,aspect,kernel_num,kernel_size,class_num):
sentence_rep = [tf.nn.tanh(tf.keras.layers.Conv1D(kernel_num,i)(sentence)) for i in kernel_size]###[batch_size, seq_len-kernel_size(i), kernel_num] *len(kernel_size)
aspect_rep = tf.keras.layers.Dense(kernel_num)(aspect)###[batch_size,asp_len,kernel_num]
aspect_rep = tf.keras.layers.GlobalMaxPool1D()(aspect_rep)###[batch_size,kernel_num]
aspect_rep = tf.expand_dims(aspect_rep,1)
join_rep = [tf.nn.selu(tf.keras.layers.Conv1D(kernel_num,i)(sentence)+aspect_rep) for i in kernel_size]
gate = [i*j for i,j in zip(sentence_rep,join_rep)]
out = [tf.keras.layers.GlobalMaxPool1D()(i) for i in gate]###[batch_size,kernel_num]*len(kernel_size)
out = tf.concat(out,1)###[batch_size,kernel_num*len(kernel_size)]
out = tf.keras.layers.Dense(class_num,activation="softmax")(out)
GCAE_ATT (Gated Convolutional Networks Aspcet Embedding with attention)
此网络基本符合原有网络架构,但是在网络第一步:在句子glove向量和CNN之间加了一层Scaled Dot-Product Attention,其作用是更好的表达了句子的特征,提取出更多的信息,其代码如下:
def gate_cnn_model_att(sentence,aspect,kernel_num,kernel_size,class_num):
sentence = Scaled_Dot_Product_Attention(sentence,10,30)###不同之处
sentence_rep = [tf.nn.tanh(tf.keras.layers.Conv1D(kernel_num,i)(sentence)) for i in kernel_size]###[batch_size, seq_len-kernel_size(i), kernel_num] *len(kernel_size)
aspect_rep = tf.keras.layers.Dense(kernel_num)(aspect)###[batch_size,asp_len,kernel_num]
aspect_rep = tf.keras.layers.GlobalMaxPool1D()(aspect_rep)###[batch_size,kernel_num]
aspect_rep = tf.expand_dims(aspect_rep,1)
join_rep = [tf.nn.relu(tf.keras.layers.Conv1D(kernel_num,i)(sentence)+aspect_rep) for i in kernel_size]
gate = [i*j for i,j in zip(sentence_rep,join_rep)]
out = [tf.keras.layers.GlobalMaxPool1D()(i) for i in gate]###[batch_size,kernel_num]*len(kernel_size)
out = tf.concat(out,1)###[batch_size,kernel_num*len(kernel_size)]
out = tf.keras.layers.Dense(class_num,activation="softmax")(out)
return out
实验结果:
下表对比一下GCAE,GCAE_ATT在测试集上的最高准确率
网络结构 | 测试集精度 |
---|---|
GCAE | 0.7239 |
GCAE_ATT | 0.7495 |
我们发现GCAE_ATT由于增加了Transformer 网络中的Scaled Dot-Product Attention层,使得句子特征表达更加充分,提升了网络的性能,而且由于Scaled Dot-Product Attention不是循环递归结构,也不会影响网络的速度方面的性能
结论
Attention 对于文本的表达还是有很好的效果,本次实验通过对句子自身的Scaled Dot-Product Attention提升了模型的准确率,之后我们可以尝试其他更好的attention方式去更充分的提取文本特征,从而提升情感分析任务的精度。
参考文献:
https://spaces.ac.cn/archives/4765
https://blog.csdn.net/qq_41664845/article/details/84969266
Attention Is All You Need
Aspect Based Sentiment Analysis with Gated Convolutional Networks