Model Overview
Model Features
Model Capabilities
Use Cases
🚀 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內存消耗。



