点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:PURVA HUILGOL

编译:ronghuaiyang

导读

文本分类是NLP的基础任务之一,今天给大家介绍6个最新的预训练模型,做NLP的同学一定要用用看。

介绍

我们正站在语言和机器的交汇处。我对这个话题很感兴趣。机器能写得和莎士比亚一样好吗?如果一台机器可以提高我自己的写作技能呢?机器人能听懂讽刺的话吗?

我相信你以前问过这些问题。自然语言处理(NLP)的另一目的是为了回答这些问题,我必须说,在这个领域已经有了突破性的研究成果来拉近人和机器之间的差距了。

NLP的核心思想之一是文本分类。如果机器可以区分名词和动词,或者如果它可以通过评论检测客户是否对产品满意,我们可以使用这种理解能力用在其他高级NLP等任务上,比如上下文理解,或者生成一个全新的故事!

这就是我们看到很多关于文本分类的研究的主要原因。是的,迁移学习的出现无疑帮助加速了研究。现在,我们可以使用在大型数据集上构建的预训练的模型,并对其进行调优,以实现不同数据集上的其他任务。

迁移学习和预训练的模型有两个主要优势:

  1. 它降低了训练新的深度学习模型的成本

  2. 这些数据集是被行业接受的标准,因此预训练的模型在质量方面已经得到了检验

你可以看到为什么预训练的模特越来越受欢迎。我们看到的谷歌BERT和OpenAI的GPT-2在这方面就做的很好。在本文中,我将介绍6种最先进的文本分类预训练模型。

我们的文本分类预训练模型包括:

  • XLNet

  • ERNIE

  • Text-to-Text Transfer Transformer (T5)

  • Binary Partitioning Transfomer (BPT)

  • Neural Attentive Bag-of-Entities (NABoE)

  • Rethinking Complex Neural Network Architectures

预训练模型 #1: XLNet

说到最先进的预训练模型,就不能不提XLNet!

谷歌的最新模型,XLNet在NLP的主要任务上比如文本分类,情感分析,问答,以及自然语言推理上都达到最先进的水平。不仅仅在文本分类上击败了BERT,还包括高级的NLP任务。

XLNet的核心思想是:

  1. 语言理解的广义自回归预训练

  2. Transformer-XL

如果这听起来很复杂,不要担心!我会用简单的语言来解释。

自回归建模使用问题中缺失单词之前或之后的上下文单词来预测下一个单词。但是,我们不能同时处理向前和向后两个方向。

尽管BERT的自动编码器确实解决了这方面的问题,但它也有其他的缺点,比如假设mask掉的单词之间没有相关性。为了解决这个问题,XLNet提出了一种称为排列语言建模的技术。这种技术使用排列来同时从正向和反向产生信息。

众所周知,Transformer结构是一个改变游戏规则的工具。XLNet使用Transformer XL。正如我们所知,Transformer替代了递归神经网络(RNN),允许不相邻的tokens同时进行处理。这提高了对文本中长距离关系的理解。Transformer-XL基本上是BERT中使用的Transformer的增强版,增加了两个组件:

  1. 特定片段的递归,给出两个序列之间的上下文

  2. 一种相对位置的嵌入,它包含两个tokens之间的相似性信息

如前所述,XLNet几乎在所有任务(包括文本分类)上都优于BERT,并且在其中18个任务上实现了SOTA的性能!下面是对文本分类任务的总结,以及XLNet如何在这些不同的数据集上执行,以及它在这些数据集上取得的高排名:

![](Top 6 Open Source Pretrained Models for Text Classification you should use.assets/XLNet_Perf.png)

  • 论文链接: XLNet: Generalized Autoregressive Pretraining for Language Understanding

  • Github链接: https://github.com/zihangdai/xlnet

预训练模型 #2: ERNIE

尽管ERNIE 1.0(发布于2019年3月)一直是文本分类的流行模式,但在2019年下半年,ERNIE 2.0成为了热门话题。ERNIE由科技巨头百度开发,在英语GLUE基准测试中,它的表现超过了谷歌XLNet和BERT。

ERNIE的意思是Enhanced Representation through kNowledge IntEgration,ERNIE 2.0是ERNIE 1.0的升级版。ERNIE 1.0在它自己的方式上是开创性的 —— 它是第一个利用知识图谱的模型之一。这种集成进一步增强了高级任务的训练模型,如关系分类和命名实体识别(NER)。

与之前的版本一样,ERNIE 2.0带来了另一项创新,即递增的多任务学习。基本上,这意味着模型已经定义了7个明确的任务,并且

  • 可以同时生成多个任务的输出。例如,完成句子“I like going to New…”—>“I like going to New York”,并将其归类为有积极情绪的句子。合并任务的损失也相应计算。

  • 递增地使用前一个任务的输出到下一个任务。例如,将Task 1的输出作为Task 1、Task 2的训练,为此,Task 1和Task 2用于训练Task 1、Task 2和Task 3……等等。

我真的很喜欢这个过程,非常的直观,因为它遵循了人类理解文本的方式。我们的大脑不仅认为“I like going to New York”是一个积极情绪的句子,是不是?它同时理解了名词“New York”和“I”,理解了“like”这个动词,并推断出New York是一个地方。

ERNIE在关系提取任务中获得了88.32的SOTA的F1-Score

  • 论文链接:https://arxiv.org/pdf/1905.07129v3.pdf

  • Github链接:https://github.com/thunlp/ERNIE

预训练模型 #3: Text-to-Text Transfer Transformer (T5)

说实话,与其他模型相比,研究这个模型最有趣。谷歌新的Text-to-Text Transfer Transformer (T5)模型使用Transfer learning来完成各种NLP任务。

最有趣的部分是它将每个问题转换为文本输入—文本输出模型。因此,即使对于分类任务,输入也将是文本,输出也将是单词而不是标签。这可以归结为所有任务上的一个模型。不仅如此,一个任务的输出可以用作下一个任务的输入。

语料库使用普通抓取的增强版本。基本上就是从web上抓取文本。这篇论文强调了清理数据的重要性,并清楚地说明了这是如何做到的。虽然抓取的数据每个月生成20TB的数据,但是大部分数据并不适合NLP任务。

即使只保留文本内容(包含标记、代码内容等的页面已被删除),语料库的大小仍然高达750GB,比大多数数据集大得多。

注意:这也已经在TensorFlow上发布了:https://www.tensorflow.org/datasets/catalog/c4

要执行的任务被编码为输入的前缀。正如你在上面的图表中所看到的,不管是分类还是回归任务,T5模型仍然会生成新的文本来获得输出。

T5在超过20个已建立的NLP任务上实现了SOTA —— 这是很少见的,看看指标,它和人类的输出非常接近。

T5模型跟随了最近的趋势,对未标注的数据进行了训练,然后对标注文本进行微调。可以理解的是,这个模型是巨大的,但是可以看到对它进行进一步的研究,缩小这个模型是非常有趣的,可以让它得到更广泛的使用。

  • 论文链接:https://arxiv.org/pdf/1910.10683.pdf

  • Github链接:https://github.com/googl-research/text-to-text-transfer-transformer

预训练模型 #4: Binary-Partitioning Transformer (BPT)

正如我们到目前为止所看到的,Transformer architecture在NLP研究中非常流行。BP Transformer 再次使用Transformer,或者更确切地说,使用它的一个增强版本来进行文本分类,机器翻译等等。

然而,使用Transformer仍然是一个昂贵的过程,因为它使用了自注意力机制。自注意只是指我们对句子本身进行注意力操作,而不是两个不同的句子。自注意力有助于识别一句话中单词之间的关系。正是这种自注意力的机制导致了使用Transformer的成本。

Binary-Partitioning Transformer (BPT)将Transformer 视为一个图神经网络,旨在提高自注意力机制的效率。本质上,这个图中的每个节点表示一个输入token。

BP Transformer的工作原理如下:

第一步:递归地把句子分成两部分,直到达到某个停止条件。这称为二元分区。例如,“I like going to New York”这句话有以下几个部分:

  • I like going; to New York

  • I like; going; to New; York

  • I; like; going; to; New; York

注意:一个包含n个单词的句子会有2*n - 1个分区,最后,你会得到一个完整的二叉树。

第二步:每个分区现在都是图神经网络中的一个节点。有两种类型的边:

  • 连接父节点及其子节点的边

  • 连接叶节点与其他节点的边

第三步:对图中相邻节点的每个节点进行自注意力:

BPT达到了:

  • 在中英机器翻译上达到了SOTA的成绩(BLEU评分:19.84)

  • IMDb数据集情绪分析的准确率为92.12(结合GloVE embedding)

我很欣赏这个模型,因为它让我重新审视了图的概念,让我敢于去研究图神经网络。我承认我来晚了,但在不久的将来,我一定会在图神经网络上进行更多的探索!

  • 论文链接:https://arxiv.org/pdf/1911.04070v1.pdf

  • Github链接:https://github.com/yzh119/BPT

预训练模型 #5: Neural Attentive Bag-of-Entities Model for Text Classification (NABoE)

神经网络一直是最受欢迎的NLP任务模型,它们的表现优于传统的模型。此外,在构建语料库知识库的同时,用单词代替实体,也改善了模型de 学习。

这意味着我们不是从语料库中的单词构建词汇表,而是使用实体链接构建大量实体。虽然已有研究将语料库表示为模型,但NABoE模型更进一步:

  1. 使用神经网络来检测实体

  2. 使用注意力机制来计算被检测实体的权重(这决定了这些实体与文档的相关性)

实体模型的神经注意包使用Wikipedia语料库来检测与单词相关的实体。例如,单词“Apple”可以指水果、公司和其他可能的实体。检索所有这些实体后,使用基于softmax的注意力函数计算每个实体的权重。这提供了只与特定文档相关的实体的一个更小的子集。

最后,通过向量嵌入和与词相关的实体的向量嵌入,给出了词的最终表示。

NABoE模型在文本分类任务中表现得特别好:

  • 论文链接: Neural Attentive Bag-of-Entities Model for Text Classification

  • Github链接: https://github.com/wikipedia2vec/wikipedia2vec/tree/master/examples/text_classification

预训练模型 #6: Rethinking Complex Neural Network Architectures for Document Classification

现在,在研究了这么多的高级的预训练模型之后,我们要反其道而行之,我们要讨论一个使用老的双向LSTM的模型来实现SOTA性能。但这正是我最后决定介绍它的原因。

我们常常因为几棵树木而错过森林。我们往往忘记,一个简单的调优的模型可能会获得与这些复杂的深度学习模型一样好的结果。本文的目的就是要说明这一点。

双向LSTM和正则化的组合能够在IMDb文档分类任务上实现SOTA的性能。

本文最有趣和值得注意的方面是:

  1. 它不使用注意力机制

  2. 这是第一篇结合LSTM +正则化方法进行文档分类的论文

这个最小的模型使用Adam优化器,temporal averaging和dropouts,得到了很高的分数。本文将这些结果与其他深度学习模型进行了实证比较,证明了该模型简单有效,结果不言自明:

这种模型可以被认为是一种新的行业方法,在这个行业中,构建可生产的模型并在你的度量标准上获得高分是很重要的。

  • 论文链接: Rethinking Complex Neural Network Architectures for Document Classification

  • Github链接: https://github.com/castorini/hedwig

结束语

在这里,我们讨论了最近在文本分类中达到SOTA的6个预训练模型。这些NLP模型表明,还有更多的模型有待开发,我期待着今年了解它们。

所有这些研究中一个非常好的地方是这些预训练好的模型的可用性和开源性。上述所有模型都有一个GitHub仓库,可以用于实现。另一个不能忽视的方面是,它们也可以在PyTorch上找到。PyTorch正在迅速取代TensorFlow作为构建你的深度学习模型的平台。

我鼓励你在各种数据集上尝试这些模型,并对它们进行试验,以了解它们是如何工作的。如果你心中已经有了一些和去年一样酷但没有引起注意的模型,请在下面的评论中提及它们!

—END—

英文原文:https://www.analyticsvidhya.com/blog/2020/03/6-pretrained-models-text-classification/

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐