Hugging Face 的開源文字生成與大型語言模型生態系統
[2023 年 7 月 24 日更新:添加了 Llama 2。]
文字生成和會話技術已經存在很久了。早期使用這些技術面臨的挑戰是,透過推理引數和判別偏差來控制文字的連貫性和多樣性。連貫性更高的輸出缺乏創造性,更接近原始訓練資料,聽起來也不那麼像人類。最近的發展克服了這些挑戰,使用者友好的介面讓每個人都能嘗試這些模型。ChatGPT 等服務最近讓 GPT-4 等強大的模型備受關注,並導致 Llama 等開源替代方案爆炸式普及。我們認為這些技術將長期存在,並越來越多地融入到日常產品中。
本文分為以下幾個部分:
文字生成背景簡介
文字生成模型本質上是透過完成不完整的文字或根據給定的指令或問題從頭開始生成文字來訓練的。完成不完整文字的模型稱為因果語言模型,著名的例子有 OpenAI 的 GPT-3 和 Meta AI 的 Llama。
在我們繼續之前,您需要了解一個概念,那就是微調。這是一個採用非常大的模型並將該基礎模型中包含的知識轉移到另一個用例的過程,我們稱之為下游任務。這些任務可以以指令的形式出現。隨著模型規模的增長,它可以更好地泛化到預訓練資料中不存在但在微調過程中學習到的指令。
因果語言模型透過一種稱為人類反饋強化學習 (RLHF) 的過程進行調整。這種最佳化主要是針對文字聽起來有多自然和連貫,而不是答案的有效性。解釋 RLHF 的工作原理超出了本部落格文章的範圍,但您可以在此處找到有關此過程的更多資訊。
例如,GPT-3 是一個因果語言基礎模型,而 ChatGPT(GPT 系列模型的 UI)後臺的模型則是透過 RLHF 對可能包含對話或指令的提示進行微調的。區分這些模型非常重要。
在 Hugging Face Hub 上,您可以找到因果語言模型和經過指令微調的因果語言模型(我們將在本部落格文章後面提供連結)。Llama 是首批超越/媲美閉源模型的開源大型語言模型之一。一個由 Together 領導的研究小組建立了 Llama 資料集的複製品,名為 Red Pajama,並在此基礎上訓練了大型語言模型和指令微調模型。您可以在此處閱讀更多相關資訊,並在Hugging Face Hub 上找到模型檢查點。截至本部落格文章撰寫時,三個最大的開源許可證的因果語言模型是 MosaicML 的 MPT-30B、Salesforce 的 XGen 和阿聯酋 TII 的 Falcon,它們都在 Hugging Face Hub 上完全開源。最近,Meta 釋出了 Llama 2,這是一款開放訪問的模型,其許可證允許商業用途。截至目前,Llama 2 在不同的基準測試中超越了所有其他開源大型語言模型。Hugging Face Hub 上的 Llama 2 檢查點與 transformers 相容,最大的檢查點可在 HuggingChat 供所有人試用。您可以在這篇部落格文章中閱讀更多關於如何使用 Llama 2 進行微調、部署和提示的資訊。
第二種文字生成模型通常被稱為文字到文字生成模型。這些模型在文字對上進行訓練,可以是問題和答案,也可以是指令和響應。最流行的模型是 T5 和 BART(目前它們都不是最先進的)。谷歌最近釋出了 FLAN-T5 系列模型。FLAN 是一種最近開發的指令微調技術,FLAN-T5 本質上是使用 FLAN 進行微調的 T5。目前,FLAN-T5 系列模型是目前最先進的開源模型,可在 Hugging Face Hub 上找到。請注意,這些模型與指令微調的因果語言模型不同,儘管輸入-輸出格式可能看起來相似。您可以在下面看到這些模型的工作原理圖。
擁有更多不同版本的開源文字生成模型,使公司能夠保持資料私密性,更快地將模型適應其領域,並降低推理成本,而不是依賴於付費的封閉式 API。Hugging Face Hub 上的所有開源因果語言模型都可以在此處找到,文字到文字生成模型可以在此處找到。
Hugging Face 與 BigScience 和 BigCode 共同打造的模型💗
Hugging Face 共同領導了兩項科學計劃:BigScience 和 BigCode。這兩項計劃的成果是建立了兩個大型語言模型:BLOOM 🌸 和 StarCoder 🌟。BLOOM 是一個因果語言模型,訓練資料涵蓋 46 種人類語言和 13 種程式語言。它是第一個引數超過 GPT-3 的開源模型。您可以在 BLOOM 文件中找到所有可用的檢查點。
StarCoder 是一個語言模型,其訓練資料來源於 GitHub 上的寬鬆程式碼(包含 80 多種程式語言 🤯),訓練目標是“填補中間部分”。它沒有經過指令微調,因此更多地充當一個編碼助手,用於完成給定的程式碼,例如將 Python 翻譯成 C++,解釋概念(什麼是遞迴),或者充當終端。您可以在此應用程式中嘗試所有 StarCoder 檢查點。它還附帶一個 VSCode 擴充套件。
本部落格文章中提及的所有模型的使用片段都可在模型儲存庫或 Hugging Face 中該模型型別的文件頁面中找到。
許可
許多文字生成模型要麼是閉源的,要麼其許可證限制商業用途。幸運的是,開源替代方案開始出現,並受到社群的歡迎,成為進一步開發、微調或與其他專案整合的構建塊。下面您可以找到一些具有完全開源許可證的大型因果語言模型列表:
有兩個程式碼生成模型,BigCode 的 StarCoder 和 Salesforce 的 Codegen。除了指令微調的 Codegen 之外,這兩個模型都有不同大小的檢查點,並且都是開源或 open RAIL 許可證。
Hugging Face Hub 還託管了各種針對指令或聊天用途進行微調的模型。它們根據您的需求有不同的風格和大小。
- Mosaic ML 的 MPT-30B-Chat 使用 CC-BY-NC-SA 許可證,不允許商業用途。但是,MPT-30B-Instruct 使用 CC-BY-SA 3.0 許可證,可以用於商業用途。
- Falcon-40B-Instruct 和 Falcon-7B-Instruct 都使用 Apache 2.0 許可證,因此也允許商業用途。
- 另一個受歡迎的模型家族是 OpenAssistant,其中一些是基於 Meta 的 Llama 模型使用自定義指令調優資料集構建的。由於原始 Llama 模型只能用於研究,因此基於 Llama 構建的 OpenAssistant 檢查點沒有完整的開源許可證。但是,有些 OpenAssistant 模型是基於 Falcon 或 pythia 等開源模型構建的,它們使用寬鬆許可證。
- StarChat Beta 是 StarCoder 的指令微調版本,具有 BigCode Open RAIL-M v1 許可證,允許商業用途。Salesforce 的指令微調編碼模型 XGen 模型僅允許研究用途。
如果您想在現有指令資料集上微調模型,您需要了解資料集是如何編譯的。一些現有指令資料集是眾包的,或使用現有模型(例如 ChatGPT 背後的模型)的輸出。斯坦福大學建立的 ALPACA 資料集是透過 ChatGPT 背後的模型輸出建立的。此外,還有各種具有開源許可證的眾包指令資料集,例如 oasst1(由數千人自願建立!)或 databricks/databricks-dolly-15k。如果您想自己建立資料集,可以檢視 Dolly 的資料集卡片,瞭解如何建立指令資料集。在這些資料集上微調的模型可以分發。
您可以在下面找到一些開源/開放訪問模型的綜合表格。
模型 | 資料集 | 許可證 | 用途 |
---|---|---|---|
Falcon 40B | Falcon RefinedWeb | Apache-2.0 | 文字生成 |
SalesForce XGen 7B | C4、RedPajama 及更多混合 | Apache-2.0 | 文字生成 |
MPT-30B | C4、RedPajama 及更多混合 | Apache-2.0 | 文字生成 |
Pythia-12B | Pile | Apache-2.0 | 文字生成 |
RedPajama INCITE 7B | RedPajama | Apache-2.0 | 文字生成 |
OpenAssistant Falcon 40B | oasst1 和 Dolly | Apache-2.0 | 文字生成 |
StarCoder | The Stack | BigCode OpenRAIL-M | 程式碼生成 |
Salesforce CodeGen | Starcoder Data | Apache-2.0 | 程式碼生成 |
FLAN-T5-XXL | gsm8k、lambada 和 esnli | Apache-2.0 | 文字到文字生成 |
MPT-30B Chat | ShareGPT-Vicuna、OpenAssistant Guanaco 及更多 | CC-By-NC-SA-4.0 | 聊天 |
MPT-30B Instruct | duorc、competition_math、dolly_hhrlhf | CC-By-SA-3.0 | 指令 |
Falcon 40B Instruct | baize | Apache-2.0 | 指令 |
Dolly v2 | Dolly | MIT | 文字生成 |
StarChat-β | OpenAssistant Guanaco | BigCode OpenRAIL-M | 程式碼指令 |
Llama 2 | 未公開資料集 | 自定義 Meta 許可證(允許商業用途) | 文字生成 |
Hugging Face 生態系統中用於大型語言模型服務的工具
文字生成推理 (Text Generation Inference)
對於這些大型模型來說,併發使用者的響應時間和延遲是一個巨大的挑戰。為了解決這個問題,Hugging Face 釋出了 Text Generation Inference (TGI),這是一個基於 Rust、Python 和 gRPc 構建的開源大型語言模型服務解決方案。TGI 已整合到 Hugging Face 的推理解決方案 Inference Endpoints 和 Inference API 中,因此您可以直接通過幾次點選建立帶有最佳化推理的端點,或者簡單地向 Hugging Face 的 Inference API 傳送請求即可從中受益,而無需將 TGI 整合到您的平臺。
TGI 目前為 Hugging Face 的大型語言模型開源聊天 UI HuggingChat 提供支援。該服務目前使用 OpenAssistant 的一個模型作為後端模型。您可以隨心所欲地與 HuggingChat 聊天,並啟用網頁搜尋功能,以獲取使用當前網頁內容的響應。您還可以向模型作者提供每個響應的反饋,以便他們訓練出更好的模型。HuggingChat 的 UI 也是開源的,我們正在為 HuggingChat 開發更多功能,以允許更多功能,例如在聊天中生成影像。
最近,HuggingChat 的 Docker 模板已釋出到 Hugging Face Spaces。這允許任何人通過幾次點選部署基於大型語言模型的例項並進行自定義。您可以在此處基於各種大型語言模型(包括 Llama 2)建立您自己的大型語言模型例項。
如何找到最佳模型?
Hugging Face 託管了一個 LLM 排行榜。此排行榜是透過在 Hugging Face 的叢集上評估社群提交的模型在文字生成基準上的表現而建立的。如果您找不到您正在尋找的語言或領域,您可以在此處進行篩選。
您還可以檢視大型語言模型效能排行榜,該排行榜旨在評估 Hugging Face Hub 上可用的大型語言模型的延遲和吞吐量。
引數高效微調 (PEFT)
如果您想在您的指令資料集上微調現有的大型模型,那麼在消費級硬體上進行微調並隨後部署它們幾乎是不可能的(因為指令模型與用於微調的原始檢查點大小相同)。PEFT 是一個允許您使用引數高效微調技術的庫。這意味著,您無需訓練整個模型,而是可以訓練少量額外的引數,從而以極小的效能下降實現更快的訓練。透過 PEFT,您可以進行低秩適應 (LoRA)、字首調優、提示調優和 p-tuning。
您可以檢視更多資源,瞭解文字生成的更多資訊。
更多資源