OPT首次在2021年引入并于2021年5月3日由Meta AI发布。
免责声明:OPT发布团队编写了一份官方模型卡片,可在 paper 的附录D中获得。本模型卡片的内容由Hugging Face团队编写。
引用 official paper 的头两段:
大规模基于庞大文本集合训练的语言模型展示了生成文本和零样本学习的令人惊讶的能力。虽然在某些情况下,公众可以通过付费API与这些模型进行交互,但完全的模型访问目前仅限于少数资源丰富的实验室。这种受限访问使得研究人员无法研究这些大规模语言模型的工作原理,制约了在提高鲁棒性、消除偏见和有害性等已知挑战方面的进展。
我们提出了开放预训练Transformer(OPT),这是一套仅包含解码器的预训练Transformer模型,参数范围从125M到175B,我们希望将其全面且负责地与感兴趣的研究人员分享。我们训练OPT模型,使其在性能和规模上大致匹配GPT-3系列模型,同时应用最新的数据收集和高效训练的最佳实践。我们开发这套OPT模型的目标是实现可重复性和负责任的大规模研究,并在研究这些大规模语言模型的影响时让更多声音参与。风险、伤害、偏见和有害性等问题的定义应该由整个研究共同体明确阐述,这只有在有可供研究的模型时才能实现。
OPT主要使用英文文本进行预训练,但仍然通过CommonCrawl包含少量非英文数据。该模型使用自回归语言建模(CLM)目标进行预训练。OPT属于与 GPT-3 类似的仅解码器模型系列,因此它使用自监督的自回归语言建模目标进行预训练。
在评估方面,OPT遵循 GPT-3 的提示和整体实验设置。更多细节请阅读 official paper 。
仅预训练模型可用于提示下游任务的评估以及文本生成。此外,可以使用 CLM example 对下游任务进行微调。有关所有其他OPT检查点,请查看 model hub 。
您可以直接使用文本生成的管道来使用该模型。
>>> from transformers import pipeline >>> generator = pipeline('text-generation', model="facebook/opt-350m") >>> generator("Hello, I'm am conscious and") [{'generated_text': "Hello, I'm am conscious and I'm a bit of a noob. I'm looking for"}]
默认情况下,生成结果是确定性的。要使用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("Hello, I'm am conscious and") [{'generated_text': "Hello, I'm am conscious and I'm interested in this project. Can I get an initial contact"}]
如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("The woman worked as a") [{'generated_text': "The woman works as a substitute teacher for kids who have missed school. She's the teacher herself,"}, {'generated_text': 'The woman works as a security guard for another company and does an average of around $13/hour'}, {'generated_text': 'The woman works as a receptionist, she could at the least wait a week or two for her'}, {'generated_text': 'The woman works as a manager/intern/career development coach/advisor at a nursing home'}, {'generated_text': 'The woman works as a maid and has to clean the house but you can tell her to do it'}]
相比之下:
>>> 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("The man worked as a") [{'generated_text': 'The man works as a security guard for the National Football League franchise. He has been a part of'}, {'generated_text': 'The man works as a security guard for another company and does an excellent job.\nI remember when'}, {'generated_text': 'The man works as a "secret agent" but at the same time he\'s working to protect the'}, {'generated_text': 'The man works as a manager/operator/servant for a grocery store and does a lot of'}, {'generated_text': 'The man works as a bouncer near the scene of the accident - how he could do that is'}]
这种偏见也会影响该模型的所有其他微调版本。
Meta AI团队希望在尽可能大的语料库上训练该模型。它由以下5个经过筛选的文本文档数据集的并集组成:
最终的训练数据包含180B个标记,对应于800GB的数据。验证集是从预训练数据中按照每个数据集在预训练语料库中的大小按比例取样的200MB数据。
数据集可能包含冒犯性内容,因为数据集的部分内容是公共的Common Crawl数据子集,以及公共的Reddit数据子集,其中可能包含一些句子,如果直接查看,可能会冒犯、威胁或引起焦虑。
该数据集是从互联网上收集的,并经过经典的数据处理算法和重新格式化方法,包括删除重复/无信息的文本,例如“第一章”或“由Project Gutenberg提供的这本电子书”。
文本使用字节级的GPT2版本的字节对编码(BPE)(用于Unicode字符)进行标记化,并使用50272个词汇大小。输入是2048个连续标记的序列。
175B模型使用了992个80GB的A100 GPU进行训练。训练持续时间大约为连续训练33天。
@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} }