基于联合模型的应急文本分类研究
作者: 许旺
摘要:为解决应急信息数据杂乱无章、缺乏高效管理等问题,通过结合长短时记忆网络(long-term and short-term memory network,LSTM)与卷积神经网络(Convolutional Neural Networks,CNN)两个传统深度学习模型,提出一种基于LSTM-TextCNN联合模型的改进应急文本分类方法。通过收集大量的应急文本作为实验数据集和相应的预处理,运用word2vec模型将应急文本训练成词向量,再以拼接后的词向量表示文本,进而构建出LSTM-TextCNN联合模型以提取文本的抽象特征,最后将提取到的抽象特征输入到softmax分类器中完成应急文本的分类。将基于LSTM-TextCNN联合模型的改进应急文本分类方法分别与传统的分类方法支持向量机(Support Vector Machine,SVM)、单模型LSTM、单模型TextCNN进行对比分析。实例结果表明:基于LSTM-TextCNN联合模型的改进应急文本分类方法在精确率、召回率和F1值三个评价指标上较SVM有明显的提高,体现了深度学习在解决应急文本分类问题中的优越性;基于LSTM-TextCNN联合模型的应急文本分类方法分类效果较单模型LSTM模型或TextCNN模型均好,体现了联合模型的高效性。
关键词:深度学习;应急文本分类;LSTM-TextCNN;word2vec
中图分类号:TP183 文献标识码:A
文章编号:1009-3044(2022)04-0095-05
1 引言与特点
应急信息对于抢险救灾工作起着重要的指导作用。为了从海量的应急信息库中快速获取所需要的关键信息,对应急信息进行分类存在迫切的需要。文本信息较声音与图像信息来说更加易于下载和上传,且占用内存较少,故成为应急信息传递过程中的主要形式,如何对应急文本信息进行高效分类是一个重要的研究问题。
应急文本分类问题主要有两种解决方法:一种是传统的分类方法,包括SVM[1]、邻近算法(K-Nearest Neighbor,KNN)[2-3]等,都是基于传统机器学习的方法,依赖于大量的特征工程;另一种是基于深度学习的分类方法,相比于传统的机器学习分类方法,深度学习可以自我学习文本特征,具有更强的泛化性。近年来国内外众多研究学者给予了深度学习高度关注,对文本分类问题也取得了不少的研究成果。焦李成等人[4]详细阐述了深度学习的发展与应用,并介绍了几种主流的神经网络模型;Kim Y [5]使用CNN模型对电影评论进行分类,然而只设置了一层卷积层,获取的特征信息不够全面;Zhang Y等[6]在卷积神经网络模型的池化层加入了注意力机制,提高了文本分类性能;王根生等人[7]在传统的卷积神经网络基础上加入改进后的TF-IDF算法,对词向量赋予权重。以上三篇文献都使用基于单模型的文本分类方法,提取到的文本特征较为单一,在一定程度上无法准确表示整个文本。Chen等人[8]提出一种将CNN与RNN相结合的文本分类方法;郑飞等人[9]提出一种将LDA与word2vec相结合的文本分类方法,解决了由于文本长度不一致而导致的特征提取困难这一问题;刘心蕙等人[10]把多头注意力机制、胶囊网络以及双向长短时记忆网络等方法结合起来,提出一种基于ATT-Capsule-Bilstm模型的文本分类方法。上述三篇文献将几种模型相结合,获取到更加丰富的文本特征,有效提高了文本分类性能。
综上所述,本文通过结合LSTM与TextCNN两个传统的单模型,提出一种基于LSTM-TextCNN联合模型的改进应急文本分类方法,利用TextCNN模型有效提取文本的局部特征,使用LSTM模型保留特征之间的关联性,通过融合层将其融合,从而获得更加全面细致的文本特征,提升文本分类性能。
2 应急文本分类
2.1 整体流程
应急文本分类主要包括应急文本收集、预处理、文本向量化、神经网络模型训练、输出分类结果五个部分,其流程图如图1。
(1)文本预处理
文本预处理工作主要包括文本分词、去停用词等操作。
(2)文本向量化
经过文本预处理后的词语序列无法直接输入到分类器中,需要将其转化为计算机可以识别的向量形式。传统生成词向量的方法往往会造成维度过大的问题,使用word2vec 方法可以有效避免这个问题,且能够在一定程度上保留词语语意,有利于接下来的分类操作。word2vec模型包括CBOW和Skip-gram两种结构,它们均由输入层、预测层和输出层三层结构组成,如图2。选用哪种结构主要取决于语料集规模的大小,当语料集规模较大时,CBOW结构的性能优于Skip-gram结构,而当语料集规模较小时,则Skip-gram结构优于CBOW结构的性能。
本文选择 Skip-gram 结构训练词向量,其训练目标为通过给定的中心词来预测周围词。词向量训练流程如下图3,用 Skip-gram 模型首先对大量数据进行预训练。
2.2 神经网络模型构建
常用的深度学习模型有自编码神经网络(AE)、卷积神经网络(CNN)、长短时记忆网络(LSTM)和循环神经网络(RNN)等,考虑到应急文本的特点,分类时比较适用的是CNN、RNN和LSTM网络结构。
(1)TextCNN
TextCNN是在CNN的基础上通过设置几种大小不一的卷积核,对不同的局部特征进行提取,使得提取到的特征更具有全面性和多样性[11]。TextCNN的整体架构如图4。
TextCNN是由输入层、卷积层(C1、C2)、池化层(S1、S2)、全连接层以及输出层等基本结构组成。在经过word2vec模型训练后产生了词向量矩阵S,如式(1)所示:
式中:xi是由词经过预训练后的词向量映射得到的。
TextCNN 的核心部分是卷积层,本文中卷积层设置三种大小不一的卷积核,可以分别提取不同的文本特征,卷积的核心公式如式(2)所示:
其中w和b属于模型的超参数,f表示激活函数,一个卷积核完成卷积操作后,得到特征图谱如式(3)所示:
为了防止过拟合且减少训练的参数,在卷积层之后设置池化层,对特征进行聚合统计。本文中采用最大池化方法,其计算过程如式(4)所示:
将所有提取的特征值拼接到一起,形成一个特征向量,应急文本便可以用该特征向量来表示。
(2)LSTM
LSTM通过三种“门”的结构(输入门、遗忘门和输出门)可以决定哪些信息要被遗忘,哪些信息要被保留,这一特性使得LSTM能够获取文本中长距离特征之间的关系,有效弥补了RNN的缺陷,其模型结构如图5。
图中i、f和o分别表示输入门、遗忘门和输出门。LSTM网络结构中单个记忆储存格在t时刻的计算公式如下:
式中⊙为逐点乘运算,W和b分别表示网络结构中的权重矩阵和偏置向量。
(3)LSTM-TextCNN
TextCNN虽然擅长提取局部特征,但无法获取不同特征之间的依赖关系,对整个文本语义的表示存在一定的局限性。而LSTM虽然能够在提取文本特征的同时保留特征之间的关联性,但在提取文本特征的多样性上稍显不足,且对深层特征的提取还有待提高。因此,为了将两种方法的优点结合起来,本文构建了LSTM-TextCNN联合模型。
LSTM-TextCNN联合模型中分别对LSTM和TextCNN两个单模型进行训练,之后把提取的两种不同的文本特征融合在一起,得到更具全面性和多样性的文本特征,LSTM-TextCNN联合模型的结构示意图如图6。
在LSTM-TextCNN模型的TextCNN部分设置三层网络结构,如图7。第一层为输入层,第二层为卷积层,第三层为池化层。
在LSTM-TextCNN模型的LSTM部分设置四层结构,第一层为输入层,之后两层隐层为LSTM层,将训练之后的词向量矩阵由输入层输入,在LSTM层进行循环计算,激活函数设置为tanh。
在LSTM-TextCNN模型的融合层中使用Keras框架里面的Concatenta函数对两种文本特征进行融合,得到的特征向量记为C。C中包括两个部分,一部分记作C1,即通过TextCNN模型获取到的文本特征,另一部分记作C2,即通过LSTM模型获取到的文本特征。获取C的具体代码为[C=Concatenta(axis=-1)([C1,C2])]
C中既包含了由TextCNN获取的局部特征,又包含了由LSTM获取的上下文语义特征,能够更好地代表整个文本,对提高文本分类的准确率提供了帮助。
全连接中设置两层,第一层为全连接层,第二层为Softmax层。全连接层中加上‘rule’作为激活函数,Softmax层则使用softmax激活函数,将全连接层的结果映射成区间(0,1)之间的值,该值就是划分到某类的概率。Softmax函数如式(11)所示:
式中p表示划分类的概率。
为了加速收敛并防止在训练过程中使模型陷入局部最优解,在LSTM-TextCNN模型中设置损失函数为交叉熵损失函数。交叉熵的公式为:
式中C为代价;x表示实际输入;a表示实际输出;y表示期望输出;n表示输入的总数。
2.3 分类效果评价指标
应急文本分类结果通过准确率p、召回率r和F1值三个指标来评价[5]。假设Tp表示该分类判定正确,FP表示非该类被判定为该分类 ,FN表示该分类被判定为其他类,TN表示非该分类判定正确。
准确率p的计算公式为:
召回率r的计算公式为
由于准确率和召回率相互影响,有时p值越大,r值反而越小,此时无法直接评价分类结果的好坏,故引入F1值。F1值是p值和r值的调和平均数,其计算公式为:
以上三个评价指标的值越大,分类效果也就越出色。
3 实例验证
实验环境是在Windows 10 64位系统Intel-i7 CPU、32GB内存的计算机上进行,开发环境使用的是python3.8语言的Pycharm-professional集成开发工具,词向量训练工具使用Word2vec。
3.1 预处理
本文使用的应急文本数据是从中国应急信息官网、应急管理部官网中获取的8000份应急救援相关的文档资料。将这些应急文本按照应急事件类别分为五类:自然灾害事件、事故灾难事件、公共卫生事件、社会安全事件和其他事件,如表1。从中抽取80%作为训练数据,剩下的20%作为测试数据。
(1)分词、去停用词
本文使用Python中文分词组件jieba分词,将文本信息中的每一个句子拆分成单个词语。本文选用jieba分词中的全模式分词,将可能的分词全部展示出来,以避免错漏关键的词义信息;图8中是一篇2019年7月21日云南省丽江市永胜县发生地震的相关文本,文本格式为txt,对图8中的文档内容进行分词、去停用词后如图9所示。
(2)训练词向量
本文使用word2vec中的 Skip-gram 模型将经过预处理之后的应急文本训练成维度为100的词向量,把词向量拼接成一个序列表示句子信息。
3.2 参数设置
实验是在深度学习框架 Keras 下完成的。TextCNN 部分共设三个卷积层,分别设置三种不同尺寸的卷积核,每个卷积层设置50个卷积核。为了确定解决应急文本分类问题的最佳卷积核尺寸,实验验证了卷积核尺寸为2、3、4、5、6和10时的分类效果,均使用同一数据集以保证实验结果的公平性,结果如表2所示。