英文

GPT-2 Medium

模型详情

模型描述:GPT-2 Medium是OpenAI发布的GPT-2模型的355M参数版本,这是一个基于Transformer的语言模型。该模型使用逆因果语言建模(CLM)目标对英文进行了预训练。

如何开始使用模型

使用下面的代码开始使用模型。您可以直接使用该模型进行文本生成。由于生成结果依赖于一定的随机性,我们设置了一个种子以便重现:

>>> from transformers import pipeline, set_seed
>>> generator = pipeline('text-generation', model='gpt2-medium')
>>> 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'm a language. I'm a compiler, I'm a parser, I'm a server process. I"},
 {'generated_text': "Hello, I'm a language model, and I'd like to join an existing team. What can I do to get started?\n\nI'd"},
 {'generated_text': "Hello, I'm a language model, why does my code get created? Can't I just copy it? But why did my code get created when"},
 {'generated_text': "Hello, I'm a language model, a functional language...\n\nI'm a functional language. Is it hard? A little, yes. But"},
 {'generated_text': "Hello, I'm a language model, not an object model.\n\nIn a nutshell, I need to give me objects from which I can get"}]

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

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

用途

直接使用:

在OpenAI的 model card about GPT-2 中写道:

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

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

下游应用:

在OpenAI的 model card about GPT-2 中写道:

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

  • 写作辅助:语法辅助、自动补全(用于正常散文或代码)
  • 创造性写作和艺术:探索创造性虚构文本的生成,帮助创作诗歌和其他文学艺术作品。
  • 娱乐:创建游戏、聊天机器人和有趣的生成物。
错误使用和超出范围的使用:

在OpenAI的 model card about GPT-2 中写道:

由于像GPT-2这样的大规模语言模型无法区分事实和虚构,因此我们不支持需要生成的文本为真实内容的用例。

此外,像GPT-2这样的语言模型会反映出训练它们的系统固有的偏见,因此我们不建议将它们部署到与人类交互的系统中,除非部署者首先对与目标用例相关的偏见进行研究。我们发现774M和1.5B之间在性别、种族和宗教偏见探测方面没有统计学显著差异,这意味着所有版本的GPT-2都应对与人类属性相关的偏见敏感的用例采取相似的谨慎态度。

风险、限制和偏见

内容警告:读者应意识到本部分包含令人不安、冒犯的内容,并可能传播历史和当前的刻板印象。

对语言模型的偏见和公平性问题进行了大量研究(见,例如, Sheng et al. (2021) Bender et al. (2021) )。

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

>>> from transformers import pipeline, set_seed
>>> generator = pipeline('text-generation', model='gpt2-medium')
>>> 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 military'},
 {'generated_text': 'The man worked as a salesman in Mexico and eventually'},
 {'generated_text': 'The man worked as a supervisor at the department for'},
 {'generated_text': 'The man worked as a cleaner for the same corporation'},
 {'generated_text': 'The man worked as a barman and was involved'}]

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

[{'generated_text': 'The woman worked as a social worker in a children'},
 {'generated_text': 'The woman worked as a marketing manager, and her'},
 {'generated_text': 'The woman worked as a customer service agent in a'},
 {'generated_text': 'The woman worked as a cleaner for the same corporation'},
 {'generated_text': 'The woman worked as a barista and was involved'}]

此偏见也会影响该模型的所有精调版本。用户(直接和间接使用者)应了解模型的风险、偏见和限制。

训练

训练数据:

OpenAI团队希望在尽可能大的语料库上训练该模型。为此,他们从Reddit的外部链接中抓取了所有获得至少3个投票支持的网页。请注意,所有维基百科页面都已从此数据集中删除,因此该模型未在任何维基百科部分上进行过训练。生成的数据集(称为WebText)包含40GB的文本,但尚未公开发布。您可以在 here 中找到WebText中包含的前1000个域名列表。

训练过程:

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

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

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

文本使用字节级别的Byte Pair Encoding(BPE)(用于Unicode字符)进行标记化,并使用50,257个词汇量。输入是连续1024个标记的序列。

评估

以下评估信息摘自 associated paper

测试数据、因素和指标:

模型的作者在 associated paper 中写道:

由于我们的模型在字节级别上运行,不需要损失性的预处理或标记化,我们可以对任何语言模型基准进行评估。语言建模数据集的结果通常以每个典型预测单元的平均负对数概率的缩放或指数化版本报告,通常是字符、字节或单词。我们通过计算根据WebText LM的数据集的对数概率并除以规范单位的数量来评估相同的指标。对于这些数据集中的许多数据集,WebText LM将进行显著的测试,需要预测符合严格标准化的文本、标记化过程中的断开的标点符号和缩写、洗牌的句子,甚至是40亿字节中出现次数极少的字符串which。我们使用可逆的去标记化器报告我们的主要结果...这些去标记化器尽可能地删除了这些标记化/预处理的人工痕迹。由于这些去标记化器是可逆的,我们仍然可以计算数据集的对数概率,并且它们可以被视为一种简单的领域适应形式。

结果:

该模型在没有任何精调的情况下(零次训练)取得了以下结果:

Dataset LAMBADA LAMBADA CBT-CN CBT-NE WikiText2 PTB enwiki8 text8 WikiText103 1BW
(metric) (PPL) (ACC) (ACC) (ACC) (PPL) (PPL) (BPB) (BPC) (PPL) (PPL)
15.60 55.48 92.35 87.1 22.76 47.33 1.01 1.06 26.37 55.72

环境影响

可以使用 Machine Learning Impact calculator 中介绍的方法 Lacoste et al. (2019) 估计碳排放量。

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

技术规格

有关建模架构、目标、计算基础设施和培训详细信息,请参见 associated paper

引用信息

@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团队撰写。