王璐琳 马 力
(西安邮电大学计算机学院 陕西 西安 710061)
文本情感分类任务面向用户生成的文本,分析文本的情感信息,最终得到文本的情感倾向:正向、负向或中性[1]。目前,文本情感分析已经广泛应用于诸多领域,如电子商务平台、电影推荐和舆情分析等[2]。
词向量是一种文本数据的数值化表示方法,是自然语言处理的基础工作[3]。Hinton[4]在1986年提出词的分布式表示,奠定了文本词语建模的发展理论基础。最早的一种比较直观的词向量生成方式称为独热编码(One-Hot Encoding),先将语料库中的所有词汇汇总得到N个词汇,并将每个文档生成一个N维向量,每个维度体现了该文档中特定词汇的个数[5-7]。Bengio等[8]提出了一种神经网络语言模型(Neural Network Language Model,NNLM),通过一个三层的神经网络、Softmax分类、反向传播算法实现词向量映射。文献[8-9]提出了Word2vec工具,主要包含两种词向量模型:跳字模型(Skip-Gram)和连续词袋模型(Continuous Bag of Word,CBOW)。文献[10-11]又提出了Sentence2vec和Doc2vec语言模型,使用一种更简单的网络模型结构来训练长度不定的文本向量表示方法,不仅减少了参数,还能避免模型过拟合。Pennington等[12]于2014年提出了一个基于全局词频统计的词表征工具(Global Vectors for Word Representation,GloVe)。GloVe融合了矩阵分解的全局统计信息,加快了模型的训练速度。2016年,Facebook开源了一种FastText文本分类工具,该模型在词向量训练时引入了字符级别的N-gram特征,将几个字符N-gram向量进行叠加,用叠加向量表示某个单词[13]。Word2vec、GloVe等模型的问题是词向量是固定不变的,无法学习不同上下文中的词汇多义性[14]。例如英文单词“bank”,既有“银行”的意思,也可用作动词表示“堆积”,但上述模型无法区分这种一词多义。因此,Allen研究所于2018年发布了一种来自于语言模型的词向量表示(Embedding from Language Model,ELMo)[15],ELMo是一种深度语境化的单词表示,利用了深度上下文单词表征,词向量根据上下文而随时改变,能够很好地解决一词多义问题。
注意力机制(Attention Mechanism)是Treisman等[16]提出的一种人脑模拟模型,该模型能够通过计算概率分布来突出输入的关键信息对模型输出结果的影响,从而优化模型。Attention机制能够充分地利用句子的全局和局部特征,给重要的特征赋予更高的权重,从而提高特征抽取的准确性。因此,本文提出一种基于ELMo和Attention机制的文本情感分类方法,将ELMo模型生成的动态词向量作为双向长短期记忆网络(Bidirectional Long-Short Term Memory,BiLSTM)模型的输入特征,并引入Attention机制进行情感分类。实验结果表明此方法能够提升模型分类的准确性。
ELMo是一种新型深度语境化词表征,可对词的复杂特征(如句法和语义)和词在语言语境中的变化进行建模,即对多义词进行建模。ELMo词向量是深度双向语言模型(Bidirectional Language Model,BiLM)内部状态的函数,在一个大型文本语料库中预训练而成。ELMo模型的特点如下:
(1) 模型的输入是字母而不是单词,先通过字符卷积(Char-CNN)再输入到LSTM中。因此模型可以利用子字词单元来计算有意义的表示,对于词典外的词(如FastText)也是如此。
(2) ELMo是L层BiLM激活的串联。BiLM的不同层对单词上的不同类型的信息进行编码,如在BiLSTM神经网络中,词性标注在较低层编码,而词义消歧用上层编码更好。连接所有层可以自由组合各种文字表示,以提高下游任务的性能。
1.1.1 Char-CNN
(1) 输入层。原始输入为单个词的字符表示,即(特征维度,字符数量),ELMo模型中使用的是(16,50)。
(2) 卷积层。ELMo使用的卷积核个数为2 048个,分别是[1,32]、[2,32]、[3,64]、[4,128]、[5,256]、[6,512]、[7,1 024]。
(3) 池化层。对每一行进行最大池化,将池化结果拼接起来,形成维度为卷积核个数的词向量。ELMo中的初始词向量是2 048维,经过线性变换转化为512维。
图1 Char-CNN网络结构
1.1.2双向语言模型BiLM
给定有N个字符的序列t1,t2,…,tN,前向语言模型(Language Model,LM)通过对序列t1,t2,…,tk-1进行建模,然后计算字符tk的概率:
(1)
后向LM类似于前向LM,只是它反过来运行序列,预测给定上下文的前一个字符的概率:
(2)
BiLM同时具有前向和后向LM的功能,将前后两个方向的对数似然最大化:
(3)
1.1.3 ELMo模型
ELMo是双向语言模型BiLM的多层表示的组合,其模型结构如图2所示,其中Tk为Softmax层最终输出的词语tk的动态词向量。对于某一个词语tk,一个L层的BiLM能够由2L+1个向量表示:
(4)
图2 ELMo模型结构图
(5)
Attention机制在自然语言处理领域的应用最早是在Encoder-Decoder中,将其用在机器翻译或者人机对话等任务中,其核心思想为模拟人的注意力机制。在处理一段文字信息时,人们通常会将注意力集中在个别关键的文字上,而不是平均分配到所有文字上。将Attention机制引入特征提取和分类模型,能够对模型中的不同数据赋予不同的权重,在分类时可以侧重权重较高的信息值,从而提高模型的分类效果。Attention模型的基本结构如图3所示。
图3 Attention模型结构图
可以看出,从初始的隐藏层状态到新的隐藏层状态的向量s是初始的隐藏层状态ht和每个隐藏层状态在新隐藏层状态占比重大小的权值系数at乘积相累加的总和,其计算式为:
ei=vitanh(wihi+bi)
(6)
(7)
(8)
式中:ei为i时刻隐藏层的状态向量hi决定的能量值;vi和wi是i时刻的权值系数矩阵;bi为对应的偏置量。通过式(6)-式(8)可以实现由初始状态转换到新的注意力状态。
本文将ELMo动态词向量和Attention机制相结合,把ELMo动态词向量作为BiLSTM网络的输入特征,并引入Attention机制提升模型的准确性,从而进行文本情感分类。
ELMo是利用预训练的BiLM模型,在训练集上动态生成词的向量表示。由于BiLM模型的预训练工作量非常大,本文使用ELMo模型的提出者提供的BiLM预训练模型,在训练集上使用该模型训练生成最终的ELMo词向量。训练流程如图4所示。
图4 ELMo训练流程
(1) 准备词典和训练文件。词典文件中每个词占一行,必须包含‘S’作为句子开始标志,‘/S’作为句子结束标志,以及‘UNK’作为非词典内词的标记。顺序按照训练数据中词的频率大小排列,词典大小为793 471。训练文件每一句占一行,不能包含‘S’、‘/S’字符。
(2) 将文本里的词转化为字符id。首先初始化文本中每个词的字母数组,默认一个词的最大长度是50。然后初始化字母,对词中的每个字母按照UTF-8格式进行编码,编码的结果在0~255之间。其次将编码结果转化为16维的矩阵。最后将字母拼接成词,再将词拼接成句子。
(3) 优化模型。每次输入128个句子,通过Softmax层计算下一个词,通过计算前向和后向LM的对数似然函数来优化模型。
基于Attention机制的BiLSTM模型主要分为三个部分:输入层,隐含层,输出层,其中隐含层包括BiLSTM层和Attention层。其模型结构如图5所示,其中:bx_ht为前向LSTM隐藏层的输出;fx_ht为后向LSTM隐藏层的输出。
图5 基于Attention机制的BiLSTM模型结构图
在训练集上利用2.1节的方法训练得到ELMo动态词向量表示x0,x1,…,xt,将该向量输入到BiLSTM网络中,得到对应隐藏层的输出h0,h1,…,ht。图5中F表示BiLSTM网络中各独立方向上隐藏层状态的加和值,为网络的终态,a代表所有时刻各隐藏层状态对最终状态的注意力概率分布,ht为t时刻时各独立方向的状态的加和,Fatt为注意力加权过后的文本特征向量,可由式(6)-式(8)计算得到。
在得到了引入Attention机制的文本特征向量Fatt后,为了得到情感类别的预测值,使用Softmax函数进行情感分类,得到测试文本的情感分布如下:
(9)
(10)
式中:C表示情感类别总数;V为模型输出层的权值矩阵;Pc代表模型预测的文本d归于类别c的概率,将d归到Pc最大的类别c中。
本文利用Adam优化网络模型,计算模型损失函数的梯度并更新模型参数,从而达到收敛。为了目标函数能够更加平稳地趋于收敛并提高算法的训练效率,一次只用一小批样本进行训练。模型采用交叉熵函数作为损失函数,并加入L2正则以防模型过拟合,计算式表示为:
(11)
本文采用IMDB和Yelp13两个数据集,将每个数据集按8 ∶1 ∶1的比例分配训练集、验证集和测试集。具体信息如表1所示。
表1 数据集分布情况
IMDB数据集包含来自IMDB的50 000条影评,被标记为正面和负面两种评价。Yelp2013为2013年Yelp数据库中的评论,评分等级为1星至5星,星级越高表示用户对产品的满意度越高。
本实验的运行环境为Windows 10系统、Intel(R) Xeon(R) CPU E5-262 v4@ 2.10 GHz处理器,显卡为NVIDIA Tesla P100 GPU,采用Python编程语言和TensorFlow深度学习框架。实验的具体参数设置如表2所示。
表2 参数设置
在已经训练好的各个网络模型上使用测试集进行测试,采用精确率(P)、准确率(A)、召回率(R)、F1值作为评价标准。具体计算式表示为:
(12)
(13)
(14)
(15)
式中:TP为把正类预测为正类的数量;TN为把负类预测为负类的数量;FP为把负类预测为正类的数量;FN为把正类预测为负类的数量。
选择以下几种算法作为基准实验进行对比来验证本文方法的有效性:
(1) SVM:使用Word2vec将单词转换为词向量,利用SVM进行文本情感分类。
(2) LSTM:使用Word2vec将单词转换为词向量,作为LSTM网络模型的输入特征。
(3) BiLSTM:使用Word2vec将单词转换为词向量,作为BiLSTM网络模型的输入特征。
(4) BiLSTM+Attention:使用Word2vec将单词转换为词向量,作为BiLSTM网络模型的输入特征,并引入Attention机制优化模型。
(5) ELMo+BiLSTM:使用ELMo模型生成上下文相关的动态词向量,作为BiLSTM网络模型的输入特征。
(6) ELMo+BiLSTM+Attention:使用ELMo模型生成上下文相关的动态词向量,作为BiLSTM网络模型的输入特征,并引入Attention机制优化模型。
TensorFlow框架中的TensorBoard可视化工具能够保存并实时展示模型训练过程中每个参数的变化。图6、图7分别给出了TensorBoard中BiLSTM、ELMo+BiLSTM+Attention模型在IMDB数据集上训练时损失函数值随迭代次数的变化趋势。
图6 BiLSTM模型训练损失变化
图7 ELMo+BiLSTM+Attention模型训练损失变化
可以看出,模型在训练时整体的函数损失值都呈下降趋势,并最终维持稳定收敛状态。将ELMo词向量与Attention机制相结合的模型,相比于使用Word2vec生成词向量的BiLSTM模型,由于模型复杂度的增加,每输入一批训练样本,词向量都会根据上下文做相应的调整,造成起始的损失值变大,但收敛速度更快,且Attention机制的引入能进一步提高模型的准确性,从而使最终的损失值更小。由此可见,将ELMo词向量和Attention机制相结合能有效地提高模型分类的准确性。
表3、表4分别是不同分类模型在IMDB和Yelp13数据集上的评价结果比较。
表3 在IMDB数据集上的评价结果
表4 在Yelp13数据集上的评价结果
可以看出在IMDB和Yelp13数据集上结果差异较大,这是因为ELMo动态词向量更适用于训练数据较少的分类任务,并且Yelp13数据集中每个类别的训练样本分布不均衡也会对分类准确率产生一定的影响。
对比表中分类模型SVM和LSTM的结果可以看出,基于LSTM分类模型的文本情感分类效果比传统机器学习分类模型的分类效果要好,原因在于循环神经网络为深度训练模型,能够更好地进行文本特征提取,并且考虑了上下文关联,从而能够得到更好的分类效果。对比LSTM和BiLSTM的结果,BiLSTM网络相较LSTM网络来说能够更好地捕捉双向的语义依赖,因此分类效果比LSTM网络模型的分类效果好。对比BiLSTM+Attention和ELMo+BiLSTM的结果可以看出,将Attention机制引入BiLSTM网络模型和将ELMo动态词向量作为BiLSTM网络模型的输入特征都可以有效提高分类效果。因为引入Attention机制使模型能够更加充分地考虑到文本特征与结果的相关性,而ELMo动态词向量可对词的复杂特征和词在语言语境中的变化进行建模,更好地学习词汇多义性,从而取得更好的分类效果。本文提出的ELMo+BiLSTM+Attention网络模型在两个数据集上都取得了最佳的分类效果,相比于ELMo+BiLSTM模型准确率分别提高了0.017和0.011,说明本文提出的结合ELMo词向量和Attention机制的网络模型能够在一定程度上提升模型的分类效果,适合用于文本情感分类。
本文提出结合ELMo词向量和Attention机制的文本情感分类方法。实验结果表明此方法具有较好的分类效果,利用双向语言模型生成的动态词向量能够更好地学习不同上下文中的词汇多义性,达到消歧的目的,而Attention机制能够进一步优化网络模型,提高模型的完备性。本文方法虽然取得了预期的分类效果,但在训练网络模型的选择和构建上还存在一些可以改进的地方。LSTM网络不具有并行计算能力,对于特别长期的依赖现象处理能力也有限。在未来的工作中,将进一步优化训练网络模型,提高情感分类的准确率。