史上最详尽的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】

推荐阅读:

星标我,每天多一点智慧

原文地址:https://www.cnblogs.com/shuzhiwuyu/p/10730305.html

时间: 2024-10-09 14:30:12

史上最详尽的NLP预处理模型汇总的相关文章

史上最全开源大数据工具汇总

摘要 史上最全的开源大数据工具,非常实用,请务必收藏! 史上最全的开源大数据工具,非常实用,请务必收藏! 查询引擎 Phoenix Salesforce公司出品,Apache HBase之上的一个SQL中间层,完全使用Java编写 Stinger 原叫Tez,下一代Hive, Hortonworks主导开发,运行在YARN上的DAG计算框架 Presto Facebook开源 Spark SQL Spark上的SQL执行引擎 Pig 基于Hadoop MapReduce的脚本语言 Clouder

【转】 史上最详尽的平衡树(splay)讲解与模板(非指针版spaly)

ORZ原创Clove学姐: 变量声明:f[i]表示i的父结点,ch[i][0]表示i的左儿子,ch[i][1]表示i的右儿子,key[i]表示i的关键字(即结点i代表的那个数字),cnt[i]表示i结点的关键字出现的次数(相当于权值),size[i]表示包括i的这个子树的大小:sz为整棵树的大小,root为整棵树的根. 再介绍几个基本操作: [clear操作]:将当前点的各项值都清0(用于删除之后) inline void clear(int x){ ch[x][0]=ch[x][1]=f[x]

可能是史上最全的Tensorflow学习资源汇总

在之前的Tensorflow系列文章中,我们教大家学习了Tensorflow的安装.Tensorflow的语法.基本操作.CNN的一些原理和项目实战等.本篇文章将为大家总结Tensorflow纯干货学习资源,非常适合新手学习,建议大家收藏.想要学习更多的Tensorflow知识,欢迎点击上方蓝字,关注我们的微信公众号. 一 .Tensorflow教程资源: 1)适合初学者的Tensorflow教程和代码示例: https://github.com/aymericdamien/TensorFlow

史上最全的 Java 新手问题汇总

Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在. 有超过30亿的设备是运行在Java之上的.根据Oracle的统计数据,光是使用中的Java Card就有有50亿. 超过900万程序员选择使用Java进行开发,它是最受开发人员欢迎的语言,同时也是最流行的开发平台. 本文为那些准Java程序员们准备了一系列广为流传的Java最佳编程实践 优先返回空集合而非null 如果程序要返回一个不包含任何值的集合

史上最全最完整的IOS 游戏开发 PDF电子书定制下载

<iOS 5游戏开发>作者:(新西兰)James·Sugrue著 页数:191 出版社:北京市:人民邮电出版社 出版日期:2012.08 简介:<iOS5游戏开发>是一本iOS5游戏开发的基础入门书.全书使用通俗易懂的简单实例,带领读者经历构建经典动作游戏的整个周期.读者在本书的阅读过程中,将经历从开发概念.规划设计一直到编写实际代码的全过过程.本书的每一章,都将演示游戏创建过程中的一个逻辑步骤,读者将在其中学习如何创建Sprite,用触摸屏.重力感应器和屏幕游戏棒控制玩家角色等-

史上最难PHPer笔试题,40分就能月薪过万!附答案

请批判性的学习,欢迎大牛指正错误 1.有关PHP字符串的说法,不对的是:A.如果一个脚本的编码是 ISO-8859-1,则其中的字符串也会被编码为 ISO-8859-1.B.PHP的字符串在内部是字节组成的数组,用花括号访问或修改字符串对多字节字符集很不安全.C.substr().strpos().strlen().htmlentities() 处理字符串时依据的编码方式是相同的.D.一个布尔值 Boolean 的 true 被转换成 string 的 " 1 ",false 被转换成

应用程序开发之模仿史上最牛游戏(三)

声明:转载请注明http://www.cnblogs.com/letougaozao/p/3720679.html 关卡解锁 关卡状态的设计 一.解锁动画(点一下解锁) 解锁前后 监听touch end方法,使用涂层layer动画 -加入QuartzCore.framework框架 -动画包括哪些内容呢?(注意播放声音的代码) 1??整个关卡摇摆两下(旋转动画).并且变大(缩放动画) 2??搁层消失(直接移除) 1.封装一个动画组的方法 - (CAAnimationGroup *)animati

应用程序开发之模仿史上最牛游戏(二)

声明:转载请注明http://www.cnblogs.com/letougaozao/p/3708887.html 新建关卡控制器 自定义UIScrollView 增加UIPageView 每个关卡的View 整体效果展示 一.新建关卡控制器 1??拖线 -修改控制器class -修改控制器的View的class(方便设置背景) -装资源文件 -返回按钮 二.自定义UIScrollView 1??在初始化方法里面做一些事情 -添加四张背景图片 1.创建四个FullView 2.将这四个view加

史上最全的maven的pom.xml文件详解

史上最全的maven的pom.xml文件详解 http://www.cnblogs.com/hafiz/p/5360195.html <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h