模型:
gpt2
在这里测试全部的生成能力: https://transformer.huggingface.co/doc/gpt2-large
使用因果语言建模(CLM)目标在英语语言上进行预训练的预训练模型。它是在 this paper 年引入,并在 this page 年首次发布。
声明:发布GPT-2的团队还为其模型撰写了 model card 。来自该模型卡的内容由Hugging Face团队撰写,以补充他们提供的信息并提供特定的偏见示例。
GPT-2是一个在大规模英文数据集上进行预训练的变压器模型,采用自监督方式。这意味着它只是对原始文本进行预训练,没有以任何方式对其进行人工标注(这就是为什么它可以使用大量公开可用的数据),它使用了自动化过程从这些文本中生成输入和标签。更准确地说,它是通过猜测句子中的下一个单词进行训练的。
更准确地说,输入是一定长度的连续文本序列,目标是相同的序列,向右移动一个标记(单词或部分单词)。该模型内部使用掩码机制,确保标记i的预测仅使用从1到i的输入,而不使用未来的标记。
通过这种方式,模型学习了英语语言的内部表示,可以用来提取对下游任务有用的特征。该模型最擅长于它的预训练目标,即从提示中生成文本。
这是GPT-2最小的版本,具有124M个参数。
相关模型: GPT-Large 、 GPT-Medium 和 GPT-XL
您可以使用原始模型进行文本生成或将其微调为下游任务。查看 model hub 以寻找您感兴趣的任务的微调版本。
您可以使用此模型直接进行文本生成的流水线。由于生成依赖于一定的随机性,我们设置了种子以确保可重复性:
>>> 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团队在他们的 model card 中指出的那样:
由于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个积分。请注意,所有维基百科页面都从该数据集中删除,因此模型没有在任何维基百科文章上进行训练。生成的数据集(称为WebText)共有40GB的文本,但尚未公开发布。您可以在 here 中找到WebText中存在的前1000个域名的列表。
使用字节级的Byte Pair Encoding(BPE)(用于Unicode字符)对文本进行分词处理,词汇表大小为50,257。输入是由1024个连续标记组成的序列。
较大的模型在256个云TPU v3核心上进行训练。训练持续时间未公开,具体的训练细节也没有透露。
该模型在没有任何微调的情况下(零-shot)实现了以下结果:
Dataset | LAMBADA | LAMBADA | CBT-CN | CBT-NE | WikiText2 | PTB | enwiki8 | text8 | WikiText103 | 1BW |
---|---|---|---|---|---|---|---|---|---|---|
(metric) | (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 |
@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} }