刁宇峰,杨 亮,林鸿飞,樊小超,3,吴 迪,任 璐,张冬瑜,许 侃
(1. 大连理工大学 计算机科学与技术学院,辽宁 大连 116024;2. 内蒙古民族大学 计算机科学与技术学院,内蒙古 通辽 028043;3. 新疆师范大学 计算机科学与技术学院,新疆 乌鲁木齐 830054)
文本情绪分析是近几年自然语言处理领域非常重要的研究方向之一,主要研究文本所蕴含的情绪以及情绪有关的深层语义信息。王蓉等人[1]采用词袋模型表示文本特征,使用联合学习的方法进行文本情绪分类。使用深度学习的情绪分类方法也有很多,如张志华[2]、Yaqi Wang[3]等,均采用卷积神经网络进行句子级的建模,取得了较好的性能。对于文本的情绪分析任务,需要更深层次地挖掘语义信息,用以提升分析的性能。情绪原因识别任务作为文本情绪分析领域的一个前沿研究方向,越来越受到学者们的关注。
情绪原因识别是指给定一个文本中出现的特定人物的情绪,通过有效技术手段抽取出特定人物情绪产生的原因。众所周知,互联网是一个方便创建信息和传播观点的在线交流平台,人们可以踊跃地分享其观点和情绪。伴随着网络平台的广泛应用,人们越来越关注情绪产生的动机和根源,例如,苹果公司对其旗下产品口碑好坏与否的原因格外关注,以便更好地理解用户的需求和完善产品的性能;又如心理医生对病人产生各种情绪的原因格外关心,这样可以方便医生更好地了解病人的病情和制定治疗方案。因此,情绪原因识别任务在现实中有着广泛的应用场景。
早期关于情绪原因识别的研究主要采用基于规则和统计的方法[4-6]。随着深度学习在自然语言处理中的广泛应用,有许多学者将深度学习应用在识别情绪原因的任务上。慕永利等人[7]通过融合多个CNN的方法来识别情绪原因任务,Gui等人[8]提出一种改进的深度记忆网络模型ConvMS-Memnet,用它来抽取情绪原因,取得了较好的分类性能。由此可见,神经网络模型可以有效地帮助识别情绪原因。
本文针对文本情绪原因识别任务,在Bi-LSTM[9]和Attention[10]注意力机制的基础之上,提出一种ECPA神经网络的情绪原因识别方法。该模型考虑情绪词和情绪类别对识别情绪原因的影响,利用Bi-LSTM对句子的上下文进行建模,同时引入结合相对位置和绝对位置的注意力机制,识别文本中的情绪原因。实验结果表明,本文提出的ECPA(emotion context position attention Bi-LSTM neural network)方法取得了最佳的分类性能。
针对文本情绪分析,首先需要了解情绪的分类体系。目前有很多文本情绪分类体系,如Ekman[11]、Linhong Xu等[12]均提出了不同的情绪分类框架。在本文的情绪原因识别任务上,采用Ekman在1984年提出的情绪分类体系,该体系在W3C的情绪标记语言的基础上,设置了六大类情绪,如sadness、anger、fear、disgust、surprise和happiness。目前大多数的中文情绪分析都使用上述的情绪分类体系。而对于文本情绪分类任务大多使用深度学习方法进行处理,如张志华[2]、Yaqi Wang[3]等,采用卷积神经网络进行建模,取得了较好的效果。目前Bi-LSTM模型[9]、Attention模型[10]、CNN模型[13]等神经网络模型在自然语言处理的各项任务中均取得了不错的分类性能。
针对情绪原因识别任务,研究者主要采用基于规则、基于统计和基于深度学习的方法。对于基于规则的情绪原因识别方法,例如,Sophia Yat Mei Lee等人[4]建立了一个情绪归因语料库,同时根据规则来识别情绪原因句子;Kai Gao等人[5]提出的基于规则的情绪原因识别模型主要基于对微博数据抽取情绪原因;Weiyuan Li等人[6]使用基于规则的情绪原因特征进行情绪分类。然而这些方法制定的规则难以覆盖所有的语言现象,容易造成规则冲突。对于基于统计的情绪原因识别方法,例如,李逸薇等人[14]将情绪原因识别任务看作序列标注问题,着重考虑上下文特征,标记出哪些句子是情绪原因句;Gui等人[15]通过建立规则和分类两种不同的方式来预测文本的情绪原因;Gui等人[16]在构建的情绪原因语料库上,考虑多核函数、词性等信息训练情绪原因分类器;但是统计方法难以挖掘到更深层的潜在语义信息。对于基于深度学习的情绪原因识别方法,例如,慕永利等人[7]提出一种E-CNN的方法来识别情绪原因,同时结合了语言结构;Gui等人[8]提出一种改进的深度记忆网络模型ConvMS-Memnet,着重考虑了深层的记忆网络,并利用了上下文卷积的思想。
综上可知,针对基于规则、基于统计和基于深度学习的方法,三者均利用语言现象有效地识别情绪原因。基于此,本文提出一种基于ECPA神经网络的端到端情绪原因识别模型,它主要利用Bi-LSTM和注意力机制,同时融合了情绪、上下文、位置等语义信息,进行情绪原因识别。
本文首先对情绪原因识别任务进行了相关的介绍,然后介绍本文提出的情绪原因识别神经网络模型ECPA,最后介绍本模型的训练方式。
Gui等人[16]首次提出了情绪原因识别的任务,本文将该任务形式化地描述为: 给定一个包含情绪的文档D,包括情绪词E和该情绪产生的原因。该文档D被手动分割成多个子句c,D={c-3…,c-1,c0,c1,c2,…,cm},子句由逗号、问号、感叹号、句号进行分割。对于任一子句c={w1,w2,…,wn}包含n个词,情绪原因识别任务主要在于识别哪个子句中包含情绪原因。子句示例信息如表1所示,同时,本文给出数据集中关于情绪子句的情绪分布和位置分布的统计信息,具体如表2和表3所示。
表1 情绪原因识别示例表
表2 情绪类别信息分布表
表3 情绪原因与情绪表达相对位置信息分布表
其中,表1为情绪原因的具体示例。该文档包含7个子句,子句c0是情绪表达句,其情绪表达为“激动”,属于Happiness(高兴)情感类别。c-3,c-2,c-1表示情绪表达句的前三个子句,c-1,c-2,c-3表示情绪表达句的后三个子句。子句c-2为情绪原因句,情绪原因与情感表达的相对位置为-2,其标签为1,其余标签为0。本文的目的在于识别情绪原因子句。
(1) 从表1可知,该示例共有7个子句,情绪表达子句有1个,情绪原因子句有1个,非情绪原因子句有6个,即标签为1的子句仅有1个。由此看出,情绪原因子句与非情绪原因子句的数量比重处于不平衡状态,在识别分析时可以利用的信息也较少,需要着重挖掘能够发现情绪原因子句的本质特征。
(2) 从表2可知,整个数据库的情感类别分布共有6大类,分别为Fear、Surprise、Disgust、Sadness、Anger和Happiness,其中Sadness和Happiness的情绪分布比重最大,符合日常人们情绪表达的现状[17]。同时,情绪词和情绪类别能够极大地影响情绪原因识别的性能,是本文需要着重考虑的关键因素。
(3) 从表3可知,情绪原因与情绪表达是同一个子句的比例,以及情绪原因在情绪表达的前一个子句的比例均比较高,这表明绝大多数情绪原因子句都位于紧邻情绪表达子句的上下文信息中,与文献[18]的结论相同。因此,情绪原因与情绪表达子句的位置信息也是情绪原因识别的关键。
通过上述的讨论分析,本文发现提升情绪原因识别任务性能主要依赖于情绪词、情绪类别和位置信息。因此,本文提出一种ECPA模型,具体框架如图1所示。该模型主要由四部分组成:①Embedding层: 该层由两部分组成。首先,利用Word2Vec[19]工具进行词向量表示,将句子中的词向量组合成一个词向量矩阵Word Embedding。然后,将与情绪信息相关的情绪词、情绪类别映射为词向量矩阵。最后,将三者进行拼接作为下一层的输入。②Bi-LSTM层: 通过Bi-LSTM模型,充分学习词与词之间的语义信息,获得句子的上下文信息。③Position Attention层: 将子句与情绪表达子句的相对位置、绝对位置映射为词向量矩阵R-Position Embedding和A-Position Embedding,使用基于位置的注意力机制来挖掘能够影响情绪原因识别的语义信息; ④Output层: 通过sigmoid分类函数得到该文档中任意子句作为情绪原因子句的概率值,选取概率最大的子句作为最终的情绪原因子句。
图1 ECPA(Emotion Context Position Attention Bi-LSTM)模型框架图
(1)Embedding层
该层主要用于初始化输入的子句数据,通过Word2Vec将子句中的词语表示成词向量(word embedding),得到每个词语的低维稠密向量,能够更充分地表达词汇丰富的语义信息,挖掘词语间的语义关联,解决词袋模型中的向量稀疏问题。其中,wi∈Rk表示k维词向量,k=300,W表示n*k维的词向量矩阵。对于未登录词,需要使用
同时,在Embedding层,需要学习到情绪相关的深层次的语义信息,本文主要从情绪词E和情绪类别EC两个角度对情绪原因识别任务的影响。对于情绪词E,其中,Ei∈Rk表示k维词向量,k=300。若情绪词为未登录词,则需要随机初始化词向量;否则在对应词向量矩阵中查找相应的词向量映射,得到情绪向量Emotion Embedding。对于情绪类别,数据集有{Fear, Surprise, Disgust, Sadness, Anger, Happiness}总共6个类别,对应生成一个6*c_d的向量矩阵Category Embedding,ci∈Rc_d表示c_d维词向量,这里的维度c_d选择10维。
最后,将上述的Word Embedding、Emotion Embedding和Category Embedding三者进行拼接操作,得到最终的输入词向量矩阵X={x1,x2,…,xn},具体如式(1)所示。
xi=wi⊕Ei⊕eci
(1)
其中,xi是一维行向量,⨁表示矩阵的连接操作,xi的维度为(k+k+c_d)。
(2)Bi-LSTM层
Hochreiter等人[20]提出的LSTM(long short term memory)记忆单元主要在RNN模型的基础上加入了门限制机制。LSTM主要由细胞状态和门结构组成,细胞状态主要用于存储历史的信息,门结构主要负责保护和控制记忆细胞的状态。一个记忆单元一般有三个门结构: 输入门、输出门和遗忘门。这里的遗忘门主要用于舍弃细胞状态中的信息,过滤部分传送的历史信息,从而解决梯度消失的问题。具体计算如式(2)~式(6)所示。
其中,xt为当前时刻的由上一层得到的输入向量,σ为sigmoid激活函数,·为element-wise点乘操作,ht为当前时刻的隐层状态单元,i、f和o分别表示输入门、遗忘门和输出门,W{i,f,o,c},U{i,f,o,c},V{i,f,o,c}为训练学习到的参数。
(3)Position Attention层
由2.1节得知,子句与情绪表达子句的位置信息能够影响情绪原因识别任务的性能。这里,本文主要考虑任一子句与情绪表达子句的相对位置和绝对位置,而情绪原因子句位于情绪表达子句在内的上下文7个子句的比例为98.06%,因此,绝对位置设置为A-Position={1, 2, 3, 4, 5, 6, 7},对应生成一个7*a_d的向量矩阵A_Position Embedding(简称AP),api∈Ra_d表示a_d维的词向量,这里的维度a_d选择10维。同时,对于相对位置可以设置为R-Position={-3,-2,-1, 0, 1, 2, 3},对应生成一个7*r_d的向量矩阵R_Position Embedding(简称RP),rpi∈Rr_d表示r_d维词向量,这里的维度r_d选择10维。
Attention机制[10]实际上是一种神经网络中计算权重的方法,针对情绪原因子句与情绪表达子句特殊的位置结构信息,本文通过在Bi-LSTM层后添加Attention层来增强情绪原因子句的语言现象对情绪原因子句识别任务的影响。这里,本文会得到一个在位置结构信息影响下的隐层状态向量表示r,具体如式(10)~式(12)所示。
其中,Hout为Bi-LSTM层的隐层状态输出,APa、RPr分别为绝对位置词向量矩阵和相对位置词向量矩阵,apa与rpr为词向量矩阵中的一维词向量,APa⊗apa表示向量AP重复N次后进行拼接的操作,RPr⊗rpr表示向量RP重复N次后进行拼接的操作,Wh、Wa、Wr、w均为训练后可学习到的参数。
(4)Output层
本层主要用于预测一个文档中所有子句中成为情绪原因子句的概率,是一个二分类问题。这里,本文使用sigmoid函数对结果进行预测,具体如式(13)所示。
y=sigmoid(Wyr+by)
(13)
其中,r为上一层输出得到的结果,Wy、by为可训练学习到的参数。
(14)
其中,i表示子句的索引号,j表示类别的索引号,本文的分类任务是二分类,λ是L2的正则项,θ是参数。
本书首先介绍实验的设置和数据集,然后与一些基线方法进行性能上的对比与分析,最后列出一些可视化的结果,并对其进行分析。
在本部分,本文首先分析实验室使用的数据集,然后介绍具体的评价指标和基线方法,最后给出在模型训练过程中的实现细节。
(1) 数据集
为了验证方法的有效性,本文使用Gui等人[16]标注的情绪原因数据集。这是一个公开可下载的中文情绪原因数据集(1)http://hlt.hitsz.edn.cn/?page_id=694,该数据集有2 105篇文档,主要来自新浪城市新闻(2)http://news.sina.com.cn/society。每个文档都被手动分割成若干个子句,这里的子句以逗号、句号、感叹号和问号为结尾。每个文档都包含一个情绪词,以及一个或一个以上的情绪原因。该任务的目标在于识别每个文档中哪个子句是情绪原因子句,具体的数据集统计信息如表4所示。
表4 数据集统计信息
(2) 评价指标
对于情绪原因的识别任务,本文的评价指标与Gui等人[16]、慕永利等人[7]的评价方法一致,均采用准确率、召回率和F1值这三个指标。对于数据集的训练和测试的比例划分,也采用相同的策略。在实验过程中,本文随机将数据集的90%作为训练集,10%作为测试集,反复重复实验10次,即采用10倍交叉验证,求取各个衡量指标的平均值。
(3) 基线方法
对于情绪原因的识别任务,本文设置了如下的基线方法。
•RB: 基于规则的方法[4]。
•CB: 基于常识的方法[21]。
•ML: 用基于规则的方法进行特征抽取,然后利用机器学习方法进行分类[22]。
•SVM: 该方法以SVM为分类器,采用许多有效的特征,如1-gram、2-gram和3-gram等,由Li和Xu提出[23]。
•Word2Vec: 该方法使用SVM的分类器,其词向量由Word2Vec[18]学习得到。
•Multi-kernel: 该方法使用一种多核的方法来识别情绪原因[16]。
•Memnet: 该深度记忆网络由Gui等人在2017年提出[8],其词向量由skip-gram模型提前预训练得到,网络为3层结构。
•ConvMS-Memnet: 该网络同样由Gui等人在2017年提出[8],是目前情绪原因识别任务中性能最佳的模型。本文列举该网络的最佳结果,使用预训练好的词向量,层数为3。
•CNN: 该方法由慕永利等人[7]在2017年提出,使用卷积神经网络结构识别情绪原因句。
•E-CNN: 该方法由慕永利等人[7]在2017年提出,使用融合多个的卷积神经网络结构识别情绪原因子句,该结果为论文中的最佳结果。
•Bi-LSTM: 采用双向LSTM模型进行情绪原因识别[9]。
•ECPA: 该方法为在2.2节提出的本文方法,首先考虑了情绪词向量和情绪类别向量,在Bi-LSTM模型的基础上,使用了基于相对位置和绝对位置的注意力增强机制。
(4) 实验细节
对于情绪原因的识别任务,本文采用10倍交叉验证来进行实验。本文使用Word2Vec词向量[18],使用twitter和新浪微博的未标注数据进行预训练,其中对比了词向量维度分别为100、200、300时的分类性能,最终选取词向量维度为300。Bi-LSTM的神经单元个数为100,其他参数均采用均匀分布U(-0.01, 0.01)进行初始化。为防止过拟合,本文采用dropout策略,值为0.5。使用AdaGrad作为优化方法,学习率为0.01,mini-batch为32。
首先,本文将提出的ECAP方法与基线方法进行对比,结果如表5所示。
表5 情绪原因识别任务中不同方法的结果对比
(1) 对于基于规则的方法,RB取得了较高的准确率和较低的召回率,而基于常识的方法CB则相反,取得了较高的召回率和较低的准确率,CB的召回率为目前方法的最高值71.30%,说明基于常识的方法是比较全面的一种方法,而两者的融合方法RB+CB的F1值取得了较大的性能提升,相比于RB方法提升了1.27%。
(2) 对于机器学习方法,RB+CB+ML的F1值要高于RB+CB,说明使用规则和常识作为特征,机器学习方法作为分类器是更有效的;而SVM和Word2Vec方法都设计了词级别的特征,取得了相似的性能;Multi-kernel方法取得了较高的性能,原因在于通过句法分析树引入了上下文信息,同时使用了一个情感词典。
(3) 对于深度学习方法,CNN和E-CNN均采用了卷积神经网络,其中E-CNN能够识别不包含情绪原因的子句以及各种类型语言结构的情绪原因子句;Memnet和ConvMS-Memnet采用了深度记忆网络,这种多层网络结构能够更深层次地挖掘语义信息,其中ConvMS-Memnet在该任务上取得了当前最佳的F1值。
(4) 本文提出的ECPA模型能够充分学习到文本的上下文信息,其结果明显高于CNN和E-CNN;而本文的ECPA模型的准确率和F1值明显高于ConvMS-Memnet模型,说明本文的模型充分地考虑到了情绪词和情绪类别对识别情绪原因的影响,也学习了表达子句之间的位置结构信息。
本节列出了一系列的模型来验证我们提出的ECPA模型的有效性。首先,本文只使用Bi-LSTM模型识别情绪原因;然后,依次加入注意力机制、情绪词词向量(Emotion Embedding)、情绪类别词向量(Category Embedding)、基于绝对位置(A-Position)的Attention机制和基于相对位置(R-Position)的Attention机制,验证对情绪原因识别任务的影响;最后,对ECPA模型进行分析。具体的结果如表6所示。
表6 ECPA模型的性能分析
(1) 本模型使用Bi-LSTM来挖掘情绪原因的上下文信息,能够从前向和后向两个角度充分地学习潜在语义信息,与CNN模型相比取得了更好的结果;在此模型的基础上,引入注意力机制,在该任务上其F1值提升了1.9%,表明使用注意力机制能更有效地挖掘到情绪原因的本质特点并赋予更多的关注。
(2) 在Bi-LSTM和注意力机制的基础上,本文尝试先加入情绪词向量,结果提升了近6%,说明情绪词能够深刻地影响着情绪原因的发现,体现出因与果的语义关联性,在加入情绪类别词向量后,性能提升了1.5%,这表明情绪词所属的情绪类别信息能够从更高维的语义空间上影响情绪原因的识别。
(3) 对于注意力机制,本文首先引入基于绝对位置的Attention模型,结果提升了4%,然后在此基础之上,引入基于相对位置的Attention模型,结果提升了4.5%,达到了ECPA模型的最佳结果,高于其他基线方法。这表明Attention机制与位置信息的结合是有效的,同时位置结构信息能够极大地影响情绪原因识别任务的性能。
本文重点在于识别情绪原因。为此,本文提出了一种有效的情绪原因识别模型ECPA,从情绪原因的语言学特点出发,首先考虑情绪信息,如情绪词、情绪类别的影响力,然后通过Bi-LSTM模型理解句子的上下文信息,同时学习在相对位置和绝对位置信息作用下的注意力分配机制,最终有效地识别情绪原因句子。实验结果表明,本文的ECPA模型具有足够的识别情绪原因句的能力,已达到国内外先进水平。对于未来的工作,我们需要找到更高效的特征和手段来识别和理解情绪原因句,也可以精确定位情绪原因子句的位置,同时可以尝试开展情绪原因生成的工作。这些都是将来可探索的方向。