APP下载

基于CNN-BIGRU的中文文本情感分类模型

2020-04-15宋祖康阎瑞霞

计算机技术与发展 2020年2期
关键词:语料双向卷积

宋祖康,阎瑞霞

(上海工程技术大学 管理学院,上海 201620)

0 引 言

在自然语言处理领域,情感分析一直是一个比较热门的研究方向,伴随着互联网的发展,大量的商业评论涌现在各个平台上,商业评论大多夹杂着用户对商品的个人意见,因此对于这些评论文本情感极性的判别研究,可以帮助企业更好地了解自己产品或服务的客户满意度[1]。传统对文本的情感极性判别是从20世纪90年代开始的基于机器学习的方法。传统机器学习的方法主要分为两个步骤,首先人工构造特征来获取所需的文本信息。在这一步中,使用的传统方法是词袋模型(BOW)[2],将每个词依据事先建立的词典转换为one-hot向量,这种方法存在的一个缺点就是得到的文本向量具有高维度、高稀疏的特点,因此出现了一些降维的方法,如TF-IDF、SVD模型等等。另外为了使向量能够表现上下文的信息,还出现了LDA、词嵌入(word embedding)[3]等模型,而词嵌入模型则更是将深度学习算法映入到自然语言领域的一个重要研究成果。在获取了所需的文本信息后,需要构建分类器对文本的情感极性进行分类。经典的机器学习方法基本都能够使用在文本分类之中,如支持向量机、随机森林、朴素贝叶斯等算法。

近年来,由于词向量等特征学习方法持续获得关注,深度学习在自然语言领域的发展也尤为迅速。深度学习模型可以自动从数据中提取特征,如Bengio等[4]利用深度学习思想构建的神经概率模型,将各种深层神经网络使用在大规模英文语料库上学习,完成了命名实体识别以及句法分析等多个自然语言处理的任务,CNN(convolutional netural network,卷积神经网络)与RNN(recurrent neural network,循环神经网络)也被证明是情感分类任务上的有效模型。在文本的情感分类方面,Yuan S[5]、Vieira J P A[6]、Zhao Y[7]、Zhang Y[8]、Vo Q H[9]等利用循环神经网络与卷积神经网络等模型对短文本进行情感分类,获得了很好的效果,但是由于RNN模型的梯度爆炸问题,因此基于RNN模型的LSTM与GRU模型是目前比较常用的模型[10-14]。因此文中提出了基于CNN-BIGRU的中文文本情感分类模型,构建CNN模型提取句子的局部特征,使用RNN模型中的双向GRU模型提取句子的上下文长距离依赖特征,利用Keras开源库中的Merge层将两个模型融合。在谭松波的酒店评论语料上采用十折验证法进行实验验证,实验结果证明,该模型比传统的RNN与CNN模型在准确率与F值上都有显著提高。

1 基础知识

1.1 词向量模型

最早的词向量模型为one-hot词袋模型,将所有模型构成一个词典D,用一个长向量来表示一个词,这种词向量容易造成维度灾难,并且不能很好地表示词的上下文关系,例如“他打了我”和“我打了他”的词向量是相同的,但是却有完全不同的意思[9]。而在近几年出现了一种分布表示词向量的模型,基本思想是把所有的词用固定长度的向量来表示,最近谷歌开源的word2vec词向量模型就属于这种分布式模型。在文中所构建的模型中,借鉴了分布式表示词向量的方法。

首先提取文章中所有的单词,按其出现的次数降序排序,接着将每个编号赋予一个one-hot词向量,然后使用skip-gram模型生成一个矩阵M。skip-gram模型是一个一到多的词向量生成模型,在模型中,首先会随机初始化矩阵M,然后使用神经网络来训练矩阵M,标签为附近词对应的one-hot编码,通过这种方法可以生成固定长度的词向量,模型结构见图1。

图1 skip-gram模型

1.2 CNN模型

CNN模型最初常应用在图像处理领域,卷积神经网络模型与一般神经网络模型相似,它是由输入层、隐藏层和输出层组成,可以捕捉数据的局部特征,主要是通过反向传播算法进行参数的优化。

CNN网络的输入层是前文所述的词向量矩阵,即分词后的句子矩阵。假设一个句子在中文分词后有M个词,则这个词向量矩阵的行数为M行,每个词的词向量维度是N维,矩阵为一个M*N的矩阵。CNN网络的隐藏层包括有卷积层和池化层,卷积层是CNN网络的核心层,通过不同大小的卷积核,可以对文本依次进行卷积运算,得到确定个数的卷积映射。池化层往往与卷积层交替出现,主要是负责对特征的大小进行压缩,以简化网络的计算开销。池化层往往包括average pooling和max pooling,池化层通常是输入卷积后的特征映射中的最大值,从这个角度上来讲,可以解决句子长短不一的问题。CNN的输出层一般连接着一个softmax层,输出分类的概率以及最终的分类结果。

1.3 双向GRU模型

RNN模型与CNN模型相同,其主要架构为输入层、隐藏层和输出层[15]。RNN模型中,从单一方向输入一个词向量矩阵,而输出单元也将会是一个单一方向矩阵,大部分的工作将在隐藏单元中完成。由于RNN模型常常存在着梯度爆炸的问题,由此而衍生了来源于RNN模型的双向LSTM模型。GRU模型是LSTM模型的一个变体,它将LSTM模型中的忘记门和输入门合成了一个单一的更新门,并且还混合了细胞状态和隐藏状态以及一些其他的改动,最终输出的模型要比标准的LSTM模型简单,并且其效果基本一样。但是GRU模型的状态输出要少一个,在编码时使用GRU模型可以让代码变得简单一些。因此文中使用GRU模型,GRU模型可以学习长期依赖信息[16-17]。它主要有两个门,一个是更新门,一个是输出门,在GRU模型中,当前单元的状态是通过计算求和上一个单元状态得到,也就是说,模型可以得到历史信息和当前信息,这在语言处理中对于提取上文信息有很大的帮助。但是标准的无论LSTM还是GRU模型都是以时间顺序处理时间序列,这样的话就会忽略掉下文的信息,因此文中采用了双向GRU模型。双向GRU模型是在单层GRU的基础上扩充了一层GRU模型,通过让两层以相反的方向流处理数据来获得上文信息以及下文信息,这样可以充分提取所有文本的信息,双向GRU模型结构见图2。

图2 双向GRU模型

2 文中模型

通过CNN模型来解决文本分类问题,虽然从一定程度上可以解决维度灾难问题以及中文文本长短不一的问题,但是CNN模型只能提取局部特征。例如,在“这家酒店的周围环境虽然比较嘈杂,但总体还是不错的”这样一句话中,固定大小的卷积核,很可能只能提取到“环境-嘈杂”,而无法将“酒店-不错”这样带有反转色彩的评价提取出来,也就是说,CNN模型无法解决句子的长距离依赖问题,并且,CNN模型需要固定卷积核窗口的大小,对于卷积核的参数调节也比较麻烦。而RNN模型则可以很好地解决对序列的长距离依赖问题,因此文中提出一种新的文本分类模型CNN-BIGRU(CNN-bidirectional-RNN),使用CNN模型作为辅助分类模型,以充分提取句子的局部特征,结合双向GRU模型以充分提取句子的长距离依赖特征,具体模型见图3。

图3 CNN-BIGRU模型

(1)对评论语料进行预处理,去除一些无用词,并且使用python库中的jieba分词库对中文文本进行分词,输入skip-gram中训练得出词向量。

(2)分别搭建了两个卷积核步长为2和3的CNN卷积模型,以提取2个与3个词间距内文本信息,记为2-gram与3-gram,将预处理后的句子矩阵输入CNN网络的输入层。文中所搭建CNN网络的隐藏层包括卷积层和池化层,卷积层为双层,对文本依次进行卷积运算,激活函数为relu函数,得到确定个数的卷积映射后将数据输入池化层,池化层为全局平均池化,以解决句子长短不一的问题。

(3)同时也搭建了一个双向GRU模型以提取文本的长距离依赖信息,与CNN模型相同,将预处理后得到的词向量矩阵按照顺序输入双向GRU模型输入层,假设每个词的词向量为xt,依据图2可以得到,更新门的计算(σ为sigmoid函数)如下。

rt=σ(Wr·[ht-1,xt])

(1)

输出门的计算公式如下:

zt=σ(Wz·[ht-1,xt])

(2)

GRU单元状态更新公式如下:

(3)

(4)

单元输出层公式如下:

yt=σ(Wo·ht)

(5)

GRU网络的计算使用了BPTT算法,将输入层记为{x1,x2,…,xn},隐藏层的输出记为{s1,s2,…,sm},BPTT算法主要是将原来的网络折叠开,利用前面时间序列的影响对最后一个分类作判断,对应的每一层的计算方法如下:

ti=Whxxi+Whhhi-1+bh

(6)

hi=e(ti)

(7)

si=Wyhhi+by

(8)

yi=g(si)

(9)

其中:

(10)

(11)

与传统神经网络不同的是,GRU的损失函数为交叉熵函数。

(4)通过Keras的Merge层将不同卷积核的CNN模型与双向GRU模型融合为一层模型,并且接入全连接层以及一个sigmoid层,最后实现语料的情感分析。

3 实例验证

3.1 实验数据

实验数据为谭松波博士的酒店评论语料,语料规模为10 000篇,全部是从携程网上自动采集,语料被分成四个子集,分别是:(1)ChnSentiCorp-Htl-ba-2000:平衡语料,正负类各1 000篇;(2)ChnSentiCorp-Htl-ba-4000:平衡语料,正负类各2 000篇;(3)ChnSentiCorp-Htl-ba-6000平衡语料,正负类各3 000篇;(4)ChnSentiCorp-Htl-u nba-10000:非平衡语料,正类为7 000篇。选用其中的一个语料集ChnSentiCorp- Htl-ba-6000,该语料包含3 000篇积极倾向语料与3 000篇消极倾向语料,文中采用十折验证法,将语料分成10份,其中9份为训练集,1份为测试集,因此训练集为5 400篇,测试集为600篇。数据样例见表1。

表1 数据样例

3.2 实验过程

文中主要使用Keras深度学习接口,以Tensorflow作为后台框架,实验器材为联想一体机,处理器为Inter Core(TM) i5-4590S CPU @ 3.00 GHz,安装内存为4.00 GB。

3.2.1 文本预处理

首先对文本进行数据清洗,构建数据词典,将一些停用词以及无关词去除,然后对数据进行分词,并将数据集顺序调整为一条积极评论一条消极评论,以便于使用十折验证法时训练集与验证集的数据分布均衡。然后对所有语料编制词典,赋予索引值,将索引矩阵输入skip-gram词向量训练模型,文中所取句子长度为200个词,语料超过200个词部分会被删去,不足两百个词部分对其进行补0操作。

3.2.2 搭建模型

CNN为两层模型,卷积核分别选用2个、3个以及2个与3个结合三种步长,RNN为双向GRU模型,之后使用Merge层将两个模型做融合,添加Dense层,再添加Sigmoid层对文本进行分类。

卷积神经网络参数设置如表2所示。

3.3 实验结果

经过多次试验,发现2-gram CNN-RNN、3-gram CNN-RNN与2-3-gramCNN-RNN的迭代论数设为20轮、10轮与6轮时,模型即可达到最优。

表2 卷积神经网络参数设置

模型试验结果对比见表3。

表3 各模型实验结果对比

注:2-gram表示两个词间距,其余相同。

通过表3可以得出:

(1)相比较RNN模型,采用CNN-BIGRU模型的情感分类准确率在2-3-gram上提升了7.9%,F值提升了0.058,在2-gram与3-gram上准确率分别提高了6.4%与5.3%,F值分别提高了0.053与0.058。分析其原因是双向GRU模型对上下文特征的提取使得模型对文本情感倾向的提取更加充分,而CNN模型作为辅助模型,使得模型对局部特征的关注也足够充分,因此模型的信息提取也更加完善。

(2)相比较CNN模型,文中模型相比较2-gramCNN,准确率分别提高了24.6%、23.5%与26.1%,F值分别提高了0.237、0.242和0.242,相比较3-gramCNN,准确率分别提高了26.3%、25.2%和27.8%,F值分别提高了0.281/0.286和0.286。分析其原因是一方面文中语料虽然是短文本,但文本长度都不是很短,而CNN模型更多地会关注局部特征,这样就使得CNN模型的表现很差,而文中模型在局部特征提取能力与长距离文本依赖信息抽取能力上的优势,使得它可以远远胜过传统的CNN模型。

4 结束语

文本情感倾向的判别是自然语言领域如今比较热门的一个方向,文中提出了一种结合传统CNN、RNN模型的CNN-BIGRU模型。该模型不仅兼具了CNN模型的局部特征提取能力,也将双向RNN模型的信息记忆能力融合进来。首先通过对语料的处理得到可以充分表示文本信息的矩阵向量;其次提出了改进后的RNN-BI-CNN模型,在词向量矩阵输入的基础上针对传统RNN、CNN与文中模型做了对比实验。实验结果表明,文中模型在情感倾向判别任务中有着更高的准确率与F值。

文中的创新点在于:采用词级别的句子情感分析方法,使用双向GRU模型兼具考虑了上下文关系,改善了机器学习等传统统计方法以及基于规则的情感分类方法对于人工的依赖,并且采用CNN模型作为辅助模型,避免了双向GRU模型过度关注长距离特征而忽视局部特征的缺点,利用深度学习的技术避免了人工构建规则进行分类的繁冗方法,并且在成熟数据集上取得了良好的表现。该研究目前仅对小数据集进行了二分类,可以为同一文本的多情感问题以及长文本的情感分类问题提供一定的研究思路。

猜你喜欢

语料双向卷积
基于全卷积神经网络的猪背膘厚快速准确测定
基于双向特征融合的交通标志识别
海量标注语料库智能构建系统的设计与实现
降低寄递成本需双向发力
一种基于卷积神经网络的地磁基准图构建方法
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种并行不对称空洞卷积模块①
浅谈视频语料在对外汉语教学中的运用
可比语料库构建与可比度计算研究综述
完善刑事证据双向开示制度的思考