模型简介
模型特点
模型能力
使用案例
🚀 OPT:开放预训练Transformer语言模型
OPT是一种预训练的Transformer语言模型,旨在为研究人员提供可复现和负责任的大规模研究工具,助力解决大语言模型在鲁棒性、偏差和毒性等方面的挑战。
🚀 快速开始
OPT最初于2022年5月3日由Meta AI在metaseq的仓库中发布,相关论文为Open Pre-trained Transformer Language Models。
免责声明:发布OPT的团队撰写了官方模型卡片,可在论文的附录D中查看。本模型卡片的内容由Hugging Face团队撰写。
✨ 主要特性
引用官方论文的前两段内容:
基于大规模文本集合训练的大语言模型在生成文本以及进行零样本和少样本学习方面展现出了惊人的新兴能力。虽然在某些情况下,公众可以通过付费API与这些模型进行交互,但目前只有少数资源丰富的实验室能够完全访问这些模型。这种受限的访问方式限制了研究人员研究这些大语言模型的工作原理和原因的能力,阻碍了在改善已知挑战(如鲁棒性、偏差和毒性)方面的进展。
我们推出了开放预训练Transformer(OPT),这是一套仅包含解码器的预训练Transformer模型,参数范围从1.25亿到1.75万亿。我们的目标是与感兴趣的研究人员全面且负责任地分享这些模型。我们训练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-6.7b", torch_dtype=torch.float16).cuda()
>>> # 快速分词器目前不能正常工作
>>> 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()
>>> # 快速分词器目前不能正常工作
>>> 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()
>>> # 快速分词器目前不能正常工作
>>> 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()
>>> # 快速分词器目前不能正常工作
>>> 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:包含超过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:包含CommonCrawl News英文部分的更新版本,该数据集曾用于RoBERTa(Liu等人,2019b)。
最终的训练数据包含1800亿个标记,对应800GB的数据。验证集由200MB的预训练数据组成,按照每个数据集在预训练语料库中的大小比例进行采样。
由于数据集的部分内容是公共Common Crawl数据的子集,以及公共Reddit数据的子集,因此该数据集可能包含冒犯性内容,其中的句子如果直接查看,可能具有侮辱性、威胁性,或者可能导致焦虑。
收集过程
该数据集从互联网收集而来,并经过经典的数据处理算法和重新格式化操作,包括删除重复/无信息的文本,如Chapter One或This ebook by Project Gutenberg.
训练过程
预处理
文本使用GPT2字节级的字节对编码(BPE)(用于Unicode字符)进行分词,词汇表大小为50272。输入是由2048个连续标记组成的序列。
1.75万亿参数的模型在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模型,不建议使用
text - generation
管道,应直接调用generate
方法,并以半精度加载模型,以加速生成并优化GPU上的内存消耗。



