模型库 / openai-community/gpt2

gpt2

openai-community text-generation transformers en
openai-community/gpt2
15,977,391
下载量
3413
收藏数
24
浏览量
mit
许可

简介

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

模型卡片

许可协议 mit
语言
en
exbert

模型配置

模型类型 gpt2
架构 GPT2LMHeadModel

模型详情

已翻译

GPT-2

在此处测试完整的文本生成功能:https://transformer.huggingface.co/doc/gpt2-large

基于因果语言建模(CLM)目标在英语上预训练的模型。该模型在这篇论文中提出,并首次发布于此页面

免责声明:发布 GPT-2 的团队也为其模型撰写了一份模型卡片。本模型卡片中的内容由 Hugging Face 团队编写,以补充他们提供的信息并给出具体的偏见示例。

模型描述

GPT-2 是一个以自监督方式在超大规模英语数据语料库上预训练的 transformer 模型。这意味着它仅基于原始文本进行预训练,没有任何人工标注(这也是它能使用大量公开数据的原因),并通过自动化流程从这些文本中生成输入和标签。更准确地说,它被训练用于预测句子中的下一个单词。

具体而言,输入是连续文本的固定长度序列,目标则是同一序列向右平移一个 token(单词或单词片段)。模型内部使用掩码机制,确保对 token i 的预测仅使用从 1i 的输入,而不使用未来的 token。

通过这种方式,模型学习到了英语语言的内在表示,可用于提取下游任务所需的特征。然而,该模型最擅长的仍然是其预训练目标——根据提示生成文本。

这是 GPT-2 的最小版本,拥有 1.24 亿参数。

相关模型: GPT-LargeGPT-MediumGPT-XL

预期用途与局限性

您可以使用原始模型进行文本生成,或针对下游任务进行微调。请查看模型中心以寻找您感兴趣任务的微调版本。

如何使用

您可以直接使用 pipeline 进行文本生成。由于生成过程依赖于随机性,我们设置了一个随机种子以确保可重复性:

>>> 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 个 karma 的外部链接网页。请注意,所有 Wikipedia 页面均已从该数据集中移除,因此模型未在 Wikipedia 的任何部分上进行训练。最终得到的数据集(称为 WebText)包含 40GB 的文本,但尚未公开发布。您可以在此处找到 WebText 中排名前 1000 的域名列表。

训练过程

预处理

文本使用字节级别的 Byte Pair Encoding(BPE)(适用于 unicode 字符)进行 tokenize,词汇表大小为 50,257。输入是长度为 1024 个连续 token 的序列。

较大的模型在 256 个 cloud TPU v3 核心上进行训练。训练时长及训练的具体细节均未公开。

评估结果

该模型在无需任何微调(零样本)的情况下取得了以下结果:

数据集 LAMBADA LAMBADA CBT-CN CBT-NE WikiText2 PTB enwiki8 text8 WikiText103 1BW
(

标签

tf jax tflite rust onnx gpt2 exbert en

操作


详细信息

厂商
openai-community
任务
text-generation
框架
transformers
模型类型
gpt2
许可(HF)
mit
语言
en