文章发布于公号【数智物语】 (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
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
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)
2. Pretrained models for StanfordNLP
【https://github.com/stanfordnlp/stanfordnlp】
【总结】:本文为大家详细总结、概述了八个NLP的预处理模型。但现有的预处理模型不仅有这些,我们可以访问:https://paperswithcode.com/,学习更多的NLP预处理模型。
此外,以下是学习NLP的一些有用资源:
1. Natural Language Processing using Python course
2. Certified Program: NLP for Beginners
3. Collection of articles on Natural Language Processing(NLP)
推荐阅读:
星标我,每天多一点智慧
史上最详尽的NLP预处理模型汇总的更多相关文章
-
[转载]DOS循环:bat/批处理for命令详解 (史上虽详尽的总结和说明~~)
--本文来源于TTT BLOG: http://www.yoyotao.net/ttt/, 原文地址:http://www.yoyotao.net/ttt/post/139.html 前言: 虽然以前 ...
-
史上最全的 Java 新手问题汇总
史上最全的 Java 新手问题汇总 Java是目前最流行的编程语言之一——它可以用来编写Windows程序或者是Web应用,移动应用,网络程序,消费电子产品,机顶盒设备,它无处不在. 有超过30亿 ...
-
【转】 史上最详尽的平衡树(splay)讲解与模板(非指针版spaly)
ORZ原创Clove学姐: 变量声明:f[i]表示i的父结点,ch[i][0]表示i的左儿子,ch[i][1]表示i的右儿子,key[i]表示i的关键字(即结点i代表的那个数字),cnt[i]表示i结 ...
-
新手必备 | 史上最全的PyTorch学习资源汇总
目录: PyTorch学习教程.手册 PyTorch视频教程 PyTorch项目资源 - NLP&PyTorch实战 - CV&PyTorch实战 PyTorch论 ...
-
【干货】史上最全的Tensorflow学习资源汇总
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 作者:AI小昕 在之前的Tensorflow系列文章中,我们教大家 ...
-
(史上最全的ios源码汇总)
按钮类 按钮 Drop Down Control http://www.apkbus.com/android-106661-1-1.html 按钮-Circular M ...
-
痞子衡嵌入式:史上最强ARM Cortex-M学习资源汇总(持续更新中...)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M学习资源. 类别 资源 版本 短评 官方汇总 cortex-m-resources / ARM公司专家Josep ...
-
移动端IM开发者必读(二):史上最全移动弱网络优化方法总结
1.前言 本文接上篇<移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”>,关于移动网络的主要特性,在上篇中已进行过详细地阐述,本文将针对上篇中提到的特性,结合我们的实践经 ...
-
消息队列面试题、RabbitMQ面试题、Kafka面试题、RocketMQ面试题 (史上最全、持续更新、吐血推荐)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
随机推荐
-
idea 中利用maven创建java web 项目
转自:http://www.linuxidc.com/Linux/2014-04/99687.htm 本文主要使用图解介绍了使用IntelliJ IDEA 12创建Maven管理的Java Web项目 ...
-
Java分布式应用技术架构介绍
分布式架构的演进 系统架构演化历程-初始阶段架构
-
怎么录制Android或IOS动画教程
前一篇文章介绍了用DemoCreator制作Android视频教程,今天再介绍一种方法. 那就是用GifCam软件录制,此软件录制导出成Gif动画图片,可直接放在你的文章里面,效果比flash要好. ...
-
当JAVA集合移除自身集合元素时发生的诸多问题
一段代码目的是想删除集合中包括"a"字符串的集合项: public class TestForeach { public static void main(String[] arg ...
-
day12 函数对象,名称空间与作用域
""" 今日内容: 1.函数参数传值细节 2.三元表达式 3.列表及字典推导式 4.函数对象 5.名称空间与作用域 6.函数的嵌套定义初识 ""&qu ...
-
1、Nexus安装
1.nexus 下载地址: https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.14.5-02-bundle.tar.g ...
-
SpringMVC一例 是否需要重定向
在ASP.NET MVC下: return view("List") 和 return RedirectToAction("List") 百度知道的最佳答案: ...
-
1-hadoop中遇到的各种异常
本贴记录学习hadoop中遇到的各种异常, 包括推荐系统分类下的和本分类下的, 持续更新 1, 搭建ha时, active和standy之间不能*切换 经检查, 配置文件错误, 私钥配置 root ...
-
springMVC各个包下的作用
spring的jar各包作用spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下 ...
-
C# 读写redis C#读写实时数据库
本文将使用一个gitHub开源的组件技术来读写redis数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 git ...