机器之心专栏
本文将分 3 期进行连载,共介绍 20 个在文本分类任务上曾取得 SOTA 的经典模型。
第 1 期:RAE、DAN、TextRCNN、Multi-task、DeepMoji、RNN-Capsule
第 2 期:TextCNN、DCNN、XML-CNN、TextCapsule、、Bao et al.、AttentionXML
第 3 期:ELMo、GPT、BERT、ALBERT、X-Transformer、LightXML、TextGCN、TensorGCN
您正在阅读的是其中的第 3 期。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
第1期回顾:TextRCNN、TextCNN、RNN…你都掌握了吗?一文总结文本分类必备经典模型(一)
第2期回顾:TextCNN、DCNN、AttentionXML…你都掌握了吗?一文总结文本分类必备经典模型(二)
模型 | SOTA!模型资源站收录情况 | 模型来源论文 |
---|---|---|
ELMo | https://sota.jiqizhixin.com/models/models/e473edac-88cc-4a83-b533-d15c2ca0ea17 收录实现数量:3 支持框架:TensorFlow、PyTorch、MXNet 等 |
Deep Contextualized Word Representations |
GPT | https://sota.jiqizhixin.com/models/models/09877886-65c3-44b0-a5be-9e5043964787 收录实现数量:1 支持框架:TensorFlow、PyTorch |
Improving language understanding by generative pre-training |
BERT | https://sota.jiqizhixin.com/models/models/1d27a74a-8668-4d64-9615-ce889b88700b 收录实现数量:7 支持框架:TensorFlow、PyTorch 等 |
BERT: pre-training of deep bidirectional transformers for language understanding |
ALBERT | https://sota.jiqizhixin.com/models/models/0306236e-ce20-4886-98cb-45730fda6cf9 收录实现数量:13 支持框架:PyTorch、TensorFlow、CANN |
ALBERT: A lite BERT for self-supervised learning of language representations |
X-Transformer | https://sota.jiqizhixin.com/models/models/fa67640c-fedb-400e-a6fb-e83b4eedbb65 收录实现数量:1 支持框架:TensorFlow |
Taming pretrained transformers for extreme multi-label text classification |
LightXML | https://sota.jiqizhixin.com/models/models/7f477837-72fe-435d-b8e4-13d5308c7bfa 支持框架:PyTorch |
Lightxml: Transformer with dynamic negative sampling for high-performance extreme multi-label text classification |
TextGCN | https://sota.jiqizhixin.com/models/models/64a6edf7-3e03-455c-bb54-26ab72607c0e 收录实现数量:1 支持框架:TensorFlow |
Graph convolutional networks for text classification |
TensorGCN | https://sota.jiqizhixin.com/models/models/2702592d-f69f-41a6-9c29-924999576bd3 收录实现数量:1 支持框架:TensorFlow |
Tensor graph convolutional networks for text classification |
文本分类是自然语言处理中最基本、最经典的任务,大部分自然语言处理任务都可以看作是分类任务。近年来,深度学习在众多研究领域中获得了巨大的成功,如今,也成为了 NLP 领域的标配技术,广泛渗透入文本分类任务中。
与数字、图像不同,对文本的处理强调精细化的处理能力。传统的文本分类方法一般需要对输入模型的文本数据进行预处理,此外还需要通过人工标注的方法来获得良好的样本特征,然后使用经典的机器学习算法对其进行分类。类似的方法包括 NaiveBayes(NB)、K 近邻(KNN)、支持向量机 SVM 等。特征提取的水平对文本分类效果的影响甚至高于图像分类,而文本分类中的特征工程往往非常耗时且计算成本高。2010 年后,文本分类的方法逐渐过渡到深度学习模型。应用于文本分类的深度学习通过学习一系列的非线性变换模式将特征工程直接映射到输出,从而将特征工程集成到模型拟合过程中,一经应用就获得了巨大的成功。
与图像分类模型不同,文本分类模型一般不会采用堆叠模块、修改深度模型结构等方式去改进,更多则是通过引入其它技术手段改进模型效果,例如引入注意力机制、预训练、图神经网络、胶囊网络等。所以在介绍经典文本分类模型时,更多的是介绍为了解决文本分类中的哪一类具体问题,针对性的引入了哪些专门的技术 trick,以及这些引入的 trick 是如何与原有的经典架构融合的。
此外,NLP 领域中大量工作都聚焦于前端的词、语句、文本的处理或语义理解,目的是为下游的各类任务服务,当然也包括文本分类任务。为了更聚焦于文本分类模型,我们在这篇文章中只介绍专门的文本分类模型,其它 NLP 模型会放在后续的专题报告中介绍。最后,文本分类模型以 BERT 的出现明显呈现出两个不同的发展阶段,BERT 提出后(2019 年之后),单纯基于 RNN、CNN 改进的且效果比较突出的方法就比较少了。
预训练的语言模型可以有效地学习全局语义代表,并显著提升NLP任务的效果,包括文本分类。它通常使用无监督的方法来自动挖掘语义知识,然后构建预训练目标,使机器能够学习理解语义。如图1所示,我们给出了Embeddingfrom Language Model (ELMo)、OpenAI GPT和BERT之间模型架构的差异。ELMo是一个深度的语境化单词表示模型,它很容易被整合到模型中。它可以对单词的复杂特征进行建模,并为各种语言环境学习不同的表示方法。它根据双向LSTM的上下文词来学习每个词的嵌入。GPT采用有监督的微调和无监督的预训练来学习一般的表征,这些表征在有限的适应下转移到许多NLP任务。此外,目标数据集的领域不需要与未标记的数据集的领域相似。GPT算法的训练过程通常包括两个阶段。首先,神经网络模型的初始参数是通过在未标记的数据集上的建模目标学习的。我们可以采用相应的监督目标来适应目标任务的这些参数。谷歌提出的BERT模型,通过对每一层的左右上下文进行联合调节,从未标记的文本中预训练出深层次的双向表征,显著提高了NLP任务的性能,包括文本分类。BERT应用了双向编码器,旨在通过联合调整所有层的上下文来预先训练深度的双向表示。它可以在预测哪些词被掩盖时利用上下文信息。它只需增加一个额外的输出层就可以进行微调,为多个NLP任务构建模型。
图1 包括BERT、OpenAI GPT和ELMo在内的预训练模型架构的差异。𝐸𝑖代表第𝑖个输入的嵌入。Trm代表Transformer块。𝑇𝑖代表𝑖稀疏输入的预测标签
与这三个模型相比,ELMo是一种使用LSTM的基于特征的方法,而BERT和OpenAI GPT是使用Transformer的微调方法(也可以归类到本文第七类Transformer模型里,为了表述清晰,本文将GPT和BERT放入Pre-train类别中介绍)。此外,ELMo和BERT是双向训练模型,而OpenAI GPT是从左到右的训练。因此,BERT得到了一个更好的结果,它结合了ELMo和OpenAI GPT的优点。
词向量模型ELMo的相关论文发表在NAACL 2018上。具体的方法是将每个词的表示看作是对于整体句子的函数,通过利用在语料上训练的双向LSTM的语言模型得到词向量,因此将其称为ELMo(Embeddings from Language Models)。对比传统Word2Vec这种静态形式的词向量,ELMo是一种动态模型。对于静态形式的词向量来说,无论在任何的上下文中都使用同一个向量,因此很难表示一词多义的现象,而ELMo则可以通过上下文动态生成词向量,从理论上会是更好的模型,从实测效果来看在很多任务上也都达到了当时的SOTA成绩。ELMo引入了上下文语境的概念。ELMo的架构如下图所示。
图2 ELMo架构
首先介绍双向语言模型biLM,这是ELMo的基础。给定N个tokens的序列,一个前向语言模型通过对t_o的概率进行建模来计算t_k的概率:
而双向语言模型就是添加了另一个方向的预测,利用N~k+1个token来预测第k个token:
目标函数则是上述两者的联合损失(BiLM):
不同于其他类型的模型采用最顶层的输出作为token的表示,ElMo采用多个层的线性加和作为token的表示,对于每个token,在一个L层的biLm中可以输出2L+1表示:
在下游任务中,可以将上述2L+1个表示进行整合:
具体到ELMo的架构,还是按照训练语言模型的方式,使用了CNN-BIG-LSTM结构和一个层之间的残差链接。使用ELMo可以针对一个token产生三个向量,:原始向量、第一层向量、第二层向量。作者认为低层的bi-LSTM层能提取语料中的句法信息,而高层的bi-LSTM能提取语料中的语义信息。
当前 SOTA!平台收录 ELMo 共 3 个模型实现资源。
模型 | SOTA!平台模型详情页 |
---|---|
ELMo |
前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/e473edac-88cc-4a83-b533-d15c2ca0ea17 |
GPT是“Generative Pre-Training”的简称,是指的生成式的预训练。GPT的训练程序包括两个阶段。第一阶段的预训练是在一个大型文本语料库上学习一个高容量的语言模型。接下来是一个微调阶段,在这个阶段,使模型适应带有标记数据的判别性任务。
第一阶段的工作具体为:Embedding——>Transformer——>Text Production。
第二阶段的工作具体为:将下游任务的网络结构改造成和GPT的网络结构是一样的;利用第一步预训练好的参数初始化GPT的网络结构完成下游任务,这样通过预训练学到的语言学知识就被引入到任务里了;使用下游任务去训练这个网络,对网络参数进行Fine-tuning,使得这个网络更适合解决任务的问题。
对于特定任务的输入转换,使用了一种遍历式的方法,将结构化的输入转换成预先训练好的模型可以处理的有序序列。图3提供了一个可视化的说明。
图3 左)GPT中使用的Transformer结构和训练目标。(右) 输入在不同的任务上进行微调的转化。将所有结构化的输入转化为标记性的序列,由预训练模型处理,然后是一个线性+softmax层
当前 SOTA!平台收录 GPT 共 1 个模型实现资源。
模型 | SOTA!平台模型详情页 |
---|---|
GPT |
前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/09877886-65c3-44b0-a5be-9e5043964787 |
BERT(Bidirectional Encoder Representations from Transformers)自从谷歌提出就一直大热,很多人认为BERT是整个NLP研究历程中里程碑似的节点。BERT与ELMo提出,一经提出就明显胜过了ELMo。BERT的灵感来源是OpenAI在17年发布过的一篇名为“Attention is all your need”论文中提到的Transformer模型。关于Transformer的相关模型我们放在第七个章节中具体介绍,本章节内BERT是作为一类预训练模型介绍的。
首先,BERT在NLP的11个任务(包括文本分类任务)中均有较大程度性能提升。其次,BERT在无监督场景下结合预训练能够最大化地利用文本数据,同时对不同场景的下游任务均有提升和帮助。BERT的基础建立在Transformer之上,拥有强大的语言表征能力和特征提取能力,同时再次证明了双向语言模型的能力更加强大。
BERT的网络结构使用了双向Transformer的堆叠,Encoder和Decoder分别12层。其思想出于ELMo和GPT但同时又高于二者。ELMo采用了双向LSTM来训练词Embedding,虽然使用了双向LSTM,但其实是使用2个单向LSTM对学到的句子语义信息做拼接,和BERT完全双向不同,对句子间不同词的语义依赖关系也不如BERT捕捉的充分。GPT只有单向,其假设句子间语义依赖关系只有从左到右,而没有从右到左,该假设在实际中并不完全满足。BERT加入了Masked Language Model(MLM) 和 Next Sentences Prediction(NSP),使得模型能够在无监督的场景下学习到句子间特征和语义特征。在无监督学习场景训练,能最大化的使用训练语料。而Pre-train和Fine-tune能够方便地将已训练好的BERT模型迁移到不同的应用场景,在工业界大有益处。
图1最右侧为BERT的架构,可以看出BERT的最大亮点:双向Transformer网络,BERT直接引用了Transformer架构中的Encoder模块,并舍弃了Decoder模块, 这样便自动拥有了双向编码能力和强大的特征提取能力。
下图为BERT的输入图示。由图示可知,BERT的输入包括三个部分:词嵌入张量(Token embeddings)、语句分块张量( segmentation embeddings)、位置编码张量(position embeddings),最终的embedding向量是将上述的3个向量直接做加和的结果。
图4 BERT输入表示。输入嵌入是标记嵌入、分割嵌入和位置嵌入的总和。嵌入和位置嵌入的总和
接下来,MLM和 NSP是BERT的另外两个亮点:
BERT中引入了一个带mask的语言模型训练(Masked LM)。在原始训练文本中,随机抽取15%的token作为即将参与mask的对象。在选中的token中,数据生成器并不是把他们全部变成[MASK],具体变化方法包括三类:一是,在80%的概率下,用[MASK]标记替换token,比如my dog is hairy → my dog is [MASK];二是,在10%的概率下,用随机单词替换token,比如my dog is hairy → my dog is apple;三是,在10%的概率下,保持token不变,比如my dog is hairy → my dog is hairy。
BERT还引入了一个下句话预测任务(Next Sentence Prediction ),目的是服务问答、推理、句主题关系等NLP任务。所有的参与任务训练的语句都被选中参加,其中:50%的B是原始本中实际跟随A的下句话;50%的B是原始本中随机抽取的一句话。在该任务中,BERT模型可以在测试集上取得97-98%的准确率。
最后,fine-tuning是BERT的另一个亮点,只需要将特定任务的输入,输出插入到BERT中,利用Transformer强大的注意力机制就可以模拟很多下游任务,从而具有极佳的迁移特性。
当前 SOTA!平台收录 BERT 共 7 个模型实现资源。
模型 | SOTA!平台模型详情页 |
---|---|
BERT | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/1d27a74a-8668-4d64-9615-ce889b88700b |
1.4 ALBERT
ALBERT(A Lite BERT)被称为Lite版的Bert,相关论文发表在ICLR 2020。ALBERT采用了两种技术来减少参数量,以应对扩展预训练模型的主要障碍。第一个是因子化嵌入参数化。通过将大型词汇嵌入矩阵分解成两个小矩阵,将隐藏层的大小与词汇嵌入的大小分开。这种分离使得在不显著增加词汇嵌入的参数大小的情况下更容易增长隐藏的大小。第二种技术是跨层参数共享。这种技术可以防止参数随着网络的深度而增长。这两种技术都大大减少了BERT的参数数量而不严重损害性能,从而提高了参数效率。类似于BERT的ALBERT配置的参数减少了18倍,训练速度可以提高1.7倍左右。减少参数的技术也作为一种正则化的形式,稳定了训练并有助于泛化。为了进一步提高ALBERT的性能,还引入了一个用于句序预测的自监督损失(sentence-order prediction,SOP)。SOP主要关注句子间的连贯性,旨在解决原始BERT中提出的下句预测(NSP)损失的无效性。
ALBERT架构的主干与BERT相似,因为它使用具有GELU非线性的Transformer encoder。将词汇embedding size表示为E,将encoder layers层数表示为L,将hidden size表示为H,将feed forward/filter size设置为4H,多头注意力的数量设置为H / 64。
让BERT模型变大(scale up)的方法一般有两种:变深(增加模型的层数)、变宽 (增加隐藏尺寸,即每一层embeddings的特征数),ALBERT的方式是第二种。具体ALBERT的改进点如下所示:
Factorized Embedding Parameterization(将初始嵌入缩短为128个特征)。对于词向量维度 E 和隐层维度 H,在词表 V 到 H 的中间,插入一个小维度 E,多做一次尺度变换:O(VxH) → O(VxE+ExH)。
Cross-layer Parameter Sharing(共享所有层的参数)。具体分为三种模式:只共享 attention 相关参数、只共享 FFN 相关参数、共享所有参数(attention相关+FFN)。全共享如下图所示:
图5 ALBERT全共享参数
Sentence Order Prediction(SOP)。SOP 就是让模型预测两个相邻 segments 有没有被调换前后顺序。SOP主要是针对NSP提出的,即句子顺序判断。NSP将话题预测和连贯性预测混合在一个任务中。然而,与连贯性预测相比,话题预测更容易学习,而且与使用MLM[掩蔽语言建模]损失学习的内容重叠更多。因此,ALBERT提出一个主要基于连贯性的损失,即句序预测(SOP)损失,它避免了话题预测,侧重于对句子间的一致性进行建模。
此外,还包括用长句做预训练、随机遮连续的多个词(Masked-ngram-LM vs Masked LM)、扩大模型参数、增加预训练数据、去掉Dropout层等trick。
当前 SOTA!平台收录 ALBERT 共 13 个模型实现资源。
模型 | SOTA!平台模型详情页 |
---|---|
ALBERT | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/0306236e-ce20-4886-98cb-45730fda6cf9 |
基于Transformer的模型可以在不考虑顺序信息的情况下将计算并行化,适用于大规模的数据集,使其在NLP任务中很受欢迎。Transformer由17年一篇著名论文“Attention is All Your Need”提出的。在这篇论文中,作者提出了一种全新的注意力机制— self-Attention,做到了仅仅利用Attention代替了传统的RNN,实现了快速并行计算,挖掘了DNN的特性。
Transformer主要分为两个部分:编码组件+解码组件,与传统的RNN编码、解码的结构很像。Transformer的编码组件由多个encoder(编码器)堆叠而成。每个encoder又有两个子层,分别是 FFN(前馈神经网络) + self-Attention(自注意力层)。FFN就是MLP(多层感知器架构)。而self-Attention层的输入是一个单词经过词嵌入处理的句子,也就是一个词向量列表,输出是结合了句子本身上下文注意力之后的融合向量。此外,为了能够从不同角度捕捉不同的关联程度,Transformer利用了一种"多头"的self-Attention机制。即一个self-Attention层拥有多组WQ 、WK 、WV ,每组分别用于不同的特征提取,把所有“头”通过一个高维矩阵W0 。Transformer的架构如下图:
图6 Transformer架构图
我们在之前介绍过,BERT系列模型其实也是Transformer模型,但归类为预训练的方法进行了介绍。本章节则聚焦于专门的Transformer系列模型。
2.1 X-Transformer
X-Transformer的工作发表在KDD 2020中,主要针对的是极端多标签(Extreme Multi-label XML)文本分类问题,即给定输入文本,从大型标签集中返回最相关的标签。因此,X-Transformer也是聚焦于稀疏的巨大标签空间问题(XML-CNN、AttentionXML等),只不过方法是deep transformer结构。X-Transformer的架构如下图:
图7 X-Transformer框架。首先,语义标签索引减少了庞大的输出空间。然后在XMC子问题上对Transformer进行微调,该子问题将实例映射到标签集群。最后,在集群和转化器的输出上有条件地训练线性排名器,以便在预测的集群中对标签进行重新排名
1)语义标签索引(Semantic Label Indexing,SLI)。利用层次聚类将XMC问题转化为更小的K个输出空间的子问题。给定一个训练集D,XML的目的是学习一个评分函数f,将输入(或实例)x_i和 一个标签l映射到一个分数f(x_i, l) ∈R。优化函数f,以满足当y_il=1时得分高(即,标签l与实例x_i有关),而当y_il=0时,得分较低:
其中,ϕ(x)代表一个编码,W 是分类器的瓶颈层。ϕ(x)的编码采用两种方式:一是,通过标签文本嵌入标签,利用XLNET的对每一个token进行词嵌入(token_dim=1 × 1024 )后求和然后平均池化得到标签的向量表示;二是,通过正面实例的嵌入进行标签嵌入。
2)作为神经匹配器的deep Transformer。经过SLI,原来难以解决的XML问题演变成了一个可行的XML子问题,其输出空间大小为K,是一个非常小的数。应用deep Transformer将每个文本实例映射到指定的相关集群。构建分类器:
训练时的Loss为squared hinge loss:
3)排序。用一个线性排序器对所属簇类标签进行排序。引入两个tricks:一是,Teacher Forcing Negatives (TFN)。为了在反向更新权重时提升运算效率并节省运算空间,在back propagation时一般都要进行负采样。本文在负采样抽样时只包含了与groudtruth l 标签属于同一簇的实例。二是,Matcher-aware Negatives (MAN)。为了解决exposure bias的问题,选择使用了MAM方法。该方法借鉴了Scheduled Sampling的思路,将groudtruth与上一个隐状态预测的label所在的簇相互融合。
当前 SOTA!平台收录 X-Transformer 共 1 个模型实现资源。
模型 | SOTA!平台模型详情页 |
---|---|
X-Transformer | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/fa67640c-fedb-400e-a6fb-e83b4eedbb65 |
图8 Light-XML架构图
当前 SOTA!平台收录 Light-XML 共 1 个模型实现资源。
模型 | SOTA!平台模型详情页 |
---|---|
Light-XML | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/7f477837-72fe-435d-b8e4-13d5308c7bfa |
随着图神经网络(GNN)的关注度越来越高,基于GNN的模型通过对句子的句法结构进行编码,在语义角色标签任务、关系分类任务和机器翻译任务中获得了出色的表现。它将文本分类变成了一个图节点分类任务。我们展示了一个用于文本分类的GCN模型,有四个输入文本,如下图所示。首先,将四个输入文本𝑇=[𝑇1,𝑇2,𝑇3,𝑇4]和文本中的词𝑋=[𝑥1, 𝑥2, 𝑥3, 𝑥4, 𝑥5, 𝑥6]定义为节点,构造成图结构。图形节点由黑色粗边连接,这表示文档-词边和词-词边。每个词-词边缘的权重通常意味着它们在语料库中的共同出现频率。然后,单词和文本通过隐藏层表示。最后,所有输入文本的标签可以通过图来预测。
图9 基于GNN的模型。初始图的不同取决于图的设计方式。给出一个例子,在文档与文档、文档与句子、词与词之间建立边
图10 文本GCN的示意图。样本取自Ohsumed语料库。以 "O "开头的节点是文档节点,其他节点是词节点。黑色粗边是文档-词的边,灰色细边是词-词的边。R(x)表示x的表示(嵌入)。不同的颜色表示不同的文档类别。CVD:心血管疾病,Neo: 肿瘤,Resp: 呼吸道疾病,Immun: 免疫学疾病
当前 SOTA!平台收录 TextGCN 共 1 个模型实现资源。
模型 | SOTA!平台模型详情页 |
---|---|
TextGCN | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/64a6edf7-3e03-455c-bb54-26ab72607c0e |
图11 应用于文本分类的TensorGCN架构
图12 利用LSTM编码的语义信息建立单词之间的关系。以一份文本为例,基于语义的图是通过收集所有文本语料库中的所有语义关系词对来构建的
当前 SOTA!平台收录 TensorGCN 共 1 个模型实现资源。
模型 | SOTA!平台模型详情页 |
---|---|
TensorGCN |
前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/models/models/2702592d-f69f-41a6-9c29-924999576bd3 |
前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。
网页端访问:在浏览器地址栏输入新版站点地址 sota.jiqizhixin.com ,即可前往「SOTA!模型」平台,查看关注的模型是否有新资源收录。
移动端访问:在微信移动端中搜索服务号名称「机器之心SOTA模型」或 ID 「sotaai」,关注 SOTA!模型服务号,即可通过服务号底部菜单栏使用平台功能,更有最新AI技术、开发资源及社区动态定期推送。