在此测试完整的生成能力:https://transformer.huggingface.co/doc/gpt2-large
这是一个基于英语语言、使用因果语言建模(CLM)目标进行预训练的模型。它在以下论文中被介绍:https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf,并首次在该页面发布:https://openai.com/blog/better-language-models。
免责声明:发布 GPT-2 的团队还为他们的模型编写了一份模型卡片:https://github.com/openai/gpt-2/blob/master/model_card.md。本模型卡片中的部分内容由 Hugging Face 团队撰写,旨在补充他们提供的信息并给出具体的偏见示例。
GPT-2 是一个基于 Transformer 的模型,它在一个非常大的英语语料库上以自监督的方式进行了预训练。这意味着它仅在原始文本上进行预训练,无需人工以任何方式对文本进行标注(这也是它能够利用大量公开可用数据的原因),并通过自动过程从这些文本中生成输入和标签。更准确地说,它被训练用于预测句子中的下一个词。
更具体地讲,输入是特定长度的连续文本序列,目标是将同一序列向右移动一个标记(词或词的一部分)。该模型在内部使用掩码机制,以确保对标记 i 的预测仅使用来自标记 1 到 i 的输入,而不使用未来的标记。
通过这种方式,模型学习到英语语言的内部表示,这些表示随后可用于提取对下游任务有用的特征。然而,该模型最擅长的还是其预训练的目标,即根据提示生成文本。
这是 GPT-2 的最小版本,拥有 1.24 亿参数。
相关模型:GPT-Large:https://huggingface.co/gpt2-large,GPT-Medium:https://huggingface.co/gpt2-medium 以及 GPT-XL:https://huggingface.co/gpt2-xl
您可以将原始模型用于文本生成,或对其进行微调以适应下游任务。请参阅模型中心,查找您感兴趣的任务的微调版本。
您可以直接通过文本生成管道使用此模型。由于生成过程依赖于一定的随机性,我们设置了一个种子以确保结果可复现:
>>> 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团队在其模型卡片中所指出的:https://github.com/openai/gpt-2/blob/master/model_card.md#out-of-scope-use-cases:
由于像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 个 karma 的出站链接中抓取了所有网页。请注意,此数据集中所有维基百科页面均已被移除,因此该模型未在维基百科的任何部分上进行训练。生成的数据集(称为 WebText)包含 40GB 文本,但尚未公开发布。你可以在此处找到 WebText 中排名前 1000 的域名列表:https://github.com/openai/gpt-2/blob/master/domains.txt。
文本使用字节级版本的字节对编码(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 |
@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}
}