開源15T tokens!HuggingFace放出規模最大、質量最高預訓練數據集
Meta最近開源的Llama 3模型再次證明了「數據」是提升性能的關鍵,但現狀是,開源的大模型有一堆,可開源的大規模數據卻沒多少,而收集、清洗數據又是一項極其費時費力的工作,也導致了大模型預訓練技術仍然掌握在少數高端機構的手中。
最近,Huggingface的機器學習團隊宣布開源了一個迄今為止,規模最大的、質量最高的、即用型(ready-to-use)數據集FineWeb
數據集鏈接:??https://huggingface.co/datasets/HuggingFaceFW/fineweb??
FineWeb是在對CommonCrawl數據集(2013年夏天到2024年3月,共95個dump)進行去重、清洗后,得到的一個高質量、包含15T+個tokens(根據GPT-2的分詞器)的Web數據集,也是目前公開可用的、最干凈的語言模型預訓練數據集,其主要用作英語領域的公共數據研究。
在數據處理部分,研究團隊針對LLM應用場景,對整個數據處理pipeline進行了優化,并在大規模數據處理庫datatrove上運行實現。
模型的消融實驗性能結果也顯示,FineWeb比其他開源數據集的質量更高,并且仍有進一步過濾和改進的空間,研究團隊也表示在未來將繼續探索如何提升FineWeb數據集的質量。
數據集性能
為了驗證FineWeb數據的質量,研究人員選擇RefinedWeb、C4、Dolma v1.6、The Pile、SlimPajama數據集作為對比,訓練了一系列「1.8B參數量的小模型」進行數據集性能消融實驗和評估。
選擇的評估指標為commonsense_qa (acc_norm)、hellaswag (acc/acc_norm)、openbookqa (acc/acc_norm)、piqa (acc/acc_norm)、siqa (acc/acc_norm)、winogrande (acc/acc_norm)、sciq (acc/acc_norm)、arc (acc/acc_norm)和mmlu (acc/acc_norm)的平均值,每項指標均具有三個特點:
1. 在同一數據集的不同樣本上的訓練差異很小;
2. 訓練期間,指標單調增加;
3. 在已知高質量的數據集(C4、The Pile、RedPajama)上運行,模型的分離程度(seperation)更高。
在滾動窗口中平均5k步的平滑繪圖
實驗過程中用到的prompt都已經過格式化,以便計算和對比多項選擇問題中完整答案的對數似然。
從結果來看,使用FineWeb數據集訓練的模型性能在各個階段都是最好的。
下載使用
數據的命名規則為CC-MAIN-(year)-(week number)
使用datatrove
from datatrove.pipeline.readers import ParquetReader
# limit determines how many documents will be streamed (remove for all)
# to fetch a specific dump: hf://datasets/HuggingFaceFW/fineweb/data/CC-MAIN-2024-10
data_reader = ParquetReader("hf://datasets/HuggingFaceFW/fineweb/data", limit=1000)
for document in data_reader():
# do something with document
print(document)
###############################
# OR for a processing pipeline:
###############################
from datatrove.executor import LocalPipelineExecutor
from datatrove.pipeline.readers import ParquetReader
from datatrove.pipeline.filters import LambdaFilter
from datatrove.pipeline.writers import JsonlWriter
pipeline_exec = LocalPipelineExecutor(
pipeline=[
ParquetReader("hf://datasets/HuggingFaceFW/fineweb/data/CC-MAIN-2024-10", limit=1000),
LambdaFilter(lambda doc: "hugging" in doc.text),
JsonlWriter("some-output-path")
],
tasks=10
)
pipeline_exec.run()
使用huggingface_hub
from huggingface_hub import snapshot_download
folder = snapshot_download(
"HuggingFaceFW/fineweb",
repo_type="dataset",
local_dir="./fineweb/",
allow_patterns="data/CC-MAIN-2023-50/*")
為了加快下載速度,需要確保安裝 pip install huggingface_hub[hf_transfer] 并設置環境變量 HF_HUB_ENABLE_HF_TRANSFER=1
使用datasets
from datasets import load_dataset
fw = load_dataset("HuggingFaceFW/fineweb", name="CC-MAIN-2024-10", split="train", streaming=True)
FineWeb數據卡
數據實例
下例為CC-MAIN-2021-43 的一部分,于2021-10-15T21:20:12Z進行爬取。
{
"text": "This is basically a peanut flavoured cream thickened with egg yolks and then set into a ramekin on top of some jam. Tony, one of the Wedgwood chefs, suggested sprinkling on some toasted crushed peanuts at the end to create extra crunch, which I thought was a great idea. The result is excellent.",
"id": "<urn:uuid:e5a3e79a-13d4-4147-a26e-167536fcac5d>",
"dump": "CC-MAIN-2021-43",
"url": "<http://allrecipes.co.uk/recipe/24758/peanut-butter-and-jam-creme-brulee.aspx?o_is=SimilarRecipes&o_ln=SimRecipes_Photo_7>",
"date": "2021-10-15T21:20:12Z",
"file_path": "s3://commoncrawl/crawl-data/CC-MAIN-2021-43/segments/1634323583083.92/warc/CC-MAIN-20211015192439-20211015222439-00600.warc.gz",
"language": "en",
"language_score": 0.948729,
"token_count": 69
}
數據字段
text (字符串):主要文本內容
id (字符串):源自CommonCrawl樣本的原始唯一標識符
dump (字符串):采樣于CommonCrawl dump
url (字符串):text 所在原始頁面的 url
date (字符串):抓取日期(CommonCrawl提供)
file_path (字符串):包含此示例的單個 CommonCrawl warc 文件的 s3 路徑
language (字符串):數據集中的所有樣本均為en
language_score (float):fastText 語言分類器報告的語言預測分數
token_count (int):使用gpt2分詞器獲得的token數量
數據切分
default 子集包括整個數據集。
如果只想使用特定 CommonCrawl 轉儲中的數據,可以使用dump名稱作為子集。
根據研究人員的實驗結果來看,使用不同dump訓練后的效果有所差異:對于相對較小的訓練(<400B個token),建議使用最近的 CC-MAIN-2023-50 和 CC-MAIN-2024-10
數據創建
雖然最近經常會有大模型對權重進行開源,但這些版本通常不包含模型的訓練數據。
FineWeb的目標是為開源社區提供一個海量的、干凈的預訓練數據集,可用于推動真正開源模型(帶數據的開源模型)的極限。
源數據由 CommonCrawl 基金會在 2013-2024 年期間抓取的網頁組成。
研究人員從每個網頁的 html 中提取主頁文本,仔細過濾樣本并對每個 CommonCrawl dump/crawl進行重復數據刪除。
雖然團隊最初打算對整個數據集進行重復數據刪除,但我們的消融表明,對單獨進行重復數據刪除的轉儲/爬網樣本進行的訓練優于對所有一起進行重復數據刪除的轉儲/爬網樣本進行的訓練。
數據預處理
研究人員使用datatrove 庫來處理數據,腳本已開源。
腳本鏈接:??https://github.com/huggingface/datatrove/blob/main/examples/fineweb.py???
具體流程包括六步:
1. Url過濾,使用block-list和subword檢測技術對源自惡意和 NSFW 網站的文檔進行過濾;
2. Trafilatura,從CommonCrawl的warc文件中提取原始 HTML 文本;
3. FastText LanguageFilter,刪除en語言評分低于 0.65 的文檔;
4. 質量過濾,使用Gopher Reptition, C4 Quality filters(去除terminal_punct規則)和FineWeb自定義過濾器(刪除列表樣式的文檔、具有重復行的文檔以及可能具有錯誤行格式的啟發式方法)
5. MinHash重復數據去冗余,每次抓取都單獨進行去重,參數為5-gram、14x8哈希函數;
6. PII 格式化,對電子郵件和公共 IP 地址進行匿名化
對于電子郵件,使用正則表達式將其替換為 email@example.com 或 firstname.lastname@example.org
對于IP地址,先采用正則表達式匹配,然后過濾掉以僅匿名分配給公共網絡的 IP 地址,最后將匹配到的IP地址替換為以下隨機生成的 IP 地址之一(22.214.171.124 、126.96.36.199 、 188.8.131.52 、 220.127.116.11 和 18.104.22.168),這些地址在創建數據集時未響應 ping 請求。
由于誤報率過高,研究人員決定不對電話號碼使用正則表達式匹配。
標注
研究人員使用 language、language_score和token_count標注來增強原始樣本;與語言相關的標注由語言過濾器自動生成;token_count通過gpt2分詞器獲得。
使用數據的注意事項
數據集的社會影響
研究人員的目標是,在FineWeb數據集發布后,讓整個機器學習社區更容易進行模型訓練。
雖然過去已經公開發布了多個具有強大性能的開放權重模型,但通常沒有附帶相應的訓練數據集,而預訓練的關鍵就在于數據,不同數據集的特殊性和特征已被證明對模型的性能具有非常大的影響和作用。
由于創建高質量的訓練數據集是訓練能夠出色完成下游任務的 LLM 的基本要求,因此,利用FineWeb,不僅可以使數據集創建過程更加透明,而且借助公開的處理設置,包括所使用的代碼庫,向社區公開發布數據集,可以幫助模型創建者減輕數據集管理的時間和計算成本。
關于偏見的討論
通過在 URL 級別進行過濾,研究人員最大限度地減少數據集中存在的 NSFW 和有毒內容的數量,但最終發布的數據集中仍然存在大量可能被視為有毒或包含有害內容的文檔。
由于FineWeb源自整個網絡,因此其中常見的有害偏見都可能會在該數據集上重現。
研究人員故意避免使用基于與「gold」來源(例如維基百科或毒性分類器)的相似性來定義文本質量的機器學習過濾方法,因為這些方法會不成比例地刪除特定方言中的內容,并將其過度分類為與特定社交身份相關的有毒文本。
其他已知限制
由于應用了一些過濾步驟,代碼內容可能在該數據集中并不普遍。
如果用戶需要訓練一個可執行代碼任務的模型,研究人員建議將FineWeb與代碼數據集一起使用,例如 The Stack v2,或者還應該考慮用專門的精選資源(例如維基百科)來補充 FineWeb,因為其格式可能比FineWeb中包含的維基百科內容更好。
許可證
FineWeb數據集根據開放數據共享歸屬許可證 (ODC-By) v1.0 許可證發布,并且使用過程還須遵守 CommonCrawl 的使用條款。
本文轉自 新智元 ,作者:新智元
