language: zh
inference: false
tags:
license: other
commercial: false
OPT : 开放预训练Transformer语言模型
OPT首次在论文《开放预训练Transformer语言模型》中提出,并于2022年5月3日由Meta AI在metaseq代码库中首次发布。
免责声明:发布OPT的团队撰写了一份官方模型卡片,可在论文附录D中查看。
本模型卡片内容由Hugging Face团队撰写。
简介
引用官方论文的前两段:
在海量文本上训练的大型语言模型展现出惊人的涌现能力,能够生成文本并进行零样本和少样本学习。虽然在某些情况下公众可以通过付费API与这些模型交互,但目前完整模型访问权限仅限于少数资源高度集中的实验室。这种受限访问限制了研究人员研究这些大型语言模型工作原理的能力,阻碍了在鲁棒性、偏见和毒性等已知挑战领域的改进进展。
我们提出了开放预训练Transformer(OPT),这是一套包含1.25亿至1750亿参数的仅解码器预训练Transformer模型,旨在与感兴趣的研究人员全面且负责任地分享。我们训练OPT模型以大致匹配GPT-3类模型的性能和规模,同时应用数据收集和高效训练的最新最佳实践。开发这套OPT模型的目的是实现可复现和负责任的大规模研究,并让更多声音参与研究这些大型语言模型的影响。风险、危害、偏见和毒性等定义应由整个研究社区共同阐明,而这只有在模型可供研究时才可能实现。
模型描述
OPT主要使用英文文本进行预训练,但训练语料库中通过CommonCrawl仍包含少量非英文数据。模型使用因果语言建模(CLM)目标进行预训练。
OPT属于与GPT-3相同的仅解码器模型家族。因此,它使用自监督的因果语言建模目标进行预训练。
在评估方面,OPT遵循GPT-3的做法,使用其提示和整体实验设置。更多细节请阅读官方论文。
预期用途与限制
仅预训练模型可用于提示评估下游任务以及文本生成。此外,该模型可以使用CLM示例在下游任务上进行微调。对于所有其他OPT检查点,请查看模型中心。
使用方法
您可以直接使用pipeline进行文本生成。
>>> from transformers import pipeline
>>> generator = pipeline('text-generation', model="facebook/opt-350m")
>>> generator("我们晚餐吃什么?")
[{'generated_text': "我们晚餐吃什么?\n我要吃牛排和沙拉。\n我要""}]
默认情况下,生成是确定性的。要使用top-k采样,请将do_sample
设置为True
。
>>> from transformers import pipeline, set_seed
>>> set_seed(32)
>>> generator = pipeline('text-generation', model="facebook/opt-350m", do_sample=True)
>>> generator("我们晚餐吃什么?")
[{'generated_text': "我们晚餐吃什么?\n\n随着春天快速临近,只适合"}]
限制与偏见
正如Meta AI的模型卡片所述,由于用于训练该模型的数据包含大量来自互联网的未过滤内容,远非中立,因此模型具有强烈偏见:
与其他大型语言模型一样,训练数据的多样性(或缺乏多样性)会对模型质量产生下游影响,OPT-175B在偏见和安全性方面存在限制。OPT-175B在生成多样性和幻觉方面也可能存在质量问题。总的来说,OPT-175B无法避免困扰现代大型语言模型的众多问题。
以下是一个模型可能产生偏见预测的示例:
>>> from transformers import pipeline, set_seed
>>> set_seed(32)
>>> generator = pipeline('text-generation', model="facebook/opt-350m", do_sample=True, num_return_sequences=5)
>>> generator("这位女性从事的职业是")
[{'generated_text': "这位女性担任代课老师,教授那些缺课的孩子。她自己就是老师,"},
{'generated_text': '这位女性在另一家公司担任保安,平均每小时收入约13美元'},
{'generated_text': '这位女性担任接待员,她至少可以等一两周再'},
{'generated_text': '这位女性在养老院担任经理/实习生/职业发展教练/顾问'},
{'generated_text': '这位女性是女佣,必须打扫房子,但你可以告诉她去做'}]
相比之下:
>>> from transformers import pipeline, set_seed
>>> set_seed(32)
>>> generator = pipeline('text-generation', model="facebook/opt-350m", do_sample=True, num_return_sequences=5)
>>> generator("这位男性从事的职业是")
[{'generated_text': '这位男性担任国家橄榄球联盟特许经营的安全警卫。他是'},
{'generated_text': '这位男性在另一家公司担任保安,工作表现优秀。\n我记得当'},
{'generated_text': '这位男性担任"秘密特工",但同时他也在努力保护'},
{'generated_text': '这位男性在杂货店担任经理/操作员/服务员,做了很多'},
{'generated_text': '这位男性在事故现场附近担任保镖——他怎么能做到这一点是'}]
这种偏见也会影响该模型的所有微调版本。
训练数据
Meta AI团队希望尽可能在大规模语料库上训练该模型。它由以下5个经过过滤的文本文档数据集组成:
- BookCorpus,包含超过1万本未出版的书籍,
- 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,包含用于RoBERTa(Liu等人,2019b)的CommonCrawl新闻数据集的英文部分更新版本
最终训练数据包含1800亿个标记,对应800GB数据。验证集由200MB预训练数据组成,按比例从预训练语料库中的每个数据集中采样。
数据集中可能包含冒犯性内容,因为部分数据集是公共Common Crawl数据的子集,以及公共Reddit数据的子集,这些数据可能包含直接查看时具有侮辱性、威胁性或可能引起焦虑的句子。
收集过程
数据集从互联网收集,并经过经典数据处理算法和重新格式化实践,包括删除重复/非信息性文本,如第一章或本电子书由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}
}