基于CNN和注意力机制的微博情绪分析方法
2020-01-03杨小兵姚雨虹
陈 欣,杨小兵,姚雨虹
(中国计量大学 信息工程学院,浙江 杭州 310018)
随着社交网络和电子商务的快速发展,微博、Twitter、微信、QQ、Face-book、淘宝、京东等社交网络和购物平台给人们的生活带来了很大的影响,越来越多的用户喜欢在社交媒体上发表自己的看法,而不只是浏览和接收信息[1]。在国内,微博已经成为许多年轻人分享和获取信息的核心平台。在这些信息中包含着喜、怒、哀、乐等个人情绪,对这些信息中的情绪进行分析可以获得用户的内心活动、分析用户的性格特点。分析人们对于公众事件和社会现象的态度可以更好的检测和控制事件进展。因此,对微博等社交媒体中的文本进行情绪分析有重要的意义[2]。
情绪分析主要包含两个任务:情绪识别和情绪分类[3]。情绪识别就是判断目标文本是否包含情绪,情绪分类是在情绪识别的基础上,从人类的心理学角度出发,多维度地描述人的情绪状况。本文选用的NLPCC2013和NLPCC2014数据集中包含有情绪和无情绪(None)两大类[4],其中有情绪的文本包含七种基本情绪:喜爱(Like)、快乐(Happiness)、愤怒(Anger)、悲伤(Sadness)、恐惧(Fear)、惊讶(Surprise)、厌恶(Disgust)。
目前,网络上文本数据的情绪分析常用的研究方法主要分为三类:基于词典和规则[5]的方法、基于传统机器学习[6]的方法、基于深度学习[7-8]的方法。基于词典和规则的情绪分类方法能够体现文本的非结构化特征,解释性强,运算速度快。但是由于网络词汇比较复杂,高质量的情绪词典难以构建,维护比较复杂且不易扩展。传统的机器学习方法主要通过对数据集进行特征提取,训练分类模型,然后对测试数据进行预测。但是该方法依赖于提取的特征,而且需要构建复杂的特征工程,并结合依存关系分析。基于深度学习的方法利用神经网络自主学习提取文本特征,神经网络的多层非线性结构可以捕捉文本的深层次特征,实现对文本的深层理解。常用的深度学习模型包括:循环神经网络(Recurrent neural network,RNN)[7]、卷积神经网络(Convolutional neural network,CNN)[8]等。
随着深度学习在图像视觉等领域取得优异的成果[9],一些研究者开始将深度神经网络应用于情感分析任务中。李等人[10]提出一种多通道双向长短期记忆网络模型,将现有情感资源和语言知识与BLSTM相结合,获取到更充分的情感信息。赵等人[11]将LSTM和CNN相结合,然后添加注意力机制,实现对文本隐式情感的分析。近年来,注意力(Attention)机制成为自然语言处理领域的研究热点,并且取得不错的结果。Bahdanau等[12]最早将Attention应用于机器翻译任务中。Vaswani等人[13]使用Attention的方法做自然语言处理任务,文中提出了一种Self-attention方法,使得每个词语都能够获取全局语义信息。Li等人[14]将Self-attention和双向LSTM相结合应用于情感分类任务中,在准确率上有很大提升。
基于词典和规则的传统情感分析方法过度依赖词典的作用,忽略了文本整体的语义关系,现有的深度学习方法直接对文本整体进行编码,没有重视现有知识库的作用。因此本文将情感语义信息和注意力机制的深度学习模型融合,并添加样本平衡模块,构造了一种新的情绪分析模型(Attention convolution model combining fine-grained sentiment dictionary and sample balance,DB-AC)。
本文的主要贡献如下:
1) 收集现有的情感资料,分别对情绪词、情感词以及词汇的词性进行整合,构建了一个包含情感信息、情绪信息、词性信息的细粒度情感词典,并将词汇的情感信息融合到词向量中。
2) 提出了一种基于注意力机制和卷积神经网络的情绪分析方法,并将细粒度情感词典和样本平衡模块融入模型中,通过设计相关实验验证了该模型在情绪分析任务和情感分类任务中的有效性。
3) 通过设计实验,验证了在深度学习模型中引入细粒度情感词典和样本平衡模块对情绪分析任务的提升作用。实验证明,本文模型的性能超越了传统的深度学习模型。
1 细粒度情感词典构建
传统的融合情感词典的模型,只把正面情感词、负面情感词、程度副词、否定词作为特征,融合在文本转化的词向量中。本文对现有的情感词典进行整理,构建了细粒度微博情感词典。其中,程度副词、否定词、主张词主要基于董振东构建的知网《Hownet》情感词典进行构建;正面情感词、负面情感词是根据《Hownet》情感词典和大连理工大学的《情感本体库》[15]进行汇总;情绪分类和词性种类以《情感本体库》为依据;并构建了否定词词典。如表1所示。
2 模型描述
本文提出的DB-AC模型首先对中文微博文本进行预处理,将微博文本转化为包含细粒度情感信息的词向量,然后添加平衡样本模块,将处理后的词向量输入到Attention模型中,再经过卷积层进行特征提取,池化层选择局部最优特征,输入到一个多层感知器(MLP),最后对输出的向量使用Softmax分类器进行计算。根据功能的不同,本文将模型分为三个层次,词向量输入层、语义获取层、情绪分类输出层。整体架构如图1所示。
图1 DB-AC模型结构图Figure 1 DB-AC model diagram
2.1 词向量输入层
词向量输入层为整个模型的输入,主要包括三部分:文本预处理、词向量表示、平衡样本。
微博文本的预处理分为数据清洗和中文分词两个步骤。数据清洗是删除和情绪分析无关的信息,如微博文本中的链接、@用户、一些标点符号等。目前常用的中文分词工具有结巴分词、哈工大LTP分词、中科院计算所设计的NLPIR分词等,本文使用结巴分词作为分词工具。
词向量由四部分组成:文本向量VT、词性向量VP、情感向量VE、情绪向量VM。其中,文本向量的获取可以看作查词典的过程。词典中单个向量的维度为d,词语个数为N,词典Vd×N通过大规模语料采用词向量训练模型得到。本文采用的是北京师范大学中文信息处理研究所与中国人民大学DBIIR实验室[16-17]开源的中文微博词向量。对于一个文本序列T={t1,t2,…,tn},将文本中词语的词向量拼接起来,就可以得到整个文本序列的词向量表示,拼接方式如式(1)所示:
VT=V1⊕V2⊕…⊕Vn
(1)
其中:Vi∈Vd×n表示ti对应于词典中的元素,⊕表示行向量拼接操作。训练模型得到的词向量能够很好地表示词语的语义信息,但是忽略了词语的情感信息、词性信息,因此本文加入了词性向量、情感向量和情绪向量。根据《情感词汇本体库》的分类标准,词性分为7类,分别是名词(Noun)、动词(Verb)、形容词(Adj)、副词(Adv)、网络词语(Nw)、成语(Idiom)、介词短语(Prep)。情绪也分为7类:乐(Happiness)、好(Like)、怒(Anger)、哀(Sadness)、惧(Fear)、恶(Disgust)、惊(Surprise)。词性信息和情绪信息采用类似One-hot编码方式分别表示为7维向量VP和VM。情感分为6类,分别是正面情绪词、负面情绪词、程度副词、主张词、否定词、中性词,表示为6维向量VE。为了降低稀疏性,VP、VM和VE都初始化为[-0.1,0.1]之间的随机值。最后将文本向量和情绪信息融合在一起构造出词向量X作为输入,如公式(2)所示:
X=VT⊕VP⊕VE⊕VM
(2)
2.2 语义获取层
由于样本类别严重不均衡,所以在语义获取之前添加一步样本平衡操作。本文采用的样本平衡技术是将欠采样和过采样有效结合。具体过程如下:样本数设定为m条,首先使用随机欠采样方法对大于m条的数据执行m次欠采样,然后对于低于m条的数据执行m次过采样。最后,得到w组平衡样本,然后将w组平衡样本合并到训练集样本中进行训练,如图2所示。
图2 样本平衡模块示意图Figure 2 Sample balance module diagram
在文本情绪分析的过程中,为了提高模型效果,除了需要考虑词语之间的语义依赖关系,还要考虑各词语对于情绪分类的影响程度,影响较大的词语需要赋予更高的权重。因此需要添加注意力机制,从输入数据中找到显著相关信息。CNN方便并行,而且容易捕捉到一些全局的结构信息。因此,本文采用CNN和注意力机制对微博文本的语义信息进行分析。
2.2.1 Attention层
本文将词向量输入到注意力机制中,注意力机制对微博文本和情绪词合成的词向量进行处理,确定显著信息。Attention函数的本质可以被描述为一个查询(Query)到一系列键值(Key-Value)对的映射,如图3所示:
图3 Attention函数示意图Figure 3 Attention function diagram
Attention计算主要分为三步:第一步是计算Query和每个Key的相似度,获取权重,常用的相似度函数有点积、拼接、感知机等;第二步是使用Softmax函数对这些权重进行归一化;最后将权重和相应的键值Value加权求和得到结果。目前在NLP研究中,Key和Value通常用同一值表示,即Key=Value。其函数如公式(3)所示:
(3)
其中Q∈Rn×dk,K∈Rm×dk,V∈Rm×dk。Attention层作用是将n×dk的序列Q编码成了一个新的n×dv的序列。本文采用Self-Attention结构,即Attention(X,X,X),X表示输入序列。
2.2.2 卷积层
卷积层可以通过不同的卷积核对输入的序列进行局部特征提取。长度为h的卷积核可以把序列分为{X0:h-1,X1:h,…,Xi:i+h-1,…,Xn-h+1:n},对每一个分量做卷积操作得到卷积特征如下:
C=(c1,c2,…,cn-h+1)
(4)
其中,ci是对分量Xi:i+h-1进行卷积操作后提取的特征。每次滑动窗口得到的ci计算如下:
ci=relu(W·Xi:i+h-1+b)
(5)
W为卷积核权重,b为偏置。
2.2.3 池化层
池化层就是对卷积后得到的特征矩阵C执行下采样操作,从中选取局部最优特征,本文采用的是最大池化进行采样,得到的特征表示为:
li=max(c1,c2,…,cn-h+1)
(6)
之后将得到的特征组合得到向量L:
L=(l1,l2,…,ln)
(7)
2.3 情绪分类输出层
最后,将前一层输入到一个多层感知器(MLP),得到更高层的特征表示。本文的模型选择不含任何隐含层的MLP,对其输出向量进行非线性函数f变换,得到情绪标签的得分向量:
Score(S)=f(WhL+bh)
(8)
其中:Score(S)∈R|M|为情绪标签的得分向量;M表示情绪标签集合;Wh和bh分别为MLP的参数矩阵和偏置量,本文采用RELU函数完成非线性变换。然后对情绪得分向量执行Softmax运算:
(9)
3 实验与分析
3.1 数据集
本文采用NLPCC2013和NLPCC2014情感评测任务的两个公开数据集组织实验,每个数据集中均包含一个训练集和一个测试集。数据集中的内容来自新浪微博,每条微博都有一个情感标签,共有8种不同的情感标签,即None、Happiness、Like、Sadness、Disgust、Anger、Fear和Surprise。两个数据集的统计信息如表2所示。其中,2014年的训练集(14 train)中有两条微博的文本内容为空,将其移除,最终得到13 998条微博。
表2 各情绪数据统计表Table 2 Statistics of each emotion
由表2可以看出,8种标签下的数据比例很不均衡,所以本文添加样本平衡模块先进行数据预处理。为了进一步验证本文提出的模型性能,设计了情绪识别任务和正负情感分类任务。在正负情感分类任务中,将Happiness和Like作为正向标签,Anger、Sadness、Fear、Disgust作为负向标签。情绪识别任务中,将none作为客观标签,其他7项作为正向标签。两个实验的数据集划分如表3所示:
表3 情感二分类数据集Table 3 Sentiment binary classification dataset
3.2 模型参数设置
参数设置会直接影响模型效果,通过不断调参优化,本文提出的DB-AC模型参数如表4所示。
表4 模型参数设置Table 4 Model parameter settings
3.3 实验对比模型
MNB模型(Multinomial naïve bays):MNB模型是传统机器学习的代表,在很多情感分类任务中都取得了优秀的效果。
CNN模型(Multichannel convolutional neural network):该模型采用多通道卷积神经网络对文本进行情感分类,这是早期研究者采用卷积神经网络做自然语言处理任务的模型之一。
ATT模型(Self-Attention):该模型直接使用自注意力模型训练进行分类。
ATT-CNN模型(Attention convolutional neural network model):该模型通过多通道卷积神经网络和自注意力模型进行融合实现情绪分析。
E-AC模型(Attention convolution model combining sentiment dictionary):该模型使用传统的情感词典与词向量相融合,然后通过多通道卷积神经网络和自注意力机制做训练。
D-AC模型(Attention convolution model combining fine-grained sentiment dictionary):该模型在词向量中融合细粒度情感信息,然后通过多通道卷积神经网络和自注意力机制训练模型。
DB-AC模型:该模型在词向量中融合细粒度情感信息,然后添加样本平衡模块,最后通过多通道卷积神经网络和自注意力机制进行训练。
3.4 实验结果分析
3.4.1 NLPCC情感测评任务
按照NLPCC的中文微博情感评测任务的相关要求和评价指标,本文分别对NLPCC2013和NLPCC2014数据集进行了实验分析,结果如表5和表6所示:
表5 NLPCC2013实验结果Table 5 NLPCC2013 experimental results
表6 NLPCC2014实验结果Table 6 NLPCC2014 experimental results
从表5和表6可以看出,DB-AC模型在所有的指标上都取得最好的结果,与D-AC模型相比在2013年数据集上,F-measure提升了0.06%,微平均F1和宏平均F1分别提升了0.71%和0.41%,2014年数据集上,F-measure提升了0.04%,微平均F1和宏平均F1分别提升了1.96%和2.31%。此外,对于宏平均F1和微平均F1的效果有明显提升。宏平均F1和微平均F1是对情绪进行识别,不同标签数据量差别很大,比如2013年训练集中“Like”有595条、“Fear”有49条,样本量严重不均衡,所以样本平衡模块的添加对于宏平均和微平均的影响比较显著。
D-AC模型的效果仅次于DB-AC模型,在两个数据集上实验总体排第2位。与传统情感词典的E-AC模型相比,在2013年数据集上,F-measure提高0.44%,微平均F1和宏平均F1分别提升0.24%和0.28%,2014年数据集上,分别提升0.86%、0.26%和0.63%。体现了细粒度情感词典的分类效果要好于传统的情感词典。
本文提出的DB-AC模型在2014年数据集上的宏平均和微平均值明显比2013年效果好,是因为2014年训练集是13 988条而2013年训练集只有4 000条,数据量提升后模型得到更充分的训练。而2014年数据集的F-measure普遍低于2013年,说明2014年情绪识别任务的难度高于2013年,与文献[18-20]的结论一致。
此外,D-AC模型和DB-AC模型的效果明显优于ATT-CNN模型,说明细粒度情感词典的引入对情绪分析任务有很大帮助。
3.4.2 情绪识别任务
为了充分验证细粒度情感词典和样本平衡模块对于情绪识别任务性能的影响,本文将添加以下实验进行比分析:以CNN、ATT(Self-Attention)、ATT-CNN模型为基准模型,分别添加情感词典(传统)、情感词典(细粒度)、情感词典(细粒度)+样本平衡模块进行实验,使用NLPCC2013和NLPCC2014的数据集分别验证,实验结果采用F-measure作为指标进行评价,如图4、图5所示:
图4 NLPCC2013情绪识别任务Figure 4 NLPCC2013 emotion recognition task
图5 NLPCC2014情绪识别任务Figure 5 NLPCC2014 emotion recognition task
从图4和图5中可以看出,在主客观分类实验中ATT-CNN系列模型都取得了最好的结果,说明自注意力机制和卷积神经网络的融合对于微博文本情绪识别任务有明显的提升。添加情感词典(细粒度)的模型效果都优于情感词典(传统)的效果,表明了细粒度情感词典相比较传统的情感词典可以更好地识别主客观特征。对于所有的模型,添加情感词典的效果都有明显提升,说明情感特征对于情绪分析任务有很大的帮助。
此外,样本平衡模块的添加对于各组实验F-measure的结果影响不太明显,这是因为情绪识别任务判断微博是否包含情绪,有无情绪的数据分别有7 247条和6 753条数据(2013数据集),9 804条和10 194条数据(2014数据集),样本已经比较均衡,所以影响不是很大。
3.4.3 正负情感分类任务
正负情感分类任务同样是二分类问题,其中2013年数据集中有3 596条正向情感文本、3 317条负向情感文本;在2014年数据集上正负情感文本分别有5 146条与4 134条。实验结果如图6、图7所示。
图6和图7的结果表明,在正负情感分类任务中,融合细粒度情感词典并添加样本平衡模块的ATT-CNN模型仍然取得了最好的结果。其中,各组实验中,融合细粒度情感词典的模型性能都高于传统的情感词典,这说明细粒度的情感词典对于正负情感分类实验同样具有较大贡献。其中2014年数据集上的结果明显优于2013年,是因为2014年的样本数据量比2013年多,模型得到更充分的训练。
图6 NLPCC2013正负情感分类结果Figure 6 Positive and negative sentiment classification results from NLPCC2013
图7 NLPCC2014正负情感分类结果Figure 7 positive and negative sentiment classification results from NLPCC2014
4 结 语
本文提出了一种基于CNN和注意力机制的微博情绪分析模型,利用现有的情感分析资源构建了一个包含情感语料、情绪语料、语义信息的细粒度情感词典。将情感词典和注意力机制相结合,有效地增强了模型对于微博文本情绪的分析能力。通过两个数据集的实验验证,细粒度情感词典能够提高情绪分析的性能。同时,本模型添加的样本平衡模块,有效降低了样本不均衡对于模型的影响。本文提出的模型在NLPCC2013和NLPCC2014中文微博情绪分析任务中表现出优越的性能。下一步将对词性信息对于情绪分析的影响做更详细的分析。