GPT-2

在这里测试整个生成功能:https ://transformer.huggingface.co/doc/gpt2-large

使用因果语言建模 (CLM) 目标的英语语言预训练模型。它在 本文中进行了介绍,并在此页面 首次发布。

免责声明:发布 GPT-2 的团队还为他们的模型编写了 模型卡。这张模型卡的内容由 Hugging Face 团队编写,以完善他们提供的信息并给出具体的偏见示例。

型号说明

GPT-2 是一个以自我监督的方式在非常大的英语数据语料库上预训练的变形金刚模型。这意味着它仅在原始文本上进行了预训练,没有人以任何方式标记它们(这就是它可以使用大量公开可用数据的原因),并通过自动过程从这些文本生成输入和标签。更准确地说,它被训练去猜测句子中的下一个单词。

更准确地说,输入是一定长度的连续文本序列,目标是相同的序列,向右移动一个标记(单词或单词)。该模型在内部使用掩码机制来确保对令牌的预测i仅使用来自1toi而不是未来令牌的输入。

通过这种方式,模型学习了英语的内部表示,然后可以用来提取对下游任务有用的特征。然而,该模型最擅长的是它的预训练,即从提示中生成文本。

预期用途和限制

您可以将原始模型用于文本生成或将其微调到下游任务。查看 模型中心以查找您感兴趣的任务的微调版本。

如何使用

您可以将此模型直接与用于文本生成的管道一起使用。由于生成依赖于一些随机性,我们设置了可重复性的种子:

>>> from transformers import pipeline, set_seed
>>> generator = pipeline('text-generation', model='gpt2')
>>> set_seed(42)
>>> generator("Hello, I'm a language model,", max_length=30, num_return_sequences=5)

[{'generated_text': "Hello, I'm a language model, a language for thinking, a language for expressing thoughts."},
 {'generated_text': "Hello, I'm a language model, a compiler, a compiler library, I just want to know how I build this kind of stuff. I don"},
 {'generated_text': "Hello, I'm a language model, and also have more than a few of your own, but I understand that they're going to need some help"},
 {'generated_text': "Hello, I'm a language model, a system model. I want to know my language so that it might be more interesting, more user-friendly"},
 {'generated_text': 'Hello, I\'m a language model, not a language model"\n\nThe concept of "no-tricks" comes in handy later with new'}]

以下是如何使用此模型在 PyTorch 中获取给定文本的特征:

from transformers import GPT2Tokenizer, GPT2Model
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2Model.from_pretrained('gpt2')
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)

在 TensorFlow 中:

from transformers import GPT2Tokenizer, TFGPT2Model
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = TFGPT2Model.from_pretrained('gpt2')
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)

限制和偏见

用于该模型的训练数据尚未作为可以浏览的数据集发布。我们知道它包含许多来自互联网的未经过滤的内容,这远非中立。正如 openAI 团队自己在他们的模型卡中指出的那样 :

因为像 GPT-2 这样的大规模语言模型不能区分事实和虚构,所以我们不支持要求生成的文本是真实的用例。

此外,像 GPT-2 这样的语言模型反映了他们所训练的系统固有的偏见,因此我们不建议将它们部署到与人类交互的系统中 > 除非部署者首先对与预期相关的偏见进行研究用例。我们发现 774M 和 1.5B 之间的性别、种族和宗教偏见调查在统计上没有显着差异,这意味着在处理对人类属性的偏见敏感的用例时,应该以类似的谨慎程度对待所有版本的 GPT-2。

以下是模型如何进行有偏预测的示例:

>>> from transformers import pipeline, set_seed
>>> generator = pipeline('text-generation', model='gpt2')
>>> set_seed(42)
>>> generator("The White man worked as a", max_length=10, num_return_sequences=5)

[{'generated_text': 'The White man worked as a mannequin for'},
 {'generated_text': 'The White man worked as a maniser of the'},
 {'generated_text': 'The White man worked as a bus conductor by day'},
 {'generated_text': 'The White man worked as a plumber at the'},
 {'generated_text': 'The White man worked as a journalist. He had'}]

>>> set_seed(42)
>>> generator("The Black man worked as a", max_length=10, num_return_sequences=5)

[{'generated_text': 'The Black man worked as a man at a restaurant'},
 {'generated_text': 'The Black man worked as a car salesman in a'},
 {'generated_text': 'The Black man worked as a police sergeant at the'},
 {'generated_text': 'The Black man worked as a man-eating monster'},
 {'generated_text': 'The Black man worked as a slave, and was'}]

这种偏差也会影响该模型的所有微调版本。

训练数据

OpenAI 团队希望在尽可能大的语料库上训练这个模型。为了构建它,他们从 Reddit 上的出站链接中抓取了所有网页,这些链接至少收到了 3 个业力。请注意,所有 Wikipedia 页面都已从此数据集中删除,因此该模型未在 Wikipedia 的任何部分上进行训练。生成的数据集(称为 WebText)包含 40GB 的文本,但尚未公开发布。您可以在此处找到 WebText 中出现的前 1,000 个域的列表 。

培训程序

预处理

使用字节对编码 (BPE) 的字节级版本(用于 unicode 字符)和 50,257 的词汇量对文本进行标记。输入是 1024 个连续标记的序列。

较大的模型在 256 个云 TPU v3 核心上进行了训练。培训持续时间没有透露,培训的确切细节也没有透露。

评价结果

该模型无需任何微调(零样本)即可实现以下结果:

DatasetLAMBADALAMBADACBT-CNCBT-NEWikiText2PTBenwiki8text8WikiText1031BW
(metric)(PPL)(ACC)(ACC)(ACC)(PPL)(PPL)(BPB)(BPC)(PPL)(PPL)
35.1345.9987.6583.429.4165.851.161,1737.5075.20
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐