Transformers 自然语言处理(三)(1)https://developer.aliyun.com/article/1514213
GPT-3 的微调
您可以将笔记本分成两个独立的笔记本:一个用于数据准备,另一个用于微调。
第 4 步:创建一个操作系统环境
微调 过程中的第 4 步 为 API 密钥创建了一个os
环境:
import openai import os os.environ['OPENAI_API_KEY'] =[YOUR_KEY] print(os.getenv('OPENAI_API_KEY'))
第 5 步:微调 OpenAI 的 Ada 引擎
第 5 步 触发了使用数���准备后保存的 JSONL 文件来微调 OpenAI Ada 引擎:
!openai api fine_tunes.create -t "kantgpt_prepared.jsonl" -m "ada"
OpenAI 有很多请求。
如果您的流程中断,OpenAI 将指示如何继续微调。执行 fine_tunes.follow 指令:
!openai api fine_tunes.follow -i [YOUR_FINE_TUNE]
第 6 步:与微调模型互动
第 6 步 是与微调模型互动。提示是接近伊曼纽尔·康德可能会说的内容的序列:
!openai api completions.create -m ada:[YOUR_MODEL INFO] "Several concepts are a priori such as"
在您的微调任务结束时,OpenAI 经常显示运行完成任务与[YOUR_MODEL INFO]
的指令。您可以复制并粘贴到一个单元格中(在命令行前加上"!"
)或将您的[YOUR_MODEL INFO]
插入到下一个单元格。
完成结果相当令人信服:
Several concepts are a priori such as the term freedom and the concept of _free will_.substance
我们已经对 GPT-3 进行了微调,这显示了理解Transformers和设计具有 API 的人工智能流程的重要性。让我们看看这如何改变 AI 专家的角色。
Industry 4.0 人工智能专家的角色
简而言之,工业 4.0 开发人员的角色是成为跨学科 AI 专家。开发人员、数据科学家和 AI 专家将逐步学习有关语言学、业务目标、专业专业知识等更多领域。工业 4.0 AI 专家将引导团队具备实践的跨学科知识和经验。
在实施Transformers时,人类专家在三个领域中是必不可少的:
- 道德和伦理
一个工业 4.0 的 AI 专家确保在实施类似于人类的Transformers时执行道德和伦理实践。例如,欧洲法规严格要求必要时向用户解释自动决策。美国有反歧视法律保护公民免受自动偏见影响。 - 提示和响应
用户和 UI 开发人员将需要工业 4.0 AI 专家解释如何为 NLP 任务创建正确的提示,展示Transformers模型如何执行任务,并验证响应。 - 质量控制和理解模型
当模型即使调整超参数后仍不如预期时会发生什么?我们将在第十四章《解释黑匣子Transformers模型》中更深入地探讨这类问题。
初步结论
初步结论可分为两类:事实和虚构。
一个事实是,OpenAI 拥有全球最强大的 NLP 服务之一。其他事实包括:
- OpenAI 引擎是强大的零样本引擎,不需要寻找各种Transformers模型,也不需要预训练和微调。
- 用于训练模型的超级计算机是独特的
- 如果提示设计良好,我们可以获得令人惊讶的准确答案
- 在本章中实施 NLP 任务只需要拷贝和粘贴操作,任何软件初学者都可以执行
许多人相信 AI 将取代数据科学家和 AI 专家。这是真的吗?在回答这个问题之前,首先问问自己关于本章运行的例子的以下问题:
- 我们如何知道一个句子是不正确的?
- 我们如何确定一个答案是正确的,而不需要我们人类阅读和确认?
- 引擎如何知道这是一个语法校对任务?
- 如果响应不正确,我们如何理解发生了什么,以帮助改进提示或在设计良好的人机界面中恢复手动模式?
实际情况是人类需要手动干预回答这些问题,通过规则基础、质量受控的自动流水线和许多其他工具。
事实令人信服。在许多情况下,使用Transformers运行 NLP 任务只需要很少的开发。
人类仍然是必需的。OpenAI 引擎不是为了取代人类,而是帮助他们执行更多高水平令人满意的任务。现在你可以驾驶喷气式飞机而不必自己建造!
我们需要回答本节提出的激动人心的问题。所以让我们现在探索你在迈向 AI 未来的精彩工业 4.0 角色中的新奇旅程!
让我们总结本章并继续下一个探索!
摘要
在本章中,我们发现了超级计算机上训练数十亿参数的Transformers模型的新时代。OpenAI 的 GPT 模型正在将 NLU 推动到大多数 NLP 开发团队的视野之外。
我们看到了 GPT-3 零-shot 模型如何通过 API 进行许多 NLP 任务,甚至可以直接在线进行而无需 API。Google 翻译的在线版本已经为 AI 的主流在线使用铺平了道路。
我们探索了 GPT 模型的设计,这些模型都是构建在原始Transformers的解码器堆叠上的。掩码式注意力子层延续了从左到右训练的思想。然而,计算的绝对能力和随后的自注意力子层使其非常高效。
然后,我们使用 TensorFlow 实现了一个包含 345M 个参数的 GPT-2 模型。目标是与训练模型互动,看看我们能达到什么程度。我们看到所提供的上下文条件了输出。然而,当输入特定来自Kant
数据集的输入时,结果并没有达到预期的结果。
我们对一个包含 117M 个参数的定制数据集进行了训练的 GPT-2 模型。与这个相对较小的训练模型的交互产生了令人着迷的结果。
我们使用 OpenAI 的 API 在线运行了 NLP 任务,并对 GPT-3 模型进行了微调。本章展示了完全预训练的Transformers及其引擎可以在很少有工程师的帮助下自动完成许多任务。
这是否意味着用户将不再需要 AI NLP 开发人员、数据科学家和 AI 专家?而是用户只需将任务定义和输入文本上传到云Transformers模型中,然后下载结果?
不,一点也不意味着。工业 4.0 数据科学家和 AI 专家将演变为强大 AI 系统的领航员。他们的角色将越来越重要,以确保输入是合乎道德和安全的。这些现代化的 AI 飞行员还将了解Transformers是如何构建的,并调整 AI 生态系统的超参数。
在下一章《将Transformers应用于法律和金融文件进行 AI 文本摘要》中,我们将将Transformers模型推到极限,作为多任务模型并探索新的领域。
问题
- 一种零-shot 方法只需训练参数一次。(True/False)
- 运行零-shot 模型时进行梯度更新。(True/False)
- GPT 模型只有一个解码器堆叠。(True/False)
- 在本地机器上训练包含 117M 个参数的 GPT 模型是不可能的。(True/False)
- 不能使用特定数据集训练 GPT-2 模型。(True/False)
- 不能将 GPT-2 模型调节为生成文本。(True/False)
- 一个 GPT-2 模型可以分析输入的上下文并生成完成的内容。(True/False)
- 我们在少于 8 个 GPU 的机器上不能与包含 345M 个参数的 GPT 模型互动。(True/False)
- 拥有 285,000 个 CPUs 的超级计算机并不存在。(True/False)
- 拥有成千上万个 GPU 的超级计算机在 AI 中起着决定性的作用。(True/False)
参考资料
- OpenAI 和 GPT-3 引擎:
beta.openai.com/docs/engines/engines
BertViz
由 Jesse Vig 创建的 GitHub 仓库:github.com/jessevig/bertviz
- OpenAI 的超级计算机:
blogs.microsoft.com/ai/openai-azure-supercomputer/
- Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin, 2017, Attention is All You Need:
arxiv.org/abs/1706.03762
- Alec Radford, Karthik Narasimhan, Tim Salimans, Ilya Sutskever, 2018, Improving Language Understanding by Generative Pre-Training:
cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf
- Jacob Devlin, Ming-Wei Chang, Kenton Lee, 和 Kristina Toutanova, 2019, BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding:
arxiv.org/abs/1810.04805
- Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, Ilya Sutskever, 2019, Language Models are Unsupervised Multitask Learners:
cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf
- Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplany, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, Dario Amodei, 2020, Language Models are Few-Shot Learners:
arxiv.org/abs/2005.14165
- Alex Wang, Yada Pruksachatkun, Nikita Nangia, Amanpreet Singh, Julian Michael, Felix Hill, Omer Levy, Samuel R. Bowman, 2019, SuperGLUE: A Stickier Benchmark for General-Purpose Language Understanding Systems:
w4ngatang.github.io/static/papers/superglue.pdf
- Alex Wang, Yada Pruksachatkun, Nikita Nangia, Amanpreet Singh, Julian Michael, Felix Hill, Omer Levy, Samuel R. Bowman, 2019, GLUE: A Multi-Task Benchmark and Analysis Platform for Natural Language Understanding:
arxiv.org/pdf/1804.07461.pdf
- OpenAI GPT-2 GitHub 仓库:
github.com/openai/gpt-2
- N. Shepperd 的 GitHub 仓库:
github.com/nshepperd/gpt-2
- Common Crawl 数据:
commoncrawl.org/big-picture/
加入我们书籍的 Discord 空间
加入书籍的 Discord 工作空间,与作者进行每月的 问答环节:
第八章:将Transformers应用于法律和金融文件以进行人工智能文本摘要
我们在前七章中探索了几个Transformers生态系统的架构训练、微调和使用。在第七章,超人类Transformers的崛起与 GPT-3 引擎中,我们发现 OpenAI 已经开始尝试零样本模型,它们不需要微调、不需要开发,并且可以用几行代码实现。
这样一种演进的基本概念在于Transformers模型如何努力教会机器如何理解语言,并以类似人类的方式表达自己。因此,我们已经从训练模型转变为教会机器语言。
Raffel等人(2019)设计了一个基于简单断言的Transformers元模型:每个自然语言处理问题都可以表示为文本到文本函数。每种类型的自然语言处理任务都需要一些文本上下文,生成一些形式的文本响应。
任何自然语言处理任务的文本到文本表示都提供了一个独特的框架来分析Transformers的方法和实践。这一思想是,通过文本到文本的方法,在训练和微调阶段,Transformers可以通过迁移学习学习一种语言。
Raffel等人(2019)将这种方法命名为Text-To-Text Transfer Transformer。这 5 个 T 成为了T5,一个新模型诞生了。
我们将从 T5 Transformers模型的概念和架构开始本章。然后我们将运用 T5 来总结使用 Hugging Face 模型的文件。
最后,我们将文本到文本的方法转化为 GPT-3 引擎使用的展示和上下文过程。令人惊叹的,虽然不完美,零样本响应超过了人类所能想象的任何事物。
本章涵盖以下主题:
- 文本到文本Transformers模型
- T5 模型的架构
- T5 方法论
- 从训练到学习的Transformers模型的演进
- Hugging Face 的Transformers模型
- 实现一个 T5 模型
- 对法律文本进行摘要
- 对金融文本进行摘要
- Transformers模型的限制
- GPT-3 的使用
我们的第一步将是探索由Raffel等人(2019)定义的文本到文本的方法论。
设计一个通用的文本到文本模型
谷歌的自然语言处理技术革命始于Vaswani等人(2017)的研究,即 2017 年的原始Transformers。《注意力就是一切》颠覆了 30 多年的人工智能信仰,即循环神经网络和卷积神经网络应用于自然语言处理任务。它将我们从自然语言处理/理解的石器时代带到了 21 世纪,这是一个早就应该发生的演进。
第七章,超人类Transformers的崛起与 GPT-3 引擎,总结了谷歌的Vaswani等人(2017)原始Transformers和 OpenAI 的Brown等人(2020)GPT-3 Transformers之间涌现出的第二次革命。原始Transformers专注于性能,以证明注意力是我们处理自然语言处理/理解任务所需要的唯一因素。
OpenAI 的第二次革命,通过 GPT-3,着重将 transformer 模型从微调的预训练模型提升到无需微调的 few-shot 训练模型。第二次革命是为了证明机器可以学习一种语言,并将其应用于下游任务,就像我们人类一样。
要理解 T5 模型代表什么,理解这两次革命是至关重要的。第一次革命是注意力技术。第二次革命是教会机器理解语言(NLU),然后让它像我们一样解决 NLP 问题。
2019 年,Google 的想法与 OpenAI 的想法一致,即将 transformers 从技术考虑的层面提升到自然语言理解的抽象水平。
这些革命变得颠覆性。是时候平静下来,忘记源代码和机器资源,以更高的层次分析 transformers。
Raffel等人(2019)设计了一个概念上的文本到文本模型,然后加以实施。
让我们来看看第二次转换革命的代表:抽象模型。
文本到文本 transformer 模型的崛起
Raffel等人(2019)以一种目标为先驱们开始了一段旅程:探索统一文本到文本 transformer 的迁移学习的极限。该团队强调他们使用的这种方法从一开始就不会修改原始 Transformer 的基本架构。
在那时,Raffel等人(2019)想要关注概念,而不是技术。因此,他们对产生最新的 transformer 模型没有兴趣,正如我们经常看到的所谓的具有n参数和层的灵丹妙药 transformer 模型。这一次,T5 团队想要找出 transformers 在理解语言方面有多好。
人类学习一种语言,然后通过迁移学习将这些知识应用于各种 NLP 任务。T5 模型的核心概念是寻找一个可以像我们一样做事情的抽象模型。
当我们交流时,我们总是以一个序列(A)开头,然后是另一个序列(B)。B 又成为另一个序列的开始,如图 8.1所示:
图 8.1:沟通的序列到序列的表示
我们还通过音乐与有组织的声音进行交流。我们通过舞蹈与有组织的身体动作进行交流。我们通过绘画以形状和颜色进行表达。
我们通过称为“文本”的一个词或一组词进行语言交流。 当我们试图理解一段文本时,我们在所有方向上都会注意到句子中的所有词。我们尝试衡量每个术语的重要性。当我们不理解一个句子时,我们会专注于一个词并查询句子中的其余关键词,以确定它们的值和我们必须支付的注意力。这定义了 transformer 的注意力层。
花几秒钟,让这个思想深入。看起来似乎非常简单,对吧?然而,推翻围绕 RNN、CNN 及其相应思维过程的旧信念花了 35+ 年的时间!
观察 T5 学习、进步,甚至有时帮助我们更好地思考,这非常迷人!
同时关注序列中所有标记的注意力层的技术革命导致了 T5 概念的革命。
T5 模型可以概括为一个Text-To-Text Transfer Transformer。因此,每个 NLP 任务都被表达为一个文本到文本的问题来解决。
一个前缀而不是任务特定格式
Raffel 等人(2019)仍然有一个问题需要解决:统一任务特定格式。想法是找到一种方法,使每个提交给 transformer 的任务都有一个输入格式。这样,模型参数将用一个文本到文本格式训练所有类型的任务。
谷歌 T5 团队提出了一个简单的解决方案:在输入序列中添加前缀。如果没有一位早已被遗忘的天才发明了前缀,我们在许多语言中都需要成千上万个额外的词汇。例如,如果我们不使用“pre”作为前缀,我们就需要找到词来描述预付款、史前的、前寒武纪等成千上万的其他词。
Raffel 等人(2019)提议向输入序列添加一个前缀。T5 前缀不仅仅是一些 transformer 模型中用于分类的标记或指示器,比如[CLS]
。相反,T5 前缀包含了一个 transformer 需要解决的任务的本质。前缀传达意义,如下面的例子所示,还有其他例子:
translate English to German: + [sequence]
用于翻译,就像我们在第六章的使用 Transformer 进行机器翻译中所做的那样cola sentence: + [sequence]
用于语言可接受性语料库(CoLA),就像我们在第三章的微调 BERT 模型时使用 BERT transformer 模型时所做的那样stsb sentence 1:+[sequence]
用于语义文本相似性基准。自然语言推理和蕴含是相似的问题,如第五章的带 Transformer 的下游 NLP 任务中所述summarize + [sequence]
用于文本摘要问题,就像我们在本章的使用 T5 进行文本摘要部分中所做的那样
我们现在已经得到了一个统一的格式,用于广泛的 NLP 任务,在图 8.2中表达:
图 8.2:统一 transformer 模型的输入格式
统一的输入格式导致了一个Transformers模型,无论要解决什么问题,在T5中都会产生一个结果序列。许多自然语言处理任务的输入和输出已经被统一,如图 8.3所示:
图 8.3:T5 文本到文本框架
统一的处理流程使得可以在广泛的任务中使用相同的模型、超参数和优化器。
我们已经通过了标准的文本到文本输入输出格式。现在让我们来看看 T5 Transformers模型的架构。
T5 模型
Raffel等人(2019 年)专注于设计一个标准的输入格式以获得文本输出。Google T5 团队不希望尝试从原始 Transformer 派生的新架构,如仅包含编码器层的 BERT 样式或仅包含解码器层的 GPT 样式。相反,团队专注于以标准格式定义自然语言处理任务。
他们选择使用我们在第二章中定义的原始 Transformer 模型,正如我们在图 8.4中所看到的:
图 8.4:T5 使用的原始 Transformer 模型
Raffel等人(2019 年)保留了大部分原始 Transformer 架构和术语。但是,他们强调了一些关键方面。此外,他们进行了一些轻微的词汇和功能性的更改。以下列表包含 T5 模型的一些主要方面:
- 编码器和解码器保留在模型中。编码器和解码器层变成了“块”,子层变成了包含自注意层和前馈网络的“子组件”。在类似 LEGO^®的语言中使用“块”和“子组件”一词,使您可以组装“块”、“片”和组件来构建您的模型。Transformers组件是您可以以许多方式组装的标准构建块。一旦您理解了我们在第二章中介绍的基本构建块,您就可以理解任何Transformers模型的运作方式。
- 自注意力是“无序的”,意味着它对集合进行操作,正如我们在第二章中看到的那样。自注意力使用矩阵的点积,而不是递归。它探索序列中每个单词与其他单词之间的关系。在进行点积之前,将位置编码添加到单词的嵌入中。
- 原始 Transformer 将正弦和余弦信号应用于Transformers。或者它使用了学习到的位置编码。T5 使用相对位置编码,而不是将任意位置添加到输入中。在 T5 中,位置编码依赖于自注意力的扩展,以进行成对关系的比较。更多内容,请参见本章的参考文献中的Shaw等人(2018 年)。
- 位置编码在模型的所有层中共享并重新评估。
我们通过文本对文本方法定义了 T5 Transformers模型输入的标准化。
现在让我们使用 T5 来总结文档。
使用 T5 进行文本摘要
NLP 总结任务提取了文本的简洁部分。本节将首先介绍我们在本章中将要使用的 Hugging Face 资源。然后我们将初始化一个 T5-large Transformers模型。最后,我们将看到如何使用 T5 来总结任何文档,包括法律和公司文件。
让我们开始介绍 Hugging Face 的框架。
Hugging Face
Hugging Face 设计了一个高级别实现Transformers的框架。我们在第三章中使用 Hugging Face 来微调 BERT 模型,并在第四章中训练了一个 RoBERTa 模型。
为了扩展我们的知识,我们需要探索其他方法,例如第六章中的 Trax 和第七章中的 OpenAI 模型。本章将再次使用 Hugging Face 框架,并更多地解释在线资源。我们以 GPT-3 引擎的独特潜力结束本章。
Hugging Face 在其框架内提供了三个主要资源:模型、数据集和指标。
Hugging Face 变换资源
在本小节中,我们将选择将在本章中实现的 T5 模型。
可以在 Hugging Face 模型页面上找到各种模型,就像我们在图 8.5中看到的那样:
图 8.5:Hugging Face 模型
在这个页面上,huggingface.co/models
,我们可以搜索一个模型。在我们的情况下,我们正在寻找t5-large,一个我们可以在 Google Colaboratory 中顺利运行的模型。
我们首先键入T5
来搜索 T5 模型,并获取我们可以选择的 T5 模型列表:
图 8.6:搜索 T5 模型
我们可以看到原始 T5 Transformers中提供了几种模型,其中包括:
- 基础,是基线模型。它的设计与 BERT[BASE]类似,有 12 层和大约 2.2 亿个参数
- small,一个更小的模型,有 6 层和 6 千万参数
- large的设计类似于具有 12 层和 7.7 亿参数的 BERT[LARGE]
- 3B和11B使用 24 层的编码器和解码器,大约有 28 亿和 110 亿个参数
要了解更多关于 BERT[BASE]和 BERT[LARGE]的描述,您现在或以后可以花几分钟在第三章中查看这些模型。
在我们的情况下,我们选择t5-large:
图 8.7:如何使用 Hugging Face 模型
图 8.7 展示了我们将要编写的代码中如何使用该模型。我们还可以查看模型中的文件列表和基本配置文件。我们在本章的 初始化 T5-large transformer 模型 部分将查看配置文件。
Hugging Face 还提供了数据集和指标:
- 数据集可用于训练和测试您的模型:
huggingface.co/datasets
- 指标资源可用于测量您的模型的性能:
huggingface.co/metrics
数据集和指标是自然语言处理的经典方面。在本章中,我们不会实现这些数据集或指标。相反,我们将专注于如何实现任何文本摘要。
让我们从初始化 T5 transformer 模型开始。
初始化 T5-large transformer 模型
在本小节中,我们将初始化一个 T5-large 模型。打开以下笔记本,在本章的 GitHub 目录中找到 Summarizing_Text_with_T5.ipynb
。
让我们开始使用 T5!
开始使用 T5
在本小节中,我们将安装 Hugging Face 的框架,然后初始化一个 T5 模型。
我们首先安装 Hugging Face 的 transformers:
!pip install transformers
注意:Hugging Face transformers 不断演进,更新库和模块以适应市场。如果默认版本不起作用,您可能需要使用 !pip install transformers==[与笔记本中其他功能兼容的版本]
固定一个版本。
我们固定了 sentencepiece
的版本为 0.1.94
,以尽可能使使用 Hugging Face 的笔记本保持稳定:
!pip install sentencepiece==0.1.94
Hugging Face 有一个可以克隆的 GitHub 仓库。但是,Hugging Face 的框架提供了一系列我们可以实现的高级 transformer 函数。
我们可以选择在初始化模型时显示模型的架构或不显示:
display_architecture=False
如果将 display_architecture
设置为 True
,则将显示编码器层、解码器层和前向子层的结构。
程序现在导入了 torch
和 json
:
import torch import json
从事 transformer 工作意味着要对研究实验室与我们分享的许多 transformer 架构和框架持开放态度。我也建议尽可能多地使用 PyTorch 和 TensorFlow 来熟悉两种环境。重要的是 transformer 模型的抽象级别(特定任务模型或零-shot 模型)及其整体性能。
让我们导入 tokenizer、generation 和 configuration 类:
from transformers import T5Tokenizer, T5ForConditionalGeneration, T5Config
我们将在这里使用 T5-large
模型,但您可以在本章的 Hugging Face 部分中选择其他 T5 模型。
现在,我们将导入 T5-large
有条件生成模型以生成文本和 T5-large tokenizer:
model = T5ForConditionalGeneration.from_pretrained('t5-large') tokenizer = T5Tokenizer.from_pretrained('t5-large')
仅需一行即可初始化一个预训练的分词器。但是,并没有证明标记化的词典包含所有我们需要的词汇。我们将在第九章 匹配分词器和数据集中调查分词器和数据集之间的关系。
程序现在使用'cpu'
初始化了torch.device
。这部分笔记足够用了一个 CPU。torch.device
对象是 torch 张量分配的设备:
device = torch.device('cpu')
我们准备好探索 T5 模型的体系结构了。
探索 T5 模型的体系结构
在这一小节中,我们将探索 T5-large 模型的架构和配置。
如果display_architecture==true
,我们可以看到模型的配置:
if display_architecture==True: print(model.config)
例如,我们可以看到模型的基本参数:
.../... "num_heads": 16, "num_layers": 24, .../...
该模型是一个带有 16 个头和 24 层的 T5 Transformers。
我们还可以看到 T5 的文本到文本实现,它将一个输入句子添加一个前缀来触发任务执行。前缀使得能够在不修改模型参数的情况下以文本到文本格式表示各种任务。在我们的情况下,前缀是summarization
:
"task_specific_params": { "summarization": { "early_stopping": true, "length_penalty": 2.0, "max_length": 200, "min_length": 30, "no_repeat_ngram_size": 3, "num_beams": 4, "prefix": "summarize: " },
我们可以看到 T5:
- 实施波束搜索算法,它将扩展四个最重要的文本完成预测
- 当每批完成
num_beam
句子时,应用早停止 - 确保不重复出现 n 克,n 的大小等于
no_repeat_ngram_size
- 使用
min_length
和max_length
控制样本的长度 - 应用长度惩罚
另一个有趣的参数是词汇量大小:
"vocab_size": 32128
词汇量本身就是一个话题。太多的词汇将导致表示稀疏。另一方面,词汇量太少会扭曲 NLP 任务。我们将在第九章 匹配分词器和数据集中进一步探讨这一点。
通过简单地打印model
,我们还可以看到Transformers堆栈的细节:
if(display_architecture==True): print(model)
例如,我们可以通过仅运行您希望运行的单元来查看模型的一个块(层
):
(12): T5Block( (layer): ModuleList( (0): T5LayerSelfAttention( (SelfAttention): T5Attention( (q): Linear(in_features=1024, out_features=1024, bias=False) (k): Linear(in_features=1024, out_features=1024, bias=False) (v): Linear(in_features=1024, out_features=1024, bias=False) (o): Linear(in_features=1024, out_features=1024, bias=False) ) (layer_norm): T5LayerNorm() (dropout): Dropout(p=0.1, inplace=False) ) (1): T5LayerFF( (DenseReluDense): T5DenseReluDense( (wi): Linear(in_features=1024, out_features=4096, bias=False) (wo): Linear(in_features=4096, out_features=1024, bias=False) (dropout): Dropout(p=0.1, inplace=False) ) (layer_norm): T5LayerNorm() (dropout): Dropout(p=0.1, inplace=False) ) ) )
我们可以看到模型在注意子层上运行了1,024
个特征,在前馈网络子层的内部计算中运行了 4,096
个特征,这将产生1,024
个特征的输出。Transformers的对称结构在所有层中都得到了保持。
您可以花几分钟时间浏览编码器堆栈、解码器堆栈、注意子层和前馈子层。
您也可以选择仅运行您希望的单元来选择模型的特定方面:
if display_architecture==True: print(model.encoder) if display_architecture==True: print(model.decoder) if display_architecture==True: print(model.forward)
我们已经初始化了 T5 Transformers。现在让我们来总结文件。
Transformers 自然语言处理(三)(3)