文本到文本Transformer模型的崛起:第二次Transformer革命的抽象模型

释放双眼,带上耳机,听听看~!
本文章探讨了第二次Transformer革命带来的文本到文本Transformer模型的崛起,包括T5模型、超人类Transformer和GPT-3引擎的意义和实施。

在前七章中,我们探讨了几个Transformer生态系统的架构、训练、微调和使用。在第七章《超人类Transformer与GPT-3引擎的崛起》中,我们发现OpenAI已经开始尝试零微调模型,无需开发,可以在几行代码中实现。

这种演进的基本概念依赖于Transformer如何努力教机器如何理解语言并以类似人类的方式表达自己。因此,我们已经从训练模型转变为教导机器语言。

Raffel等人(2019)设计了一个基于简单主张的Transformer元模型:每个自然语言处理问题都可以表示为文本到文本的函数。每种类型的自然语言处理任务都需要某种文本上下文,从而生成某种文本响应。

任何NLP任务的文本到文本表示都为分析Transformer的方法和实践提供了独特的框架。这个思想是,Transformer在训练和微调阶段通过文本到文本方法学习语言。

Raffel等人(2019)将这种方法命名为Text-To-Text Transfer Transformer。 5个T变成了T5,一个新模型诞生了。

本章将从T5 Transformer模型的概念和架构入手。然后,我们将应用T5来总结Hugging Face模型的文档。

最后,我们将文本到文本的方法转化为GPT-3引擎使用的展示和上下文过程。这种令人震惊但不完美的零点响应超出了人类的想象。

本章涵盖以下主题:

  • 文本到文本Transformer模型
  • T5模型的架构
  • T5方法
  • Transformer模型从训练到学习的演进
  • Hugging Face Transformer模型
  • 实施T5模型
  • 总结法律文本
  • 总结财务文本
  • Transformer模型的限制
  • GPT-3的使用

我们的第一步将是探讨Raffel等人(2019)所定义的文本到文本方法论。

设计通用的文本到文本模型

谷歌的自然语言处理技术革命始于2017年的Vaswani等人的原始Transformer。《Attention is All You Need》颠覆了30多年的人工智能信仰,该信仰认为循环神经网络(RNN)和卷积神经网络(CNN)可应用于自然语言处理任务。这一技术突破将我们从自然语言处理/理解的“石器时代”带入了长期以来应有的21世纪。

第7章《GPT-3引擎崛起:超人类变压器》总结了在谷歌的Vaswani等人(2017)原始Transformer和OpenAI的Brown等人(2020)GPT-3变压器之间,涌现出的第二次革命。原始Transformer的重点是性能,以证明注意力是自然语言处理/理解任务所需的全部。

OpenAI的第二次革命,通过GPT-3,聚焦在将变压器模型从经过微调的预训练模型转变为不需要经过微调的少样本训练模型上。第二次革命的目标是展示机器可以像我们人类一样学习语言,并将其应用于下游任务。

理解这两次革命对于理解T5模型的意义至关重要。第一次革命是一种注意力技术。第二次革命是要教会机器理解语言(自然语言理解),然后让它像我们人类一样解决自然语言处理问题。

2019年,谷歌和OpenAI都在思考,关于如何将变压器模型视为超越技术考虑的抽象层面,使其达到更高水平的自然语言理解。

这两次革命都带来了颠覆性的变革。现在是安定下来、忘掉源代码和机器资源的时候,对变压器模型进行更高层次的分析。

Raffel等人(2019)设计了一个概念性的文本到文本模型,并加以实施。

让我们深入探讨这个第二次Transformer革命的表现形式:抽象模型。

文本到文本Transformer模型的崛起

Raffel等人(2019年)作为先锋开始了一项旅程,目标是探索统一的文本到文本Transformer的迁移学习极限。谷歌团队在这一方法上的工作强调他们不会从一开始就修改原始Transformer的基本架构。

在那个时候,Raffel等人(2019年)想要专注于概念,而不是技术。因此,他们对制作拥有n个参数和层的所谓的通用变压器模型不感兴趣,通常我们会看到这样的银弹变压器模型。这一次,T5团队想要找出变压器在理解语言方面有多出色。

人类学习一门语言,然后通过迁移学习将这些知识应用于广泛的自然语言处理任务。T5模型的核心概念是找到一个能够像我们一样完成任务的抽象模型。

当我们进行交流时,我们总是从一个序列(A)开始,然后另一个序列(B)。接着,B成为下一个序列的起点,导致又一个序列,如图8.1所示:

文本到文本Transformer模型的崛起:第二次Transformer革命的抽象模型

我们还通过有组织的声音进行音乐交流。我们通过有组织的身体动作进行舞蹈交流。我们通过协调的形状和颜色进行绘画来表达自己。

我们通过语言进行交流,用一个词或一组词来称呼为“文本”。当我们试图理解一段文本时,我们会关注句子中的所有词汇,无论是在所有方向上。我们试图衡量每个术语的重要性。当我们不理解一句话时,我们会专注于一个词,并查询句子中的其他关键词,以确定它们的价值以及我们必须给予它们的注意。这定义了变压器的注意层。

花一点时间来深思熟虑。这似乎看起来非常简单,对吧?然而,要颠覆围绕循环神经网络(RNNs)、卷积神经网络(CNNs)及其伴随的思维过程的传统信仰,却花了35多年的时间!

看着T5学习、进步,有时甚至帮助我们更好地思考,这非常迷人!

同时关注序列中的所有标记的注意层的技术革命导致了T5的概念革命。

T5模型可以总结为文本到文本的传输变压器。因此,每个自然语言处理任务都可以表述为一个要解决的文本到文本问题。

一个前缀,而不是特定于任务的格式

Raffel等人(2019)仍然需要解决一个问题:统一任务特定的格式。他们的想法是找到一种方法,使每个任务都具有提交给转换器的相同输入格式。这样,模型参数将使用一个文本到文本格式来训练所有类型的任务。

Google的T5团队提出了一个简单的解决方案:在输入序列中添加前缀。如果没有某位已被遗忘的天才发明前缀,我们将需要数千个额外的词汇来表示许多语言中的前缀。例如,如果不使用“pre”作为前缀,我们将需要找到词来描述预付款、史前时代、古生代等成千上万的其他词。

Raffel等人(2019)提议在输入序列中添加前缀。T5前缀不仅仅是像某些变换器模型中的分类标签[CLS]那样的标记或指示符。相反,T5前缀包含了变换器需要解决的任务的本质。前缀传达意义,如以下示例之一:

  • 将英语翻译成德语:+[序列] 用于翻译,正如我们在第6章中使用变换器进行机器翻译时所做的那样
  • cola句子:+[序列] 用于语言可接受性语料库(CoLA),正如我们在第3章中使用变换器模型进行BERT微调时所做的那样
  • stsb句子1:+[序列] 用于语义文本相似性基准。自然语言推理和蕴涵是相似的问题,正如我们在第5章中所描述的
  • 摘要 + [序列] 用于文本摘要问题,正如我们将在本章的T5文本摘要部分解决的问题中所做的那样

现在,我们已经获得了用于广泛的NLP任务的统一格式,如图8.2所示:

文本到文本Transformer模型的崛起:第二次Transformer革命的抽象模型

统一的输入格式导致了一个变换器模型,无论T5需要解决哪个问题,它都会生成一个结果序列。许多NLP任务的输入和输出都已统一,如图8.3所示:

文本到文本Transformer模型的崛起:第二次Transformer革命的抽象模型

这种统一过程使得可以针对各种任务使用相同的模型、超参数和优化器。

我们已经了解了标准的文本到文本的输入输出格式。现在让我们来看一下T5变换器模型的架构。

T5模型

Raffel等人(2019年)着重设计了一个标准的输入格式以获得文本输出。Google T5团队不想尝试从原始Transformer派生出的新架构,比如类似BERT的仅编码器层或类似GPT的仅解码器层。相反,团队专注于以标准格式定义NLP任务。

他们选择使用我们在第2章中定义的原始Transformer模型,如图8.4所示:

文本到文本Transformer模型的崛起:第二次Transformer革命的抽象模型

Raffel等人(2019)保留了大部分原始Transformer的架构和术语。然而,他们强调了一些关键方面。此外,他们进行了一些轻微的词汇和功能性变更。以下是T5模型的一些主要方面:

  • 编码器和解码器仍然存在于模型中。编码器和解码器层变成了“块”,子层变成了包含自注意力层和前馈网络的“子组件”。在类似LEGO®的语言中使用“块”和“子组件”,允许您组装“块”、零件和组件来构建您的模型。Transformer组件是标准的构建块,您可以以多种方式组装它们。一旦您理解了我们在第2章中介绍的基本构建块,就可以理解任何Transformer模型。

  • 自注意力是“无序的”,这意味着它对集合执行操作,正如我们在第2章中所看到的那样。自注意力使用矩阵的点积,而不是递归。它探索序列中每个词与其他词之间的关系。在执行点积之前,会将位置编码添加到词的嵌入中。

  • 原始Transformer对Transformer应用了正弦和余弦信号,或者使用了学习的位置嵌入。T5使用相对位置嵌入,而不是将任意位置添加到输入中。在T5中,位置编码依赖于自注意力的扩展,以便进行成对关系的比较。有关更多信息,请参阅本章参考文献部分的Shaw等人(2018)。

  • 位置嵌入在模型的所有层之间共享和重新评估。

我们已经通过文本对文本方法定义了T5变换器模型的输入标准化。接下来,让我们使用T5来总结文档。

使用T5进行文本摘要

NLP文本摘要任务提取文本的简洁部分。本节将首先介绍本章中将使用的Hugging Face资源。然后,我们将初始化一个T5-large变换器模型。最后,我们将看到如何使用T5来总结任何文档,包括法律和公司文件。

让我们首先介绍Hugging Face的框架。

Hugging Face

Hugging Face设计了一个用于在更高层次实现变换器的框架。在第3章《细调BERT模型》中,我们使用了Hugging Face来对BERT模型进行微调,并在第4章《从头开始预训练RoBERTa模型》中训练了一个RoBERTa模型。

为了扩展我们的知识,我们需要探索其他方法,如第6章《使用变换器进行机器翻译》中的Trax,以及第7章《GPT-3引擎的超人类Transformer的崛起》中的OpenAI的模型。本章将再次使用Hugging Face的框架,并详细介绍在线资源。最后,我们将使用GPT-3引擎的独特潜力结束本章。

Hugging Face的框架提供了三种主要资源:模型、数据集和度量标准。

Hugging Face transformer资源

在本小节中,我们将选择在本章中要实现的T5模型。

可以在Hugging Face模型页面上找到各种模型,如图8.5所示:

文本到文本Transformer模型的崛起:第二次Transformer革命的抽象模型

在这个页面huggingface.co/models上,我们可以搜索一个模型。在我们的情况下,我们正在寻找t5-large,这是一个我们可以在Google Colaboratory中轻松运行的模型。

我们首先键入T5以搜索T5模型,并获得一个可供选择的T5模型列表:

文本到文本Transformer模型的崛起:第二次Transformer革命的抽象模型

我们可以看到原始的T5变换器有几个可用,其中包括:

  • base,基线模型。它旨在与具有12层和约2.2亿参数的BERTBASE类似。
  • small,较小的模型,具有6层和6000万参数。
  • large旨在与BERTLARGE相似,具有12层和7.7亿参数。
  • 3B和11B使用24层编码器和解码器,具有约28亿和110亿参数。

有关BERTBASE和BERTLARGE的描述,请花点时间阅读第3章“Fine-Tuning BERT Models”中的这些模型。

在我们的案例中,我们选择了t5-large:

文本到文本Transformer模型的崛起:第二次Transformer革命的抽象模型

图8.7展示了我们将要编写的代码中如何使用该模型。我们还可以查看模型中的文件列表和基本配置文件。在本章的“初始化T5-large变换器模型”部分,我们将详细介绍配置文件。

Hugging Face还提供了数据集和度量标准:

数据集和度量标准是自然语言处理的经典方面。在本章中,我们不会实现这些数据集或度量标准。相反,我们将重点放在如何实现文本摘要上。

让我们开始初始化T5变换器模型。

初始化T5-large变换器模型

在本小节中,我们将初始化一个T5-large模型。打开以下笔记本,Summarizing_Text_with_T5.ipynb,你会在GitHub上本章的目录中找到它。

让我们开始使用T5吧!

开始使用T5模型

在这一小节中,我们将安装Hugging Face的框架,然后初始化一个T5模型。

首先,我们将安装Hugging Face的transformers:

!pip install transformers

我们固定了sentencepiece的版本为0.1.94,以尽量保持使用Hugging Face的笔记本稳定:

!pip install sentencepiece==0.1.94

Hugging Face有一个可以克隆的GitHub存储库。但是,Hugging Face的框架提供了一系列高级变换器函数,我们可以实现。

在初始化模型时,我们可以选择是否显示模型的架构:

display_architecture=False

如果将display_architecture设置为True,则将显示编码器层、解码器层和前馈子层的结构。

程序现在导入了torch和json:

import torch
import json

在处理变换器时,意味着要对研究实验室与我们分享的众多变换器架构和框架持开放态度。此外,我建议尽量多地使用PyTorch和TensorFlow来适应这两个环境。重要的是变换器模型的抽象级别(特定任务模型或零研究模型)以及其整体性能。

让我们导入tokenizer、generation和configuration类:

from transformers import T5Tokenizer, T5ForConditionalGeneration, T5Config

我们将在这里使用T5-large模型,但您可以从本章Hugging Face部分的Hugging Face列表中选择其他T5模型。

现在,我们将导入T5-large有条件生成模型以生成文本以及T5-large的分词器:

model = T5ForConditionalGeneration.from_pretrained('t5-large')
tokenizer = T5Tokenizer.from_pretrained('t5-large')

初始化预训练的分词器只需一行代码。然而,没有证明分词字典包含我们需要的全部词汇。我们将在第9章中探讨分词器和数据集之间的关系。

程序现在使用’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,
.../...

该模型是一个T5变换器,具有16个头和24层。

我们还可以看到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个句子后应用早停止
  • 确保不重复出现与no_repeat_ngram_size相等的ngram
  • 通过min_length和max_length控制样本的长度
  • 应用长度惩罚

另一个有趣的参数是词汇表大小:

"vocab_size": 32128

词汇表大小是一个独立的话题。太大的词汇表会导致稀疏的表示。另一方面,太小的词汇表会扭曲自然语言处理任务。我们将在第9章中进一步探讨这个问题,匹配标记器和数据集。

我们还可以通过简单地打印模型来查看变换器堆栈的详细信息:

if(display_architecture==True):
  print(model)

例如,我们可以查看编码器堆栈中一个块(层)的内部(从0到23编号):

(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个特征的操作,而在产生1,024个特征的前馈网络子层的内部计算中运行4,096个特征。变换器的对称结构在所有层中都得以保持。

您可以花几分钟时间浏览编码器堆栈、解码器堆栈、注意子层和前馈子层。

您还可以选择仅运行您希望的单元格来选择模型的特定方面:

if display_architecture==True:
  print(model.encoder)
if display_architecture==True:
  print(model.decoder)
if display_architecture==True:
  print(model.forward)

我们已经初始化了T5变换器。现在让我们来总结文档。

使用T5-large总结文件

这一部分将创建一个摘要函数,您可以使用它来总结任何您想要总结的文本。我们将总结法律和财务示例。最后,我们将界定该方法的限制。

首先,我们将开始创建一个摘要函数。

创建一个摘要函数

首先,让我们创建一个名为summarize的摘要函数。这样,我们只需将要摘要的文本发送到我们的函数中。该函数接受两个参数。第一个参数是preprocess_text,即要摘要的文本。第二个参数是ml,即摘要文本的最大长度。这两个参数都是您每次调用函数时发送的变量:

def summarize(text,ml):

Hugging Face等提供了现成的摘要函数。然而,我建议学习如何构建自己的函数,以在必要时自定义这一关键任务。

然后,上下文文本或真实情况被去除了n字符:

preprocess_text = text.strip().replace("n","")

然后,我们将创新的T5任务前缀“summarize”应用于输入文本:

t5_prepared_Text = "summarize: "+preprocess_text

T5模型采用了统一的结构,不管任务是什么,都通过前缀+输入序列的方法。这可能看起来很简单,但它使NLP变换模型更接近通用训练和零次下游任务。

我们可以显示处理后(去掉换行符)和准备好的文本(任务前缀):

print ("Preprocessed and prepared text: n", t5_prepared_Text)

简单,对吧?嗯,从RNN和CNN到变压器花了35年多的时间。然后,世界上一些最聪明的研究团队花了一些时间,从为特定任务设计的变压器到几乎不需要微调的多任务模型。最后,Google研究团队创建了一个变压器输入文本的标准格式,其中包含一个前缀,指示要解决的NLP问题。这是一项相当了不起的成就!

显示的输出包含经过预处理和准备的文本:

Preprocessed and prepared text: 
summarize: The United States Declaration of Independence

我们可以看到“summarize”前缀,指示要解决的任务。

现在,文本被编码为标记ID,并以torch张量的形式返回:

tokenized_text = tokenizer.encode(t5_prepared_Text, return_tensors="pt").to(device)

已经对编码的文本进行了处理,准备好发送给模型,以生成一个根据我们在“入门T5”部分中描述的参数生成摘要:

# Summarize
  summary_ids = model.generate(tokenized_text,
                                      num_beams=4,
                                      no_repeat_ngram_size=2,
                                      min_length=30,
                                      max_length=ml,
                                      early_stopping=True)

束搜索数仍然与我们导入的模型中的一样。不过,no_repeat_ngram_size已经从3降到2。

生成的输出现在使用标记器进行解码:

output = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
return output

我们已经导入、初始化并定义了摘要函数。现在让我们尝试使用T5模型进行一个一般性主题的实验。

一个一般性主题的示例

在这个小节中,我们将通过T5模型运行一段由古腾堡计划(Project Gutenberg)编写的文本。我们将使用这个示例来测试我们的摘要函数。您可以复制粘贴任何其他文本,或通过添加代码来加载其他文本。您还可以加载您选择的数据集并在循环中调用摘要。

本章的目标是运行一些示例,看看T5的工作原理。输入文本是包含美利坚合众国独立宣言的古腾堡电子书的开头部分。

text =”””
The United States Declaration of Independence was the first Etext
released by Project Gutenberg, early in 1971. The title was stored
in an emailed instruction set which required a tape or diskpack be
hand mounted for retrieval. The diskpack was the size of a large
cake in a cake carrier, cost $1500, and contained 5 megabytes, of
which this file took 1-2%. Two tape backups were kept plus one on
paper tape. The 10,000 files we hope to have online by the end of
2001 should take about 1-2% of a comparably priced drive in 2001.
“””

然后,我们调用我们的summarize函数,将要摘要的文本和摘要的最大长度作为参数发送:

print("Number of characters:",len(text))
summary=summarize(text,50)
print ("nnSummarized text: n",summary)

输出显示我们发送了534个字符,经过预处理的原始文本(地面实况)和摘要(预测):

Number of characters: 534
Preprocessed and prepared text:
summarize: The United States Declaration of Independence…
Summarized text:
the united states declaration of independence was the first etext published by project gutenberg, early in 1971. the 10,000 files we hope to have online by the end of2001 should take about 1-2% of a comparably priced drive in 2001. the united states declaration of independence was the first Etext released by project gutenberg, early in 1971

现在让我们使用T5来进行一个更复杂的摘要。

《权利法案》样本

以下示例摘自《权利法案》,更难一些,因为它表达了一个人的特殊权利:

#Bill of Rights,V
text ="""
No person shall be held to answer for a capital, or otherwise infamous crime,
unless on a presentment or indictment of a Grand Jury, except in cases arising
 in the land or naval forces, or in the Militia, when in actual service
in time of War or public danger; nor shall any person be subject for
the same offense to be twice put in jeopardy of life or limb;
nor shall be compelled in any criminal case to be a witness against himself,
nor be deprived of life, liberty, or property, without due process of law;
nor shall private property be taken for public use without just compensation.
"""
print("Number of characters:",len(text))
summary=summarize(text,50)
print ("nnSummarized text: n",summary)

请记住,transformers是随机算法,因此每次运行时输出可能会有所不同。也就是说,我们可以看到T5并没有真正总结输入文本,而只是对其进行了缩短:

Number of characters: 591
Preprocessed and prepared text: 
 summarize: No person shall be held to answer..
Summarized text: 
 no person shall be held to answer for a capital, or otherwise infamous crime. except in cases arisingin the land or naval forces or in the militia, when in actual service in time of war or public danger

这个样本很重要,因为它展示了任何transformer模型或其他自然语言处理模型在面对这种文本时所面临的限制。我们不能只呈现总是有效的示例,让用户相信变换器已经解决了我们面临的所有自然语言处理挑战,无论它们有多具有创新性。

也许我们应该提供一个更长的文本来进行总结,使用其他参数,使用更大的模型,或者改变T5模型的结构。然而,无论您如何努力用自然语言处理模型来总结复杂的文本,您总会找到模型无法总结的文档。

当模型在任务上失败时,我们必须谦卑地承认它。SuperGLUE人类基准是一个难以超越的挑战。我们需要耐心,更加努力地工作,不断改进变换器模型,直到它们能够比今天表现得更好。还有很多进展的空间。

Raffel等人(2018年)选择了一个合适的标题来描述他们对T5的方法:探索具有统一文本到文本转换器的迁移学习的极限。

花一些时间来尝试你在法律文件中找到的自己的示例。探索作为现代自然语言处理的先驱的迁移学习的极限!有时你会发现令人兴奋的结果,有时你会发现需要改进的地方。

现在,让我们尝试一个公司法的示例。

一份公司法示例

公司法涵盖了许多法律细节,因此总结任务相当复杂。

这个示例的输入是美国蒙大拿州公司法的摘录:

#Montana Corporate Law
#https://corporations.uslegal.com/state-corporation-law/montana-corporation-law/#:~:text=Montana%20Corporation%20Law,carrying%20out%20its%20business%20activities.
text ="""The law regarding corporations prescribes that a corporation can be incorporated in the state of Montana to serve any lawful purpose.  In the state of Montana, a corporation has all the powers of a natural person for carrying out its business activities.  The corporation can sue and be sued in its corporate name.  It has perpetual succession.  The corporation can buy, sell or otherwise acquire an interest in a real or personal property.  It can conduct business, carry on operations, and have offices and exercise the powers in a state, territory or district in possession of the U.S., or in a foreign country.  It can appoint officers and agents of the corporation for various duties and fix their compensation.
The name of a corporation must contain the word "corporation" or its abbreviation "corp."  The name of a corporation should not be deceptively similar to the name of another corporation incorporated in the same state.  It should not be deceptively identical to the fictitious name adopted by a foreign corporation having business transactions in the state.
The corporation is formed by one or more natural persons by executing and filing articles of incorporation to the secretary of state of filing.  The qualifications for directors are fixed either by articles of incorporation or bylaws.  The names and addresses of the initial directors and purpose of incorporation should be set forth in the articles of incorporation.  The articles of incorporation should contain the corporate name, the number of shares authorized to issue, a brief statement of the character of business carried out by the corporation, the names and addresses of the directors until successors are elected, and name and addresses of incorporators.  The shareholders have the power to change the size of board of directors.
"""
print("Number of characters:",len(text))
summary=summarize(text,50)
print ("nnSummarized text: n",summary)

结果令人满意:

Number of characters: 1816
Preprocessed and prepared text: 
 summarize: The law regarding the corporation prescribes that a corporation...
Summarized text: 
 a corporations can be incorporated in the state of Montana to serve any lawful purpose. a corporation can sue and be sued in its corporate name, and it has perpetual succession. it can conduct business, carry on operations and have offices

这一次,T5找到了文本的一些重要方面来进行总结。花一些时间加入您自己的示例,看看会发生什么。尝试调整参数,看看它是否会影响结果。

我们已经使用T5来进行文本总结。现在是时候尝试使用OpenAI GPT-3引擎进行总结实验了。

使用GPT-3进行总结

理解T5 transformer的架构非常重要。我们还将看看GPT-3引擎如何处理其中一个文本。目标不是为了对公司和模型进行基准测试。目标是让工业4.0人工智能专家拥有广泛的自然语言处理知识。

首先,访问 openai.com/,注册并登录。

然后转到示例页面,选择“以二年级学生的方式总结”:

文本到文本Transformer模型的崛起:第二次Transformer革命的抽象模型

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

基本序列推荐模型原理与实现

2023-11-26 15:15:14

AI教程

大模型优化之KV Cache

2023-11-26 15:23:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索