Cosmopedia:如何為預訓練建立大規模合成數據
在這篇部落格文章中,我們概述了生成數十億個 token 的合成數據集以復現 Phi-1.5 所面臨的挑戰和解決方案,從而促成了 Cosmopedia 的建立。合成數據已成為機器學習中的核心議題。它指的是由大型語言模型(LLM)等人工生成的資料,旨在模模擬實世界的資料。
傳統上,為監督微調和指令微調建立資料集需要聘請人工標註員,這是一個成本高昂且耗時的過程。這種做法需要大量的資源,將此類資料集的開發限制在領域內的少數幾個主要參與者。然而,最近情況發生了變化。我們看到了數百個高質量的合成微調資料集的開發,主要使用 GPT-3.5 和 GPT-4。社群也透過大量出版物支援了這一發展,這些出版物為各個領域的流程提供了指導,並解決了相關挑戰 [1][2][3][4][5]。
圖 1. Hugging Face hub 上帶有合成標籤的資料集。
然而,這並非另一篇關於生成合成指令微調資料集的部落格文章,社群已對此主題進行了廣泛探索。我們專注於將樣本數量從**數千**擴充套件到**數百萬**,這些樣本可用於**從頭開始預訓練 LLM**。這帶來了一系列獨特的挑戰。
為什麼選擇 Cosmopedia?
微軟透過其 Phi 系列模型 [6][7][8] 推動了這一領域的發展,這些模型主要在合成數據上進行訓練。它們超越了在網路資料集上訓練時間更長的大型模型。Phi-2 在過去一個月內被下載了超過 61.7 萬次,是 Hugging Face hub 上最受歡迎的前 20 個模型之一。
儘管 Phi 模型的技術報告,例如《教科書是你所需要的一切》論文,揭示了這些模型卓越的效能和建立過程,但它們卻省略了合成訓練資料集策展的大量細節。此外,這些資料集本身並未釋出。這引發了愛好者和懷疑者之間的爭論。一些人稱讚這些模型的能力,而批評者則認為它們可能只是過度擬合基準;其中一些人甚至將預訓練模型在合成數據上的方法標記為“垃圾進,垃圾出”。然而,完全控制資料生成過程並複製 Phi 模型的高效能這一想法仍然引人入勝,值得探索。
這就是開發 Cosmopedia 的動力,它旨在復現用於 Phi-1.5 的訓練資料。在這篇文章中,我們將分享我們的初步發現,並討論改進當前資料集的一些計劃。我們將深入探討建立資料集的方法,深入瞭解提示詞精選方法和技術棧。Cosmopedia 是完全開放的:我們釋出了端到端管道的程式碼、資料集,以及一個基於它訓練的 1B 模型,名為 cosmo-1b。這使得社群能夠復現結果並在此基礎上進行構建。
Cosmopedia 建立幕後
除了缺乏關於 Phi 資料集建立的資訊外,另一個缺點是它們使用專有模型來生成資料。為了解決這些不足,我們推出了 Cosmopedia,這是一個由 Mixtral-8x7B-Instruct-v0.1 生成的合成教科書、部落格文章、故事、帖子和 WikiHow 文章的資料集。它包含超過 3000 萬個檔案和 250 億個 token,使其成為迄今為止最大的開放合成數據集。
注意:如果您期待在數百個 H100 GPU 上部署大規模生成任務的故事,那麼實際上,Cosmopedia 的大部分時間都花在了細緻的提示工程上。
提示詞精選
生成合成資料看似簡單,但大規模擴充套件時,保持多樣性(這對最佳效能至關重要)變得極具挑戰性。因此,精心策劃涵蓋廣泛主題的多種提示詞至關重要,並最大限度地減少重複輸出,因為我們不想將計算資源花費在生成數十億本教科書上,結果卻因它們彼此高度相似而不得不丟棄大部分。在數百個 GPU 上啟動生成之前,我們花費了大量時間使用 HuggingChat 等工具迭代提示詞。在本節中,我們將介紹為 Cosmopedia 建立超過 3000 萬個提示詞的過程,這些提示詞涵蓋數百個主題,且重複內容少於 1%。
Cosmopedia 旨在生成大量高質量的合成數據,並具有廣泛的主題覆蓋。根據 Phi-1.5 技術報告,作者精選了 2 萬個主題來生成 200 億個 token 的合成教科書,同時使用網路資料集中的樣本來增加多樣性,報告中指出:
我們精心選擇了 2 萬個主題來啟動這個新合成數據的生成。在我們的生成提示詞中,我們使用網路資料集中的樣本來增加多樣性。
假設平均檔案長度為 1000 個 token,這表明需要使用大約 2000 萬個不同的提示。然而,結合主題和網路樣本以增加多樣性的方法仍不清楚。
我們結合兩種方法來構建 Cosmopedia 的提示詞:基於精選來源進行條件化和基於網路資料進行條件化。我們將用於條件化的資料來源稱為“種子資料”。
圖 2. 構建 Cosmopedia 提示詞的資料來源分佈(左圖)和精選源類別內部的來源分佈(右圖)。
精選來源
我們使用來自斯坦福大學課程、可汗學院、OpenStax 和 WikiHow 等知名教育資源的專題。這些資源涵蓋了 LLM 學習的許多有價值的專題。例如,我們提取了各種斯坦福大學課程的大綱,並構建了提示詞,要求模型為這些課程中的各個單元生成教科書。圖 3 展示了此類提示詞的一個示例。
儘管這種方法能產出高質量內容,但其主要限制是可伸縮性。我們受限於每個來源的資源數量和可用專題。例如,我們只能從 OpenStax 中提取 16,000 個獨特的單元,從斯坦福大學中提取 250,000 個單元。考慮到我們生成 200 億個 token 的目標,我們至少需要 2000 萬個提示!
利用受眾和風格多樣性
增加生成樣本多樣性的一種策略是利用受眾和風格的多樣性:透過改變目標受眾(例如,幼兒與大學生)和生成風格(例如,學術教科書與部落格文章),同一個主題可以多次重新利用。然而,我們發現僅僅將提示詞從“為大學生編寫一本關於‘為什麼要進入太空?’的詳細教科書單元”修改為“編寫一篇關於‘為什麼要進入太空?’的詳細部落格文章”或“為幼兒編寫一本關於‘為什麼要進入太空?’的教科書”不足以防止高重複內容率。為了緩解這個問題,我們強調了受眾和風格的變化,提供了關於格式和內容應如何不同的具體說明。
圖 3 展示了我們如何根據同一主題為不同受眾調整提示詞。
圖 3. 為幼兒、專業人士和研究人員以及高中生生成相同教科書的提示詞。
透過針對四種不同受眾(幼兒、高中生、大學生、研究人員)並利用三種生成風格(教科書、部落格文章、WikiHow 文章),我們可以獲得多達 12 倍的提示。然而,我們可能希望包含這些資源中未涵蓋的其他主題,並且這些資源的小批次仍然限制了這種方法,距離我們目標中的 2000 萬+ 提示還很遠。這時網路資料就派上用場了;如果我們生成涵蓋所有網路主題的教科書會怎樣?在下一節中,我們將解釋我們如何選擇主題並使用網路資料構建數百萬個提示。
網路資料
使用網路資料構建提示詞被證明是最具擴充套件性的方法,它貢獻了 Cosmopedia 中超過 80% 的提示詞。我們利用 RefinedWeb 等資料集,將數百萬個網路樣本聚類成 145 個簇,並透過提供 10 個隨機樣本的摘要並要求 Mixtral 找出它們的共同主題來識別每個簇的主題。關於此聚類的更多詳細資訊可在技術棧部分找到。
我們檢查了這些群集,並排除了任何被認為教育價值低的內容。已刪除內容的示例包括露骨的成人內容、名人八卦和訃告。保留和刪除的 112 個主題的完整列表可以在這裡找到。
然後,我們透過指示模型生成與網路樣本相關的教科書來構建提示,該教科書基於聚類屬於其主題的範圍。圖 4 提供了一個基於網路的提示示例。為了增強多樣性並彌補主題標籤中可能存在的任何不完整性,我們僅在 50% 的時間裡根據主題來調整提示,並更改受眾和生成風格,如上一節所述。我們最終使用這種方法構建了 2300 萬個提示。圖 5 顯示了 Cosmopedia 中種子資料、生成格式和目標受眾的最終分佈。
圖 4. 網路提取和相關提示詞示例。
圖 5. Cosmopedia 資料集中種子資料、生成格式和目標受眾的分佈。
除了隨機網路檔案外,我們還使用了來自 AutoMathText 的樣本,這是一個精心策劃的數學文字資料集,旨在包含更多科學內容。
指令資料集和故事
在我們對使用生成的教科書訓練的模型進行初步評估時,我們觀察到這些模型缺乏小學教育中常見的常識和基本知識。為了解決這個問題,我們使用來自 UltraChat 和 OpenHermes2.5 指令微調資料集的文字作為提示詞的種子資料,建立了包含日常知識和基本常識的故事。這些資料集涵蓋了廣泛的主題。例如,我們從 UltraChat 中使用了“關於世界的問答”子集,它涵蓋了 30 個關於世界的元概念。對於 OpenHermes2.5,另一個多樣化且高質量的指令微調資料集,我們省略了不適合講故事的來源和類別,例如用於程式設計的 glaive-code-assist 和用於高階化學的 camelai。圖 6 顯示了我們用於生成這些故事的提示詞示例。
圖 6. 用於從 UltraChat 和 OpenHermes 樣本為幼兒、普通受眾和 Reddit 論壇生成故事的提示詞。
這就是我們為構建 3000 多萬個多樣化提示而進行的提示工程故事的結局,這些提示提供了重複內容極少的內容。下圖顯示了 Cosmopedia 中存在的聚類,該分佈類似於網路資料中的聚類。您還可以在Nomic 這裡找到一個可點選的地圖。
圖 7. Cosmopedia 的聚類,使用 Mixtral 標註。
您可以使用資料集檢視器自行檢視資料集
圖 8. Cosmopedia 資料集檢視器。
技術棧
我們釋出了所有用於構建 Cosmopedia 的程式碼,網址為:https://github.com/huggingface/cosmopedia
在本節中,我們將重點介紹用於文字聚類、大規模文字生成以及訓練 cosmo-1b 模型的技術棧。
主題聚類
我們使用 text-clustering 倉庫來實現 Cosmopedia 提示詞中使用的網路資料的主題聚類。下圖展示了查詢和標註聚類的管道。我們還要求 Mixtral 在標註步驟中為聚類給出 10 分制下的教育分數;這有助於我們在主題檢查步驟中。您可以在此演示中找到網路聚類及其分數的演示。
圖 9. 文字聚類的管道。
大規模教科書生成
我們利用 llm-swarm 庫,使用 Mixtral-8x7B-Instruct-v0.1 生成了 250 億個合成 token。這是一個可擴充套件的合成數據生成工具,可以使用本地 LLM 或 Hugging Face Hub 上的推理端點。它支援 TGI 和 vLLM 推理庫。我們在 Hugging Face 科學叢集的 H100 GPU 上本地部署了 Mixtral-8x7B,並使用 TGI。生成 Cosmopedia 的總計算時間超過 1 萬 GPU 小時。
以下是一個示例,展示瞭如何在 Slurm 叢集上使用 2 個 TGI 例項,對 10 萬個 Cosmopedia 提示詞使用 Mixtral 進行生成:
# clone the repo and follow installation requirements
cd llm-swarm
python ./examples/textbooks/generate_synthetic_textbooks.py \
--model mistralai/Mixtral-8x7B-Instruct-v0.1 \
--instances 2 \
--prompts_dataset "HuggingFaceTB/cosmopedia-100k" \
--prompt_column prompt \
--max_samples -1 \
--checkpoint_path "./tests_data" \
--repo_id "HuggingFaceTB/generations_cosmopedia_100k" \
--checkpoint_interval 500
您甚至可以使用 `wandb` 跟蹤生成過程,以監控吞吐量和生成的 token 數量。
圖 10. llm-swarm 執行的 Wandb 圖表。
注意:我們最初使用 HuggingChat 進行提示詞迭代。然後,我們使用 `llm-swarm` 為每個提示詞生成了數百個樣本,以發現異常模式。例如,模型在教科書中使用非常相似的開場白,並且經常以相同的短語(如“曾幾何時”和“太陽低懸在天空中”)開始故事。明確要求模型避免這些開場白並進行創新解決了這個問題;它們仍然被使用,但頻率較低。
基準去汙染
鑑於我們生成的是合成數據,種子樣本或模型的訓練資料中可能存在基準汙染。為了解決這個問題,我們實施了去汙染管道,以確保我們的資料集不包含任何來自測試基準的樣本。
與 Phi-1 類似,我們使用 10-gram 重疊來識別潛在受汙染的樣本。在檢索到候選樣本後,我們使用 `difflib.SequenceMatcher` 將資料集樣本與基準樣本進行比較。如果 `len(matched_substrings)` 與 `len(benchmark_sample)` 的比率超過 0.5,則丟棄該樣本。此去汙染過程應用於所有使用 Cosmo-1B 模型評估的基準,包括 MMLU、HellaSwag、PIQA、SIQA、Winogrande、OpenBookQA、ARC-Easy 和 ARC-Challenge。
我們報告從每個資料集分割中移除的受汙染樣本數量,以及它們所對應的唯一基準樣本數量(括號內)。
資料集組 | ARC | BoolQ | HellaSwag | PIQA |
---|---|---|---|---|
網路資料 + 斯坦福 + OpenStax | 49 (16) | 386 (41) | 6 (5) | 5 (3) |
auto_math_text + 可汗學院 | 17 (6) | 34 (7) | 1 (1) | 0 (0) |
故事 | 53 (32) | 27 (21) | 3 (3) | 6 (4) |
我們發現 MMLU、OpenBookQA 和 WinoGrande 的受汙染樣本少於 4 個。
訓練棧
我們使用 Llama2 架構在 Cosmopedia 上訓練了一個 1B LLM,以評估其質量:https://huggingface.co/HuggingFaceTB/cosmo-1b。
我們使用 datatrove 庫進行資料去重和分詞,使用 nanotron 進行模型訓練,並使用 lighteval 進行評估。
該模型在 ARC-easy、ARC-challenge、OpenBookQA 和 MMLU 上的表現優於 TinyLlama 1.1B,並且在 ARC-challenge 和 OpenBookQA 上與 Qwen-1.5-1B 相當。然而,我們注意到與 Phi-1.5 相比存在一些效能差距,這表明更好的合成生成質量,這可能與用於生成的 LLM、主題覆蓋或提示有關。
圖 10. Cosmo-1B 的評估結果。
結論與後續步驟
在這篇部落格文章中,我們概述了建立 Cosmopedia 的方法,這是一個旨在用於模型預訓練的大型合成數據集,目標是復刻 Phi 資料集。我們強調了精心設計提示詞以涵蓋廣泛主題、確保生成多樣化內容的重要性。此外,我們分享並開源了我們的技術棧,它允許在數百個 GPU 上擴充套件生成過程。
然而,這只是 Cosmopedia 的初始版本,我們正在積極致力於提高生成內容的質量。生成內容的準確性和可靠性很大程度上取決於生成中使用的模型。具體來說,Mixtral 有時可能會出現幻覺併產生不正確的資訊,例如在 AutoMathText 和 KhanAcademy 子集中的歷史事實或數學推理方面。緩解幻覺問題的一種策略是使用檢索增強生成(RAG)。這涉及檢索與種子樣本相關的資訊(例如來自維基百科),並將其整合到上下文中。幻覺測量方法也有助於評估哪些主題或領域受其影響最大 [9]。比較 Mixtral 與其他開放模型的生成結果也很有趣。
合成數據的潛力巨大,我們熱切期待社群將在 Cosmopedia 的基礎上構建出什麼。
參考文獻
[1] Ding 等人。透過擴充套件高質量指令對話來增強聊天語言模型。網址 https://arxiv.org/abs/2305.14233
[2] Wei 等人。Magicoder:你所需要的就是原始碼。網址 https://arxiv.org/abs/2312.02120
[3] Toshniwal 等人。OpenMathInstruct-1:一個包含 180 萬條數學指令的微調資料集。網址 https://arxiv.org/abs/2402.10176
[4] Xu 等人。WizardLM:賦能大型語言模型以遵循複雜指令。網址 https://arxiv.org/abs/2304.12244
[5] Moritz Laurer。合成數據:使用開源節省金錢、時間和碳排放。網址 https://huggingface.co/blog/synthetic-data-save-cost
[6] Gunasekar 等人。教科書就是你所需要的一切。網址 https://arxiv.org/abs/2306.11644
[7] Li 等人。教科書就是你所需要的一切 II:Phi-1.5 技術報告。網址 https://arxiv.org/abs/2309.05463
[8] Phi-2 部落格文章。網址 https://www.microsoft.com/en-us/research/blog/phi-2-the-surprising-power-of-small-language-models/
[9] Manakul, Potsawee 和 Liusie, Adian 和 Gales, Mark JF。Selfcheckgpt:生成式大型語言模型的零資源黑盒幻覺檢測。網址 https://arxiv.org/abs/2303.08896