模型简介
模型特点
模型能力
使用案例
🚀 GPT-2
GPT-2是一个基于自监督学习方式,在大规模英文语料上预训练的Transformer模型。它能够学习英语的内在表示,可用于文本生成等下游任务,但也存在一定局限性和偏差。
🚀 快速开始
你可以直接使用此模型进行文本生成,也可以将其微调以应用于下游任务。查看模型中心,寻找针对你感兴趣任务的微调版本。
✨ 主要特性
- 自监督学习:在大量英文数据上进行自监督预训练,学习英语的内在表示。
- 文本生成能力:擅长根据提示生成文本。
- 特征提取:可提取对下游任务有用的特征。
📦 安装指南
文档未提及安装步骤,故跳过此章节。
💻 使用示例
基础用法
你可以使用此模型直接通过文本生成管道进行文本生成。由于生成过程依赖一定的随机性,我们设置一个种子以保证结果的可重复性:
>>> 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)
📚 详细文档
模型描述
GPT-2是一个以自监督方式在非常大的英文语料库上进行预训练的Transformer模型。这意味着它仅在原始文本上进行预训练,没有人工以任何方式对其进行标注(这就是为什么它可以使用大量公开可用的数据),并通过自动过程从这些文本中生成输入和标签。更确切地说,它被训练来猜测句子中的下一个单词。
更具体地说,输入是一定长度的连续文本序列,目标是相同的序列,但向右移动一个标记(单词或单词的一部分)。模型内部使用掩码机制来确保对标记 i
的预测仅使用从 1
到 i
的输入,而不使用未来的标记。
通过这种方式,模型学习到英语语言的内部表示,然后可用于提取对下游任务有用的特征。然而,该模型最擅长的还是它预训练的任务,即根据提示生成文本。
预期用途和局限性
你可以使用原始模型进行文本生成,或将其微调以应用于下游任务。查看模型中心,寻找针对你感兴趣任务的微调版本。
局限性和偏差
此模型使用的训练数据未作为可浏览的数据集发布。我们知道它包含大量来自互联网的未经过滤的内容,这些内容远非中立。正如OpenAI团队在他们的模型卡片中指出的:
⚠️ 重要提示
由于像GPT - 2这样的大规模语言模型无法区分事实和虚构,我们不支持要求生成的文本必须为真实内容的用例。
此外,像GPT - 2这样的语言模型反映了它们所训练的系统中固有的偏差,因此我们不建议将它们部署到与人类交互的系统中,除非部署者首先对与预期用例相关的偏差进行研究。我们发现7.74亿参数和15亿参数版本在性别、种族和宗教偏差探测方面没有统计学上的显著差异,这意味着在处理对人类属性偏差敏感的用例时,所有版本的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个赞的出站链接中抓取了所有网页。请注意,所有维基百科页面都从这个数据集中移除了,因此模型没有在维基百科的任何部分上进行训练。最终的数据集(称为WebText)包含40GB的文本,但尚未公开发布。你可以在这里找到WebText中前1000个域名的列表。
训练过程
预处理
文本使用字节级的字节对编码(BPE)(用于处理Unicode字符)进行分词,词汇表大小为50257。输入是1024个连续标记的序列。
更大的模型在256个云TPU v3核心上进行训练。训练时长未公开,训练的具体细节也未公布。
评估结果
该模型在未经任何微调(零样本)的情况下取得了以下结果:
数据集 | LAMBADA | LAMBADA | CBT - CN | CBT - NE | WikiText2 | PTB | enwiki8 | text8 | WikiText103 | 1BW |
---|---|---|---|---|---|---|---|---|---|---|
(指标) | (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 |
BibTeX引用和引用信息
@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}
}
🔧 技术细节
模型类型
GPT - 2是基于Transformer架构的自回归语言模型。
训练数据
OpenAI团队从Reddit上获得至少3个赞的出站链接中抓取网页构建训练数据,移除了所有维基百科页面,最终数据集WebText大小为40GB,但未公开。
训练过程
文本使用字节级BPE分词,词汇表大小50257,输入序列长度1024个标记。更大模型在256个云TPU v3核心上训练,训练时长和具体细节未公开。
评估指标
使用PPL(困惑度)、ACC(准确率)、BPB(每字节位数)、BPC(每字符位数)等指标在多个数据集上进行评估。
📄 许可证
本项目采用MIT许可证。



