1.2.2 文本分类的方法
文本分类方法可以分为三类:基于规则的方法、传统统计机器学习方法、深度学习方法。
基于规则的方法用预先定义好的匹配规则将文本打上相应的标签。例如新闻内容分类,可以制定关键词匹配规则,如出现“足球”“篮球”“奥运会”等关键词的新闻内容,会直接打上“体育”标签。这一方法需要领域专家耗费大量的精力制定匹配规则,并且分类系统较难维护,需要通过增加匹配规则来适应新的文本内容。规则匹配方法不具备通用性,因为不同的任务需要制定不同的匹配规则。
传统统计机器学习方法和深度学习方法都属于机器学习方法,这类方法使用事先标注好的内容作为训练数据,从中学习文本和标签之间的内在联系。这类方法具有通用性,适用于各种各样的分类任务,不需要耗费大量的精力来制定匹配规则,但也需要花费时间进行数据标注。
传统统计机器学习方法进行文本分类通常分为两步:第一步,手工制作文本特征,例如通过词袋模型构造文本特征;第二步,将得到的文本特征送入分类器进行训练,常见的分类器有朴素贝叶斯分类器、梯度提升树和随机森林。
这种分两步的分类方法有一些缺点,手工制作文本特征想要取得较好的分类效果,需要经过精细的设计和烦琐的特征工程。特征的设计非常依赖任务领域内的知识,难以拓展到其他领域。此外,由于特征模板是事先定义好的,这一方法难以充分利用大规模的训练数据。
和传统的统计学习方法分两步进行分类不同,深度学习方法通常是端到端的方法,在表示文本特征的同时进行分类。深度学习分类方法既可以学习当前任务文本和标签的内在关联,又具备较强的通用性,可以很方便地从一个文本分类任务迁移到另一个新的文本分类任务。
早期的深度学习方法的重点是构造各种神经网络模型来表示文本特征,例如循环神经网络、卷积神经网络、注意力机制模型等。最新的深度学习方法更加关注利用预训练语言模型提升文本分类的效果,即先在大规模无监督语料上预训练通用语言模型,再在新的任务上微调分类器,从而取得当前最佳的文本分类性能。
1.朴素贝叶斯分类器
我们考虑单标签分类问题,假设某篇文档为d,预先定义的类别集合C=(c1,c2,…,cm),m是类别数量。那么文档d所在的类别用数学公式可以表示为
我们用词袋模型来表示文档d,d=(w1,w2,…,wn),n是词表大小,wi表示第i个单词在文档d中出现的次数。假设各个特征是相互独立的,那么可以得到:
为了方便计算,两边取对数,最终分配类别的计算公式为
在上式中,P(c)是先验概率,P(wi|c)为似然函数。
先验概率的计算公式为,其中Nc是类别为c的文档数量,NALL是所有文档的数量。
似然函数的计算公式为,count(wi,c)表示所有类别为c的文档中出现单词wi的次数,分子为count(wi,c)+1是为了避免出现似然函数为0的情况。
最终,通过计算先验概率和似然函数,我们可以计算出文档d分配到的最优类别,这就是朴素贝叶斯分类器的基本原理。朴素贝叶斯分类器既考虑了类别的权重信息,又考虑了要分类文档的词频信息,是一种经典的基于统计机器学习的文本分类方法。
2.前馈神经网络分类器
前馈神经网络在文本表示中的应用十分普遍,下面介绍一个快速、高效的前馈神经网络分类器FastText。FastText分类器与word2vec中的CBOW模型十分类似,它们都将文本视为词袋,CBOW模型要根据上下文词语预测中心词,而FastText模型要根据已有句子来预测句子的类别。
FastText的模型结构如图1-3所示。值得注意的是,输入的特征是N-gram的词袋,在实践中,bigram的词袋输入的效果一般会优于unigram,因为bigram词袋包含了词语的局部顺序信息。对于包含N篇文章的语料,模型要做的事情是最小化下面的负对数似然。
图1-3 FastText模型结构
式中,xn是第n篇文章的归一化词袋特征,yn是标签,A、B是权重矩阵。训练时可以采用分层softmax或者负采样的方法提高效率。由于模型结构比较简单,因此可以在CPU上并行训练,该模型的训练效率极高。
3.RNN分类器
RNN(Recurrent Neural Network,循环神经网络)善于建模序列信息,对于文本分类问题,很自然地会将文本视为一个序列。在众多循环神经网络的变种中,LSTM(长短时记忆网络)是使用最多且十分有效的网络结构。
尽管LSTM这样的循环神经网络能够建模文本序列,但是对较长的文本序列,很容易出现梯度消失或者梯度爆炸的问题。为了使LSTM网络能够建模长序列,使用时可以结合自注意力机制。
假设句子S包含n个词语:S=(w1,w2,…,wn)。句子S经过一层双向LSTM网络后的隐层为H=(h1,h2,…,hn)。模型作者设计了两层前馈神经网络来学习句子级别的注意力,注意力矩阵的计算方式如下。
其中Ws1和Ws2是前馈网络的权重参数。最终,句子的权重矩阵M如下。
M = AH
4.CNN分类器
CNN(Convolutional Neural Network,卷积神经网络)善于建模局部的关键信息,对于文本分类任务来说,这种关键信息可能是表达情感或者主题的关键词。例如“喜欢”“讨厌”这种词能够十分直接地表达情感;关键词“王者荣耀”可能对应游戏主题;关键词“股票”可能对应金融主题。相较于问答、生成等任务,文本分类任务往往不需要对整个句子的语义进行深入分析,某些局部关键信息就足够区分句子的类别了。CNN在文本分类任务上有较大的发挥空间。
接下来介绍一个经典的CNN文本分类模型,模型结构如图1-4所示。图中展示的是通道数为2的情况,原始序列S包含了n个词语:S=(w1,w2,…,wn),每个词的初始化维度为d,图中分别使用了2×d、3×d两个维度的卷积核对初始特征进行融合。
图1-4 CNN文本分类模型结构
初步融合后的特征经过池化操作进一步融合,最后经过前馈神经网络分类层得到最终的分类结果。整个网络结构简洁易懂,在实验中也取得了不错的分类效果。
5.胶囊神经网络分类器
CNN通过使用连续的卷积层和池化层对图像或文本进行分类。尽管池化操作可以识别显著特征并降低卷积操作的计算复杂性,但也会导致有关空间关系的信息丢失,对目标进行错误分类。
为了克服池化操作的缺点,Geoffrey Hinton提出了胶囊神经网络。胶囊由一组神经元构成,用向量来代表特定类型实体的不同属性。向量的长度代表实体存在的可能性,向量的方向代表实体的属性。与CNN的最大池化(选择一些信息并丢弃其余信息)不同,胶囊网络使用整个网络中的所有可用信息,将底层的每个子胶囊路由到上层的最佳父胶囊,用于分类。
在文本分类中,利用胶囊网络可将一句话或一篇文章表示成向量。Zhao等人提出了一种基于胶囊网络变体的文本分类模型。该模型由四层组成,分别为N-gram卷积层、胶囊层、卷积胶囊层和全连接胶囊层。
Zhao等人尝试了3种策略来稳定动态路由过程,以减轻包含背景信息(例如停用词或与任何文档类别无关的词)的噪声胶囊的干扰。他们还探索了两种胶囊架构,Capsule-A和Capsule-B,如图1-5所示。Capsule-A与Sabour等人提出的胶囊网络类似。Capsule-B在N-gram卷积层中使用3个具有不同窗口大小的过滤器的并行网络,以学习更全面的文本表示形式,结果表明,Capsule-B在实验中表现更好。
图1-5 胶囊网络文本分类模型架构
6.记忆增强网络分类器
循环神经网络和自注意力机制相结合,可以显著提升文本分类的准确率。注意力模型在编码过程中存储的隐向量可以视为模型的内部记忆,而记忆增强网络将神经网络与外部记忆结合在一起,模型可以对其进行读写。
Munkhdalai和Yu提出了一种记忆增强的神经网络,称为神经语义编码器(Neural Semantic Encoders,NSE),用于文本分类和机器阅读理解。NSE配备了可变大小的编码内存,该内存会随着时间的推移而发展,并通过读、组合和写操作保持对输入序列的理解,如图1-6所示。
图1-6 记忆增强网络分类模型结构
7.Transformer系列分类模型
RNN的计算瓶颈之一是只能按顺序处理文本,不能够并行处理文本。尽管CNN相比RNN并没有很强的顺序限制,但与RNN相似,捕获句子中单词之间关系的计算成本也会随着句子长度的增加而增加。Transformer通过自注意力结构对句子中的每个单词进行并行计算,记录注意力得分,模拟每个单词对另一个单词的影响来克服此限制。
与CNN和RNN相比,这样的设计使得Transformer支持更多的并行化,实现了在GPU群集上针对大量数据有效训练非常大的模型。
自2018年以来,我们已经看到了一系列基于Transformer的大规模预训练语言模型(Pre-trained Language Model,PLM)的兴起。与基于CNN或LSTM的早期上下文词表示模型相比,基于Transformer的语言模型使用了更深的网络结构,例如使用了48层Transformer解码器的GPT-2模型。这类模型会在大量文本上进行预训练,根据已知的上下文来预测目标词语。这些预训练语言模型在应用到下游任务时,会使用特定于任务的标签进行微调,在许多下游NLP(Natural Language Processing,自然语言处理)任务(包括文本分类)中取得了当前最优的结果。尽管预训练语言模型是无监督的,但在下游任务微调时是有监督的学习。
预训练语言模型可以分为两类:自回归语言模型和自编码语言模型。
经典的自回归语言模型OpenGPT,由12层堆叠的Transformer解码器组成。它是一种单向模型,可以从左到右(或从右到左)逐个单词地预测文本序列,每个单词的预测取决于先前的预测。通过添加特定于任务的线性分类器并使用特定于任务的标签进行微调,GPT(Generative Pre-Training)模型可以应用于文本分类这样的下游任务。
BERT是使用最广泛的自编码语言模型之一。BERT由堆叠的Transformer编码器构成,与OpenGPT会基于先前的预测来预测单词的方式不同,BERT是使用遮蔽语言模型任务进行训练的,该任务会随机遮蔽文本序列中的某些词语,利用词语前后的信息来预测目标词。
相比基于CNN和RNN的神经网络模型,BERT在机器阅读理解、文本分类、自然语言推理等多个自然语言理解任务上取得了极大的性能提升。BERT模型出名之后,后续有许多改进BERT的工作:RoBERTa比BERT更健壮,使用了更多的训练数据进行训练,并且优化了一些训练细节;ALBERT使用参数共享等方法大大减少了BERT模型的参数,实现了更好的训练效果;DistillBERT在预训练期间利用知识蒸馏将BERT的大小减少了40%,同时保留其99%的原始性能,并使推理速度提升了60%;SpanBERT扩展了BERT,以更好地表示和预测文本范围。
自回归语言模型的优点是每一个词都会被预测到,训练效率高,还可以直接用于文本生成。自编码语言模型的优点是可以把握双向信息,缺点是遮蔽的比例通常只有15%,每句话只有15%的词用于预测,训练效率较低。
已经有研究尝试设计一个新的模型,结合自回归和自编码语言模型的优点,取长补短,XLNet就是一个典型代表。XLNet在预训练期间利用排列置换操作,使得目标词的上下文可以同时包含来自左右的词,从而使其成为可感知左右顺序的自回归语言模型。
值得注意的是,排列置换操作是通过使用Transformer特殊的注意力遮蔽机制来实现的。此外,XLNet还引入了双流自注意力机制,以允许进行位置感知的单词预测。双流是指内容流和查询流,内容流可以看到自身,查询流无法看到自身。引入双流自注意力机制的原因是单词分布极大地依赖于单词的位置,例如句子的开头与句子中其他位置的单词分布有很大不同。
除了XLNet,UniLM(Unified Language Model)也将自回归和自编码语言模型进行结合,这一模型的设计初衷是要同时解决自然语言理解和自然语言生成问题。UniLM使用3种类型的语言模型完成预训练任务:单向、双向和序列到序列。通过使用共享的Transformer网络参数并利用特定的自注意力遮蔽机制来控制预测所处的环境,实现统一建模。
据报道,UniLM 2.0取得了很大的性能提升,在最新的自然语言理解和生成任务上的性能大大优于以前的预训练语言模型,包括OpenGPT-2、XLNet、BERT及其变体。
谷歌提出的T5(Transfer Text-to-Text Transformer)模型使用了一个统一的基于Transformer的框架,这一框架将许多的自然语言处理任务统一转换成输入输出为文本到文本的形式。谷歌做了大量的实验,系统性地比较了不同的预训练语言模型的目标函数、模型结构、无监督语料、微调方法在应对不同下游任务时的表现。
8.图神经网络分类器
尽管自然语言文本的外在结构是顺序性的,但文本蕴含了图结构,例如句法和语义分析树,它们定义了句子中单词之间的句法与语义关系。
最早应用于自然语言处理的图模型是TextRank,作者将自然语言文本表示成图G(V,E),V表示节点集,E表示边集。节点可以表示各种类型的文本单元,例如字、词、整个句子等;边可以表示任意节点之间的不同类型的关系,例如词法、句法、上下文重叠关系等。
图神经网络是图模型与深度学习的结合,在图神经网络的各种变种中,图卷积神经网络(Graph Convolutional Network,GCN)最为热门。在应用于文本分类任务时,图神经网络模型通常会利用文章或单词之间的关系进行构图,预测文章的类别。
最早应用于文本分类的图卷积神经网络分类模型是Graph-CNN,首先将文本转换为单词图,然后使用图卷积运算对单词图进行卷积计算。
实验表明,单词图的文本表示具有捕获非连续和长距离语义的优势,而CNN模型则具有学习不同级别的语义的优势。另一个类似的用于文本分类的图卷积神经网络模型是文本图卷积网络(Text GCN),该模型基于单词共现和文档单词关系为语料库构建了一个大的文本图,然后使用文本图卷积网络进行训练。单词和文档使用One-Hot进行初始化,然后在已知的文档类别标签的监督下,共同学习单词和文档的表示。需要注意的是,该模型假设测试集合是已知的,测试数据也参与了构图。
为大规模文本语料库构建图神经网络的成本很高,目前已有的降低构图成本的方法是降低模型复杂度或改变模型训练策略。
降低模型复杂度的一个例子是Wu等人提出的简单图卷积模型,该模型去除了深层卷积图网络的连续层之间的非线性结构,并将结果函数(权重矩阵)简化为单个线性变换。
来看一个改变模型训练策略的示例—文本级GNN。文本级GNN不会在整个文本语料库上构建图,而是通过滑动窗口进行限制,为滑动窗口中的每个文本块生成一个图,从而减少训练期间的内存消耗。图卷积神经网络的批量训练方法GraphSage与文本级GNN的滑动窗口构图的原理很相似,这种方法还有一个优势是不需要假设测试集已知,就可以处理未知的测试集。
9.孪生网络分类器
文本匹配任务是文本分类的一个特殊应用,这一任务在现实场景中有着广泛的应用,其中的一个经典应用就是搜索。文本x是查询字段,文本y是要匹配的内容字段。文本匹配所使用的经典模型是DSSM(Deep Structured Semantic Model,深度结构语义模型)。
DSSM的结构如图1-7所示,f1和f2是一对神经网络模型,它们将输入的x和y映射到公共低维语义空间中的对应向量中。然后,通过两个向量的余弦距离来测量x和y的相似度。尽管孪生网络假设f1和f2共享体系结构甚至是参数,但在DSSM中,f1和f2可以具有不同的体系结构,体系结构取决于x和y。例如,为了计算图像-文本对的相似度,f1可以是CNN,f2可以是RNN或MLP(Multilayer Perceptron,多层感知器)。根据(x,y)的定义,这些模型可以应用于各种NLP任务,例如文档搜索排序或者机器阅读理解。
通常使用铰链损失函数来优化DSSM的参数θ,公式如下。
其中y+和y-是候选的正例和负例,γ是边界值。
早期的孪生网络使用RNN的结构来表示文本,随着BERT在文本匹配领域取得了巨大的成功,后续的研究探索了基于BERT模型的孪生网络,例如SBERT和TwinBERT。SBERT的模型结构如图1-8所示,在文本匹配任务中对预训练BERT模型进行了优化,该模型使用了孪生BERT网络结构来提取在语义上有意义的句子表示,使用余弦相似度对两个句子进行比较。这一方法相较于直接用BERT微调的方法,在性能没有明显下降的情况下,使推理速度得到极大的提升,推理时间大大缩短(从65h下降到5s),可以很好地应用于工业界的搜索场景。
图1-7 DSSM模型结构示意图
图1-8 SBERT模型结构图