翟一鸣,王斌君,周枝凝,仝 鑫
中国人民公安大学 警务信息工程与网络安全学院,北京100038
随着互联网的迅猛发展,其上的海量文本信息与日俱增,如何快速有效地对互联网上的文本信息进行过滤、管理、挖掘一直是自然语言处理领域的研究热点和主攻研究方向,而文本分类是其中的关键技术。
在早期,文本分类一般选用特征工程与传统机器学习模型相结合的技术路线[1]。如Joachims[2]第一个提出使用支持向量机SVM进行自动文本分类,在当时与其他四种标准方法的比较中取得了最好的结果。传统机器学习分类模型主要有SVM[3]、KNN[4]、朴素贝叶斯[5]等,其问题是对文本特征的表达能力有限,在学习的过程中需要很多人工设计的特征进行辅助,很难提取到深层次的复杂文本特征,使得其分类的精度受到限制。
除了分类模型的不足外,传统文本分类方法中的文本表示也有一定的问题,如应用广泛的词袋模型(Bag of word,Bow)将文本表示为高维且稀疏的One-hot向量,这种做法没有考虑到文本中的上下文或词序信息,且无法表示出单词的词义信息。为优化文本表示问题,Hinton[6]提出了词的分布式表示概念,将词表示为低维的、稠密的连续实数向量。Bengio等人[7]提出使用神经网络构建语言模型,在过程中将词的One-hot表示转化为分布式表示。Mikolov等[8-9]提出了基于CBOW架构和Skip-gram架构的word2vec模型,以进行词向量计算。这些文本表示方法的研究为深度学习技术在文本分类领域的应用奠定了坚实的基础。
随着研究的深入,深度学习的各类技术方法开始广泛应用。Kim[10]提出了经典的TextCNN模型,使用一层卷积和一层最大池化的结构对文本进行特征提取,随后进行分类。康雁等人[11]提出了textSE-ResNeXt集成模型用于文本情感分类,在其中采用了动态卷积核策略,这样卷积操作能更好地适应输入文本,更有效地提取文本数据特征。张曼等人[12]将全卷积的思想引入到字符级文本分类任务中,使用卷积层替换全连接层,且将LRN层添加至卷积池化层后,在加快模型收敛速度的同时也提高了模型分类的准确性。以上各类方法都使用CNN对文本进行特征提取,其问题是卷积操作受限于卷积窗口的大小,只能够挖掘文本的局部特征信息,很难提取到文本中的长期依赖关系。为有效提取文本中的长期依赖关系,各类研究将循环神经网络(Recurrent Neural Network,RNN)结构,特别是LSTM[13]、BiLSTM[14]、GRU[15]等加入到了文本特征提取中。Zhou等人[16]提出了基于注意力的BiLSTM模型,在BiLSTM的特征提取层与分类层之间加入了注意力层,通过注意力机制对BiLSTM每个时刻的输出进行特征提取,以得到最终的文本特征表示。基于注意力的BiLSTM模型能够在不使用外部信息的情况下自动关注对文本分类贡献大的词语,进而提取文本重要特征,但其本身结构较为简单,进行文本分类的准确率并不是很高。为减少对人为设计特征的依赖以及解决CNN的特征提取受限于卷积窗口的问题,Lai等人[17]提出了循环卷积神经网络(Recurrent Convolutional Neural Network,RCNN)模型用于文本分类,RCNN使用双向循环神经网络对文本特征进行提取,再将提取到的上下文信息与原本词向量结合,生成新的词表示,以此代替CNN中的卷积结构,最后使用最大池化得到文本中最重要的潜在语义信息。RCNN解决了固定窗口的卷积操作使得每一个词向量上下文受限的问题,新的词表示尽可能多地包含了上下文信息。但RCNN在池化层使用了最大池化,即在所有新的词表示中选取了特征值最突出的一个来代表整条文本。这种最大池化策略较为单一,不能在训练过程中根据任务情况动态优化,只选取了最突出的特征,忽略了其他可能的对分类也有贡献的特征。
为解决RCNN存在的问题,进一步提高文本分类的效果,本文提出一种基于多头注意力池化的循环卷积神经网络(Multi-Head Attention Pooling-based Recurrent Convolutional Neural Network,MHAP-RCNN)模型,主要内容如下:
(1)在RCNN模型的基础上,对池化层的策略进行改进,不使用最大池化,而是结合注意力机制的思想,进行注意力池化。在注意力池化的过程中,根据新的词表示对分类的重要程度,为其分配不同的权重,重要程度越大,其权重系数就越高,再将权重与其对应新词表示的特征值加权求和,得到文本特征表示。使用注意力池化策略可以尽可能多地考虑对分类贡献大的各个特征,且注意力权重的分布能在训练过程中进行动态优化。
(2)在注意力池化的基础上,引入多头机制,进行多头注意力池化。虽然注意力池化策略可以尽可能多地考虑对分类贡献大的各个特征,但其也有一定的侧重点,仅进行一次注意力池化提取到的文本特征仍有局限性。因此,对新的词表示进行多次不同映射[18],在其多个特征表示子空间中分别进行注意力池化,最后再将多头结果进行融合,可使模型更加充分地提取重要特征,提高模型的学习能力。
为进一步提升文本分类的效果,针对上文中提到的经典RCNN所存在的问题,本文提出MHAP-RCNN模型,其总体架构如图1所示。
在MHAP-RCNN模型中,使用word2vec模型预训练的词嵌入向量对文本中的词进行表示。Word2vec模型可以通过对大规模文本数据的训练得到低维且稠密的词向量,这些词向量能够表示词的语义信息。Word2vec模型有CBOW和Skip-gram两种结构,分别如图2所示。
这两种结构的组成部分相同,即包括输入层、映射层和输出层,不同的是在训练过程中,CBOW结构使用周围的词来预测中间词,Skip-gram结构则使用中间词来预测周围的词。CBOW结构训练词嵌入的速度较快,但从表达语义信息的准确性方面来看,Skip-gram模型的效果更好[9],因此本文选用Skip-gram结构的word2vec模型。在训练过程中,通过最大化公式(1)中的对数似然函数来得到所有单词的词嵌入。其中,w t+j表示单词w t的上下文内容。
图1 基于MHAP-RCNN模型的文本分类结构
图2 CBOW结构和Skip-gram结构
假定一条文本中有N个词,该文本可以表示为[w1,w2,…,w N],在经过词嵌入层后,文本表示转换为E=[e1,e2,…,e N],e i∈Rd,d为词向量维度。
在词表示学习部分中,采取与经典RCNN相同的做法,使用双向循环神经网络获取词语的上下文信息,再将该上下文信息与词向量结合生成新的词表示。双向循环神经网络结构是正向循环神经网络和反向循环神经网络的结合,正向循环神经网络的输入为正常顺序的文本,反向循环神经网络的输入则是逆序的文本,两个网络独立进行计算。由于循环神经网络能够将已分析内容的语义信息存储下来,因此采用双向循环神经网络结构可以较为充分地提取文本中某个词的上文信息和下文信息。对于文本中的某个词来说,其上文信息就可用上一个词输入正向循环神经网络时该时刻的输出来表示,而其下文信息就可用下一个单词输入反向循环神经网络时该时刻的输出来表示。
e i表示第i个单词w i的词向量,设l i表示单词w i的上文,r i表示单词w i的下文,l i与r i均为维度为c的向量。单词w i的上文l i和下文r i可分别通过公式(2)和公式(3)获得。
其中,l i-1为上一个单词w i-1的上文,r i+1为下一个单词w i+1的下文;e i-1和e i+1分别为上一个单词w i-1和下一个单词w i+1的词向量;W(r),W l∈Rc×c为隐藏层的转换矩阵;W(sl),W(sr)∈Rc×d分别为用于当前单词w i与上一单词w i-1和下一单词w i+1进行语义信息结合的矩阵;f为非线性激活函数。需要注意的是,对于输入模型的任意文本,其第一个单词w1的上文和最后一个单词w N的下文分别使用相同的l1和r N,在本文中使用0填充。
随后,使用公式(4)得到单词w i的新的词表示x i。新的词表示能够在一定程度上消除单词歧义,同时包含原单词信息及其上下文信息。
在经典RCNN模型中,对词表示学习部分的结果进行一次tanh函数激活的非线性转换,再进行最大池化,将不同长度的文本转换为一个固定长度的特征向量表示,这样做是使用特征最突出的一个新词表示来表示整条文本,但最终对分类有贡献的文本重要特征可能存在于任意一个新词表示中,而不是只存在于特征值最突出的新词表示中,因此需要考虑每个新词表示中的信息对分类的贡献。针对以上问题,MHAP-RCNN模型不采取原本的最大池化策略,而是结合注意力的思想和多头机制,进行多头注意力池化。
在经过词表示学习部分后,一条文本的表示变为X=[x1,x2,…,x N],x i∈Rd+2c。假设多头机制中的头数为H,那么第i头对于新文本表示X的映射输出如公式(5)所示:
对于每一头的映射输出,进行一次注意力池化。根据注意力机制的思想,注意力池化将会动态地为每一头映射输出中的每个表示分配一个权重,以体现其对分类结果的贡献,随后将每个表示的特征值与其权重进行加权求和,并使用tanh函数激活,得到每一头的最终输出。以第i头为例,处理过程如公式(6)所示:
其中,u i∈Rk表示第i头中随机初始化的参数向量,并将会在整个学习的过程中进行动态更新,每一头将会学习一个不同的u。αi∈RN表示第i头得到的注意力权重,表示第i头根据注意力权重进行加权求和的结果,表示第i头进行注意力池化的最终输出。
由于头数为H,将得到H个注意力池化的输出对其进行融合,处理过程如公式(7)所示:
其中,y(5)∈RHk表示对H个注意力池化输出进行拼接的结果,y(6)表示融合的结果,W(6)∈RHk×o,b(6)∈Ro,o为融合输出维度。
根据多头注意力池化部分得到的结果对文本进行分类,处理过程如公式(8)所示:
其中,y(7)为输入文本的预测概率分布,W(7)∈Ro×C,b(7)∈RC,C为分类类别个数。
同时,在词表示学习部分的双向循环神经网络中以及多头注意力池化和分类层之间加入dropout,进一步防止过拟合,提高模型的泛化能力。
为证明所提模型的有效性,本文选取谭松波酒店评论数据集、中文文本分类数据集THUCNews的子集和复旦大学文本分类语料库进行实验,实验所用具体数据集情况如表1所示。
表1 数据集划分
谭松波酒店评论数据集由中科院计算所谭松波博士整理收集,原数据集包含10 000条数据,划分为两个类别,其中正向7 000条,负向3 000条。在对原始数据集进行去重和筛选后,本文在每个类别中选取2 700条数据,共计5 400条数据进行实验。
中文文本分类数据集THUCNews是根据新浪新闻的历史数据筛选过滤生成,包含74万篇新闻文档,共划分为14个类别。本文选取其中的12个类别,每个类别选取8 000篇文档,共计96 000篇文档进行实验。
复旦大学文本分类语料库由复旦大学李荣路老师整理并提供,共划分为20个类别,数据集分为训练和测试两个集合,其中训练集包含9 804篇文档,测试集包含9 833篇文档,共计19 637篇文档。本文使用数据集全集,并采取与文献[17]相同的做法,将训练集中的10%划分到验证集当中。
针对三个分类数据集,均采用jieba分词,实验过程中没有去除文本中的任何停用词。
关于模型中的超参数设置。实验中的词向量由Skipgram结构的word2vec训练得到,且使用word2vec的默认参数,词向量维度d=50;双向循环神经网络使用双向LSTM,词上文及词下文向量的维度c=50,对新的词表示做映射后的维度k=100,头数H=10,融合输出维度o=100;dropout保留率设置为0.5,随机梯度下降的学习率设置为0.01,批处理大小batch_size=128。
为体现模型的有效性,除经典RCNN模型外,本文还选取了多个在文本分类任务中应用广泛且效果较好的经典模型进行复现比较,包括TextCNN[10]、BiLSTM、ATT-BiLSTM[16]。其中,TextCNN选用3、4、5三个大小的卷积核,卷积核数目为150;BiLSTM和ATT-BiLSTM中隐层维度选用50,其他主要参数设置与2.1节中的实验设置保持一致。同时设计了基于注意力池化的循环卷积神经网络(Attention Pooling-based Recurrent Convolutional Neural Network,AP-RCNN)模型,该模型中仅将RCNN中的最大池化改为注意力池化,没有使用多头注意力池化。通过AP-RCNN与RCNN、MHAP-RCNN之间的的对比,来体现进行注意力池化和引入多头机制对模型的影响。
本文还引用了在相同数据集上已有的工作成果进行比较,包括:文献[19]将文本使用句向量表示,并输入到BGRU-CNN混合模型中,其模型也是经典RCNN模型的一种变体,在THUCNews数据集上取得了较好的效果;文献[20]使用自注意力机制对词向量进行处理,提出一种关键词提取与CNN相结合的self-attention+cnn文本分类模型,其模型在复旦数据集上取得了较好的效果。
实验选用测试集准确率及Macro-F1值评估各个模型的效果,为使实验结果更加真实有效,选取三次重复实验结果的中值作为作为最终结果,具体对比结果如表2所示。
从表2中可以看出,无论是测试集准确率还是Macro-F1值,本文模型MHAP-RCNN在三个数据集上都取得了最好的结果。重点对RCNN、AP-RCNN、MHAP-RCNN三个模型的实验结果进行分析。对比RCNN,AP-RCNN在将最大池化改变为注意力池化后,三个数据集上的测试集准确率和F1值都有所提升;对比AP-RCNN,MHAP-RCNN在引入多头机制,进行多头注意力池化后,其性能又有显著增强。这也验证了前文所述,注意力池化相比最大池化,由于考虑了每个新的词表示所包含的信息对分类的贡献,提取到了更多有助于分类的重要特征,但一次注意力池化仍有局限;多头注意力池化在不同的特征表示子空间中进行多次注意力池化,更加充分地提取了文本重要特征。
表2 各模型实验结果 %
从数据集类型来看。酒店评论数据集为二分类数据集,THUCNews和复旦数据集为多分类数据集。与其他各模型相比,MHAP-RCNN模型在文本二分类和多分类任务中都表现更优。同时不论是对各类别训练数据量少、整体数据规模较小的酒店评论和复旦数据集,还是对各类别训练数据量比较充足、整体数据规模较大的THUCNews数据集,MHAP-RCNN模型都表现更好。对于各种类型和规模的文本分类来说,模型分类结果优劣的关键是模型对文本的特征提取能力,MHAP-RCNN中的多头注意力池化机制能够更加充分、准确地提取文本重要特征,因此能够取得更好的文本分类效果。
为更加形象地体现MHAP-RCNN模型的优越性,本文对各模型的训练过程进行了进一步探究,结果如图3所示。图3绘制了在复旦数据集中,各个模型在训练过程中的验证集准确率(Valaccuracy)随训练周期(Epoch)变化的曲线。
图3 验证集准确率变化曲线
从图3中可以直观地看出,与其他各模型相比,MHAP-RCNN模型收敛速度快,训练过程稳定,整个曲线相对平稳,且准确率高。与AP-RCNN和RCNN相比,MHAP-RCNN在第一个Epoch就达到了较高的准确率,且在随后的训练过程中准确率一直领先,体现了多头注意力池化所带来的优势。
在其他参数保持完全一致的情况下,本文还以不同的头数做实验例证以观察模型预测准确率的变化,结果如图4所示。图4中绘制了在复旦数据集中,MHAP-RCNN模型的测试集准确率(Test accuracy)随头数(Number of heads)变化的曲线。
图4 头数对测试集准确率的影响
从图4中可以看出,当头数小于10时,测试集准确率随头数的增多而逐渐上升;当头数等于10时,测试集准确率达到最高;当头数大于10时,虽然有所波动,但测试集准确率整体呈下降趋势。这说明对于复旦数据集,头数为10的MHAP-RCNN模型对文本的特征提取能力最佳,且头数并不是越多越好,对于不同数据集,其最佳头数可能不同,具体还需根据数据集情况确定。
通过改变池化层的策略,使用多头注意力池化,本文提出了MHAP-RCNN模型。在酒店评论、THUCNnews和复旦三个文本分类数据集上的实验验证了MHAPRCNN模型的有效性和优越性,实验结果表明,本文提出的模型在一定程度上解决了经典RCNN模型使用最大池化存在的问题,取得了更好的文本分类效果。从模型的实时性表现来看,MHAP-RCNN训练和测试的耗时比经典RCNN略久一些,但差别较小,这是因为注意力池化需要利用随机初始化的参数向量来得到注意力权重,同时还要将注意力权重和对应新词表示的特征值加权求和,与只选择最突出特征值的最大池化相比计算量更大。但上述部分都可利用矩阵并行计算,且多个注意力头之间也可以并行计算,实际耗费时间较少。但MHAP-RCNN的实时性表现与TextCNN相比相差较大,这是因为词表示学习部分中的BiLSTM结构相比CNN更加复杂,且无法像CNN一样进行并行计算。下一步的研究将探索把自注意力机制融入到词表示学习中,减少词表示学习的时间,进一步提升模型的文本分类性能。