對于想要訓練先進的 大語言模型 (LLM) 的企業開發者而言,整理高質量的預訓練數據集至關重要。為了讓開發者能夠構建高度準確的 LLM,NVIDIA 之前發布了 Nemotron-CC ,這是一個價值 6.3 萬億個 token 的英語語言 Common Crawl (CC) 數據集。今天,NVIDIA NeMo Curator 團隊很高興地與大家分享,用于構建 Nemotron-CC 數據集的 pipeline 現已合并到 NeMo Curator GitHub 存儲庫 中。
Nemotron-CC 工作流現已集成到 NeMo Curator 中,為平衡大規模準確性和數據量之間的權衡提供了一種新穎的解決方案。Nemotron-CC 工作流結合使用分類器集成和合成數據重述,提供了一種可擴展的方法,可從原始數據集中生成高質量的合成數據,以擴展原始數據集。
Nemotron-CC 數據管護工作流的優勢
由于大量使用無法評估語義質量的啟發式過濾,傳統的數據管護方法受到了限制,導致原本可以改用的低質量文本被丟棄。因此,在此類次優數據上訓練的模型達到了準確性的穩定水平,尤其是在 MMLU 等復雜的推理任務中。
Nemotron-CC 工作流現已集成到 NeMo Curator 中,引入了一種在準確性和數據量之間實現權衡的創新方法。Nemotron-CC 工作流結合使用分類器集成和合成數據重述,提供了一種可擴展的方法,可從原始數據集中生成高質量的合成數據,以擴展原始數據集。
使用此工作流,您可以生成 2 萬億個高質量合成數據 token,以擴展最終數據集,這是開源領域的首個方法。這種合成數據有助于恢復通過過濾消除的大部分內容,在 DCLM 和 FineWebEdu 等數據集中,這一比例高達 90%。這種程度的數據丟失使得它們不適合長距預訓練任務,例如 Llama 3.1 等模型需要 15 萬億個 token 的任務。
深入了解:Nemotron-CC 數據管護工作流
如圖 1 所示,Nemotron-CC 工作流將 Perplexity 評分、Ensemble 質量標記和 Synthetic 數據生成相結合,將原始的 Common Crawl (CC) 數據集轉換為經過優化的多任務就緒型語料庫,從而填補了傳統數據管護中的空白。

數據管護工作流包含幾個步驟,首先是獲取 CC 數據集,然后應用各種過濾器和處理步驟。總的來說,數據管護工作流包含三個階段。
- HTML 到文本的提取和過濾
- 基于模型的質量標記
- 合成數據生成 (Synthetic Data Generation)
我們來深入了解 pipeline 中的每個階段。
HTML-to-text 提取器和過濾器
該工作流使用 jusText 進行 HTML 提取,使用 FastText 識別英語語言數據并對 Unicode 字符進行格式化。提取文本后,我們應用精確和模糊的重復數據刪除算法從文本中刪除重復和近乎重復的文檔。
NeMo Curator 的 精確重復數據刪除 模塊可對每個文檔進行哈希處理,并且每個哈希僅保留一個文檔,從而高效識別并從數據集中刪除相同文檔。另一方面, 模糊重復數據刪除 模塊通過計算 MinHash 簽名和使用局部敏感哈希 (LSH) 來檢測具有高 Jaccard 相似度分數的文檔,從而識別和刪除近乎重復的文檔。
NeMo Curator 重復數據刪除模塊利用 NVIDIA RAPIDS 庫,如 cuDF、cuML 和 cuGraph,以及 Dask ,在多節點、多 GPU 環境中擴展工作負載,從而大幅縮短數據處理時間。與替代方案相比,借助 NeMo Curator,您可以將文本處理速度提高 16 倍。
然后,我們應用了 28 種不同的啟發式過濾器(涵蓋非字母數字內容、數字和 URL 比率、空格不一致以及通過各種 n-gram 分析的重復模式),以確保只保留最優質、最相關的數據。NeMo Curator 通過接受具有所需過濾器的配置文件,并自動為數據集中的所有文檔設置過濾工作流,以及可選的 GPU 加速來增強性能,從而簡化了這一過程。
最后,如下方代碼塊所示,我們使用預訓練的 KenLM 模型創建 `PerplexityFilter` 模塊,生成 perplexity 分數,并根據 perplexity 閾值過濾文檔。perplexity 分數較低意味著文本可預測且流暢,而 perplexity 分數較高意味著文本奇怪或不連貫。
class PerplexityFilter(DocumentFilter): def __init__( self , threshold): self ._kenlm_model = KenlmModel(model_path = models_dir, language = "en" ) self ._threshold = threshold def score_document( self , text: str ): return self ._kenlm_model.get_perplexity(text, normalize = True ) def keep_document( self , score: int ): return score < = self ._threshold |
基于模型的質量標記
我們使用了三個質量分類器模型的集合: FastText Quality Classifier 、NeMo Curator – FineWeb Mixtral Edu Classifier 和 FineWeb Nemotron-4 Edu Classifier 。
這三個質量分類器經過訓練,可根據不同的質量偏好生成分數。我們在每個樣本上運行這些分類器,并匯總其分數 (0–5) ,對所有文檔進行排序,并存儲語料庫。然后,將這些存儲桶分為五個質量級別,以便在下一個 Synthetic Data Generation 步驟中進行適當處理。
每個分類器模型都會生成浮點分數,這些分數會映射到從 0 (最差質量) 到 19 (最佳質量) 的整數類別,并使用基于百分位的閾值創建 20 個 bins 以進行比較。然后,通過對所有分類器取所有整數分數中的最大值,將多個分類器的預測結果合并為單個代表性分數 (即 ensemble 分數) 。
NeMo Curator 已支持這些質量分類器模型,因此我們只需初始化它們,將其應用于輸入數據集,然后為每個分類器生成包含額外分數列的輸出數據集。此外,整個過程都受益于開箱即用的 GPU 加速,如下方代碼塊所示。
# Import required classifiers from nemo_curator.classifiers import FineWebNemotronEduClassifier, FineWebMixtralEduClassifier, FastTextQualityClassifier from nemo_curator import get_client # Start distributed client on GPU client = get_client(cluster_type="gpu") # Initiate all classifiers classifiers = [ FineWebNemotronEduClassifier(...), FineWebMixtralEduClassifier(...), FastTextQualityClassifier(...) ] # Read input dataset with cuDF input_dataset = DocumentDataset.read_parquet("./data.parquet", backend="cudf") # Apply classifiers output_dataset = input_dataset for classifier in classifiers: output_dataset = classifier(dataset=output_dataset) # Save output dataset. output_dataset.to_parquet(path=quality_classification_results_dir) # Stop Dask client client.cluster.close() |
合成數據生成
我們使用 SDG 流程從低質量和高質量文檔中生成數據。對于低質量文檔,我們通過提示 LLM 使用 Wikipedia-style 提示重寫文本來重復使用有用信息。
對于高質量數據,我們通過重述或壓縮文本中的基本知識來生成更獨特的預訓練標記。為此,我們使用不同的提示運行了四種不同的 LLMs 來生成:
- 多樣化的問答 (QA) 組:以各種形式提問,例如是/ 否、多項選擇和開放式問題
- 蒸餾 :將文本重寫為簡潔明了的段落
- 提取知識 :重寫文本中的知識,忽略無意義的內容
- 知識列表:將文本中的關鍵信息提取為有組織的列表
結果
如表 1 所示,在 Nemotron-CC 數據集的 1T-token 子集上訓練 Llama 3.1 8B 參數模型時,與在 DCLM 數據集上訓練的同一 LLM 相比,MMLU 得分提高了 5.6 分,令人印象深刻。如需完整的基準測試結果,請參閱 Nemotron-CC:將 Common Crawl 轉換為優化的 Long-Horizon 預訓練數據集論文。
數據集 | MMLU |
FineWebEdu-2 | 42.4 |
FineWebEdu | 42.9 |
DCLM | 53.4 |
Nemotron-CC 高質量 | 59.0 |
如表 2 所示,在長水平令牌 (15T 令牌,包括來自 Nemotron-CC 數據集的 7.2T 令牌) 上訓練 Llama 3.1 8B 模型后,在 MMLU 基準測試中提升了 5 分,與 Llama 的 65.3 相比,得分提高了 70.3。
模型 | MMLU |
Llama 3.1 | 65.3 |
使用 Nemotron-CC 數據訓練的 Llama 3.1 | 70.3 |
開始使用
使用 Nemotron-CC 流程生成高質量數據集,以預訓練基礎模型或為能源、制造、化學等各個領域執行 Domain-Adaptive Pretraining (DAPT) 。得益于 NeMo Curator 的靈活性,此流程中的各個組件不僅可用于開發預訓練數據集,還可用于微調數據集。
請訪問以下鏈接開始使用:
- GitHub 教程 :用于部署 pipeline 的分步 Jupyter Notebook。
- NeMo Curator API :用于自定義 pipeline 各個階段 (例如交換 classifiers) 的 Pythonic 接口
另外,別忘了 star 我們的 NeMo Curator GitHub 資源庫 ,定期接收有關新發布功能、教程的更新,并將您的代碼貢獻至資源庫。
?