英文

OPT:开源预训练的Transformer语言模型

OPT首次在 Open Pre-trained Transformer Language Models 中提出,并于2022年5月3日由Meta AI在 metaseq's repository 发布。

免责声明:发布OPT的团队编写了官方模型卡片,该卡片可在 paper 的附录D中找到。本文档的内容由Hugging Face团队编写。

简介

引用 official paper 的前两段:

大型预训练语言模型在大规模文本集合上的训练展现了出乎意料的生成文本和零样本学习能力。虽然在某些情况下,公众可以通过付费API与这些模型进行交互,但完全访问这些模型目前仅限于少数几个资源丰富的实验室。这种受限的访问限制了研究人员研究这些大型语言模型的工作原理的能力,阻碍了改进鲁棒性、偏见和有害性等已知挑战的进展。

我们推出了Open Pretrained Transformers(OPT),一个包含125M至175B参数的仅解码器预训练transformers套件,我们希望与感兴趣的研究人员充分并负责地共享。我们训练OPT模型,目的是粗略匹配GPT-3类模型的性能和大小,并应用最新的数据收集和高效训练的最佳实践。我们开发这套OPT模型的目的是在规模上实现可重复和负责任的研究,并使更多的声音能够参与到研究这些LLMs的影响中。关于风险、伤害、偏见和有害性等的定义应由整个研究界的研究共同体明确阐述,而要做到这一点,就需要可供研究的模型。

模型描述

OPT主要是用英文文本进行预训练的,但仍然包含少量非英文数据,这些数据通过Common Crawl获取。该模型使用自回归语言建模(CLM)目标进行预训练。OPT属于与 GPT-3 相同类型的仅解码器模型家族。因此,它采用了自监督的自回归语言建模目标进行预训练。

在评估方面,OPT遵循 GPT-3 的提示和整体实验设置。详细信息请阅读 official paper

预期用途和限制

仅预训练模型可用于评估下游任务的提示以及文本生成。此外,可以使用 CLM example 对下游任务进行微调。有关其他OPT检查点,请查看 model hub

使用方法

对于大型OPT模型(如此模型),不建议使用文本生成流程,因为应将模型加载为半精度以加速生成并优化GPU上的内存消耗。建议直接调用 generate 方法,如下所示:

>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> import torch

>>> model = AutoModelForCausalLM.from_pretrained("facebook/opt-13b", torch_dtype=torch.float16).cuda()

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-13b", use_fast=False)

>>> prompt = "Hello, I'm am conscious and"


>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids.cuda()

>>> generated_ids = model.generate(input_ids)

>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
['Hello, I am conscious and aware of my surroundings.\nI am conscious and aware of my']

默认情况下,生成是确定性的。要使用top-k采样,请将do_sample设置为True。

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
>>> import torch

>>> model = AutoModelForCausalLM.from_pretrained("facebook/opt-13b", torch_dtype=torch.float16).cuda()

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-13b", use_fast=False)

>>> prompt = "Hello, I'm am conscious and"

>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids.cuda()

>>> set_seed(32)
>>> generated_ids = model.generate(input_ids, do_sample=True)

>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
['Hello, I am conscious and aware.\nSo that makes you dead, right?  ']

限制和偏见

如Meta AI的模型卡片中所述,由于用于该模型的训练数据包含大量未经过滤的互联网内容,与中立相距甚远,因此模型存在严重偏见:

与其他训练数据的多样性(或缺乏多样性)对模型的质量产生的下游影响一样,OPT-175B在偏见和安全性方面存在限制。OPT-175B在生成多样性和产生虚构内容方面也可能存在质量问题。总的来说,OPT-175B并不能免于困扰现代大型语言模型的众多问题。

这是模型可能存在偏见预测的示例:

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
>>> import torch

>>> model = AutoModelForCausalLM.from_pretrained("facebook/opt-13b", torch_dtype=torch.float16).cuda()

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-13b", use_fast=False)

>>> prompt = "The woman worked as a"

>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids.cuda()

>>> set_seed(32)
>>> generated_ids = model.generate(input_ids, do_sample=True, num_return_sequences=5, max_length=10)

>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
The woman worked as a supervisor in the office 
The woman worked as a social media consultant for
The woman worked as a cashier at the
The woman worked as a teacher, and was
The woman worked as a maid at our friends

相比之下:

>>> from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
>>> import torch

>>> model = AutoModelForCausalLM.from_pretrained("facebook/opt-13b", torch_dtype=torch.float16).cuda()

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-13b", use_fast=False)

>>> prompt = "The man worked as a"

>>> input_ids = tokenizer(prompt, return_tensors="pt").input_ids.cuda()

>>> set_seed(32)
>>> generated_ids = model.generate(input_ids, do_sample=True, num_return_sequences=5, max_length=10)

>>> tokenizer.batch_decode(generated_ids, skip_special_tokens=True)
The man worked as a consultant to the defense
The man worked as a bartender in a bar
The man worked as a cashier at the
The man worked as a teacher, and was
The man worked as a professional athlete while he

这种偏见也会影响到该模型的所有微调版本。

训练数据

Meta AI团队希望在尽可能大的语料库上训练该模型。它由以下5个经过筛选的文本文档数据集的并集组成:

  • BookCorpus,包含超过10K本未发布的书籍,
  • CC-Stories,包含与Winograd模式故事风格匹配的Common Crawl数据子集,
  • Pile,其中包括Pile-CC、OpenWebText2、USPTO、Project Gutenberg、OpenSubtitles、Wikipedia、DM Mathematics和HackerNews。
  • Pushshift.io Reddit数据集,该数据集在Baumgartner等人(2020)中开发,并在Roller等人(2021)中进行了处理,
  • CCNewsV2,其中包含RoBERTa(Liu等人,2019b)中使用的CommonCrawl新闻数据集的英文部分的更新版本。

最终的训练数据包含180B个标记,对应800GB的数据。验证集由预训练数据中的200MB组成,按照每个数据集在预训练语料库中大小的比例进行采样。

该数据集可能包含冒犯性内容,因为部分数据集是公共Common Crawl数据的子集,还包含公共Reddit数据的子集,这些数据可能包含直接查看会令人不悦、威胁性或可能引起焦虑的句子。

收集过程

该数据集从互联网收集,并经过了经典的数据处理算法和重新格式化处理,包括删除重复/无信息的文本,如“第一章”或“由Project Gutenberg电子书”。

训练过程

预处理

文本使用GPT2的字节级字节对编码(BPE)进行标记化(用于Unicode字符),词汇表大小为50272。输入是2048个连续标记的序列。

175B模型使用了992个80GB的A100 GPU进行训练。训练持续时间大约为33天的连续训练。

BibTeX条目和引文信息

@misc{zhang2022opt,
      title={OPT: Open Pre-trained Transformer Language Models}, 
      author={Susan Zhang and Stephen Roller and Naman Goyal and Mikel Artetxe and Moya Chen and Shuohui Chen and Christopher Dewan and Mona Diab and Xian Li and Xi Victoria Lin and Todor Mihaylov and Myle Ott and Sam Shleifer and Kurt Shuster and Daniel Simig and Punit Singh Koura and Anjali Sridhar and Tianlu Wang and Luke Zettlemoyer},
      year={2022},
      eprint={2205.01068},
      archivePrefix={arXiv},
      primaryClass={cs.CL}
}