史上最详尽的NLP预处理模型汇总

浏览: 1764
NLP

文章发布于公号【数智物语】 (ID:decision_engine),关注公号不错过每一篇干货。

转自 | 磐创AI(公众号ID:xunixs)

作者 | AI小昕

编者按:近年来,自然语言处理(NLP)的应用程序已经无处不在。NLP使用率的快速增长主要归功于通过预训练模型实现的迁移学习概念,迁移学习本质上是在一个数据集上训练模型,然后使该模型能够适应在不同的数据集上执行不同的NLP操作。这一突破使得每个人都能轻松地开启NLP任务,尤其是那些没有时间和资源从头开始构建NLP模型的人。所以,使用预训练模型处理NLP任务是目前非常热门的研究方向,本文将重点介绍八个预训练的NLP模型以及每个模型的相关资源。

01为什么要使用预训练模型?

先前的研究者已经为我们设计了一个基准模型,我们可以很方便地在自己的NLP数据集上使用该预训练模型,而不是从头开始构建模型来解决类似的NLP问题。此外,使用这些最先进的预训练模型,可以帮助我们节省大量的时间和计算资源。

02预训练模型的分类

根据预训练模型的应用,我们可以将其分为三类:

Multi-Purpose NLP Models

ULMFiT

Transformer

Google’s BERT

Transformer-XL

OpenAI’s GPT-2

Word Embeddings

ELMo

Flair

Other Pretrained Models

StanfordNLP

下面我们来一一看下这三个分类:

03

多用途NLP模型(Multi-Purpose NLP Models)

多用途模型是NLP领域的热门话题。这些模型为我们所关注的NLP应用提供了动力——机器翻译、问答系统、聊天机器人、情感分析等。这些多用途NLP模型的核心是语言建模的概念。简单来说,语言模型的目的是预测序列中的下一个单词或字符。我们接下来会通过以下五个预处理模型来理解这一概念,我们已经为每个模型提供了研究论文和项目链接。

01ULMFiT

【项目地址:https://github.com/fastai/fastai/tree/master/courses/dl2/imdb_scripts

ULMFiT是由JeremyHoward和DeepMind的Sebastian Ruder三位科学家提出并设计的。在文本分类任务方面,ULMFiT要优于许多最先进的技术,这个方法涉及到将一个在wikitex103数据集上训练的预处理语言模型微调为一个新的数据集,使其不会忘记它以前学到的东西。另一方面,ULMFiT需要很少的例子就能产生这些令人印象深刻的结果,这使得它更容易让人理解和实现。

此外,如果我们想了解更多的关于ULMFiT的信息,请参阅:

Tutorial on Text Classification (NLP)using ULMFiT and fastai Library in Python

https://www.analyticsvidhya.com/blog/2018/11/tutorial-text-classification-ulmfit-fastai-library/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article

Pretrained models for ULMFiT

https://www.paperswithcode.com/paper/universal-language-model-fine-tuning-for-text

Research Paper

https://arxiv.org/abs/1801.06146[1]】

02Transformer

【项目地址:https://github.com/tensorflow/models/tree/master/official/transformer】

Transformer结构是近几年来NLP主要发展的核心。它在2017年由谷歌推出。当时,循环神经网络(RNN)被用于语言任务,如机器翻译和问答系统等。而这种Transformer结构要优于RNN和CNN,且训练模型所需的计算资源也减少了。我们可以参考以下的比较:

谷歌官方解释说:“transformer应用了一种自我关注机制,它可以直接模拟句子中所有单词之间的关系,而不用考虑它们的位置如何。”它使用了固定大小的上下文(也就是前面的单词)来实现这一点。例如:She found the shells on the bank of the river。transformer模型可以一步理解“bank”在这里指的是海岸,而不是金融机构。

通过以下资料可以学习更多有关Transformer的资源:

1. Google’sofficial blog post

https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html】

2. Pretrained models for Transformer

https://www.paperswithcode.com/paper/attention-is-all-you-need】

3. Research Paper

https://arxiv.org/abs/1706.03762

03Google’s BERT

【项目地址:https://github.com/google-research/bert】

自谷歌发布结果以来,Bert框架就掀起了一股波澜,并且还开放了源代码背后的代码。Bert也许不能标志着一个新的NLP时代,但毫无疑问,Bert是一个非常有用的框架,可以很好的适用于各种NLP任务。

BERT是双向编码器的缩写,它考虑单词两侧的上下文。以前的方法都是一次性考虑一个词的一侧,左侧或是右侧。这种双向性的方法可以有助于模型更好地理解使用单词的上下文。此外,BERT还可以进行多任务学习,即可以同时执行不同的NLP任务。

BERT是第一个用于预训练NLP模型的无监督方法、深度双向系统,但它只能使用纯文本语料库进行训练。在发布时,BERT正在为11项自然语言处理任务生成最新的结果,可以支持用户在短短几个小时内(在单个GPU上)使用BERT训练自己的NLP模型(如:问答系统)。

更多关于Google’s BERT的学习资料:

1. Google’sofficial blog post

https://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html

2. Pretrained models for BERT

https://www.paperswithcode.com/paper/bert-pre-training-of-deep-bidirectional#code】

3. Research Paper

https://arxiv.org/pdf/1810.04805.pdf

04Google’s Transformer-XL

【项目地址:https://github.com/kimiyoung/transformer-xl

从长远来看谷歌发布的这一版本的Transformer模型可能是NLP中一个非常重要的版本。想象一下,当你正在读书时,突然出现一个单词或句子,而这个单词和句子在书的开头已经提到过来。也许我们有时可以回想起来它是什么,但计算机很难建立这种长期的依赖关系模型。正如我们上边降到的Transformers可以很容易的做到这一点,但它是用固定长度的上下文实现的,也就导致了这种方式最大的缺点是没有太多的灵活性。

Transformer-XL很好的弥补了这个差距,它由谷歌人工智能团队研发的一种新型的NLP架构,可以帮助计算机理解超出固定长度限制的上下文。此外,Transformer-XL比一般的Transformers速度要快1800倍。

Transformer-XL在和各种语言建模的对比上,取得了不错的结果。下图是和其中一种模型在各类数据上的对比结果:

有关Transformer-XL的更多学习资源:

1. Google’s official blog post

https://ai.googleblog.com/2019/01/transformer-xl-unleashing-potential-of.html】

2. Pretrained models forTransformer-XL

https://www.paperswithcode.com/paper/transformer-xl-attentive-language-models】

3. Research Paper

https://arxiv.org/abs/1901.02860

05OpenAI’s GPT-2

【项目地址:https://github.com/openai/gpt-2】

这算是一个比较有争议的项目,因为一些人觉得GPT-2的发布是OpenAI的一个营销噱头。不过,我们至少要尝试一下OpenAI发布的代码,这是很重要的。

先交代一个背景:OpenAI在2月份的时候写了一篇博文

【链接为:https://openai.com/blog/better-language-models/】,声称他们设计了一个名为GPT-2的NLP模型,这个模型非常好,以至于他们担心恶意使用而没有发布完整版本的费用。这件事一下子引起了社会各界的关注。

GPT-2经过训练,可以预测40GB互联网文本数据中的下一个词。这个模型其实也是一个基于transformer训练的模型,它训练了一个800万网页的数据集。他们在自己的网站上发布的结果令人震惊:这个模型能够根据我们输入的几个句子编织出一个完全清晰的故事。查看此示例:

这个结果让人很难以置信。后来,开发人员已经发布了一个小得多的GPT-2版本供研究人员和工程师测试。 原始模型有15亿个参数,开源样本模型有1.17亿个。

有关GPT-2的更多学习资源:

1. OpenAI’sofficial blog post

https://openai.com/blog/better-language-models/】

2. Pretrained models for GPT-2

https://github.com/openai/gpt-2】

3. Research paper

https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf

04词嵌入向量模型(Word Embeddings)

我们使用的大多数机器学习和深度学习算法都无法直接处理字符串和纯文本。这些技术要求我们在文本数据执行任何任务(如回归或分类)之前将其转换为数字。简单来说,Word Embeddings是将文本块转换为用于执行NLP任务的数字。Word Embeddings格式通常尝试使用字典将单词映射到向量。

在本节中,我们将介绍两个最先进的NLP单词嵌入。我还提供了项目链接,这样您就可以实际了解每个主题。

01ELMO

【项目地址:https://github.com/allenai/allennlp/blob/master/tutorials/how_to/elmo.md】

ELMo是语言模型嵌入(Embeddings from Language Models)的缩写,在构建NLP模型的环境中非常有用。具体来看,ELMo是一种在向量和Embeddings中表示单词的新方法,这些ELMo Embeddings有助于我们在多个NLP任务上获得最棒的结果,如下所示:

让我们来了解一下ELMo的工作原理: 回想一下我们之前讨论过的双向语言模型,从中我们可以得到启示,ELMo单词向量是在双层双向语言模型(biLM)之上计算的, 这个biLM模型有两层堆叠在一起,每层都有2次传递(前传和后传)。而ELMo单词表示考虑用于计算单词Emebeddings的完整输入句子。

有关ELMo的更多学习资源:

 1. Step-by-Step NLP Guide to Learn ELMo for ExtractingFeatures from Text

https://www.analyticsvidhya.com/blog/2019/03/learn-to-use-elmo-to-extract-features-from-text/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】

2. GitHub repository for pretrained models

https://github.com/allenai/allennlp/blob/master/tutorials/how_to/elmo.md

3. Research Paper

https://arxiv.org/pdf/1802.05365.pdf

02FLair

【项目地址:https://www.datalearner.com/blog/1051553314593568】

Flair不完全是一个Word Embeddings,而是一个Word Embeddings的组合。我们可以将Flair称为NLP库,它结合了诸如GloVe,BERT,ELMo等WordEmbeddings的内容。由Zalando Research的优秀人员开发并开源了代码Flair。

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

1. Name-Entity Recognition (NER)

2. Parts-of-Speech Tagging (PoS)

3. Text Classification

4. Training Custom Models

下表格展示了其效果:

有关Flair更多的学习资源:

1. Introductionto Flair for NLP: A Simple yet Powerful State-of-the-Art NLP Library

https://www.analyticsvidhya.com/blog/2019/02/flair-nlp-library-python/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】

2. Pretrainedmodels for Flair

https://github.com/zalandoresearch/flair

05其它预训练模型(Other Pretrained Models)

01Stanford NLP

【项目地址:https://github.com/stanfordnlp/stanfordnlp

该作者声明 作者声称StanfordNLP支持超过53种语言,真正开辟了很多在非英语语言中应用NLP技术的可能性。如:印度语、中文和日语。这对于NLP往非英语领域的拓展有极大的帮助。

StanfordNLP是由一系列经过预先训练的NLP模型组成的集合。这些模型不仅经过实验室的测试,还被作者用于2017年和2018年康奈尔大学的竞赛。在StanfordNLP中打包的所有预训练的NLP模型都是基于PyTorch构建的,我们可以在自己的注释数据上进行训练和评估。

此外,我们还应该关注StanfordNLP的两个主要原因是:

1. 用于执行文本分析的完整神经网络pipeline,包括:

符号化(Tokenization)

Multi-word token (MWT)扩展

词形还原

词性标注(POS)和形态特征标记

依赖性解析(Dependency Parsing)

2. 一个稳定的官方维护的CoreNLP Python接口

下面为大家提供更多的关于STanfordNLP的学习资源:

1. Introduction to StanfordNLP: An IncredibleState-of-the-Art NLP Library for 53 Languages (with Python code)

https://www.analyticsvidhya.com/blog/2019/02/stanfordnlp-nlp-library-python/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】

2. Pretrained models for StanfordNLP

https://github.com/stanfordnlp/stanfordnlp

【总结】:本文为大家详细总结、概述了八个NLP的预处理模型。但现有的预处理模型不仅有这些,我们可以访问:https://paperswithcode.com/,学习更多的NLP预处理模型。

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

1. Natural Language Processing using Python course

https://courses.analyticsvidhya.com/courses/natural-language-processing-nlp?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】

2. Certified Program: NLP for Beginners

https://courses.analyticsvidhya.com/bundles/nlp-combo?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】

3. Collection of articles on Natural Language Processing(NLP)

https://www.analyticsvidhya.com/blog/category/nlp/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article】

推荐阅读:

链接图片1.png

链接图片2.png

数智物语征稿启事.png

星标我,每天多一点智慧

星标备选20190408.gif

推荐 0
本文由 数智物语 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册