一种基于类不平衡学习的情感分析方法
2021-07-15曲豫宾
李 芳, 曲豫宾, 陈 翔, 李 龙, 杨 帆
(1. 桂林电子科技大学 广西可信软件重点实验室, 广西 桂林 541004; 2. 江苏工程职业技术学院 建筑工程学院, 江苏 南通 226001; 3. 江苏工程职业技术学院 信息工程学院, 江苏 南通 226001; 4. 南通大学 信息科学技术学院, 江苏 南通 226019; 5. 江苏工程职业技术学院 图文信息中心, 江苏 南通 226001)
网络的快速发展产生了海量的文本数据, 大量的文本数据来源于用户参与论坛等活动, 这种UGC(user generated contents)数据变得越来越重要[1]. UGC数据主要包括电商商品评论及电影评论等, 其可提供一些有价值的信息, 为用户的日常决策提供了重要参考[2]. 网络评论的极性分类是文本处理任务中的一项基本任务[3]. 网络评论中的情感分析(sentiment analysis)是指根据文本内容, 使用多种方式判断该段文本的极性, 文本的极性类型包括褒义(positive)和贬义(negative)两种. 常见的分析方法主要有基于词典的情感分析方法、 基于机器学习的情感分析技术以及基于深度神经网络的情感分析技术[4]等. 朱嫣岚等[5]借助于HowNet提供的语义相似度计算目标词与基准词之间的相关性, 对文本的极性进行了分类; 李明等[4]通过研究朴素Bayes、 决策树、 支持向量机等算法, 发现支持向量机在商品评论情况倾向性分析中具有较高的召回率和精确率; 高云龙等[6]采用改进的卷积神经网络, 利用不同编码方式将短文本映射到不同空间下的分布式表示中, 实现了对短文本进行分类; 高巍等[7]采用基于序列卷积网络对Twitter数据进行情感分类, 证明序列卷积分类模型可在情感分类任务中取得较好的效果. 但上述研究都是针对平衡数据集, 即含有褒义与贬义内容的数据基本保持一致. 由于用户评论的随机性, 这些UGC数据通常存在天然的类不平衡[8]. 贬义数据, 也称为消极数据, 数量较少, 但却有较大的影响力. 传统基于机器学习方法对类不平衡数据集的处理方法包括对数据集中多数类欠采样、 对数据集中少数类进行过采样和基于代价敏感的分类方法等[9]. 目前, 对文本分类中类不平衡问题的研究已有许多成果: Li等[10]首先提出了在类不平衡数据集中采用过采样及欠采样的方法, 缓解不平衡数据集对分类器性能的影响; Li等[1]针对类不平衡问题, 提出了结合通用与领域知识对文本进行过采样, 取得了一定的效果; 如先姑力·阿布都热西提等[11]提出了在维语网页中使用n-gram模型结合类不平衡SVM的不良文本过滤方法; Prusa等[12]采用欠采样方法解决了Twitter情感分析中的类不平衡问题; Li等[13]通过引入半监督学习的方式扩充训练数据集, 以缓解类不平衡问题; Ren等[14]在解决自引入技术债务的分类问题中, 采用基于代价敏感的分类方法缓解类不平衡问题, 该方法采用文档数量比例作为损失函数中的权重因子; Lin等[15]在解决使用单机结构做目标识别的过程中, 既引入代表代价敏感的权重影响因子, 又考虑样例的分类难度, 提升了目标识别的精度; Ye等[16]在用卷积神经网络解决图像识别时引入了类别相关度特性, 使得少数类具有较大的决策值, 从而缓解了类不平衡问题. 解决类不平衡问题过程中, 对多数类数据欠采样可能会导致信息丢失的问题, 对少数类过采样可能会导致模型过拟合问题, 因此基于代价敏感的分类方法应用广泛. 但传统基于代价敏感的分类方法仅考虑了不同类别数据集对训练模型的影响, 未充分考虑训练过程中不同样例区分的难度问题. Lin等[15]在设计Focal损失函数过程中引入了不同样例的区分难度, 但该计算过程需预先设定超参数, 且物理意义不明确.
基于此, 本文在将基于双向长短期记忆网络的深度学习框架应用到情感分析过程中, 设计一种基于交叉熵损失函数的目标函数, 该目标函数既考虑了不同类别比例对模型训练的影响, 又通过集成信息熵将不同样例的分类难度引入到新的目标函数中. 首先, 基于预训练的向量对情感分类文本进行词嵌入, 将训练数据集的词向量输入到长短期记忆网络中; 其次, 在训练过程中使用新的目标函数计算损失值, 进而进行反向传播; 最后, 使用常见的AUC(area under curve)作为分类性能的评价指标, 将测试数据集在该深度学习模型上进行验证测试. 在公开的情感文本分类数据集IMDB上进行多次重复实验, 对实验结果进行统计分析, 证明基于该目标函数的深度学习框架能提升分类性能.
1 情感分析中基于类不平衡学习的深度语义学习框架
1.1 基于类不平衡学习的深度语义学习框架
针对网络评论中需从文本序列特征中学习深度语义以及评论文本中存在类不平衡的问题, 结合信息熵提出一种针对深度学习框架的损失函数, 该损失函数考虑了数据分布中的类不平衡问题, 将信息熵作为衡量样本分类难易程度的影响因子. 深度语义学习框架的整体流程如图1所示.
图1 情感分析中基于类不平衡学习的深度语义学习框架Fig.1 Deep semantic learning framework based on class imbalanced learning in sentiment analysis
情感分析问题属于自然语言处理(NLP)中的分类问题, 文献[17]在卷积神经网络上对文本进行了分类实验, 结果表明, 采用预训练的向量对输入文本进行向量初始化, 能大幅度提升分类性能. 如图1所示, 该深度语义学习框架首先使用glove vector对训练数据集中的文本进行初始化[18], 得到维度为300维的输入向量, 然后将该初始化后的向量作为双向长短期记忆网络的输入值进行训练. 长短期记忆网络作为循环神经网络(RNN)的一种, 能解决较长数据的依赖问题, 该网络也能更好收敛[19]. 而双向长短期记忆网络除能考虑文字序列之间的正向依赖外, 也能兼顾文字序列之间的反向依赖[20], 且双向长短期记忆网络能更好地解决梯度爆炸和梯度消失问题, 从而更好地训练分类模型. 双向长短期记忆网络从嵌入式向量中学习语义特征, 分别生成前序语义特征向量和后序语义特征向量, 将两种向量连接在一起组合为全连接线性分类层, 输出层为包含两个输出神经元的输出层, 对输出层使用交叉信息熵损失函数计算训练数据集的损失值. 鉴于在训练文本中存在类不平衡问题, 通过引入不同类别的比值作为权重影响因子, 同时引入信息熵的概念, 将经过softmax后的输出值作为概率分布计算相应的信息熵. 信息熵用于衡量样本分类的难度, 信息熵高则样本分类难度较高, 应该分配较多的损失值. 对损失值进行反向传播, 计算得到深度语义学习模型. 将该训练模型应用在测试数据集上, 得到该模型的性能分布情况. 原始训练数据集与测试数据集具有相同的样本数, 为构建类不平衡数据集, 设定抽样因子序列为list={0.05,0.1,0.2,0.3,0.35,0.4}, 对训练集与测试集中的消极评论(negative)数据集进行随机抽样, 即可构建多组用于训练模型的数据集.
1.2 基于双向长短期记忆网络的语义特征学习模型
文献[20]对从网络上爬取的英文和中文语料进行了分词及标注, 研究表明, 采用长短期记忆网络比采用循环神经网络能更好地获取潜在的语义信息, 达到较好的分类效果. 文献[21]将IF-IDF信息与分布式词向量表示相融合, 采用双向长短期记忆网络对从携程网上爬取的网络评论信息进行分类, 取得了比其他循环神经网络更好的分类效果. 因此, 本文对网络评论使用glove预训练模型, 获取分布式向量表示, 采用双向长短期记忆网络对网络评论的极性进行分类. 单独的长短期记忆网络单元结构如图2所示. 该网络单元由遗忘门、 记忆门、 输出门等组成.
图2 长短期记忆网络单元结构Fig.2 Unit structure of long short-term memory network
设遗忘门的输出为ft, 其计算公式为
ft=σ(wf·[ht-1,xt]+bf).
(1)
记忆门确定从输入中得到的哪些信息被记忆, 其计算公式为
it=σ(wi·[ht-1,xt]+bi),
(2)
(3)
信息的更新过程为
(4)
该网络单元的输出值为
ot=σ(wo·[ht-1,xt]+bo),
(5)
ht=ot×tanh(Ct).
(6)
长短期记忆网络单元中, 信息流只能前向传播, (t+1)时刻的信息仅依赖于t时刻之前的信息输入; 为使(t+1)时刻的信息能够感知(t+2)时刻及以后的信息, 引入双向长短期记忆网络. 对基于自然语言处理的情感极性文本分类问题, 该分类模型能更好地满足自然语言处理过程中对文本信息上下文感知的需求. 由于采用了双向长短期记忆网络, 在输出单元时会输出两个方向的语义向量. 通过对两个向量进行连接操作形成新的深度语义特征向量, 将该向量作为线性全连接层的输入向量.
1.3 面向类不平衡的集成信息熵损失函数
目前, 针对网络评论的研究[4,21]主要考虑了平衡数据集, 即在构造训练数据集时积极评论数量与消极评论数量相同. 具有相同比重的评论数据集在构造长短期记忆网络的分类模型时有助于获取分类性能较好的模型, 但网络评论本身存在类不平衡问题, 通常某种评论数量会远多于另一种评论, 使原有的训练模型无法迁移到新的数据集中. 且由于具有少数类的评论模型通常具有不可忽视的重要性与影响力, 因此需解决面向类不平衡的情感分析问题.
针对类不平衡的数据集, 常见的解决方法包括在训练数据集中对多数类进行欠采样、 对少数类进行过采样、 使用代价敏感的损失函数等方法[9]. 欠采样方法存在丢失数据信息问题, 传统基于SMOTE的过采样方法不能应用于采用分布式词向量表示的输入数据集中. 采用代价敏感的损失函数是解决类不平衡问题的常用方法之一. 除考虑类不平衡外, 还要针对不同分类难度的样例进行处理. Lin等[15]在对图像检测问题的研究中发现, 不同分类难度的样例对分类精度存在较大影响. 易分类的样例其损失函数应有较小的损失值, 难分类的样例其损失函数应有较大的损失值. 通过引入分类难易程度的影响因子, 可实现对类不平衡数据集中不易分类的少数类提升其损失函数输出值, 改变反向传播过程中的网络结构, 从而提升分类性能. 但该方法存在物理意义不明确, 需要在使用过程中进行超参数优化等问题, 泛化性能较差.
本文算法基于兼顾类不平衡中不同类别的分类代价及分类难易程度, 特别是对不易分类的少数类更有效. 由于信息熵能有效衡量离散信息的不确定性, 因此不确定性高的分类样例信息熵较高, 其对应的样例分类难度较大; 确定性高的分类样例信息熵较低, 其对应的样例分类难度较小.
如图1所示, 深度神经网络的输出不同类别得分为score={t0,t1}, 经过softmax后的分布概率为P={p0,1-p0}, 情感分析问题属于二分类问题, 为简单, 设其真实值为P′={1,0}, 则对应的交叉信息熵CE(P′,P)为
CE(P′,P)=1×(-lgp0)+0×[(-lg(1-p0)]=-lgp0.
(7)
考虑网络极性评论中存在的类不平衡问题, 设不同类别评论数量的比例为γ={γ0,1-γ0},γ0∈{0,1}, 为简单, 设类别为1的评论比例为γ0, 则其对应的交叉信息熵CE(P′,P)为
CE(P′,P)=1×(-lgp0)×γ0+0×[-lg(1-p0)]×(1-γ0)=-γ0lgp0.
(8)
交叉信息熵CE(P′,P)的损失值由大量多数类的损失值组成, 因此有必要提升少量难分类的少数类损失值权重.信息熵能衡量离散信息的不确定性, 设信息熵因子为
(9)
则引入信息熵因子后的交叉信息熵CE(P′,P)为
CE(P′,P)={1×(-lgp0)×γ0+0×[-lg(1-p0)]×(1-γ0)}×β=-βγ0lgp0.
(10)
由p0计算得到的信息熵在面对多数易分类样例时, 其值接近0, 在面对其他难分类样例时, 分类难度越高, 其值越接近1, 因此由β因子进行缩放后,β值能较好地反映样例分类的难易程度. 根据式(8)计算得到对应的损失函数梯度为
(11)
2 实 验
所有实验均在至强E5-2670的CPU与16 GB内存的工作站上完成, 同时在NVIDIA GeForce RTX 2070 GPU上训练深度神经网络并进行分析. 实验中使用的深度神经网络库采用Pytorch 1.6稳定版本, 超参数采用BiLSTM网络结构的默认参数.
2.1 实验数据集
实验采用的情感分析数据来源于IMDB数据集, 该数据集为经过预处理的具有明显情感偏向的数据集, 分为积极评论和消极评论. 原始数据集中包括训练数据集和测试数据集, 各25 000条数据. 该数据集应用较广, 在Keras,Pytorch等框架上都有集成, 提供专用的数据处理接口. 本文实验需要对类不平衡数据集进行处理, 因此未采用通用接口, 通过直接读取数据源创建数据字典的方式封装数据处理接口. 设抽样因子序列为list={0.05,0.1,0.2,0.3,0.35,0.4}, 对原数据集中的训练集和测试集中的消极评论数据集进行随机抽样, 即可构建多组用于训练模型的数据集. 数据集信息列于表1.
表1 数据集信息
2.2 分布式词向量表示
在自然语言处理中, 单词的表示已从早期的one-hot编码发展为目前常见的分布式词向量表示. GloVe模型(global vectors for word representation)是目前较常见的单词分布式词向量表示模型之一. 双向长短期记忆网络的输入要求是词向量, 采用如GloVe模型等预训练的词向量可有效提高模型分类的精度[17]. 本文实验中先将GloVe模型加载到内存中, 再对待训练的网络评论查找该向量表, 获取分布式词向量表示. 为与GloVe模型保持一致, 分布式词向量的维度设为300, 其他超参数包括每句评论的长度设为200, 超过特定长度的句子做截断处理, 对不满足长度的句子进行补零操作, 数据字典大小为20 000.
2.3 评价指标
针对类不平衡数据集的常用评价指标包括召回率、F1值和AUC等. AUC能综合考虑召回率与精确率指标, 应用较广, 其值越趋近1表示分类模型性能越高, 如果AUC值在0.5附近, 则表示其分类性能无应用价值.
2.4 对比损失函数
为比较不同类别的损失函数对情感分析类不平衡数据集的影响, 本文选择多种损失函数在相同条件下进行对比实验. 实验中用到的4种损失函数如下:
1) 如式(7)所示, 采用交叉信息熵作为损失函数, 未考虑类不平衡问题, 在实验中作为基准函数, 记为LF;
2) 如式(8)所示, 采用交叉信息熵作为损失函数, 考虑不同类别评论比例的影响, 引入不平衡率影响因子, 记为LFCS;
3) 文献[15]的损失函数, 该损失函数同时引入了不平衡率影响因子和表达分类难易程度的影响因子, 该影响因子采用对分布概率进行放大处理的方法, 本文实验中影响因子采用的放大因子超参数设为2, 记为LFFL;
4) 如式(10)所示, 采用交叉信息熵作为损失函数, 在损失函数中同时引入不平衡率影响因子和表达分类难易程度的影响因子信息熵, 基于Pytorch实现集成信息熵的损失函数, 记为LFIE.
3 实验结果分析
表2为不同抽样比例情况下采用不同损失函数深度学习模型的AUC值. 由表2可见, 在不同抽样比例的情况下, 双向长短期记忆网络在使用本文基于集成信息熵的损失函数后均能获得最佳的AUC值. 同时, 在抽样比例较低(0.05)时, 采用LFIE损失函数的分类模型. AUC值最多提高15.3%. 随着抽样比例的升高, 采用不同损失函数的分类模型均获得了不同程度的提高, 呈现近似线性的变化, 这种变化趋势符合分类模型的性能变化趋势. 采用LFIE损失函数的分类模型随着抽样比例的升高均能获得最佳的分类结果, 说明采用LFIE损失函数的分类模型具有较强的泛化能力.
表2 不同抽样比例情况下采用不同损失函数模型的AUC值
根据不同抽样比例采用不同损失函数深度学习模型的AUC值得到相应的盒图如图3所示. 由图3可见: 未考虑类不平衡的损失函数LF, 其中位值优于考虑了类不平衡影响因子的损失函数LFCS和LFFL; 采用LFFL损失函数的模型分类性能在部分情况下优于未考虑类不平衡因子的损失函数LF; 采用LFFL损失函数模型的中位数和最高值均明显低于未考虑类不平衡因子的损失函数LF. 此外, 仅考虑类不平衡因子的损失函数LFCS, 无论是在AUC的最高值、 中位数还是最小值上均明显低于未考虑类不平衡因子的损失函数LF, 这可能与仅采用不同类别评论的比例值作为影响因子有关. 采用LFIE损失函数的分类模型具有最佳的中位值, 且该中位值明显高于采用其他损失函数的分类模型的AUC值. 因此, 在不同抽样比例情况下, 采用LFIE损失函数的分类模型具有较强的鲁棒性, 能适应不同比例的类不平衡情况, 从而有效减少在其他领域中调整超参数的难度.
图3 采用不同损失函数的模型使用AUC指标对比盒图Fig.3 Comparison of box plot of AUC indicator for models with different loss functions
综上所述, 针对网络评论中普遍存在的负面评论较少而影响力却较大的类不平衡问题, 本文提出了一种基于类不平衡学习的情感分析方法. 该方法基于深度学习的概率分布输出, 将计算样例得到的信息熵作为影响因子构建交叉信息熵损失函数. 在IMDB公开数据集上进行验证实验的结果表明, 采用集成信息熵损失函数的双向长短期记忆网络模型能处理类不平衡问题. 对数据的分析结果表明, 该策略能提升基于长短期记忆网络的文本分类性能, 使用集成信息熵损失函数的深度学习模型比未考虑类不平衡损失函数的深度学习模型, AUC指标在中位数上最多提升15.3%.