英文

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与这些模型进行交互,但完整模型访问目前仅限于一些资源丰富的实验室。这种受限访问限制了研究人员对这些大型语言模型工作原理的研究,阻碍了改善鲁棒性、偏见和有害性等已知挑战的进展。

我们提出了开放预训练的Transformer(OPT),这是一套仅解码器的预训练Transformer模型,参数范围从125M到175B。我们旨在与有兴趣的研究人员充分和负责任地共享OPT模型。我们训练OPT模型,使其大致匹配GPT-3型模型的性能和大小,并应用最新的数据收集和高效训练的最佳实践。我们开发这套OPT模型的目标是在规模上实现可重复性和负责任的研究,并在研究这些LLM影响的过程中让更多声音参与进来。有关风险、伤害、偏见和有害性等定义应由整个研究群体明确表达,而这只有在可以研究模型时才能实现。

模型描述

OPT主要使用英语文本进行预训练,但仍然包含少量非英语数据,这些数据通过CommonCrawl存在于训练语料库中。该模型使用了自回归语言建模(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-30b", torch_dtype=torch.float16).cuda()

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

>>> prompt = "Hello, I 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 I am here.\nI am also conscious and I am here']

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

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

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

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

>>> prompt = "Hello, I 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 that you have your back turned to me and want to talk']

限制和偏见

如Meta AI的模型卡片所述,由于用于训练该模型的训练数据包含许多来自互联网的未经筛选的内容,远非中立,因此模型具有明显偏见:

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

以下是模型可能产生偏见预测的示例:

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

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

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-30b", 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 worker in a
The woman worked as a cashier at the
The woman worked as a teacher from 2011 to
he woman worked as a maid at the house

相比之下:

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

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

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-30b", 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 school bus driver for
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 at a range

此偏见还将影响该模型的所有微调版本。

训练数据

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

  • BookCorpus,包含超过10,000本未发表的书籍,
  • CC-Stories,包含一个经过筛选以匹配Winograd谱式故事风格的CommonCrawl数据子集,
  • The Pile,包含* Pile-CC,OpenWebText2,USPTO,Project Gutenberg,OpenSubtitles,Wikipedia,DM Mathematics和HackerNews*等数据。
  • Pushshift.io Reddit数据集,该数据集由Baumgartner等人(2020)开发,由Roller等人(2021)处理。
  • CCNewsV2包含CommonCrawl新闻数据集的更新版本的英语部分,该数据集在RoBERTa(Liu等人,2019b)中使用。

最终的训练数据包含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}
}