采用稀疏自注意力机制和BiLSTM模型的细粒度情感分析
2023-01-31曹卫东潘红坤
曹卫东 潘红坤
(中国民航大学计算机科学与技术学院 天津 300300)
0 引 言
随着社交媒体的迅速发展,在线提供、搜索或共享意见已成为我们日常生活中的一项普遍活动。如此庞大的数据包含了对于内容提供商、社会机构和卖家等而言非常有价值的信息。例如,消费者在确定要预订某家酒店之前,可以查看许多在线评论,从而做出合适的选择。公司还可以直接从网络收集大量的公开信息,而不用对其服务或产品进行民意调查。因此,从此类数据中提取意见至关重要,这将有助于更多地了解用户的偏好或意图。
情感分析作为一种提取观点的技术,包含着许多相关任务,例如情感词典构建[1]、文档级情感分类[2]、方面级情感分类[3]和细粒度情感分析[4]。在这些任务中,细粒度情感分析是主要的和有价值的,因为它可以为许多下游任务提供感性短语的先验知识,例如,“酒店的环境真的不错,从室内的陈列到窗外的景色,以及酒店内花园都显得华贵而清幽”是积极短句,“门面特别小而且差,很不起眼。到前台办手续又发现态度特别差,房间也很一般”是消极短句,因此,细粒度情感分析对于评价的分析以及情感态度的分类具有较高的研究价值。
1 相关工作
细粒度情感分析在建设智能化城市中(如聊天机器人[5])起着至关重要的作用。然而计算机只能处理数字信息,要想完成情感分类的任务,首先需要将文本向量化。与传统的one-hot表示法不同,低维分布式词表示法(如Word2vec[6])能够更好地捕获自然语言词的语义。鉴于汉字和汉字的内部结构丰富,每个中文字符通常比英文单词传达更多的语义信息,设计并学习中文单词的表示方法是至关重要的。Chen等[7]提出了利用字符级别信息的方法来学习汉字嵌入。除了某些自定义的规则用于提取信息(偏旁部首[8]、组件[9]),还有基于像素学习字符的模型[10]。这些针对中文字符进行向量化的方法虽然比原始Word2vec效果好,但仍存在着字符语义信息提取不准确的问题。为更好地建模单词的语义,Cao等[11]提出基于汉字笔画的Cw2vec模型,此模型能够自动获取中文单词间潜在的语义表示,为下游任务(情感分析)提供语义丰富的词向量。
作为句子分类的典型子问题,情感分类不仅需要理解单个话语的句子,还需要从整个会话中获取上下文信息。Pang等[12]运用这些机器学习的方法在对英文电影评论的情感分析中取得较好的效果。Tripathy等[13]在影评数据集上分别使用NB(Naive Bayesian)、SVM(Support Vector Machine)方法,实验结果表明,SVM的效果好于NB。Srujan等[14]通过人工构造文本特性如词性、情感,运用机器学习的方法来完成情感分析的任务,虽然取得了不错的成绩,但太多的人工标注文本特征,使得模型的实时性比较差。Kim[15]第一次将CNN卷积神经网络用在处理英文短文本情感分析,实现了句子级的分类任务,验证了深度学习网络在情感分析中的可靠性。但CNN在文本处理过程中并没有考虑上下文信息,针对一些具有时序信息的句子,效果不佳。Vania等[16]使用卷积神经网络、长短期记忆网络对文本进行分析,使用预训练好的单词级别词向量和字符级别词向量作为特征输入,并证明字符级别词向量能够比词级别词向量学习到更好的特征。Zhang等[17]使用RNN对中文的微博语料进行情感分析,训练带有词语信息和句子信息向量特征,最终证明计算句子向量的方式可以帮助学习句子的深层结构。Liang等[18]将长短期记忆神经网络(LSTM)用于中文微博文本情感分析,解决了RNN梯度弥散问题。为了获取更加全面的句子特征,Xiao等[19]提出双向长短期记忆神经网络(BiLSTM)的中文情感分析方法,把单向的LSTM网络反方向扩展,能够更好地利用文本前后的信息。无论是CNN还是RNN,对文本的特征提取都是不全面的,无法区分不同的词,不同的句子对情感倾向的不同作用。基于此,通常会在这些网络之上构建额外的注意力层[20],以便将更多的注意力放在最相关的单词上,从而更好地理解句子。
传统的注意力机制关注每个单词与整个文本的联系,单词对全部序列具有依赖性,计算量较大。例如Transformer[21]中的Self-Attention包含两次序列自身的矩阵乘法、计算量和显存占用量都为(N2)级别的(N代表句子的长度)。如果处理的序列较长(N),就会浪费太多的时间和内存开销(N2)。Huang等[22]提出一种交织稀疏自注意力机制,该机制的主要创新之处就是把紧密相似矩阵拆分成两个稀疏相似矩阵的乘积,用这两个连续的稀疏矩阵分别估算出一个相似的矩阵,第一个注意力机制用来估算长距离的相似性,第二个注意力机制用来估算短距离的相似性。类似于局部注意力机制,计算单词的权重时分别考虑不同的长度,该机制虽然节省了大量的内存和计算,但对于一些特长距离依赖的句子,效果不是很理想。考虑到长距离的依赖性,Child等[23]提出一种跳跃式的注意力机制(StrideSelf-Attention),即每个单词只考虑与它距离为倍数的单词的关系,该方法虽然能大大缩短计算时间,降低内存消耗,但对一些近距离相关性较强的情感分类任务,准确率却相比自注意力机制低了的许多。基于此,本文对稠密的自注意力机制进行分解得到Sparse Self-attention,使用Cw2vec预训练好的词向量作为输入,BiLSTM+Sparse Self-Attention对文本进行特征提取。实验证明Cw2vec+BiLSTM+SparseSelf-Attention的组合模型(CBSA)在情感分析的任务中,不仅准确率较高,而且占用更少的内存,大大减低了神经网络模型的训练时间,实现了语句的局部紧密和远程相关的特性。本文的创新点主要有:
(1) 创新地使用Cw2vec训练词向量,获取中文的语义信息。
(2) 使用BiLSTM提取语句的上下文信息,获取全面的文本特征。
(3) 对稠密的Self-Attention进行分解,并发运行多个注意力机制,节省内存,降低模型收敛时间。
2 模型介绍
本文设计的CBSA模型结构如图1所示,模型的整体计算流程为:
步骤1首先对评论数据集进行预处理,去除标点符号、无意义的高频词。
步骤2获取基于Cw2vec的词向量。
步骤3将得到的词向量作为BiLSTM的输入,获取语句上下文相关特征。
步骤4SparseSelf-Attention对BiLSTM得到的特征重新进行权重分配。
步骤5最后由Softmax实现对情感极性的判断。
图1 CBSA模型结构图
2.1 Cw2vec词向量
现有的词向量模型主要集中在英语、西班牙语和德语等欧洲语言上,这些语种在书写系统中采用的拉丁文字,与中文字符结构完全不同。而单个中文字符都包含着丰富的语义信息,使用Word2vec预训练中文词向量往往不能够全面地捕获语义信息。基于此,本文采用Cw2vec预训练词向量。
Cw2vec是一种学习汉语单词嵌入的新方法,通过使用笔画N-gram设计了一种极简方式来学习文本特征,该笔画可以来获取汉字的语义和层次信息。中文向量化的过程如下:
(1) 语句的切分。基于字符级别切分成单个中文汉字。例如:“位置”切分成“位”“置”。
(2) 字符笔画信息的获取。从每个字符获取笔画信息并把它们拼接起来。
位:撇、竖、点、横、点、撇、横。
置:竖、横折、竖、竖、横、横、竖、竖、横折、横、横、横、横。
位置:撇、竖、点、横、点、撇、横、竖、横折、竖、竖、横、横、竖、竖、横折、横、横、横、横。
(3) 笔画序列数字化:为每个笔画分配一个整数ID,分别为1到5,如表1所示。
表1 笔画和ID的对应关系
(4) 设置滑动窗口大小为n,生成笔画N-gram特征,如图2所示。以“地理位置方便”为例,分词结果为“地理”、“位置”和“方便”。中心词为“位置”,上下文单词为“地理”,“方便”。
图2 N-gram特征图
Cw2Vec模型考虑到单词与上下文之间的相关性,相似性定义为:
(1)
损失函数为:
(2)
最后使用Softmax函数对给定w的c预测模型进行建模:
(3)
2.2 BiLSTM上下文信息提取
假设输入文本用X表示,由L个单词组成。使用Cw2vec进行训练,得到词嵌入表示特征{v1,v2,…,vL},其中vi为每个单词的向量属于Rk,k表示每个词的维度,在本文中与训练的词向量维度为300。则一条评论的向量化为:
X={v1,v2,…,vL}
(4)
循环神经网络在处理时序信息的问题上相比于卷积神经网络具有很好的优势。RNN利用激活函数序列输入特征表示Xt和前一时段的隐藏层输入值ht-1,并转化为当前隐藏状态的输出值ht-1:
ht=f(ht-1,Xt)
(5)
LSTM则可以解决RNN梯度弥散问题。LSTM的优势在于具有三种特殊的门函数,即输入门、遗忘门、输出门,如图3所示[18]。
图3 单个LSTM计算过程示意图
遗忘门:
ft=σ(Wf·[ht-1,xt]+bf)
(6)
输入门:
it=σ(Wi·[ht-1,xt]+bt)
(7)
(8)
(9)
输出门:
ot=σ(Wo·[ht-1,xt]+bo)
(10)
ht=ot×tanh(Ct)
(11)
考虑到文本分析要用到上下文信息,本文模型选用双向LSTM(BiLSTM)为基础建模,双向的长短期记忆网络由正向和反向的LSTM组成,计算过程如下:
(12)
(13)
(14)
2.3 多头自注意力机制
Google在2017年提出一种新的注意力机制——多头自注意力[24]。相比于单一的注意力机制而言,多头机制能够从多方面捕获序列的关键信息。每个头通过向量点积进行相似度运算,得到Attention值,结构如图4所示。
图4 缩放点积运算(SDA)
(15)
多头自注意力机制就是将(Q、K、V)通过线性转换送入到SDA,再重复运算h次,最后拼接所有的Attention,缩小每个head的尺寸,其计算成本和具有全维度的单个Attention机制相当。结构示意图如图5所示。
headi=SDA(QWiQ,KWiK,VWiV)
(16)
Head=MultiHead(Q,K,V)=
Concat(head1,head2,…,headh)WO
(17)
图5 Multi-head Attention结构
2.4 分解Self-Attention
多头注意力机制关注每个元素对短语的影响,图6所示为xi与X序列中的每个单词计算相关度,其计算量为O(n2),其中n为输入短语的长度。
图6 Self-Attention
可以看出Self-Attention无论是内存消耗量还是计算量上都是十分庞大的。为改善这一状况,一个基本的思想就是减少语句相关性的计算,设定每个元素只跟短语中的一部分元素有关。常见的有Local Self-Attention,即放弃全局关联,规定每个元素只与前后c个元素以及自身有关,相对距离超过c的注意力直接设为0,如图7所示(其中c被设置为2的情况)。
图7 Local Attention
局部注意力机制(Local Self-Attention)虽然节约了内存,缩短计算时间,但忽略了远程的相关性。为获取长程关联性,本文提出新稀疏自注意力机制(Sparse Self-Attention),该注意力机制拥有p个独立的注意力头,每个独立的注意力只关注于特定位置的元素。设想每个元素只与它局部相当距离不超过c的,且远程距离为k,2k,3k,…的元素相关(c、k为提前设置好的参数),强行设置其他位置的元素注意力为0。如图8所示(c、k分别被设置为2、5的情况)。
图8 Sparse SelfAttention
稀疏自注意力机制(Sparse Self-Attention)将BiLSTM输出的ht矩阵映射为输出矩阵,并由全连接模式S={S1,S2,…,Sn}参数化,其中Si为第i个输入向量参与其中的索引值,n为输出序列的长度。
Attend(ht,S)=(a(hti,Si))i∈{1,…,n}
(18)
(19)
(20)
(21)
attention(ht)=Wp(attend(ht,A)(i))i∈{1,2,…,p}
(22)
2.5 情感分类
(23)
为了防止过拟合,在Softmax之前添加了Dropout[24],随机丢弃一些网络节点,能够显著地提高模型的泛化能力。使用反向传播算法,采用的交叉熵损失函数为:
(24)
3 实验与结果分析
本文实验测试为64位Ubuntu操作系统,开发环境为Python3.7,Keras 2.3.1,后端为TensorFlow 2.0,开发工具为PyCharm。
3.1 数据集
本文实验室数据集为中国科学院谭松波博士整理的中文酒店评论数据集,共有10 000条评论组成,包含着7 000条积极情感和3 000条消极情感。情感标签分为两类[0,1],消极情感为0,积极情感为1,为平衡数据集,实验选取6 000条数据集,正负样本各3 000条。本文使用sklearn中的train_test_split随机抽取90%作为训练集,10%作为测试集,进行多次实验,选取平均值作为实验的结果。实验数据集如表2所示。
表2 实验数据集
3.2 评估标准
本文评估指标主要有这三个:准确率(Precision)、召回率(Recall)和F1-Score。
(25)
(26)
(27)
3.3 实验参数设置
深度学习模型不同的参数设置会直接影响整个实验的分类效果,对情感分析是特别重要的。本文实验中,与Child[23]处理长文本序列设置的c=32,k=128的情况不相同,处理的文本信息长度绝大部分都在100个以内,所以c、k按照相同的倍数缩小设置为4、16。注意力头数的设置选取最优的4个注意力头,通过多次对比实验,选取效果最好的参数,详细设置如表3所示。
表3 模型参数设置
3.4 结果分析
3.4.1中文词向量的嵌入
本实验使用Cw2vec对文本进行词向量的训练,往往能够更好地获得中文字符间联系。如表4所示,分别以Cw2vec和Word2vec作比较。其中余弦相似度越大,单词间关系越紧密,余弦相似度越小,单词间相关性越小。
表4 词向量余弦相似度比较
从表4中可以明显看出基于笔画预训练Cw2vec向量更能获取单词之间的相关性,特别是对一些字符结构相似的,例如“雾霾”“雷雪”能够更好地获取字符特征,相比Word2vec预训练词向量的余弦相似度提高了2%。
实验整体效果而言,分别使用Word2vec和Cw2vec预训练的词向量作为BiLSTM+Sparse Self-Attention组合模型的输入。观察表5可以发现,基于Cw2vec的词嵌入比基于Word2vec的词嵌入整体效果F1-Score大约提高0.3%,验证了基于笔画Cw2vec训练词向量作为输入的可靠性。
表5 词向量对整个实验的影响(%)
3.4.2单一模型比较
为了验证本文提出的模型的有效性,笔者选取以下几种模型作为对照实验,全部使用预训练好的Cw2vec词向量作为输入,如表6所示。
表6 酒店数据分析结果(%)
观察表6可以发现,在细粒度情感分类任务中,深度学习算法(CNN、LSTM和BiLSTM)明显比传统的机器学习算法SVM效果要好,这是因为深度神经网络能够深层次、多维度的自动提取文本特征,在细粒度情感分析任务中,深度学习算法(CNN、LSTM、BiLSTM)明显比传统的机器学习算法SVM效果要好,这是因为深度神经网络能够深层次、多维度地自动提取文本特征,有效地避免了机器学习方法中人工提取特征的缺陷。对比CNN、LSTM和BiLSTM可以发现,BiLSTM不仅可以捕获长距离文本的依赖关系,而且还能够获取文本从后往前的信息。而添加注意机制的CBSA网络模型则能够更好地给不同的词赋予不同的权重,克服了特征无差别提取的缺点,在准确率、召回率和F1-Score都有着明显的提高。实验结果表明,添加注意力机制后的效果大约提高5%,相比较其他模型在情感分析任务上更有优势。
3.4.3分解多头自注意力机制的影响
表7为分解自注意力机制的实验结果对比,可以看出分解后的稀疏自注意力机制在F1值几乎没下降,并未影响实验分类精度。观察图9和图10可以发现本文的模型相比未分解的自注意力机制,占用更少的内存开销,减少了大约200 MB,训练时间降低了210 s,综上可以验证本文提出的稀疏自注意力机制不仅仅能够得到较高的分类结果,而且占用更少的内存开销、降低模型的训练时间。
表7 分解自注意力机制的结果(%)
图9 内存使用量
图10 模型完成20轮迭代的训练时间
3.4.4多头自注意力机制参数的影响
表8 注意力头数对实验结果的影响
4 结 语
本文提出一种新的CBSA网络模型来进行细粒度情感分析。一方面,使用基于Cw2vec预训练的词向量,能够更好地获取语义特征。另一方面,通过对自注意力机制进行分解,实现了局部紧密性、远程稀疏性的特性。实验表明,本文提出的模型能够挖掘丰富的隐藏情感信息,占用更少的内存、时间开销,更加准确地完成情感分析任务。
然而Cw2vec基于笔画训练词向量,是一个固定的静态编码表示,例如:“大夫”和“丈夫”的笔画是一样的,这样就会导致语义理解的偏差。未来的工作计划准备采用大语料下预训练的BERT模型,每个单词的词向量根据不同的上下文信息动态地表示,这样才能消除Cw2vec一词多义的问题。