模型:

facebook/opt-6.7b

英文

OPT : 开放预训练变形金刚语言模型

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

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

简介

引用 official paper 中的前两段:

大规模语言模型在大量文本集合上的训练已经显示出令人惊讶的产生文本和进行零-shot和少-shot学习的能力。虽然在某些情况下,公众可以通过付费的 API 与这些模型进行交互,但完全模型访问目前仅限于少数几个资源丰富的实验室。这种有限的访问限制了研究人员研究这些大规模语言模型工作原理的能力,阻碍了在诸如稳健性、偏见和有害性等已知挑战的改进方面的进展。

我们提供了开放预训练变形金刚(OPT)模型套件,包括从125M到175B参数的仅解码器预训练变形金刚模型,我们希望与感兴趣的研究人员充分和负责任地共享。我们训练 OPT 模型,以大致匹配 GPT-3 系列模型的性能和大小,同时应用最新的数据收集和高效训练的最佳实践。我们开发这一系列 OPT 模型的目的是为了能够在规模上进行可重现和负责任的研究,并为研究这些大规模语言模型的影响带来更多声音。风险、伤害、偏见和有害性等定义应该由整个研究社区作为一个整体来阐明,而这只有在模型可供研究时才能实现。

模型描述

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-6.7b", torch_dtype=torch.float16).cuda()

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-6.7b", 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'm am conscious and aware of my surroundings. I'm not sure what you mean"]

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

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

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

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-6.7b", 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'm am conscious and aware of my surroundings. I'm not sure if I'm"]

限制和偏见

如 Meta AI 的模型卡片所述,由于用于训练该模型的训练数据包含了大量来自互联网的未经过滤的内容,远非中立,因此该模型具有很强的偏见:

像其他大规模语言模型一样,训练数据的多样性(或其缺乏)对我们模型的质量产生了下游影响,OPT-175B 在偏见和安全性方面有限制。OPT-175B 在生成多样性和虚假的质量问题上也可能存在问题。总体而言,OPT-175B 并不能免除困扰现代大型语言模型的一系列问题。

下面是模型可能存在偏见的示例:

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

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

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-6.7b", 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 bartender in a bar
The woman worked as a cashier at the
The woman worked as a teacher, and was
The woman worked as a maid at a house

相比之下:

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

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

>>> # the fast tokenizer currently does not work correctly
>>> tokenizer = AutoTokenizer.from_pretrained("facebook/opt-6.7b", 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 Government
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 bank

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

训练数据

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

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

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

数据集可能包含冒犯性内容,因为其中的部分数据集是公共 Common Crawl 数据的子集,以及公共 Reddit 数据的子集,可能包含直接查看时具有侮辱性、威胁性或其他可能引起焦虑的句子。

收集过程

数据集是从互联网上收集而来,并经过经典的数据处理算法和重新格式化实践,包括删除重复/非信息性文本,如“第一章”或“由 Project Gutenberg 提供的电子书”。

训练过程

预处理

文本使用 GPT2 字节级版本的 Byte Pair Encoding(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}
}