8个优秀的预训练模型,帮助您开始使用自然语言处理(NLP)

Introduction

如今,自然语言处理(NLP)应用程序已经无处不在。 我似乎经常偶然发现网络和应用程序正在以某种形式利用NLP。 简而言之,这是参与NLP领域的美好时光。

NLP采用率的快速增长主要得益于通过预训练模型实现转移学习. 的概念. 在NLP的上下文中,转移学习本质上是在一个数据集上训练模型然后调整该模型以在不同数据集上执行不同NLP函数的能力。

这一突破使每个人都非常容易和简单,特别是那些没有时间或资源从头开始构建NLP模型的人。 对于想要学习或过渡到NLP的初学者来说,它是完美的。

Why use pretrained models?

  • 作者已经努力为您设计基准模型! 我们可以在我们自己的NLP数据集上使用该预训练模型,而不是从头开始构建模型来解决类似的NLP问题
  • 需要进行一些微调,但它为我们节省了大量的时间和计算资源

在本文中,我展示了可用于开始NLP之旅的顶级预训模型,并复制了该领域的最新研究成果。 您可以在计算机视觉这里.

本文涵盖的预训练NLP模型

我根据应用将预训练模型分为三类:

  • 多用途NLP模型
    • ULMFiT
    • 变压器
    • 谷歌的BERT
    • Transformer-XL
    • OpenAI的GPT-2
  • Word嵌入
    • ELMo
    • 天赋
    • 其他预训练模型
    • StanfordNLP

多用途NLP模型

多用途模型是NLP世界的话题。 这些模型为我们感兴趣的NLP应用程序提供动力 - 机器翻译,问答系统,聊天机器人,情感分析等。这些多用途NLP模型的核心组件是语言建模的概念。

简单来说,语言模型的目的是预测序列中的下一个单词或字符。 我们在这里看每个模型时都会理解这一点。

如果您是NLP爱好者,那么您会喜欢这一部分。 现在,让我们深入研究5个最先进的多用途NLP模型框架。 我提供了每种模型的研究论文和预训练模型的链接。 继续探索吧!

ULMFiT

ULMFiT由fast.ai的Jeremy Howard和DeepMind的Sebastian Ruder提出并设计。 你可以说ULMFiT是去年启动转学习会的版本。

正如我们在本文中所述,ULMFiT实现了最先进的结果 使用新颖的NLP技术。 该方法涉及微调预训练的语言模型,该模型在Wikitext 103数据集上训练为新的 数据集以这样的方式,它不会忘记它以前学到的东西。
在这里插入图片描述
ULMFiT优于众多最先进的文本分类任务。 我对ULMFiT的喜爱之处在于它只需要很少的例子来产生这些令人印象深刻的结果。 让您和我这样的人更容易理解并在我们的机器上实现它!

如果您想知道,ULMFiT代表通用语言模型微调。 “通用”这个词在这里非常贴切 - 该框架几乎可以应用于任何NLP任务。

Resources to learn and read more about ULMFiT:

Transformer

变压器架构是NLP近期所有重大发展的核心。 它于2017年由谷歌推出。 当时,循环神经网络(RNN)被用于语言任务,如机器翻译和问答系统。

这种Transformer架构的性能优于RNN和CNN(卷积神经网络)。 训练模型所需的计算资源也减少了。 NLP中的每个人都是双赢的。 看看下面的比较:
在这里插入图片描述

根据Google的说法,Transformer“应用了一种自我关注机制,可直接模拟句子中所有单词之间的关系,无论其各自的位置如何”。 它使用固定大小的上下文(也就是前面的单词)来实现。 太复杂了? 我们举一个例子来简化这个。

“她在河岸找到了贝壳。”该模型需要明白,这里的“银行”是指岸,而不是金融机构。 Transformer只需一步就能理解这一点。 我鼓励您阅读下面链接的完整论文,以了解其工作原理。 它会让你大吃一惊。

下面的动画很好地说明了Transformer如何处理机器翻译任务:

在这里插入图片描述

谷歌去年发布了一款名为Universal Transformer的改进版Transformer。 还有一个更新,更直观的版本,名为Transformer-XL,我们将在下面介绍。

Resources to learn and read more about Transformer:

Google’s BERT

自谷歌公布其结果以来,BERT框架一直在掀起波澜,然后开放源代码背后的代码。 我们可以辩论这是否标志着“NLP的新时代”,但毫无疑问BERT是一个非常有用的框架,可以很好地推广到 各种NLP任务。

在这里插入图片描述

BERT,Bidirectional Encoder Representations, 的缩写,考虑单词两侧(左侧和右侧)的上下文。 以前的所有努力都是一次一个词的一面 - 左边或右边。 这种双向性有助于模型更好地理解使用单词的上下文。 此外,BERT旨在进行多任务学习,也就是说,它可以同时执行不同的NLP任务。

BERT是第一个用于预训练NLP模型的无监督,深度双向系统。 它仅使用纯文本语料库进行训练。

在发布时,BERT正在11个自然语言处理(NLP)任务中产生最先进的结果。 相当不朽的壮举! 您可以在短短几个小时内(在单个GPU上)使用BERT训练您自己的NLP模型(例如问答系统)。

Resources to learn and read more about BERT:

Google’s Transformer-XL

对于NLP而言,谷歌的这一版本可能是一个非常重要的版本。如果你是一个初学者,这个概念可能会变得有点棘手,所以我鼓励你多读几遍来掌握它。我还在本节下面提供了多种资源,以帮助您开始使用Transformer-XL。

想象一下 - 你正在书的中途,突然出现了一本书或者一句话,这本书开头就提到过了。现在,你或我可以回想起它是什么。但可以理解的是,一台机器难以模拟长期依赖。

正如我们上面所看到的,实现此目的的一种方法是使用变形金刚。但它们是使用固定长度的上下文实现的。换句话说,如果使用这种方法,就没有太大的灵活性。

Transformer-XL很好地弥合了这个差距。它由Google AI团队开发,是一种新颖的NLP架构,可帮助机器理解超出固定长度限制的上下文。 Transformer-XL比典型的变压器快1800倍。

您可以通过Google发布的以下2个GIF了解这种差异:

Transformer-XL, as you might have predicted by now, achieves new state-of-the-art results on various language modeling benchmarks/datasets. Here’s a small table taken from their page illustrating this:

在这里插入图片描述

上面链接并在下面提到的Transformer-XL GitHub存储库包含PyTorch和TensorFlow中的代码。

Resources to learn and read more about Transformer-XL:

OpenAI’s GPT-2

现在,这是一个非常有争议的条目。 一些人可能会争辩说,GPT-2的发布是OpenAI的营销噱头。 我当然知道他们来自哪里。 但是,我认为至少还要尝试OpenAI发布的代码是很重要的。
在这里插入图片描述

首先,为那些不知道我在说什么的人提供一些背景信息。 OpenAI在2月写了一篇博客文章(下面的链接),他们声称已经设计了一个名为GPT-2的NLP模型,它非常好,以至于他们无法承担因恶意使用而发布完整版本的费用。 这当然得到了社区的关注。

GPT-2经过培训,可以预测40GB互联网文本数据中的下一个词。 该框架也是基于变压器的模型,该模型在800万个网页的数据集上训练。 他们在他们的网站上发布的结果简直令人震惊。 该模型能够根据我们输入的几个句子编写一个完全清晰的故事。 看看这个例子:

在这里插入图片描述

难以置信,对吧?

开发人员已经发布了一个小得多的GPT-2版本供研究人员和工程师测试。 原始模型有15亿个参数 - 开源样本模型有1.17亿个。

Resources to learn and read more about GPT-2:

Word Embeddings

我们使用的大多数机器学习和深度学习算法都无法直接使用字符串和纯文本。 这些技术要求我们在执行任何任务(例如回归或分类)之前将文本数据转换为数字。

因此,简单来说,单词嵌入是将文本块转换为用于执行NLP任务的数字。 单词嵌入格式通常尝试使用字典将单词映射到向量。

您可以在下面的文章中更深入地解释单词嵌入,不同类型以及如何在数据集中使用它们。 如果您不熟悉这个概念,我认为本指南必读:

在本节中,我们将介绍NLP的两个最先进的字嵌入。 我还提供了教程链接,以便您可以对每个主题有实际的了解。

ELMo

不,这个ELMo不是芝麻街的(无可否认的)角色。 但是这个ELMo是语言模型嵌入的缩写,在构建NLP模型的环境中非常有用。

ELMo是一种在向量和嵌入中表示单词的新方法。 这些ELMo字嵌入有助于我们在多个NLP任务上获得最先进的结果,如下所示:

在这里插入图片描述
让我们花点时间了解ELMo的工作原理。 回想一下我们之前讨论过的双向语言模型。 从这篇文章中得到启示,“ELMo单词向量是在双层双向语言模型(biLM)之上计算的。 这个biLM模型有两层堆叠在一起。 每层有2次传球 - 前传和后传:

ELMo单词表示考虑用于计算单词嵌入的完整输入句子。 因此,术语“读取”在不同的上下文中将具有不同的ELMo向量。 当相同的向量被分配给单词“read”而不管使用它的上下文时,与旧的单词嵌入相去甚远。

Resources to learn and read more about ELMo:

Flair

Flair不是一个单词嵌入,而是单词嵌入的组合。 我们可以将Flair称为结合了GloVe,BERT,ELMo等嵌入的NLP库.Zalando Research的优秀人员开发了开源Flair。

在这里插入图片描述

该团队已经为以下NLP任务发布了几个预训练模型:

  • Name-Entity Recognition (NER)
  • Parts-of-Speech Tagging (PoS)
  • Text Classification
  • Training Custom Models

不相信吗? 那么,这个比较表将带你到那里:

在这里插入图片描述

'Flair Embedding’是Flair库中包含的签名嵌入。 它由上下文字符串嵌入提供支持。 您应该阅读本文以了解为Flair提供动力的核心组件。

我特别喜欢Flair的是它支持多种语言。 如此多的NLP版本都在执行英语任务。 如果NLP要在全球范围内获得牵引力,我们需要扩展到这一点!

Resources to learn and read more about Flair:

Other Pretrained Models

StanfordNLP

说到扩展NLP超越英语,这里有一个已经设置基准的库。 作者声称StanfordNLP支持超过53种语言 - 这当然引起了我们的注意!

在这里插入图片描述

我们的团队是第一批使用该库并在真实数据集上发布结果的团队。 我们玩弄了它,发现StanfordNLP真正开辟了很多在非英语语言中应用NLP技术的可能性。 像印地语,中文和日语。

StanfordNLP是预先训练的最先进的NLP模型的集合。这些模型不仅仅是实验室测试 - 作者在[CoNLL]中使用它们(http://www.conll.org) / 2019)2017年和2018年比赛。 在StanfordNLP中打包的所有预训练NLP模型都是基于PyTorch构建的,可以在您自己的注释数据上进行训练和评估。

我们认为您应该考虑StanfordNLP的两个主要原因是:

  • 用于执行文本分析的完整神经网络管道,包括:
    • 标记化
    • 多字令牌(MWT)扩展
    • 词形还原
    • 词性(POS)和形态特征标记
    • 依赖性解析
  • 一个稳定的官方维护的CoreNLP Python接口

Resources to learn and read more about StanfordNLP:

End Notes

这绝不是预训练NLP模型的详尽列表。 有更多可用的,你可以在这个网站上查看其中的一些。

以下是学习NLP的一些有用资源:

猜你喜欢

转载自blog.csdn.net/weixin_41697507/article/details/89407834