ONNX 模型库
返回模型

说明文档

GPT-2 Large

目录

模型详情

模型描述: GPT-2 Large 是 GPT-2 的 7.74亿参数 版本,GPT-2 是由 OpenAI 创建和发布的基于 Transformer 的语言模型。该模型是在英文语料上使用因果语言建模(CLM)目标进行预训练的模型。

模型使用入门

使用以下代码开始使用该模型。您可以直接使用 pipeline 进行文本生成。由于生成依赖于一些随机性,我们设置了一个种子以确保可重复性:

>>> from transformers import pipeline, set_seed
>>> generator = pipeline('text-generation', model='gpt2-large')
>>> 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, I can do language modeling. In fact, this is one of the reasons I use languages. To get a"},
 {'generated_text': "Hello, I'm a language model, which in its turn implements a model of how a human can reason about a language, and is in turn an"},
 {'generated_text': "Hello, I'm a language model, why does this matter for you?\n\nWhen I hear new languages, I tend to start thinking in terms"},
 {'generated_text': "Hello, I'm a language model, a functional language...\n\nI don't need to know anything else. If I want to understand about how"},
 {'generated_text': "Hello, I'm a language model, not a toolbox.\n\nIn a nutshell, a language model is a set of attributes that define how"}]

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

from transformers import GPT2Tokenizer, GPT2Model
tokenizer = GPT2Tokenizer.from_pretrained('gpt2-large')
model = GPT2Model.from_pretrained('gpt2-large')
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-large')
model = TFGPT2Model.from_pretrained('gpt2-large')
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)

用途

直接使用

OpenAI 在其 GPT-2 模型卡 中写道:

这些模型的主要预期用户是 AI 研究人员和从业者。

我们主要设想这些语言模型将被研究人员用于更好地理解大规模生成式语言模型的行为、能力、偏见和约束。

下游使用

OpenAI 在其 GPT-2 模型卡 中写道:

以下是我们认为可能的一些次要用例:

  • 写作辅助:语法辅助、自动补全(适用于正常散文或代码)
  • 创意写作和艺术:探索创意虚构文本的生成;辅助创作诗歌和其他文学艺术。
  • 娱乐:游戏、聊天机器人和趣味性生成的创作。

滥用和非适用场景

OpenAI 在其 GPT-2 模型卡 中写道:

由于大规模语言模型(如 GPT-2)无法区分事实与虚构,我们不支持需要生成文本为真的用例。

此外,像 GPT-2 这样的语言模型反映了其训练系统固有的偏见,因此我们不建议将它们部署到与人类交互的系统,除非部署者首先对预期用例相关的偏见进行研究。我们发现 7.74亿和15亿参数版本之间在性别、种族和宗教偏见探测方面没有统计学上的显著差异,这意味着 GPT-2 的所有版本都应谨慎对待与人类属性相关的敏感用例。

风险、局限性与偏见

内容警告:读者应注意,本节包含可能令人不安、有冒犯性且可能传播历史和当前刻板印象的内容。

大量研究已经探索了语言模型的偏见和公平问题(参见例如 Sheng et al. (2021)Bender et al. (2021))。

该模型使用的训练数据尚未作为可浏览的数据集发布。我们知道它包含大量来自互联网的未过滤内容,这远非中性。模型生成的预测可能包含关于受保护类别、身份特征以及敏感、社会和职业群体的令人不安的有害刻板印象。例如:

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

[{'generated_text': 'The man worked as a security guard in a hotel'},
 {'generated_text': 'The man worked as a salesman in Mexico and in'},
 {'generated_text': 'The man worked as a supervisor at the warehouse for'},
 {'generated_text': "The man worked as a cleaner for the store's"},
 {'generated_text': 'The man worked as a barbershop apprentice.'}]

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

[{'generated_text': 'The woman worked as a clerk at the bank.'},
 {'generated_text': 'The woman worked as a caregiver, and her'},
 {'generated_text': 'The woman worked as a customer service agent for a'},
 {'generated_text': 'The woman worked as a cleaner at the store,'},
 {'generated_text': 'The woman worked as a barista and was "'}]

这种偏见也将影响该模型的所有微调版本。用户(无论是直接使用还是下游使用)应了解模型的风险、偏见和局限性。

训练

训练数据

OpenAI 团队希望尽可能大地训练这个模型的数据语料库。为了构建它,他们从 Reddit 上获得至少 3 个 karma 的出站链接中抓取了所有网页。请注意,所有维基百科页面都从该数据集中移除,因此该模型没有在维基百科的任何部分上进行训练。最终数据集(称为 WebText)包含 40GB 的文本,但尚未公开发布。您可以在此处找到 WebText 中出现的前 1000 个域名的列表。

训练过程

该模型以自监督方式在非常大的英文语料库上进行预训练。这意味着它只在原始文本上进行预训练,没有任何人类对其进行任何形式的标注(这就是为什么它可以使用大量公开可用的数据),并使用自动过程从这些文本生成输入和标签。更准确地说,它被训练来预测句子中的下一个词。

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

通过这种方式,模型学习到英语的内部表示,然后可以用于提取对下游任务有用的特征。

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

评估

以下评估信息摘自相关论文

测试数据、因素和指标

模型作者在相关论文中写道:

由于我们的模型在字节级别上运行,不需要有损的预处理或分词,我们可以在任何语言模型基准上对其进行评估。语言建模数据集上的结果通常以某个量的缩放或指数版本报告——通常是每个标准预测单元的平均负对数概率,通常是一个字符、一个字节或一个词。我们通过计算 WebText LM 对数据集的对数概率并除以标准单元的数量来评估相同的量。对于许多这些数据集,WebText LM 将在明显分布外进行测试,需要预测高度标准化的文本、分词伪影(如断开的标点符号和缩写)、洗牌句子,甚至字符串 <UNK>——这在 WebText 中极为罕见,在 400 亿字节中只出现 26 次。我们使用可逆的去分词器报告我们的主要结果……这些去分词器尽可能多地去除这些分词/预处理伪影。由于这些去分词器是可逆的,我们仍然可以计算数据集的对数概率,它们可以被视为一种简单形式的域适应。

结果

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

数据集 LAMBADA LAMBADA CBT-CN CBT-NE WikiText2 PTB enwiki8 text8 WikiText103 1BW
(指标) (PPL) (ACC) (ACC) (ACC) (PPL) (PPL) (BPB) (BPC) (PPL) (PPL)
10.87 60.12 93.45 88.0 19.93 40.31 0.97 1.02 22.05 44.575

环境影响

碳排放可以使用 Machine Learning Impact 计算器(见于 Lacoste et al. (2019))进行估算。

  • 硬件类型: 未知
  • 使用时长: 未知
  • 云服务提供商: 未知
  • 计算区域: 未知
  • 碳排放量: 未知

技术规格

有关模型架构、目标、计算基础设施和训练细节的详细信息,请参阅相关论文

引用信息

@article{radford2019language,
  title={Language models are unsupervised multitask learners},
  author={Radford, Alec and Wu, Jeffrey and Child, Rewon and Luan, David and Amodei, Dario and Sutskever, Ilya and others},
  journal={OpenAI blog},
  volume={1},
  number={8},
  pages={9},
  year={2019}
}

模型卡作者

本模型卡由 Hugging Face 团队撰写。

openai-community/gpt2-large

作者 openai-community

text-generation transformers
↓ 2.9M ♥ 348

创建时间: 2022-03-02 23:29:04+00:00

更新时间: 2024-02-19 11:11:02+00:00

在 Hugging Face 上查看

文件 (29)

.gitattributes
README.md
config.json
flax_model.msgpack
generation_config.json
generation_config_for_text_generation.json
merges.txt
model.safetensors
onnx/Constant_164_attr__value
onnx/Constant_174_attr__value
onnx/config.json
onnx/decoder_model.onnx ONNX
onnx/decoder_model.onnx_data
onnx/decoder_model_merged.onnx ONNX
onnx/decoder_model_merged.onnx_data
onnx/decoder_with_past_model.onnx ONNX
onnx/decoder_with_past_model.onnx_data
onnx/generation_config.json
onnx/merges.txt
onnx/special_tokens_map.json
onnx/tokenizer.json
onnx/tokenizer_config.json
onnx/vocab.json
pytorch_model.bin
rust_model.ot
tf_model.h5
tokenizer.json
tokenizer_config.json
vocab.json