细粒度的情感分析Gated Convolutional Networks——tensorflow实战

首先简要介绍一下基于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词的信息,使得模型的精度不减反增。


image.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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容