NLP领域的预训练模型(Transformer、BERT、GPT-2等)

2023-10-27

英文原文链接:

https://www.analyticsvidhya.com/blog/2019/03/pretrained-models-get-started-nlp/

1 介  绍

如今,自然语言处理(Natural Language Processing,NLP)应用已经变得无处不在。我似乎总是不经意间发现一些网站和应用程序,以这样的或那样的形式利用了自然语言处理技术。简而言之,现在就是涉足自然语言处理领域的绝佳时机。

自然语言处理应用能够快速增长,很大程度上要归功于通过预训练模型实现迁移学习的概念。在自然语言处理的背景下,迁移学习本质上是在一个数据集上训练模型,然后对该模型进行调整,以在不同的数据集上执行不同的自然语言处理功能。

这一突破,使得每个人都能够轻松地完成任务,尤其是那些没有时间、也没有资源从头开始构建自然语言处理模型的人们。对于想要学习或过渡到自然语言处理的初学者来讲,它也堪称完美。

 

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

  • 作者已尽其所能设计了基准模型。我们可以在自己的自然语言处理数据集上使用预训练模型,而不是从头构建模型来解决类似的自然语言处理问题。

  • 尽管仍然需要进行一些微调,但它已经为我们节省了大量的时间和计算资源。

在本文中,我将介绍一些顶级的预训练模型,你可以用它们来开始你的自然语言处理之旅,并复制该领域的最新研究成果。

如果你是自然语言处理的初学者,我建议你参加我们的热门课程:《NLP using Python》(《使用 Python 进行自然语言处理》):https://courses.analyticsvidhya.com/courses/natural-language-processing-nlp?utm_source=blog&utm_medium=top-pretrained-models-nlp-article*

1.2 本文介绍的预训练自然语言处理模型

我根据应用,将预处理模型分为三类:  

  • 多用途自然语言处理模型

    • ULMFiT

    • Transformer

    • Google BERT

    • Transformer-XL

    • OpenAI GPT-2

  • 词嵌入

    • ELMo

    • Flair

  • 其他预训练模型

    • StanfordNLP

2 多用途自然语言处理模型

多用途模型是自然语言处理领域的热门话题。这些模型为机器翻译、问答系统、聊天机器人、情绪分析等我们感兴趣的自然语言处理应用提供了动力。这些多用途自然语言处理模型的核心组件是语言建模的概念。

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

如果你是自然语言处理的爱好者,那么你将会喜欢这一节。现在,让我们深入研究这 5 个最先进的多用途自然语言处理模型框架吧。对于每个模型,我都提供了研究论文和预训练模型的链接。让我们继续探索吧!

2.1 ULMFiT

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

ULMFiT 由 fast.ai 的 Jeremy Howard 和 DeepMind 的 Sebastian Ruder 提出并设计。你可以说 ULMFiT 是去年启动迁移学习派对的发行版。

正如我们在本文中所述,ULMFiT 使用新的自然语言生成技术实现了最先进的结果。该方法包括在 Wikitext 103 数据集上训练的预处理语言模型进行微调,使其不会忘记以前所学的内容,从而将其微调为一个新的数据集。

在文本分类任务方面,ULMFiT 的性能优于许多最先进的技术。我喜欢 ULMFiT 的原因是,它只需要很少的例子就可以产生这些令人印象深刻的结果。让像你我这样的人更容易理解,并在我们的机器上实现它!

如果你好奇 ULMFiT 为什么叫这个名,我会告诉你,ULMFiT 其实就是 Universal Language Model Fine-Tuning(通用语言模型微调)的缩写。“Universal”(通用)这词用在这里非常贴切,因为这个框架几乎可以应用于任何自然语言处理任务。

 有关 ULMFiT 的更多信息,请参阅以下资源:
 

  • 《Tutorial on Text Classification (NLP) using ULMFiT and fastai Library in Python》(《在 Python 中使用 ULMFiT 和 fastai 库的文本分类(自然语言处理)教程》):https://www.analyticsvidhya.com/blog/2018/11/tutorial-text-classification-ulmfit-fastai-library/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article

  • ULMFiT 的预训练模型:https://www.paperswithcode.com/paper/universal-language-model-fine-tuning-for-text

  • 研究论文:https://arxiv.org/abs/1801.06146

2.2 Transformer

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

Transformer 架构是自然语言处理领域最近几乎所有主要发展的核心,2017 年由 Google 推出。当时,RNN 递归神经网络被用于语言任务,如机器翻译和问答系统。

这种 Transformer 架构的性能优于 RNN 和 CNN(卷积神经网络)。而且训练模型所需的计算资源也大为减少。对自然语言处理的每个人来讲,这种结果是双赢的局面。看看下面的对比:

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

“She found the shells on the bank of the river.”模型需要理解这里的“bank”是指河岸,而不是金融机构。Transformer 只需一步就能理解这一点。我建议你阅读下面给出链接的完整论文,以了解 Transformer 的工作原理。它会让你大吃一惊。

Google 去年发布了一款 Universal Transformer 的改进版。还有一个更新、更直观的版本,叫做 Transformer-XL,我们将稍后予以介绍。

 有关 Transformer 的更多信息,请参阅以下资源:
 

  • Google 的官方博客文章:https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html

  • Transformer 的预训练模型:https://www.paperswithcode.com/paper/attention-is-all-you-need

  • 研究论文:https://arxiv.org/abs/1706.03762

2.3 Google BERT

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

自 Google 公布他们的结果以来,BERT 就一直在掀起波澜,然后 Google 开源了它背后的代码。我们可以讨论这是否标志着“自然语言处理领域的新时代”,但毫无疑问的是,BERT 是一个非常有用的框架,可以很好地推广到各种自然语言处理任务。

 

BERT,是 Bidirectional Encoder Representations(双向编码器表示)的缩写,它从单词的两边(左边和右边)来考虑上下文。以前所有的努力方向,都是一次只考虑单词的一边,要么是左边,要么是右边。这种双向性有助于模型更好地理解使用单词的上下文。此外,BERT 的设计目标是能够进行多任务学习,也就是说,它可以同时执行不同的自然语言处理任务。

BERT 是第一个无监督、深度双向的自然语言处理模型预训练系统。它只使用纯文本语料库进行训练。

在发布的时候,BERT 在 11 个自然语言处理任务上取得了最先进的结果。这真是相当了不起的成就!你可以在短短几个小时内(在单个 GPU 上)使用 BERT 训练自己的自然语言处理模型(例如问答系统)。

 有关 BERT 的更多信息,请参阅以下资源:
 

  • Google 官方博客文章:https://ai.googleblog.com/2018/11/open-sourcing-bert-state-of-art-pre.html

  • BERT 预训练模型:https://www.paperswithcode.com/paper/bert-pre-training-of-deep-bidirectional#code

  • 研究论文:https://arxiv.org/pdf/1810.04805.pdf

2.4 Google Transformer-XL

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

从长远来看,Google 的这一发行版对自然语言处理领域来说可能是一个非常重要的版本。如果你是一名菜鸟,这个概念可能会变得有点棘手,所以我建议你多读几遍来掌握它。我还会在这一节中提供一些资源,帮助你开始入门 Transformer-XL。

想象一下,你正在读一本书,读到一半的时候,书中突然出现了某个单词或句子,而这些在这本书的开头都提到过。这时候,你我都能回忆起那些单词或句子指的是什么意思。但机器很难建立模拟长期依赖(long-term dependency)的模型,这是可以理解的。

如上所述,实现这一点的一种方法是使用 Transformer。但它们是在固定长度的上下文实现的。换句话说,如果使用这种方法,就没有多少灵活性而言。

而 Transformer-XL 很好地弥补了这一缺陷。它由 Google AI 团队开发,是一种新型的自然语言处理架构,可以帮助机器理解超出固定长度限制的上下文。Transformer-XL 比普通的 Transformer 要快上 1800 倍。

你可以通过 Google 发布的两个动图来了解这一区别:

transformer nlp

 

图1 .  普通 Transformer

transformer-xl

图2 . Transformer-XL

正如你现在所预测的,Transformer-XL 在各种语言建模基准 / 数据集上实现了最新的、最先进的结果。下面是他们网页上的一张表,展示了这一点: 

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

 有关 Transformer-XL 的更多信息,请参阅以下资源:
 

  • Google 官方博客文章:https://ai.googleblog.com/2019/01/transformer-xl-unleashing-potential-of.html

  • Transformer-XL 的预训练模型:https://www.paperswithcode.com/paper/transformer-xl-attentive-language-models

  • 研究论文:https://arxiv.org/abs/1901.02860

2.5 OpenAI GPT-2

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

目前这是一个颇有争议的条目。一些人可能会认为 GPT-2 的发布就是 OpenAI 的营销噱头。我当然理解他们的想法。然而,我还是认为,至少尝试一下 OpenAI 发布的代码还是很重要的。

 

首先,我得为那些不知道我在说什么的人们提供一些背景信息。OpenAI 在 2 月份的时候发表了一篇博文,声称他们已经设计了一个自然语言处理模型,表现非常出色,以至于他们担心被恶意使用,而没有选择发布完整版本。这当然引起了社区的关注。

GPT-2 经过训练后,可以预测 40GB 互联网文本数据的下一个出现的单词。这个框架也是基于 Transformer 的模型,该模型在 800 万个 Web 页面的数据集进行训练。他们在网站公布的结果令人震撼。这个模型能够根据我们输入的寥寥可数的句子就编织出一个完全清晰的故事,请看看下面的这个例子:

难以置信,对吧?

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

 有关 GPT-2 的更多信息,请参阅以下资源:
 

  • OpenAI 官方博客文章:https://openai.com/blog/better-language-models/

  • GPT-2 的预训练模型:https://github.com/openai/gpt-2

  • 研究论文:https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf

3 词嵌入

我们使用的大多数机器学习和深度学习算法都无法直接处理字符串和纯文本。这些技术要求我们必须先将文本数据转换为数字,然后才能执行任何任务(如回归和分类)。

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

你可以在下面的文章中,更深入地理解词嵌入、它的不同类型以及如何在数据集中使用它们。如果你不熟悉这个概念的话,我认为这份指南对你来说是必读的:  

  • 《An Intuitive Understanding of Word Embeddings: From Count Vectors to Word2Vec》(《直观理解词嵌入:从计数向量到 Word2Vec》:https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article

在这一节中,我们将介绍自然语言处理领域中两个最先进的词嵌入。我还提供了教程的链接,这样你就可以对每个主题有实际的理解。

3.1 ELMo

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

不,这个 ELMo 可不是《Sesame Street》(《芝麻街》,美国芝麻街工作制坐坐的一档著名的儿童教育电视节目)的角色。但这个 ELMo(是 Embedding from LanguageModels 的缩写)在构建自然语言处理模的上下文非常有用。

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

 

让我们花点时间来理解 ELMo 的工作原理。回忆一下我们之前讨论过的双向语言模型。从本文中得到的提示:“ELMo 词向量是在双层双向语言模型(bidirectional language model,biLM)智商计算的。这个 biLM 模型有两层堆叠在一起。每层有两个通道:前向通道和后向通道。

 

ELMo 词向量表示(word representations)考虑用于计算词嵌入的完整输入语句。因此“read”这个词在不同的上下文中有不同的 ELMo 向量。这点与旧词嵌入截然不同,对旧词嵌入而言,无论单词在什么上下文中使用,这个单词都会分配到相同的向量。

 有关 ELMo 更多的信息,请参阅以下资源:
 

  • 《Step-by-Step NLP Guide to Learn ELMo for Extracting Features from Text》(《自然语言处理入门指南:学习 ELMo 从文本中提取特征》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

  • 用于预训练模型的 GitHub 存储库:https://github.com/allenai/allennlp/blob/master/tutorials/how_to/elmo.md

  • 研究论文:https://arxiv.org/pdf/1802.05365.pdf

3.2 Flair

GitHub 项目地址:https://github.com/zalandoresearch/flair

Flair 并不完全是词嵌入,而是词嵌入的组合。我们可以称 Flair 更多的是一个自然语言处理程序库,它结合了 GloVe、BERT、EMLo 等嵌入。Zalando Research 的优秀人员开发并开源了 Flair。

 

该团队已经为以下自然语言处理任务发布了几个预训练模型:  

  • Name-Entity Recognition (NER,名称 - 实体识别)

  • Parts-of-Speech Tagging (PoS,词性标注)

  • 文本分类

  • 训练自定义模型

还不确定?那么,看下面这张比较表就会让你明白:

“Flair Embedding”是封装在 Flair 库中的签名嵌入。它由上下文字符串嵌入提供支持。你应该自诩阅读这篇文章《Introduction to Flair for NLP: A Simple yet Powerful State-of-the-Art NLP Library》(《Flair 简介:简单而强大的,最先进的自然语言处理库》)来了解支持 Flair 的核心组件:https://www.analyticsvidhya.com/blog/2019/02/flair-nlp-library-python/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article

我特别喜欢 Flair 的地方就是它能够支持多种语言。如此多的自然语言处理版本都只做英语方面的任务。如果自然语言处理想在全球范围内获得吸引力的话,我们就必须超越这一点!

 有关 Flair 更多的信息,请参阅以下资源:
 

  • 《Introduction to Flair for NLP: A Simple yet Powerful State-of-the-Art NLP Library》(《Flair 简介:简单而强大的,最先进的自然语言处理库》):https://www.analyticsvidhya.com/blog/2019/02/flair-nlp-library-python/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article

  • Flair 的预训练模型:https://github.com/zalandoresearch/flair

其他预训练模型

4 StanfordNLP

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

说到将自然语言处理扩展到英语之外,现在有一个已设置基准的库了。据作者声称,StandfordNLP 支持超过 53 种语言,这当然引起了我们的关注。

 

我们的团队是第一批使用该库并在真实数据集上发布结果的团队之一。我们研究了一下,发现 StandfordNLP 确实为非英语语言中应用自然语言处理技术提供了很多可能性,比如印地语、汉语和日语。

StandfordNLP 是一个经过预训练的、最先进的自然语言处理模型的集合。 这些模型并不只是仅在实验室内测试——在 2017 年、2018 年的 CoNLL 竞赛作者就曾使用 StandfordNLP 参赛。在 StandfordNLP 中打包的所有预训练自然语言处理模型都是基于 PyTorch 构建的,并且可以在你自己的注释数据上进行训练和评估。

我们认为,你应该考虑 StandfordNLP 的两个主要原因是:  

  • 用于执行文本分析的完整神经网络管道,包括:

    • 标记化(Tokenization)

    • 多词标记扩展(Multi-word token (MWT) expansion)

    • 词性还原(Lemmatization)

    • 词性和词形特征标记(Parts-of-speech (POS) and morphological feature tagging)

    • 依存句法分析(Dependency Parsing)

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

 有关 StandfordNLP 的更多信息,请参阅以下资源:
 

  • 《Introduction to StanfordNLP: An Incredible State-of-the-Art NLP Library for 53 Languages (with Python code)》(《StandfordNLP 简介:令人难以置信的、最先进的自然语言处理库,支持 53 种语言(使用 Python 实现)》):https://www.analyticsvidhya.com/blog/2019/02/stanfordnlp-nlp-library-python/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article

  • StandfordNLP 预训练模型:https://github.com/stanfordnlp/stanfordnlp

5 尾  注

本文绝不是预训练自然语言处理模型的详尽清单。还有更多可用的模型,你可以在这个网站上查看其中的一些:https://paperswithcode.com

下面是学习自然语言处理的一些有用资源:  

  • 《Natural Language Processing (NLP) Using Python》(《课程:使用 Python 进行自然语言处理(NLP)》):https://courses.analyticsvidhya.com/courses/natural-language-processing-nlp?utm_source=blog&utm_medium=top-pretrained-models-nlp-article

  • Certified Program: NLP for Beginners(认证项目:NLP 初学者):https://courses.analyticsvidhya.com/bundles/nlp-combo?utm_source=blog&utm_medium=top-pretrained-models-nlp-article

  • 关于自然语言处理的文章集:https://www.analyticsvidhya.com/blog/category/nlp/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NLP领域的预训练模型(Transformer、BERT、GPT-2等) 的相关文章

随机推荐

  • ThreadLocal 的工作原理

    ThreadLocal 是线程的内部数据的存储类 通过它可以在指定线程中存储数据 数据存储以后只有在指定的线程中才能获取到对应的存储的数据 其他线程无法获取到数据 下面通过一个小块代码来分析一下它的使用 private ThreadLoca
  • C++替换string中的\“为“

    1 背景 有一个项目需要我解析后台服务器返回的XML数据 但是因为后台Http接口返回的数据包是Json XML只是其中的一部分 如下图所示 可见 XML数据中 节点的属性数据都是 这实际上是不符合XML规范的 也就无法正常解析 需要我自己
  • 原数组转稀疏数组,稀疏数组转原数组,稀疏数组写入磁盘,从磁盘恢复原数组

    代码实现 import java io BufferedReader import java io File import java io FileReader import java io FileWriter import java u
  • JavaScript 也可以面向对象

    由于js语言本身语法的灵活性 使得在js程序中出现了各种各样的代码风格 但也因为如此 导致了代码的可读性和可维护性大大降低 特别随着项目的不断更新 js代码的不断更新 到后期时甚至连自己的代码都不知然了 因此确定一种好的代码风格是很有必要的
  • FTP,Telnet,SMTP,DNS,TFTP,WWW,POP采用的是TCP协议还是UDP协议?各自默认的端口号是多少?

    FTP 采用TCP协议 默认端口21 TELNET采用TCP协议 默认端口23 SMTP采用UDP协议 默认端口25 DNS采用UDP协议 默认端口53 TFTP采用UDP协议 默认端口69 WWW采用TCP协议 默认端口80 POP采用T
  • C++函数重载 (初学)

    恶补C 中 看视频学到了函数重载 放一些笔记以备后面回顾 函数重载规则 1 函数名相同 2 参数个数不同 参数的类型不同 参数个数不同 参数顺序不同 均可构成重载 3 返回值类型不同则不可以构成重载 如 int p int a 和 floa
  • 【信息收集】指纹识别

    一 指纹识别介绍 指纹收集是信息收集非常重要的一个环节 通常包括系统 中间件 web程序 防火墙四个方面 比如在web程序指纹中的cms识别可以直接查找已有的漏洞进行利用 其他方面也都有助于下一步的攻击操作 先来几个在线工具 yunsee
  • Vue自定义指令 传递参数

    在项目开发过程中 难免会遇到各种功能需要使用Vue自定义指令 directive 去实现 关于directive的使用方式这里就不做过多的介绍了 Vue官方文档中说的还是听明白的 今天讲讲在使用Vue自定义指令过程中 1 怎么数据传递到自定
  • Idea 设置类和方法的注释(获取参数)

    Idea 添加注释 类注释 方法注释 类注释 方法注释 类注释 File Setting Editor File and Code Templates Class 注释模板 description author fqtang time DA
  • nginx下location的root和alias指令配置总结

    Nginx配置中location root和alias的关系一直很让人困惑 查询好多资料也没能搞明白 于是自己进行了实际操作 总结如下 1 root指令 说明 在location和root上 后面可以带 也可以不带 效果一样 tree da
  • centos7 RPM包之rpm命令

    RPM包与源码包的区别 1 软件包分类 源码包 C源代码包 rpm包 编译之后的二进制包 2 源码包 优点 开源 可以自由选择所需功能 可看源代码 卸载方便 直接删除安装位置 缺点 安装步骤过多 编译时间过长 3 RPM包 优点 使用简单
  • shell 输出7的倍数

    题目链接 题目描述 写一个 bash脚本以输出数字 0 到 500 中 7 的倍数 0 7 14 21 的命令 最 的语言就是shell了 注意点 数学运算用 expr 命令 且 乘法 用 在前面进行转义 变量前得加个 bin bash l
  • GETH的安装和使用(Windows)

    目录 一 Geth介绍 二 Geth安装 1 下载安装 2 配置环境变量 三 Geth私有链搭建 1 创建创世块文件 2 初始化区块链 3 启动私有节点 四 账户交易 1 创建账户 2 挖矿操作 3 查看区块和奖励 4 转账交易 一 Get
  • openGL之API学习(八十)狭义的游戏引擎的定义

    狭义的游戏引擎的定义 wiki 图形渲染 粒子系统 物理系统 骨骼系统 角色系统 动画系统 场景管理 可视剔除 层次细节 界面模块 脚本接口 纹理模型资源管理 音频功能 网络模块 AI模块 视频功能 更新功能 多核支持 外围工具链
  • Cannot find template location: classpath:/templates/(please add some templates or check your Thymel)

    一 异常信息 Cannot find template location classpath templates please add some templates or check your Thymeleaf configuration
  • C++ shared_ptr和std::move

    以shared ptr为参数调用std move并用等于号时 会调用共享指针的移动构造函数 从而使原共享指针失效 include
  • 目标检测——Detectron2的学习笔记

    1 Detectron2的官方地址 https github com facebookresearch detectron2
  • ssh root账号远程连接出现Permission denied错误

    ssh root账号远程连接出现Permission denied错误 网上搜这个问题出来的问题大多都是修改sshd config中的PermitRootLogin yes 但在我修改之后依然无法登陆 搜到了另一个不知道原因的方法 把你要远
  • 李彦宏被《时代》周刊评为全球AI领袖

    北京时间9月7日晚 时代 周刊发布了首届全球百大AI人物 百度创始人 董事长兼首席执行官李彦宏被评为全球AI领袖 时代 肯定了李彦宏对AI的长期投入及百度在AI方面取得的多项成就 李彦宏是中国最杰出的未来主义者 长期投身于AI发展的浪潮 A
  • NLP领域的预训练模型(Transformer、BERT、GPT-2等)

    英文原文链接 https www analyticsvidhya com blog 2019 03 pretrained models get started nlp 1 介 绍 如今 自然语言处理 Natural Language Pro