Hugging Face 的文本生成和大語言模型的開源生態(tài)

[更新于 2023 年 7 月 23 日: 添加 Llama 2。]
文本生成和對(duì)話技術(shù)已經(jīng)出現(xiàn)多年了。早期的挑戰(zhàn)在于通過設(shè)置參數(shù)和分辨偏差,同時(shí)控制好文本忠實(shí)性和多樣性。更忠實(shí)的輸出一般更缺少創(chuàng)造性,并且和原始訓(xùn)練數(shù)據(jù)更加接近,也更不像人話。最近的研究克服了這些困難,并且友好的交互頁面能讓每個(gè)人嘗試這些模型。如 ChatGPT 的服務(wù),已經(jīng)把亮點(diǎn)放在強(qiáng)大的模型如 GPT-4,并且引發(fā)了爆發(fā)式的開源替代品變成主流如 Llama。我們認(rèn)為這些技術(shù)將持續(xù)很長一段時(shí)間,并且會(huì)越來越集成到日常產(chǎn)品中。
這篇博客分成一下幾個(gè)部分:
文本生成的簡明背景
許可證
Hugging Face 的生態(tài)中面向大語言模型的服務(wù)
參數(shù)高效的微調(diào)
文本生成的簡明背景
文本生成模型本質(zhì)上是以補(bǔ)全文本或者根據(jù)提示詞生成文本為目的訓(xùn)練的。補(bǔ)全文本的模型被稱之為條件語言模型 (Causal Language Models),有著名的例子比如 OpenAI 的 GPT-3 和 Meta AI 的 Llama。

下面你最好要了解型微調(diào),這是把一個(gè)大語言模型中的知識(shí)遷移到另外的應(yīng)用場(chǎng)景的過程,我們稱之為一個(gè)?下游任務(wù)?。這些任務(wù)的形式可以是根據(jù)提示的。模型越大,就越能泛化到預(yù)訓(xùn)練數(shù)據(jù)中不存在,但是可以在微調(diào)中學(xué)習(xí)到的提示詞上。
條件語言模型有采用基于人類反饋的強(qiáng)化學(xué)習(xí) (Reinforcement Learning from Human Feedback, RLHF)。這個(gè)優(yōu)化過程主要基于答復(fù)文本的自然性和忠實(shí)性,而不是答復(fù)的檢驗(yàn)值。解釋 RLHF 的工作原理超出了本博客的范圍,但是你可以在 這里 了解。
舉例而言,GPT-3 是一個(gè)條件?基本?語言模型,作為 ChatGPT 的后端,通過 RLHF 在對(duì)話和提示文本上做微調(diào)。最好對(duì)這些模型做區(qū)分。
在 Hugging Face Hub 上,你可以同時(shí)找到條件語言模型和在提示文本上微調(diào)過的條件語言模型 (這篇博客后面會(huì)給出鏈接)。Llama 是最早開源,并且能超過閉源模型的大語言模型之一。一個(gè)由 Together 領(lǐng)導(dǎo)的研究團(tuán)隊(duì)已經(jīng)復(fù)線了 Llama 的數(shù)據(jù)集,稱之為 Red Pajama,并且已經(jīng)在上面訓(xùn)練和微調(diào)了大語言模型。你可以在 這里 了解。以及在 Hugging Face Hub 上找到 模型。截止本博客寫好的時(shí)候,三個(gè)最大的開源語言模型和其許可證分別為 MosaicML 的 MPT-30B,Salesforce 的 XGen 和 TII UAE 的 Falcon,全都已經(jīng)在 Hugging Face Hub 上開源了。
最近,Meta 開放了 Llama 2,其許可證允許商業(yè)用途。截止目前 Llama 2 能在各種指標(biāo)上超過任何其他開源模型。Llama 2 在 Hugging Face Hub 上的 checkpoint 在 transformers 上兼容,并且最大的 checkpoint 人們都可以在 HuggingChat 上嘗試。你可以通過 這篇博客 學(xué)習(xí)到如何在 Llama 2 上微調(diào),部署和做提示詞。
第二種文本生成模型通常稱之為文本到文本的生成模型。這些模型在文本對(duì)的數(shù)據(jù)集上訓(xùn)練,這些數(shù)據(jù)集或者是問答形式,或者是提示和反饋的形式。最受歡迎的是 T5 和 BART (目前為止以及不是最新的技術(shù)了)。Google 最近發(fā)布了 FLAN-T5 系列的模型。FLAN 是最近為提示任務(wù)設(shè)計(jì)的技術(shù),而 FLAN-T5 便是完全由 T5 用 FLAN 微調(diào)得到的模型。目前為止,F(xiàn)LAN-T5 系列的模型是最新的技術(shù),并且開源,可以在 Hugging Face Hub 上看到。注意這和用條件語言模型在提示任務(wù)的微調(diào)下是不一樣的,盡管其輸入和輸出形式類似。下面你能看到這些模型的原理。

擁有更多開源的文本生成模型能讓公司保證其數(shù)據(jù)隱私,部署下游更快,并且減少購買閉源 API 的支出。Hugging Face Hub 上所有開源的條件語言模型都能在 這里 找到,并且文本到文本的生成模型都能在 這里 找到。
Hugging Face 用愛和 BigScience 與 BigCode 創(chuàng)造的模型 ??
Hugging Face 引領(lǐng)了兩家科研初創(chuàng) BigScience 和 BigCode。它們分別創(chuàng)造了兩個(gè)大語言模型 BLOOM ?? 和 StarCoder ??。
BLOOM 是一個(gè)以 46 種自然語言和 13 種編程語言訓(xùn)練的條件語言模型,是第一個(gè)比 GPT-3 有更多參數(shù)量的開源模型。你能在 BLOOM 的文檔 上下載所需的所有 checkpoint。
StarCoder 是一個(gè)以 GitHub 上可訪問的代碼作為數(shù)據(jù)集,以 Fill-in-the-Middle 形式訓(xùn)練的語言模型。它不是以提示文本來微調(diào)的,所以它更適合對(duì)給定代碼做補(bǔ)全任務(wù),比如把 Python 翻譯到 C++,解釋概念 (什么是遞歸),或者假扮終端。你可以在 這里 找到 StarCoder 所有的 checkpoints。它也有對(duì)應(yīng)的 VSCode 擴(kuò)展。
本博客中提及的模型,使用代碼段都或者在模型主頁,或者在該類模型的文檔中。
許可證
許多文本生成模型,要么是閉源的,要么是許可證限制商業(yè)使用。幸運(yùn)的是,開源模型開始出現(xiàn),并且受社區(qū)青睞,用于進(jìn)一步開發(fā)、微調(diào)、部署到項(xiàng)目中。下面你能找到一些完全開源的大型條件語言模型。
Falcon 40B
XGen
MPT-30B
Pythia-12B
RedPajama-INCITE-7B
OpenAssistant (Falcon variant)
有兩個(gè)代碼生成模型,BigCode 的 StarCoder 和 Salesforce 的 Codegen。它們提供了不同大小的模型 checkpoint。除了 在提示文本上微調(diào)的 Codegen 之外,使用了開源或者 open RAIL 許可證。
Hugging Face Hub 也有許多為提示文本或聊天微調(diào)的模型,根據(jù)你的需求不同,可以選擇不同風(fēng)格和大小。
MPT-30B-Chat,Mosaic ML,使用 CC-BY-NC-SA 許可證,不允許商業(yè)用途。但是,MPT-30B-Instruct 使用 CC-BY-SA 3.0 許可證,允許商業(yè)使用。
Falcon-40B-Instruct 和 Falcon-7B-Instruct 都使用 Apache 2.0 許可證,所以允許商業(yè)使用。
另外一系列受歡迎的模型是 OpenAssistant,部分是在 Meta 的 Llama 使用個(gè)性化的提示文本微調(diào)得到的。因?yàn)樵镜?Llama 只允許研究用途,OpenAssistant 中使用 Llama 的部分不能完全開源。但是,也有 OpenAssistant 模型建立在完全開源的模型之上,比如 Falcon 或者 pythia。
StarChat Beta 是 StarCoder 通過提示文本微調(diào)的版本,使用 BigCode Open RAIL-M v1 許可證,允許商用。Salesforce 的用提示文本微調(diào)的模型, XGen model,只允許研究用途。
如果你想要用一個(gè)現(xiàn)成的提示文本數(shù)據(jù)集微調(diào)模型,你需要知道它是怎么來的。一些現(xiàn)成的提示文本數(shù)據(jù)集要么是由大量人工編寫,要么是現(xiàn)有的模型的輸出 (比如 ChatGPT 背后的模型)。Stanford 的 ALPACA 數(shù)據(jù)集由 ChatGPT 背后的數(shù)據(jù)集的輸出組成。另外,不少人工編寫的數(shù)據(jù)集是開源的,比如 oasst1 (由數(shù)千名志愿者輸出!) 或者 databricks/databricks-dolly-15k。如果你想自己創(chuàng)建數(shù)據(jù)集,那你可以看 the dataset card of Dolly 來學(xué)習(xí)創(chuàng)建提示文本數(shù)據(jù)集。模型在數(shù)據(jù)集上微調(diào)的過程可以分布式進(jìn)行。
你可以通過如下表格了解一些開源或者開放的模型。

Hugging Face 的生態(tài)中面向大語言模型的服務(wù)
文本生成推理
使用這些大模型為多用戶提供并發(fā)服務(wù)時(shí),想要降低響應(yīng)時(shí)間和延遲是一個(gè)巨大的挑戰(zhàn)。為了解決這個(gè)問題,Hugging Face 發(fā)布了 text-generation-inference (TGI),這是一個(gè)開源的大語言模型部署解決方案,它使用了 Rust、Python 和 gRPC。TGI 被整合到了 Hugging Face 的推理解決方案中,包括 Inference Endpoints 和 Inference API,所以你能通過簡單幾次點(diǎn)擊創(chuàng)建優(yōu)化過的服務(wù)接入點(diǎn),或是向 Hugging Face 的推理 API 發(fā)送請(qǐng)求,而不是直接將 TGI 整合到你的平臺(tái)里。

當(dāng)前 TGI 助力實(shí)現(xiàn)了 HuggingChat,這是 Hugging Face 的開源 LLM 聊天界面。目前這項(xiàng)服務(wù)背后是來自 OpenAssistant 的模型。你可以隨意和 HuggingChat 聊天,并且使用網(wǎng)頁搜索功能來檢索當(dāng)前網(wǎng)頁的內(nèi)容。你還可以為每次響應(yīng)提供反饋,供模型的作者進(jìn)行優(yōu)化訓(xùn)練。HuggingChat 的界面同樣也是 開源 的,我們正持續(xù)不斷完善它,爭(zhēng)取加入更多功能,比如在聊天過程中生成圖片。

最近,Hugging Face Spaces 上發(fā)布了用于 HuggingChat 的 Docker 模板。這樣一來每個(gè)人都可以輕松部署和自定義自己的 HuggingChat 實(shí)例了。你可以在 這里 基于眾多大語言模型 (包括 Llama 2) 創(chuàng)建自己的實(shí)例。

如何尋找最佳模型?
Hugging Face 設(shè)立了一個(gè) 大語言模型排名。該排名是通過社區(qū)提交的模型在不同指標(biāo)上的測(cè)試結(jié)果在 Hugging Face 的集群上的表現(xiàn)評(píng)估的。如果你無法找到你想要的模型或者方向,你可以在 這里 設(shè)置過濾條件。

你也能找到 大語言模型的表現(xiàn)排名,它評(píng)估了 Hugging Face Hub 上大語言模型輸出的中間值。
參數(shù)高效的微調(diào) (PEFT)
如果你想用你自己的數(shù)據(jù)集來微調(diào)一個(gè)模型,在客戶端硬件上微調(diào)并部署基本是不可能的 (因?yàn)樘崾灸P秃驮灸P偷拇笮∫粯?。PEFT 是一個(gè)實(shí)現(xiàn)參數(shù)高效的微調(diào)技術(shù)的庫。這意味著,不需要訓(xùn)練整個(gè)模型,你只需要訓(xùn)練少量參數(shù),允許更快速的訓(xùn)練而只有非常小的性能損失。通過 PEFT,你可以使用 LoRA,prefix tuning, prompt tuning 和 p-tuning。
以下更多資源可以幫助你了解和文本生成有關(guān)的更多信息。
更多資源
我們和 AWS 一起發(fā)布了基于 TGI 的 LLM 開發(fā)的深度學(xué)習(xí)容器,稱之為 LLM Inference Containers。戳 這里 了解。
文本生成任務(wù)頁面。
PEFT 發(fā)布的 博客。
閱讀了解 Inference Endpoints 如何使用 TGI。
閱讀 如何用 Transformers,PEFT 和提示詞微調(diào) Llama 2。
英文原文:?https://hf.co/blog/os-llms
原文作者: Merve Noyan
譯者: Vermillion-de
審校/排版: zhongdongy (阿東)