英文

GPT-2

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

预训练模型是基于英文语言进行训练的,使用有因果关系的语言建模(CLM)目标。它于 this paper 年发布,并首次在 this page 年发布。

免责声明:发布GPT-2的团队还为他们的模型撰写了一个 model card 。本模型卡中的内容由Hugging Face团队编写,以补充他们提供的信息,并提供特定的偏见示例。

模型描述

GPT-2是一个以自我监督方式在大量英文数据上预训练的transformers模型。这意味着它只是在原始文本上进行预训练,没有以任何方式对其进行人工标注(这就是为什么它可以使用很多公开可用的数据),而是通过自动生成输入和标签的自动过程来完成。更确切地说,它是通过猜测句子中的下一个单词来进行训练的。

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

通过这种方式,模型学习了英语的内部表示,可以用来提取对下游任务有用的特征。然而,该模型在其预训练的用途上效果最好,即根据提示生成文本。

这是GPT-2最小的版本,具有124M个参数。

相关模型: GPT-Large GPT-Medium GPT-XL

预期用途和限制

您可以使用原始模型进行文本生成,也可以对其进行微调以用于下游任务。查看 model hub 以寻找您感兴趣的任务的微调版本。

如何使用

您可以直接使用此模型进行文本生成的流水线。由于生成过程涉及某种随机性,因此我们设置了一个种子以实现可重复性:

>>> 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团队在其 model card 中指出的那样:

由于像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个赞的外链页面。请注意,这个数据集中删除了所有维基百科页面,因此该模型没有在维基百科的任何部分上进行训练。生成的数据集(称为WebText)含有40GB的文本,但尚未公开发布。您可以在 here 中找到WebText中存在的前1000个域的列表。

训练过程

预处理

使用字节分词编码(BPE)的一个版本(用于Unicode字符)对文本进行标记化,并使用50,257个词汇大小。输入是连续1024个标记的序列。

较大型的模型使用了256个云TPU v3核心进行训练。培训持续时间未公开,培训的确切细节也没有公开。

评估结果

该模型在没有任何微调(零样本)的情况下实现了以下结果:

Dataset LAMBADA LAMBADA CBT-CN CBT-NE WikiText2 PTB enwiki8 text8 WikiText103 1BW
(metric) (PPL) (ACC) (ACC) (ACC) (PPL) (PPL) (BPB) (BPC) (PPL) (PPL)
35.13 45.99 87.65 83.4 29.41 65.85 1.16 1,17 37.50 75.20

BibTeX条目和引用信息

@article{radford2019language,
  title={Language Models are Unsupervised Multitask Learners},
  author={Radford, Alec and Wu, Jeff and Child, Rewon and Luan, David and Amodei, Dario and Sutskever, Ilya},
  year={2019}
}