模型简介
模型特点
模型能力
使用案例
🚀 OPT:开放预训练Transformer语言模型
OPT是一种开放预训练的Transformer语言模型,旨在为研究人员提供可复现和负责任的大规模研究工具。它能帮助解决当前大语言模型在访问受限方面的问题,推动在鲁棒性、偏差和毒性等领域的研究。
🚀 快速开始
OPT由Meta AI于2022年5月3日首次在metaseq的仓库中发布。其相关信息首次在论文Open Pre-trained Transformer Language Models中被介绍。
⚠️ 重要提示
发布OPT的团队撰写了一份官方模型卡片,可在论文的附录D中找到。本模型卡片的内容由Hugging Face团队撰写。
✨ 主要特性
- 开放共享:旨在与感兴趣的研究人员全面且负责任地共享,推动大语言模型的研究。
- 规模多样:包含从1.25亿到1750亿参数不等的解码器预训练Transformer模型。
- 性能匹配:训练目标是大致匹配GPT - 3类模型的性能和规模。
- 数据优化:在数据收集和高效训练方面应用了最新的最佳实践。
📚 详细文档
模型简介
引用官方论文的前两段内容:
基于大规模文本集合训练的大语言模型在生成文本以及进行零样本和少样本学习方面展现出了惊人的新兴能力。尽管在某些情况下,公众可以通过付费API与这些模型进行交互,但目前只有少数资源雄厚的实验室能够完全访问这些模型。这种受限的访问方式限制了研究人员研究这些大语言模型的工作原理和原因的能力,阻碍了在改进已知挑战(如鲁棒性、偏差和毒性)方面的进展。
我们推出了开放预训练Transformer(OPT),这是一套仅含解码器的预训练Transformer模型,参数范围从1.25亿到1750亿。我们的目标是与感兴趣的研究人员全面且负责任地共享这些模型。我们训练OPT模型,使其在性能和规模上大致匹配GPT - 3类模型,同时在数据收集和高效训练方面采用最新的最佳实践。我们开发这套OPT模型的目的是实现可复现和负责任的大规模研究,并让更多人参与到研究这些大语言模型影响的讨论中来。风险、危害、偏差和毒性等定义应该由整个研究界共同明确,而这只有在模型可供研究时才有可能实现。
模型描述
OPT主要使用英文文本进行预训练,但通过CommonCrawl,训练语料库中仍包含少量非英文数据。该模型使用因果语言建模(CLM)目标进行预训练。OPT与GPT - 3同属仅解码器模型家族,因此它使用自监督因果语言建模目标进行预训练。
在评估方面,OPT遵循GPT - 3的方法,使用其提示和整体实验设置。更多详细信息,请阅读官方论文。
预期用途和限制
用途
预训练模型可用于下游任务的评估提示以及文本生成。此外,还可以使用[CLM示例](https://github.com/huggingface/transformers/tree/main/examples/pytorch/language - modeling)对模型进行下游任务的微调。其他OPT检查点可在模型中心查看。
使用方法
对于大型OPT模型,不建议使用text - generation
管道,因为应该以半精度加载模型,以加速生成并优化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']
高级用法
>>> 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:包含超过10000本未出版的书籍。
- CC - Stories:包含CommonCrawl数据的一个子集,经过过滤以匹配Winograd模式的故事风格。
- The Pile:包含Pile - CC、OpenWebText2、USPTO、Project Gutenberg、OpenSubtitles、Wikipedia、DM Mathematics和HackerNews。
- Pushshift.io Reddit数据集:由Baumgartner等人(2020年)开发,并由Roller等人(2021年)处理。
- CCNewsV2:包含RoBERTa(Liu等人,2019b)中使用的CommonCrawl News英文部分的更新版本。
最终的训练数据包含1800亿个标记,对应800GB的数据。验证集由200MB的预训练数据组成,按每个数据集在预训练语料库中的大小比例采样。
由于数据集的部分内容是公共Common Crawl数据的子集,以及公共Reddit数据的子集,因此可能包含冒犯性内容。这些数据可能包含直接查看时具有侮辱性、威胁性或可能引起焦虑的句子。
收集过程
数据集从互联网收集,并经过经典的数据处理算法和重新格式化操作,包括去除重复/无信息的文本,如Chapter One或This ebook by Project Gutenberg.
训练过程
预处理
文本使用GPT2字节级版本的字节对编码(BPE)(用于Unicode字符)进行分词,词汇量大小为50272。输入是由2048个连续标记组成的序列。
1750亿参数的模型在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}
}
📄 许可证
本模型使用其他许可证,且不允许商业使用。
属性 | 详情 |
---|---|
模型类型 | 开放预训练的Transformer语言模型 |
训练数据 | 由BookCorpus、CC - Stories、The Pile、Pushshift.io Reddit数据集和CCNewsV2合并而成,最终包含1800亿个标记,对应800GB的数据 |
⚠️ 重要提示
由于训练数据包含来自互联网的未过滤内容,模型可能存在偏差,且数据集可能包含冒犯性内容。
💡 使用建议
对于大型OPT模型,建议以半精度加载模型,使用
generate
方法进行文本生成,以加速生成并优化GPU内存消耗。



