目录
为什么要使用预训练模型?
本文涵盖的预训练NLP模型
多用途NLP模型
ULMFiT
有关ULMFiT的更多信息,请参阅:
Transformer
学习和阅读更多有关Transformer的资源:
谷歌的BERT
学习和阅读更多有关BERT的资源:
谷歌的Transformer-XL
有关学习和阅读有关Transformer-XL的更多信息的资源:
OpenAI的GPT-2
有关学习和阅读有关GPT-2的更多信息的资源:
Word嵌入
ELMO
学习和阅读有关ELMo的更多信息的资源:
Flair
学习和阅读更多有关Flair的资源:
其他预训练模型
StanfordNLP
学习和阅读更多有关StanfordNLP的资源:
如今,自然语言处理(NLP)应用程序已经无处不在。我似乎经常偶然发现网络和应用程序正在以某种形式利用NLP。简而言之,这是参与NLP领域的美好时光。
NLP采用率的快速增长主要得益于通过预训练模型实现转移学习的概念。在NLP的上下文中,转移学习本质上是在一个数据集上训练模型然后调整该模型以在不同数据集上执行不同NLP函数的能力。
这一突破使每个人都非常容易和简单,特别是那些没有时间或资源从头开始构建NLP模型的人。对于想要学习或过渡到NLP的初学者来说,它是完美的。
在本文中,我展示了可用于开始NLP之旅的顶级预训模型,并复制了该领域的最新研究成果。您可以在这里查看我在计算机视觉中的顶级预训练模型上的文章。
如果你是NLP的初学者,我建议学习我们的热门课程 - ' 使用Python的NLP '。
我根据应用将预训练模型分为三类:
多用途模型是NLP世界的话题。这些模型为我们感兴趣的NLP应用程序提供动力 - 机器翻译,问答系统,聊天机器人,情感分析等。这些多用途NLP模型的核心组件是语言建模的概念。
简单来说,语言模型的目的是预测序列中的下一个单词或字符。我们在这里看每个模型时都会理解这一点。
如果您是NLP爱好者,那么您会喜欢这一部分。现在,让我们深入研究5个最先进的多用途NLP模型框架。我提供了每种模型的研究论文和预训练模型的链接。继续探索吧!
ULMFiT由fast.ai的Jeremy Howard DeepMind的Sebastian Ruder提出并设计。你可以说ULMFiT是去年启动转学习会的版本。
正如我们在本文中所述,ULMFiT使用新颖的NLP技术实现了最先进的结果。该方法涉及将在Wikitext 103数据集上训练的预训练语言模型微调到新数据集,使其不会忘记它之前学到的内容。
ULMFiT优于众多最先进的文本分类任务。我对ULMFiT的喜爱之处在于它需要很少的例子来产生这些令人印象深刻的结果。让您和我这样的人更容易理解并在我们的机器上实现它!
如果您想知道,ULMFiT代表通用语言模型微调。“通用”这个词在这里非常贴切 - 该框架几乎可以应用于任何NLP任务。
Transformer架构是NLP近期所有重大发展的核心。它于2017年由谷歌推出。当时,循环神经网络(RNN)被用于语言任务,如机器翻译和问答系统。
这种Transformer架构的性能优于RNN和CNN(卷积神经网络)。训练模型所需的计算资源也减少了。NLP中的每个人都是双赢的。看看下面的比较:
根据Google的说法,Transformer“应用了一种自我关注机制,可直接模拟句子中所有单词之间的关系,无论其各自的位置如何”。它使用固定大小的上下文(也就是前面的单词)来实现。太复杂了?我们举一个例子来简化这个。
“她在河岸找到了贝壳。”该模型需要明白,这里的“银行”是指岸,而不是金融机构。Transformer只需一步就能理解这一点。我鼓励您阅读下面链接的完整论文,以了解其工作原理。它会让你大吃一惊。
下面的动画很好地说明了Transformer如何处理机器翻译任务:
谷歌去年发布了一款名为Universal Transformer的改进版Transformer。还有一个更新,更直观的版本,名为Transformer-XL,我们将在下面介绍。
自谷歌公布其结果以来,BERT框架一直在掀起波澜,然后开放源代码背后的代码。我们可以辩论这是否标志着“ NLP的新时代 ”,但毫无疑问BERT是一个非常有用的框架,可以很好地推广到各种NLP任务。
BERT,简称乙 idirectional é ncoder ř对产权,认为从一个字的两侧(左侧和右侧)的上下文。以前的所有努力都是一次一个词的一面 - 左边或右边。这种双向性有助于模型更好地理解使用单词的上下文。此外,BERT旨在进行多任务学习,也就是说,它可以同时执行不同的NLP任务。
BERT是第一个用于预训练NLP模型的无监督,深度双向系统。它仅使用纯文本语料库进行训练。
在它发布时,BERT正在11个自然语言处理(NLP)任务中产生最先进的结果。相当不朽的壮举!您可以在短短几个小时内(在单个GPU上)使用BERT训练您自己的NLP模型(例如问答系统)。
对于NLP而言,谷歌的这一版本可能是一个非常重要的版本。如果你是一个初学者,这个概念可能会变得有点棘手,所以我鼓励你多读几遍来掌握它。我还在本节下面提供了多种资源,以帮助您开始使用Transformer-XL。
想象一下 - 你正在书的中途,突然出现了一本书或者一句话,这本书开头就提到过了。现在,你或我可以回想起它是什么。但可以理解的是,一台机器难以模拟长期依赖。
正如我们上面所看到的,实现此目的的一种方法是使用变形金刚。但它们是使用固定长度的上下文实现的。换句话说,如果使用这种方法,就没有太大的灵活性。
Transformer-XL很好地弥合了这个差距。它由Google AI团队开发,是一种新颖的NLP架构,可帮助机器理解超出固定长度限制的上下文。Transformer-XL比典型的Transformer快1800倍。
您可以通过Google发布的以下2个GIF了解这种差异:
Vanilla Transformer
Transformer-XL
如您现在所预测的,Transformer-XL在各种语言建模基准/数据集上实现了最新的最新结果。这是从他们的页面中取出的一张小桌子,说明了这一点:
方法enwiki8 text8十亿字WT-103 PTB(不带微调)上一个最佳1.06 1.13 23.7 20.5 55.5 Transformer-XL 0.99 1.08 21.8 18.3 54.5
上面链接并在下面提到的Transformer-XL GitHub存储库包含PyTorch和TensorFlow中的代码。
现在,这是一个非常有争议的条目。一些人可能会争辩说,GPT-2的发布是OpenAI的营销噱头。我当然知道他们来自哪里。但是,我认为至少还要尝试OpenAI发布的代码是很重要的。
首先,为那些不知道我在说什么的人提供一些背景信息。OpenAI在2月写了一篇博客文章(下面的链接),他们声称已经设计了一个名为GPT-2的NLP模型,它非常好,以至于他们无法承担因恶意使用而发布完整版本的费用。这当然得到了社区的关注。
GPT-2经过培训,可以预测40GB互联网文本数据中的下一个词。该框架也是基于变压器的模型,该模型在800万个网页的数据集上训练。他们在他们的网站上发布的结果简直令人震惊。该模型能够根据我们输入的几个句子编写一个完全清晰的故事。看看这个例子:
难以置信,对吧?
开发人员已经发布了一个小得多的GPT-2版本供研究人员和工程师测试。原始模型有15亿个参数 - 开源样本模型有1.17亿个。
我们使用的大多数机器学习和深度学习算法都无法直接使用字符串和纯文本。这些技术要求我们在执行任何任务(例如回归或分类)之前将文本数据转换为数字。
因此,简单来说,单词嵌入是将文本块转换为用于执行NLP任务的数字。单词嵌入格式通常尝试使用字典将单词映射到向量。
您可以在下面的文章中对单词嵌入,不同类型以及如何在数据集中使用它们进行更深入的解释。如果您不熟悉这个概念,我认为本指南必读:
在本节中,我们将介绍NLP的两个最先进的字嵌入。我还提供了教程链接,以便您可以对每个主题有实际的了解。
不,这个ELMo不是芝麻街的(无可否认的)角色。但是这个ELMo是语言模型嵌入的缩写,在构建NLP模型的环境中非常有用。
ELMo是一种在向量和嵌入中表示单词的新方法。这些ELMo字嵌入有助于我们在多个NLP任务上获得最先进的结果,如下所示:
让我们花点时间了解ELMo的工作原理。回想一下我们之前讨论过的双向语言模型。从这篇文章中得到启示,“ELMo单词向量是在双层双向语言模型(biLM)之上计算的。这个biLM模型有两层堆叠在一起。每层有2次传球 - 前传和后传:
ELMo单词表示考虑用于计算单词嵌入的完整输入句子。因此,术语“读取”在不同的上下文中将具有不同的ELMo向量。当相同的向量被分配给单词“read”而不管使用它的上下文时,与旧的单词嵌入相去甚远。
Flair不是一个单词嵌入,而是单词嵌入的组合。我们可以将Flair 称为结合了GloVe,BERT,ELMo等嵌入的NLP库.Zalando Research的优秀人员开发了开源Flair。
该团队已经为以下NLP任务发布了几个预训练模型:
不相信吗?那么,这个比较表将带你到那里:
'Flair Embedding'是Flair库中包含的签名嵌入。它由上下文字符串嵌入提供支持。您应该阅读本文以了解为Flair提供动力的核心组件。
我特别喜欢Flair的是它支持多种语言。如此多的NLP版本都在执行英语任务。如果NLP要在全球范围内获得牵引力,我们需要扩展到这一点!
说到扩展NLP超越英语,这里有一个已经设置基准的库。作者声称StanfordNLP支持超过53种语言 - 这当然引起了我们的注意!
我们的团队是第一批使用该库并在真实数据集上发布结果的团队。我们玩弄了它,发现StanfordNLP真正开辟了很多在非英语语言中应用NLP技术的可能性。像印地语,中文和日语。
StanfordNLP是一系列经过预先训练的最先进的NLP模型。这些模型不仅仅经过实验室测试 - 作者在2017年和2018年的CoNLL比赛中使用了这些模型。在StanfordNLP中打包的所有预训练NLP模型都是基于PyTorch构建的,可以在您自己的注释数据上进行训练和评估。
我们认为您应该考虑StanfordNLP的两个主要原因是: