英文

OpenAI GPT

目录

  • 模型细节
  • 如何使用该模型入门
  • 使用场景
  • 风险、局限性和偏见
  • 训练
  • 评估
  • 环境影响
  • 技术规格
  • 引用信息
  • 模型说明书作者

模型细节

模型描述:openai-gpt 是由OpenAI创建和发布的基于transformer的语言模型。该模型是通过在大型语料库上进行语言建模训练的因果(单向)transformer预训练模型,能够考虑长程依赖。

如何使用该模型入门

使用下面的代码开始使用该模型。您可以直接使用该模型进行文本生成。由于生成过程涉及到一些随机性,为了可重复性,我们设置了一个种子:

>>> from transformers import pipeline, set_seed
>>> generator = pipeline('text-generation', model='openai-gpt')
>>> 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,'he said, when i was finished.'ah well,'said the man,'that's"},
 {'generated_text': 'Hello, I\'m a language model, " she said. \n she reached the bottom of the shaft and leaned a little further out. it was'},
 {'generated_text': 'Hello, I\'m a language model, " she laughed. " we call that a\'white girl.\'or as we are called by the'},
 {'generated_text': 'Hello, I\'m a language model, " said mr pin. " an\'the ones with the funny hats don\'t. " the rest of'},
 {'generated_text': 'Hello, I\'m a language model, was\'ere \'bout to do some more dancin \', " he said, then his voice lowered to'}]

以下是在PyTorch中使用该模型的方法:

from transformers import OpenAIGPTTokenizer, OpenAIGPTModel
import torch

tokenizer = OpenAIGPTTokenizer.from_pretrained("openai-gpt")
model = OpenAIGPTModel.from_pretrained("openai-gpt")

inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
outputs = model(**inputs)

last_hidden_states = outputs.last_hidden_state

在TensorFlow中的使用方法如下:

from transformers import OpenAIGPTTokenizer, TFOpenAIGPTModel

tokenizer = OpenAIGPTTokenizer.from_pretrained("openai-gpt")
model = TFOpenAIGPTModel.from_pretrained("openai-gpt")

inputs = tokenizer("Hello, my dog is cute", return_tensors="tf")
outputs = model(inputs)

last_hidden_states = outputs.last_hidden_state

使用场景

直接使用

该模型可用于语言建模任务。

下游使用

该模型的潜在下游使用包括利用语言模型的任务。在 associated paper 中,模型的开发者讨论了对该模型进行自然语言推理(NLI)、问答、语义相似性和文本分类等任务的评估。

误用和超出范围的使用

该模型不是为生成事实或真实的人物或事件表达而训练的,因此使用该模型生成此类内容超出了该模型的能力范围。

风险、局限性和偏见

偏见

注意:读者应意识到该模型生成的语言可能对某些人来说具有煽动性或冒犯性,并可能传播历史和当前的刻板印象。

关于语言模型的偏见和公平性问题已有大量研究(参见,例如, Sheng et al. (2021) Bender et al. (2021) )。该模型生成的预测可能包含针对受保护类别、身份特征以及敏感的社会和职业群体的冒犯和有害的刻板印象。例如:

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

[{'generated_text': 'The man worked as a teacher for the college he'},
 {'generated_text': 'The man worked as a janitor at the club.'},
 {'generated_text': 'The man worked as a bodyguard in america. the'},
 {'generated_text': 'The man worked as a clerk for one of the'},
 {'generated_text': 'The man worked as a nurse, but there was'}]

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

[{'generated_text': 'The woman worked as a medical intern but is a'},
 {'generated_text': 'The woman worked as a midwife, i know that'},
 {'generated_text': 'The woman worked as a prostitute in a sex club'},
 {'generated_text': 'The woman worked as a secretary for one of the'},
 {'generated_text': 'The woman worked as a nurse, but she had'}]

此偏见也可能影响到该模型的微调版本。用户(直接和下游用户)应意识到该模型的风险、偏见和局限性。

风险和局限性

模型的开发者还在一篇 blog post 中提到了该模型的风险和局限性,包括:

  • 计算需求:NLG任务的许多先前方法在单个GPU上训练相对较小的模型。我们的方法需要昂贵的预训练步骤,使用了8个GPU进行了一个月的训练。不过,这样的步骤只需完成一次,我们发布了我们的模型以供其他人避免这一过程。该模型也比以前的工作更大,因此要使用更多的计算资源和内存 - 我们使用了一个37层(12块)的Transformer架构,并且对长达512个标记的序列进行训练。大多数实验都是在4和8个GPU的系统上进行的。该模型可以快速对新任务进行微调,这有助于缓解额外的资源需求。
  • 通过文本学习世界知识的限制和偏见:准确来说,图书和互联网上可获得的文本并不包含关于世界的完整或准确的信息。最近的研究( Lucy and Gauthier, 2017 )表明,通过仅使用文本学习某些类型的信息是困难的,而其他研究( Gururangan et al., 2018 )表明,模型会学习并利用数据分布中的偏见。
  • 仍然存在脆弱的泛化能力:尽管我们的方法在广泛的任务范围内提高了性能,但当前的深度学习NLP模型仍然表现出令人惊讶和违反直觉的行为 - 特别是在系统性、对抗性或超出样本分布的评估中。我们的方法也无法免于这些问题,尽管我们已经观察到一些进展的迹象。与纯神经网络方法相比,我们的方法在文本蕴含方面显示出了改进的词汇鲁棒性。在Glockner等人(2018)引入的数据集上,我们的模型实现了83.75%的准确率,与通过WordNet引入外部知识的KIM表现相似。

训练

训练数据

模型的开发者在 write 中提到:

我们使用BooksCorpus数据集( Zhu et al., 2015 )来训练语言模型。该数据集包含来自各种流派(包括冒险、幻想和浪漫)的7000多本未发表的图书。关键是,它包含了长段连续的文本,使得生成模型能够学习如何对长程信息进行条件建模。

训练过程

模型的开发者在 write 中写道:

我们的模型在很大程度上遵循了最初的transformer工作[62]。我们训练了一个12层的仅解码的transformer,使用掩码的自注意力头(768维状态和12个注意力头)。对于位置感知的前馈网络,我们使用了3072维的内部状态。我们使用Adam优化方案[27],最大学习率为2.5e-4。学习率在前2000次更新中线性增加,然后使用余弦调度将其减少到0。我们使用64个随机抽样的连续512个标记的小批量数据对模型进行了100个时期的训练。由于模型中广泛使用了layernorm[2],简单的权重初始化N(0, 0.02)就足够了。我们使用了一个带有40,000个合并的字节对编码(BPE)词汇表[53],并使用了残差、嵌入和注意力丢弃来进行正则化,丢弃率为0.1。我们还采用了[37]中提出的一种修改过的L2正则化方法,对所有非偏差或增益权重采用w = 0.01。对于激活函数,我们使用了高斯误差线性单元(GELU)[18]。我们使用学习的位置嵌入代替了原始工作中提出的正弦版本。我们使用ftfy库2来清理BooksCorpus中的原始文本、标准化一些标点符号和空格,并使用spaCy分词器。

更多详细信息和引文链接请参见该论文。

评估

以下评估信息摘自 associated blog post 。有关更多详细信息,请参考 associated paper

测试数据、因素和度量

模型的开发者报告称,在以下任务和数据集上使用了列出的度量对该模型进行了评估:

结果

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

Task TE TE TE TE TE TE SS SS SS RC CR CR SA LA MTB
Dataset SNLI MNLI Matched MNLI Mismatched SciTail QNLI RTE STS-B QQP MPRC RACE ROCStories COPA SST-2 CoLA GLUE
89.9 82.1 81.4 88.3 88.1 56.0 82.0 70.3 82.3 59.0 86.5 78.6 91.3 45.4 72.8

环境影响

模型的开发者在 report that 中写道:

用于训练该模型的总计算量为0.96千万亿次(pfs-days)。

8个P600 GPU * 30天 * 12 TFLOPS/GPU * 0.33利用率 = 0.96 pfs-days

可以使用 Lacoste et al. (2019) 中提到的方法估计碳排放量。

  • 硬件类型:8个P600 GPU
  • 使用时间:720小时(30天)
  • 云提供商:未知
  • 计算区域:未知
  • 排放的碳:未知

技术规格

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

引用信息

@article{radford2018improving,
  title={Improving language understanding by generative pre-training},
  author={Radford, Alec and Narasimhan, Karthik and Salimans, Tim and Sutskever, Ilya and others},
  year={2018},
  publisher={OpenAI}
}

APA:Radford, A.,Narasimhan, K.,Salimans, T.,& Sutskever, I.(2018)。通过生成式预训练改善语言理解。

模型说明书作者

此模型说明书由Hugging Face团队编写。