英文

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

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

免责声明:OPT发布团队编写了一份官方模型卡片,位于 paper 的附录 D 中。本模型卡片的内容由 Hugging Face 团队编写。

简介

引用 official paper 的前两段:

在大规模文本集合上训练的大型语言模型显示出令人惊讶的文本生成和零样本学习能力。尽管某些情况下公众可以通过付费 API 与这些模型进行交互,但完全模型访问目前只限于几个高资源实验室。这种有限的访问权限制了研究人员研究这些大型语言模型的工作原理及其原因,阻碍了改进诸如鲁棒性、偏见和有害性等已知挑战的进展。

我们提供了开放预训练 Transformer(OPT),一套仅解码器预训练的 Transformer 模型,参数范围从125M到175B。我们的目标是全面而负责地与感兴趣的研究人员共享 OPT 模型,我们训练这些 OPT 模型的目标是与 GPT-3 类型的模型在性能和大小上大致匹配,同时还应用了最新的数据收集和高效训练的最佳实践。我们开发这套 OPT 模型的目的是为了实现规模化、可重现和负责任的研究,并在研究 LLN 影响时汇集更多声音。关于风险、伤害、偏见和有害性等定义,应由整个研究社区共同明确,这也只有在模型可供研究时才有可能实现。

模型描述

OPT 主要使用英文文本进行预训练,但仍然通过 CommonCrawl 中的少量非英文数据保留了其他语言的存在。该模型使用因果语言模型(CLM)目标进行预训练。OPT 属于与 GPT-3 类似的仅解码器模型家族。因此,它使用了自监督的因果语言模型目标进行预训练。

在评估方面,OPT 参考了 GPT-3 的数据集和整体实验设置。更多详细信息,请阅读 official paper

用途和限制

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

如何使用

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

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

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

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-66b", 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-66b", torch_dtype=torch.float16).cuda()

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-66b", 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-66b", torch_dtype=torch.float16).cuda()

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-66b", 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-66b", torch_dtype=torch.float16).cuda()

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-66b", 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,包括超过10K本未出版书籍,
  • CC-Stories,其中包含与 Winograd schemas 的故事风格相匹配的 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}
}