王海涛,宋 文,王 辉
(河南理工大学计算机科学与技术学院,河南焦作454000)
随着网络技术水平的不断提高,互联网已经发展成为当今世界上最大的信息资源库.作为全球信息传播的主要途径,互联网承载的网络文本信息呈现出爆炸式增长的特点,面对这些数据量庞大且杂乱无章的文本信息,如何有效的筛选和分类,进而提取其中有价值的信息是当前数据挖掘领域研究的热点问题.
文本分类是自然语言处理(NLP)领域重要的研究课题之一[1].它能够将复杂的文本信息有效的组织和管理,并且已经广泛应用于网页检索、垃圾邮件过滤、情感分析[2,3]等不同领域,受到研究者广泛的关注.目前,常用的文本分类方法包括两类:一类是基于传统机器学习的方法,例如支持向量机(Support Vector Machine,SVM)、朴素贝叶斯、决策树、K 最近邻(K-Nearest Neighbor,KNN)等,这些方法的文本表示通常为高维度且稀疏的向量,其特征表达能力较弱,需要人工进行特征工程[4],在处理海量数据和语料库时会带来较高的代价.第二类则是基于深度神经网络的文本分类方法,其一般采用卷积神经网络、循环神经网络(Recurrent Neural Network,RNN)以及改进其结构的长短时记忆网络等模型进行文本分类.深度学习最初应用在图像处理和语音识别等方向并取得显著效果,很重要的原因是图像和语音的原始数据是连续稠密的,有局部相关性.文本分类中的关键问题在于文本表示,在传统机器学习中通常以特征表示的形式出现,其最常用的特征表示方法是词袋模型[5],但这种方法不能涵盖词语间的关联关系,同时也忽略了词序.不同于传统的机器学习,深度学习使用分布式表示[6]将文本训练为低维稠密的向量,再利用CNN 和LSTM 等网络结构自动获取特征表达能力,去掉繁复的人工特征工程,高效的解决问题.
本文提出一种基于LSTM 和CNN 的文本分类模型MLCNN,并将词嵌入后的文本融合到各个卷积层的输出中,加强了原始特征的传递,通过实验证明,本文模型具有较好的分类效果.
近年来,国内外有很多学者针对如何提高文本分类的准确率进行研究.邱宁佳等人[7]提出一种结合改进主动学习的SVD-CNN 弹幕文本分类算法模型,用以缓解传统CNN 模型使用池化层进行文本特征降维会损失较多文本语义信息的问题.Wu 等人[8]针对传统基于 TF-IDF 的 SVM 算法存在高维度稀疏数据和计算时间长等问题提出了一种结合CNN 和SVM 的文本分类算法(CSVM).首先,为输入语言构造一个m 大小的词汇表,使用1-of-m 编码对每个词汇进行量化,其次,利用CNN 从每个向量化的词汇中提取特征表达,通过大规模训练得到每个词向量的语义特征,最后使用SVM 作为分类器进行分类.
梁军等人[9]提出一种基于极性转移和LSTM 的情感分类模型,首先,为了捕获更深层次的语义信息,将LSTM 扩展到基于树形结构的递归神经网络上,其次,通过词语前后间的关联性引入了极性转移模型.Lu 等[10]结合LSTM 在情感分类中显著的分类性能,提出用于情感分类的P-LSTM 模型,其使用三字短语作为输入进行向量化,此外P-LSTM 引入短语因子机制,结合嵌入层和LSTM 隐藏层的特征向量,使从文本中提取的信息更加准确.
上述研究工作大多是对单一神经网络的改进,或利用传统机器学习方法与单层神经网络进行结合,虽然取得不错的效果,但研究表明,深层神经网络在提取文本特征上有着更好的效果.
随着多种神经网络的混合使用在语音识别和计算机视觉等领域的盛行,CNN 和LSTM 等模型结合运用在自然语言处理领域的研究也逐渐增多.Zhang 等人[11]结合CNN 及LSTM这两种不同深度学习模型的优点,提出一种新颖的文本分类模型CNN-LSTM.CNN-LSTM 利用CNN 提取较高层次的单词表示序列,并将其输入LSTM 中得到句子表示.它既能够捕获文本的局部特征,又能获取句子的时态语义,在情感分类任务中表现良好.针对中文文本分类问题,Li 等人[12]提出一种结合双向LSTM 和CNN 自动获取单词和字符级特征的模型,首先使用双向LSTM 捕获每一时刻的历史和未来信息,之后通过CNN 提取特征进行分类.
但神经网络深度的增加,也带来很多问题.模型训练越来越困难,且时间复杂度也比传统机器学习方法要高的多,学习周期增加,收敛速度变慢,出现梯度消失问题,影响分类结果等.网络层数的提高会逐渐损失输入的原始特征,造成分类模型效果的下降.为缓解上述问题,受 Huang 等人[13]提出的DenSeNet 模型理论的启发,并结合LSTM 和CNN 的优点,本文建立了基于LSTM 与CNN 的文本分类模型MLCNN,使用词嵌入将输入文本表示成低维向量,利用LSTM 与CNN 分别对词向量进行处理,在提取局部特征的同时兼顾上下文语义,并将原始输入融合到各个卷积层的输出中,实现原始特征的重用,最后使用softmax 作为分类函数获取分类结果.
本文剩余章节安排如下:第3 节给出MLCNN 模型的详细描述;第4 节展示实验结果及相关参数;第5 节为本文的总结,并对后续研究进行展望.
长短时记忆网络和卷积神经网络在文本分类任务上都体现出各自的优越性,为提高分类效果,借鉴两者特点,并考虑到增加网络层数带来的特征丢失问题,本文提出了混合模型MLCNN.其主要由以下五部分组成:
1)采用词嵌入进行文本表示;2)通过LSTM 获取上下文关联语义;3)利用CNN 进行文本特征提取;4)通过融合输入向量实现原始特征重用;5)使用Softmax 函数获取分类结果.
MLCNN 模型的结构如图1 所示,图中箭头表示特征向量的传递.
图1 MLCNN 模型Fig.1 MLCNN model
在自然语言处理任务中,通常使用单词或短语作为基本单元,并将其用固定长度的实数向量表示,这种方法称为词嵌入(Word Embedding)或词向量.独热编码(One-Hot Encoding)是表示单词常用的另一种方法,该方法首先创建一个词汇表,每个单词按顺序编号并表示为一个很长的向量,该向量的维度为词汇表的大小.向量的组成只有一个维度的值为1,其余都是0.1 的位置对应当前词在词汇表中的索引.当单词或短语用独热编码表示时,词与词以及句法之间的关联就不能被表示出来.此外,在深度学习中使用独热编码容易导致许多问题,例如词向量的高维而导致的维度灾难.
为了避免上述问题的出现,本文采用词嵌入将单词表示为类似语音、图像中连续稠密的实数向量,这些词向量包含更丰富的语义信息,让MLCNN 模型可对更复杂的上下文建模.当文本中的单词由词向量表示时,每个单词都被随机初始化为一个固定长度的向量,此时,文本中的第t 个单词就被表示为 xt∈Rn,n 为词向量的维度.当文本长度为 T 时,输入文本被表示为:
因为词向量是随机初始化的,所以只要神经网络模型在实验中被训练,就必须更新词向量.
循环神经网络(RNN)是一种广泛用于处理可变长序列的神经网络,但由于典型的RNN 相当于多层前反馈神经网络,长序列带来的大量历史信息会导致传输中的梯度消失和梯度爆炸问题.长短时记忆网络(LSTM)是一种改进的基于RNN 的网络结构,其通过增加存储单元、输入门、遗忘门和输出门来有效的保存长序列的历史信息,改善了由于RNN 训练层数较多而导致的信息丢失问题.
图2 LSTM 单元结构Fig.2 Structure of LSTM cell
LSTM 的结构如图2 所示.其中,存储单元Ct用来存储当前时刻历史信息.输入门it决定当前时刻输入向量对存储单元中信息的改变量.遗忘门ft决定上一时刻历史信息对当前存储单元中信息的影响程度.输出门ot用以控制当前存储单元中信息的输出量.当输入的词向量矩阵为时X=[x1,x2,…,xT]时,xt为 n 为维词向量,则 LSTM 的更新公式为:
ht为LSTM 单元的最终输出,σ(·)为 Sigmoid 激活函数,tanh(·)为双曲正切函数,Wi、Wo、Wf依次为输入门、输出门和遗忘门的权重矩阵,bi、bo、bf分别为三个控制门的偏置项.总之,LSTM 根据三个门控单元对信息进行过滤,并通过线性自连接的存储单元累积信息,将其作为中间产物以求出当前时刻隐藏层的输出.
MLCNN 模型使用LSTM 和CNN 两种具有不同特点的神经网络分别对输入文本进行处理.由于自然语言包含很多语法和语义,会导致前后文本间可能存在复杂的上下文依赖关系,为了获取上下文关联语义,在训练文本时可能会需要某些历史信息.相对于单独使用CNN 进行文本分类,并行加入LSTM 可以弥补CNN 在保留和控制历史信息能力上的不足,进而提高分类准确率.
卷积神经网络(CNN)是深度学习中提取数据特征的主要方法,其一般由六层构成:其中,输入层将文本中词语对应的词向量自上而下的排列成矩阵;卷积层使用卷积核对文本数据进行特征提取和特征映射;激励层是为线性的卷积运算增加非线性映射;池化层分为最大池化和平均池化,其对特征向量进行下采样和稀疏处理以减少数据运算量;全连接层通常是将池化后的特征重新拟合,减少特征信息的损失;输出层用于输出结果.
CNN 的主要思想为局部连接和参数共享,卷积层是CNN 的核心,其通过对单词进行卷积运算来得到更高级的特征表示,每个卷积核与输入特征的不同局部窗口进行卷积操作,将运算得到的特征向量经过非线性激活函数f 处理后便产生本层要输出的特征,公式如下:
其中,W 为卷积核,X∈RT×n为输入的词向量矩阵,参数 b 为偏置项.常用的非线性激活函数有Sigmoid 或ReLU 等.
为了加快模型收敛速度,降低其学习周期,相比于Sigmoid 等激活函数,采用ReLU 会明显减少整个学习过程中的计算量.ReLU 的公式如下:
x 为上一层神经网络的输出向量.ReLU 函数将输入的负值变为0,而正值不变,通过这种操作使神经网络具有稀疏性,减少了参数间依存关系,缓解过拟合问题.
MLCNN 使用三层CNN 作为文本特征提取的主要方法,其比单层CNN 在文本特征提取上的能力更加突出.
考虑到增加神经网络层数虽然有助于提高分类效果,却带来网络中层与层间特征传递时出现的特征丢失问题.本文将经过词嵌入处理的输入向量通过拼接(Concat)操作与每层CNN 的输出向量进行融合,实现对原始特征的重用,减少神经网络中层与层间特征传递时出现的特征丢失问题.
图1 中,将输入向量与每层CNN 的输出向量进行Concat时,要求待合并向量的维度必须相同,此时,在CNN 的卷积层加入Padding,可使每层CNN 的输入与输出向量的维度保持一致.Padding 参数有两种模式,分别为 SAME 和 VALID.当Padding 为 SAME 时,输入和输出向量的 size 关系如公式(9):
当Padding 为VALID 时,输入和输出向量的size 关系如公式(10):
在公式(9)和公式(10)中,λinput为输入向量的 size,λoutput为输出向量的 size,F 为卷积核的 size,S 为步长.将 Padding 的模式设置为SAME,即保持输入向量和输出向量的维度相同.
当输入的词向量矩阵 X1=[x1,x2,…,xT],xt∈Rn为文本中第 t 个单词对应的 n 维词向量,卷积核 W=[w0,…,wλ-1],λ 为卷积核中单词的数量,经过如下运算:
得到第一层 CNN 的输出矩阵可表示为O1=[o1,o2,…,oT].将原始特征矩阵 X1∈RT×n与 O1∈RT×n进行 Concat 操作,得到融合后的特征矩阵 X2=[o1,…,oT,x1,…,xT],即 Concat为一维数组上的横向拼接过程,不涉及对特征矩阵间进行相加或相乘等数学运算,因此减缓了由复杂度导致训练时间大幅增加的问题,降低了融合过程对模型训练的影响.
将 X2=[o1,…,oT,x1,…,xT]作为第二层 CNN 的输入矩阵,通过公式(11)进行卷积运算,得到第二层CNN 的输出矩阵 O2=[o1,o2,…,ok],k 为词向量的个数.将 O2∈Rk×n与原始特征矩阵 X1∈RT×n进行 Concat 得到 X3=[o1,…,ok,x1,…,xT],将其输入至第三层 CNN,通过卷积操作输出 O3∈Rj×n,j 为词向量的个数.将第三层 CNN 的输出矩阵 O3∈Rj×n与X1∈RT×n进行Concat 得到下一层网络结构的输入矩阵X4∈Rm×n,m 为词向量的个数.
在卷积操作后,将提取到的特征传递给池化层(Max Pooling).池化层将特征表达进一步简化,降低了特征向量的维度.图1 中,将 X4∈Rm×n作为池化层的输入矩阵进行 KMax 最大池化操作,K-Max 池化取出每个卷积核中K 个较大特征值,并保留这些特征值原始的先后顺序,减少了特征数量,获得最有价值的特征信息.
经过卷积和池化操作后,输出的特征矩阵与通过公式(6)得到的LSTM 的输出矩阵呈现不同的维度,使用融合层(Merge)对不同网络结构输出的词向量矩阵进行运算,将两类独立进行特征学习的分支融合在一起,传递至全连接层(Fully connected).全连接层将其输入特征重新拟合,降低了特征向量的维度.使用Dropout 防止过拟合,提高模型的泛化能力.最后,使用Softmax 函数输出类别的概率分布,其将x分类为类别j 的概率如下:
基于LSTM 与CNN 的MLCNN 模型的文本分类算法描述如算法1 所示.
为了验证MLCNN 模型在文本分类上的有效性,使用来自清华大学自然语言处理实验室的中文文本分类数据集THUCNews 作为本文实验数据,该数据集由新浪新闻RSS 订阅频道2005-2011 年间的历史数据筛选生成,包含74 万篇新闻文档,被划分为14 个新闻类别.从 THUCNews 选取时政、金融、教育、房地产、科技、体育、家居、时尚、娱乐、游戏10 个类别作为实验数据,每个类别数据约6500 条,共有65000 个新闻文本,其中75%为训练集,10%为验证集,剩余15%为测试集.
实验采用文本分类常用的评估标准:准确率、精确率、召回率及F1 值,对MLCNN 模型进行评估.首先引入混淆矩阵,结构如表1 所示.
表1 混淆矩阵Table 1 Confusion matrix
其中,矩阵的行表示分类前样本的实际类别,矩阵的列表示分类后对样本类别的预测情况.具体评估方法如下:
1)准确率(Acc)表征实际类别正确的样本在总样本中的比重,表达式为:
2)精确率(Pre)表示实际类别正确且预测类别正确的样本在所有预测类别正确的样本中所占的比重,表达式为:
3)召回率(Rec)表示实际类别正确且预测类别正确的样本在所有实际类别正确的样本中所占的比重,表达式为:
4)F1 值为精确率和召回率的加权调和平均值,表达式为:
本文使用预训练的词向量工具Word2Vec[14]作为MLCNN 模型的输入.LSTM 的隐藏层大小为100,对LSTM 的三个门控单元使用激活函数Sigmoid,如公式(2)、公式(3)、公式(4)所示,对记忆单元和LSTM 的输出使用公式(5)、公式(6)中的双曲正切函数.3 层CNN 的卷积核大小均为3,其数量为100.从综合效率的角度出发对CNN 的卷积层与全连接层统一采用非线性激活函数ReLU,对全连接层使用取值为0.5 的Dropout.训练采用交叉熵损失函数与 adam 梯度下降优化算法,初始化学习率为0.001.所有实验数据均采用3 次实验结果的平均值.
实验基于Google 开源深度学习框架 TensorFlow1.12.0,通过Python3 版本编程语言实现.运行环境为 Windows 8.1中文版64 位操作系统,CPU 型号为Intel 酷睿i5 4210M,运行内存为8GB.
4.4.1 性能分析
为了证明MLCNN 模型在文本分类上的有效性,通过设置训练参数搭建模型环境,使用训练集拟合模型,再使用测试集对模型的分类能力进行评估,得到的测试结果如图3 所示.其中,横坐标表示测试数据来自的不同类别,纵坐标则为MLCNN 在测试集上的性能指标:准确率Acc 和F1 值.
图3 模型测试结果Fig.3 Model test results
由图3 可知,MLCNN 模型在测试集的不同类别中都取得了不错的分类效果,除了教育和时政这两个类别,其余各类的Acc 和F1 值均超过了96%.究其原因,由于测试集为总数据中随机选取,导致抽到教育和时政两个类别的数据少于其余各类,从而影响模型分类结果;教育和时政类词句相对更抽象复杂,致使Acc 及F1 值难以进一步提升.
4.4.2 对比实验分析
为了进一步验证MLCNN 模型的分类效果,在THUCNews 数据集上将MLCNN 分别与 CNN、LSTM 以及二者改进模型进行对比实验分析,性能指标为测试集的分类准确率Acc、召回率 Rec 及 F1 值,对比结果如表2 所示.
表2 实验结果对比Table 2 Comparison of experimental results
其中,行和列分别表示实验对比的不同分类模型及评估模型分类效果常用的性能指标.CNN 与LSTM 分别为文献[15]及文献[16]中所提出的结构;文献[8]中的 CSVM 与文献[10]的 P-LSTM 分别是对标准 CNN 及 LSTM 模型的改进;文献[11]中的 CNN-LSTM 与文献[12]的 LSTM-CNN 为CNN 和LSTM 的组合结构,不同的是,在 CNN-LSTM 模型中,CNN 使用在 LSTM 层之前,将 CNN 的输出矩阵作为LSTM 的输入;而在 LSTM-CNN 中,LSTM 使用在前,将其输出矩阵输入至CNN 中进行文本特征的提取.
表2 中,虽然 CNN-LSTM 和 LSTM-CNN 模型都是将CNN 与LSTM 组合使用,但使用的前后顺序不同,却出现了分类效果上的差异.由表中对应性能数据可知,LSTM-CNN与CNN-LSTM 的分类效果较标准的CNN 与LSTM 模型而言都有明显提升,但CNN-LSTM 较LSTM-CNN 的分类效果却有所下降.通过分别对CNN 及LSTM 获取文本特征的原理进行分析,发现CNN 通过卷积操作获得的是文本的局部特征,而LSTM 旨在获取文本序列的长期依赖特征,将CNN 的输出作为输入传递给LSTM 可能会对LSTM 获取特征产生影响,进而影响了整个模型的分类效果.
由对比可知,本文提出的MLCNN 模型在文本分类上能够得到较好的分类效果.在THUCNews 数据集上实验结果显示,相比于标准的CNN 以及对其分类器进行改进的CSVM模型,MLCNN 的准确率分别提高了 4.81%,2.12%;相较于LSTM 及其改进模型P-LSTM,MLCNN 的准确率分别提高了6.59%,4.40%;这说明 MLCNN 使用混合结构作为模型主体的效果显著,对单一结构的某些方面进行改进虽然有助于提高分类效果,但提升有限.在与CNN-LSTM 模型的对比中,MLCNN 的准确率、召回率及 F1 值分别提高了 2.38%、3.22%和1.35%,这表明并列使用 CNN 及LSTM 模型比前后组合使用的效果要更好,更充分发挥出LSTM 在长文本序列中控制历史信息的能力与CNN 从局部到全局获取文本特征表达的优势.通过对比LSTM-CNN 的性能数据也不难发现,MLCNN 的各项指标均有所提升,证明将原始输入通过Concat 操作与CNN 输出相融合的方式,加强了特征重用,有助于更好表达数据原始特征,提高分类效果.
图4 不同数据量的性能对比Fig.4 Performance comparison of different data size
在训练过程中加载预训练(Pre-training)模型的准确率如图4 所示.其中,横坐标为训练数据量,纵坐标为准确率.从图中可明显看出:虽然在数据量增加的情况下,7 种分类模型的准确率都呈逐渐上升趋势,但MLCNN 模型的优势在训练数据量为200 时就开始体现.当训练数据达到1200 时,MLCNN的准确率趋于稳定,在训练数据量较少时获得较高的准确率,且能够快速收敛,表现出较好的分类能力.
本文提出一种针对文本分类任务的MLCNN 模型,该模型通过词嵌入将文本转换为低维词向量,采用CNN 提取文本的局部特征,结合LSTM 保存文本序列中历史信息的特点弥补CNN 在提取上下文关联语义方面的不足.将原始输入与各层CNN 的输出进行融合,减少了原始特征损失,提高了文本分类的准确率.通过实验结果对比进一步证明了本文模型的优势.在下一阶段的工作中,将尝试引入文献[17]中所提到的注意力机制(Attention)直观的解释各个句子和词对分类类别的重要性,其次,通过适当增加网络层数以应对更复杂的长文本分类问题,探究更好的深度学习模型,提高文本分类的准确率.