简单介绍GPT-3背后的Transformer概念和NLP世界 - towardsdatascience


GPT-3是深度学习NLP模型家族的最新成员,并且可以说是功能最强大的成员,涵括NLP领域的发展成就:其中包括Transformer(2017),BERT(2018),GPT系列(2018、2019、2020)和T5(2019)。基于这些成就研究团体发展了更多变体和改进,在许多NLP基准任务上接近或超过了人类的表现。
 
NLP实现步骤
NLP的目标是构建用于理解语言并执行与语言相关的任务的系统(机器,算法)。由于语言在我们的社会中起着至关重要的作用,因此NLP的应用领域似乎是无限的。从在线购物到报税表,我们一直在阅读文字并采取后续措施。完美的NLP机器人(我们称其为Nate)将能够理解并采取类似人类的行动。为实现这一目标,Nate需要具备以下能力:

  • 知觉:这是Nate的耳朵和眼睛。它捕获现实世界中的声音或图像,并将其转换为计算机的输入信号(文本)。语音识别和光学字符识别(OCR)方法通常用于此部分。
  • 理解力:这是Nate的大脑。该组件负责提取信息并形成知识。从单词嵌入,LSTM到transformer,近年来已经开发了很多深度学习技术,以实现更高的理解水平。
  • 执行力:这就是Nate可以根据自己的理解采取行动和交流的方式。执行可能像做出二进制选择一样简单,也可能像编写文章一样复杂。

由于感知与transformer系列无关,因此我们仅讨论理解和执行组件。
理解和执行的复杂性将构成我们框架的两个维度。此外,单词,句子和文档将在两个维度上代表3个级别的不断增加的复杂性。
  • NLP的用例场景

实现传统语言任务包括情感分析,语音标记(POS),自然语言推理(NLI),识别文本蕴涵(RTE),问题和答案等。每个任务都有其自己的目标,基准数据集和评估指标(PapersWithCode具有一个很好的总结在这里)。有时将任务汇总在一起以对模型进行总体评估。GLUEBLEUSQuADRACE是最受欢迎的工具,而新模型通常以打破一项或多项测试的记录而自豪。
要为您的用例找到一个好的模型,检查在最能反映您用例需求的任务(或标准化测试)中模型的性能是有帮助的。
  • 增加约束

除了简单的二维框架,我们不应该忘记现实世界中的约束。它们迫使我们通过淘汰来缩小小工具的选择范围。一些最常见的是:
  1. 延迟:系统是否需要与最终用户快速反应?如果是这样,则您处于低延迟状态,这需要快速模型,并且可能排除了transformer系列中的一些笨拙的家伙。
  2. 计算能力:计算能力的问题有时是预算问题,有时是设计选择。但是无论如何,在iPhone和云TPU上运行相同的模型可能不是一个好主意。
  3. 准确性:如果期望该模型能够进行医学诊断,则我们对错误的容忍度应非常低,而始终应首选性能较高的模型。另一方面,对于新闻推荐者,90%和92%的准确性之间的差异可能根本不是问题。

  • 奥卡姆剃须刀

纵使如此,深度学习模型通常不是正确的解决方案。transformer系列非常适合句子和文档级别的理解。因此,如果您的用例只要求单词级的理解和执行,则可能您不需要transformer的笨重设备。
实际上,对于许多NLP用例,像TF-IDF这样的老式特征工程技术与随机森林结合起来可能已经足够了。尽管新技术可以带来巨大的准确性改善,但实际价值影响可能不值得尝试修改系统设计或扩大计算能力。
 
Transformer算法
为了使本文的长度合理,我们将讨论仅限于Huggingface.co 封装的Transformer中提供的模型。Huggingface.co不仅提供了20多种体系结构的源代码,还提供了90 种经过预训练的模型,其中不包括社区的贡献。他们还简化了界面,因此您可以在几行代码中试用GPT-2,或者使用简短的脚本微调T5。软件包的稳定性尚待充分测试,但是它们无疑为使用不同的NLP模型和尝试自己的想法提供了一个很好的起点。
  • 通用概念

深度学习技术已经在NLP中使用了一段时间,但是直到transformer诞生之后,我们才看到了显着的进步。Jay Alammar写了一系列精彩的文章来说明这些模型是如何工作的。撇开技术细节,我们可以注意到一些共同的要素,这些要素可能导致它们取得成功:
  1. 注意头Attention head:注意头是transformer系列的主要特征之一,自从第一篇《Transformer》论文首次提出(Vasvani 2017)以来就一直使用。预训练和微调范式允许知识在不同任务之间传递。它提供了一种高度灵活的方式来合并上下文信息(即,单词/标记如何与句子或文档中的其他单词链接),从而取代了递归解决方案(如RNN和LSTM)。
  2. 翻译学习Transfer learning:除翻译外,只有少量标签数据可用于指定的语言任务,而对于复杂的深度学习模型而言,这些数据还远远不够。预训练和微调范例通过允许不同任务之间的知识转移克服了这个问题。例如,训练前阶段的一般任务利用了大量未标记的数据,而微调阶段的特定任务则使用少量但有针对性和标记的数据。还探索了其他类型的知识翻译(T5,GPT-3),并被证明是非常有益的。
  3. 中断与重建策略:BERT具有巧妙的想法,可以使用空白练习对模型进行预训练,其中,首先通过掩盖几个单词(标记)中断文本,然后由模型进行重建。此练习在所有语言任务上都带来了显着的改进(跳跃)。从那时起,屏蔽词语的方法几乎已成为一种标准的训练前策略,从而带来了几种创新的变体(XLNet,RoBerta,BART)。

  • 架构

在架构方面,Transformer模型非常相似。大多数模型都采用与此领域开创者中任一种的相同架构,即最初的transformer:BERT和GPT。它们代表三种基本体系结构:编码器,解码器和两者。
  • 编码器(BERT):编码器通常是注意层和前馈层的堆栈,它们将输入文本序列编码为上下文隐藏状态。为了生成语言任务的不同输出格式,通常在编码器的顶部添加特定于任务的头。例如,使用因果语言模型(CLM,或简称为LM)来预测下一个单词,或者使用前馈(线性)层来生成分类标签。
  • 解码器(GPT):在许多方面,具有CLM磁头的编码器可以视为解码器。代替输出隐藏状态,连接解码器以自动回归的方式生成序列,从而将先前生成的单词用作输入以生成下一个单词。
  • 两者结合的Transformer:当编码器和解码器都以相同的结构存在时,就像在Transformer中一样,它们之间的区别最有意义。在编码器/解码器结构中,输入序列首先被“编码”为隐藏状态,然后被“解码”以生成输出序列。编码器和解码器甚至可以共享相同的权重,以提高训练效率。

模型的体系结构通常会限制其可以执行的任务类型:编码器(没有任何特定于任务的头)仅输出隐藏状态,这些状态可以作为功能集成到其他模型中。创建用于文本生成的解码器(或编码器+解码器),使其适合于机器翻译,摘要和抽象性问题与回答之类的任务。特定于任务的头在输出格式上提供了额外的灵活性,从而使其可以微调与分类相关的任务。
 
发展趋势
除了3种基本架构之外,还有一些创新的修改,我们将在稍后讨论。但是,总的来说,我认为对Transformer的研究遵循了一些大趋势。最有影响力的是:扩大规模。
深度学习模型变得越来越大,越来越消耗数据和计算能力。Transformer也不例外。由于BERT的不受监督的预训练释放了数千亿在线数据的力量,因此有可能训练更大的模型。最大的GPT-3具有1,750亿个参数,是最大的BERT的500倍以上。实际上,除了功能强大的少数人之外,几乎每个人都无法部署这样一个巨大的模型。
 
资源
Huggingface.co提供的Transformer套件非常易于使用。

from transformers import pipeline
classifier = pipeline('sentiment-analysis')
classifier('We are very happy to show you the Transformers library.')

您还可以找到有关预训练或微调不同型号的更多notebook examples 
除了Huggingface.co,我还在以下地方找到了非常有用的材料。


但公平地说,arXiv.org和Github可能仍然是最好的。