開源15T tokens!HuggingFace放出規(guī)模最大、質(zhì)量最高預(yù)訓(xùn)練數(shù)據(jù)集
Meta最近開源的Llama 3模型再次證明了「數(shù)據(jù)」是提升性能的關(guān)鍵,但現(xiàn)狀是,開源的大模型有一堆,可開源的大規(guī)模數(shù)據(jù)卻沒多少,而收集、清洗數(shù)據(jù)又是一項(xiàng)極其費(fèi)時(shí)費(fèi)力的工作,也導(dǎo)致了大模型預(yù)訓(xùn)練技術(shù)仍然掌握在少數(shù)高端機(jī)構(gòu)的手中。
最近,Huggingface的機(jī)器學(xué)習(xí)團(tuán)隊(duì)宣布開源了一個(gè)迄今為止,規(guī)模最大的、質(zhì)量最高的、即用型(ready-to-use)數(shù)據(jù)集FineWeb
數(shù)據(jù)集鏈接:??https://huggingface.co/datasets/HuggingFaceFW/fineweb??
FineWeb是在對(duì)CommonCrawl數(shù)據(jù)集(2013年夏天到2024年3月,共95個(gè)dump)進(jìn)行去重、清洗后,得到的一個(gè)高質(zhì)量、包含15T+個(gè)tokens(根據(jù)GPT-2的分詞器)的Web數(shù)據(jù)集,也是目前公開可用的、最干凈的語言模型預(yù)訓(xùn)練數(shù)據(jù)集,其主要用作英語領(lǐng)域的公共數(shù)據(jù)研究。
在數(shù)據(jù)處理部分,研究團(tuán)隊(duì)針對(duì)LLM應(yīng)用場(chǎng)景,對(duì)整個(gè)數(shù)據(jù)處理pipeline進(jìn)行了優(yōu)化,并在大規(guī)模數(shù)據(jù)處理庫datatrove上運(yùn)行實(shí)現(xiàn)。
模型的消融實(shí)驗(yàn)性能結(jié)果也顯示,F(xiàn)ineWeb比其他開源數(shù)據(jù)集的質(zhì)量更高,并且仍有進(jìn)一步過濾和改進(jìn)的空間,研究團(tuán)隊(duì)也表示在未來將繼續(xù)探索如何提升FineWeb數(shù)據(jù)集的質(zhì)量。
數(shù)據(jù)集性能
為了驗(yàn)證FineWeb數(shù)據(jù)的質(zhì)量,研究人員選擇RefinedWeb、C4、Dolma v1.6、The Pile、SlimPajama數(shù)據(jù)集作為對(duì)比,訓(xùn)練了一系列「1.8B參數(shù)量的小模型」進(jìn)行數(shù)據(jù)集性能消融實(shí)驗(yàn)和評(píng)估。
選擇的評(píng)估指標(biāo)為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)的平均值,每項(xiàng)指標(biāo)均具有三個(gè)特點(diǎn):
1. 在同一數(shù)據(jù)集的不同樣本上的訓(xùn)練差異很?。?/p>
2. 訓(xùn)練期間,指標(biāo)單調(diào)增加;
3. 在已知高質(zhì)量的數(shù)據(jù)集(C4、The Pile、RedPajama)上運(yùn)行,模型的分離程度(seperation)更高。
在滾動(dòng)窗口中平均5k步的平滑繪圖
實(shí)驗(yàn)過程中用到的prompt都已經(jīng)過格式化,以便計(jì)算和對(duì)比多項(xiàng)選擇問題中完整答案的對(duì)數(shù)似然。
從結(jié)果來看,使用FineWeb數(shù)據(jù)集訓(xùn)練的模型性能在各個(gè)階段都是最好的。
下載使用
數(shù)據(jù)的命名規(guī)則為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] 并設(shè)置環(huán)境變量 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數(shù)據(jù)卡
數(shù)據(jù)實(shí)例
下例為CC-MAIN-2021-43 的一部分,于2021-10-15T21:20:12Z進(jìn)行爬取。
{
"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
}
數(shù)據(jù)字段
text (字符串):主要文本內(nèi)容
id (字符串):源自CommonCrawl樣本的原始唯一標(biāo)識(shí)符
dump (字符串):采樣于CommonCrawl dump
url (字符串):text 所在原始頁面的 url
date (字符串):抓取日期(CommonCrawl提供)
file_path (字符串):包含此示例的單個(gè) CommonCrawl warc 文件的 s3 路徑
language (字符串):數(shù)據(jù)集中的所有樣本均為en
language_score (float):fastText 語言分類器報(bào)告的語言預(yù)測(cè)分?jǐn)?shù)
token_count (int):使用gpt2分詞器獲得的token數(shù)量
數(shù)據(jù)切分
default 子集包括整個(gè)數(shù)據(jù)集。
如果只想使用特定 CommonCrawl 轉(zhuǎn)儲(chǔ)中的數(shù)據(jù),可以使用dump名稱作為子集。
根據(jù)研究人員的實(shí)驗(yàn)結(jié)果來看,使用不同dump訓(xùn)練后的效果有所差異:對(duì)于相對(duì)較小的訓(xùn)練(<400B個(gè)token),建議使用最近的 CC-MAIN-2023-50 和 CC-MAIN-2024-10
數(shù)據(jù)創(chuàng)建
雖然最近經(jīng)常會(huì)有大模型對(duì)權(quán)重進(jìn)行開源,但這些版本通常不包含模型的訓(xùn)練數(shù)據(jù)。
FineWeb的目標(biāo)是為開源社區(qū)提供一個(gè)海量的、干凈的預(yù)訓(xùn)練數(shù)據(jù)集,可用于推動(dòng)真正開源模型(帶數(shù)據(jù)的開源模型)的極限。
源數(shù)據(jù)由 CommonCrawl 基金會(huì)在 2013-2024 年期間抓取的網(wǎng)頁組成。
研究人員從每個(gè)網(wǎng)頁的 html 中提取主頁文本,仔細(xì)過濾樣本并對(duì)每個(gè) CommonCrawl dump/crawl進(jìn)行重復(fù)數(shù)據(jù)刪除。
雖然團(tuán)隊(duì)最初打算對(duì)整個(gè)數(shù)據(jù)集進(jìn)行重復(fù)數(shù)據(jù)刪除,但我們的消融表明,對(duì)單獨(dú)進(jìn)行重復(fù)數(shù)據(jù)刪除的轉(zhuǎn)儲(chǔ)/爬網(wǎng)樣本進(jìn)行的訓(xùn)練優(yōu)于對(duì)所有一起進(jìn)行重復(fù)數(shù)據(jù)刪除的轉(zhuǎn)儲(chǔ)/爬網(wǎng)樣本進(jìn)行的訓(xùn)練。
數(shù)據(jù)預(yù)處理
研究人員使用datatrove 庫來處理數(shù)據(jù),腳本已開源。
腳本鏈接:??https://github.com/huggingface/datatrove/blob/main/examples/fineweb.py???
具體流程包括六步:
1. Url過濾,使用block-list和subword檢測(cè)技術(shù)對(duì)源自惡意和 NSFW 網(wǎng)站的文檔進(jìn)行過濾;
2. Trafilatura,從CommonCrawl的warc文件中提取原始 HTML 文本;
3. FastText LanguageFilter,刪除en語言評(píng)分低于 0.65 的文檔;
4. 質(zhì)量過濾,使用Gopher Reptition, C4 Quality filters(去除terminal_punct規(guī)則)和FineWeb自定義過濾器(刪除列表樣式的文檔、具有重復(fù)行的文檔以及可能具有錯(cuò)誤行格式的啟發(fā)式方法)
5. MinHash重復(fù)數(shù)據(jù)去冗余,每次抓取都單獨(dú)進(jìn)行去重,參數(shù)為5-gram、14x8哈希函數(shù);
6. PII 格式化,對(duì)電子郵件和公共 IP 地址進(jìn)行匿名化
對(duì)于電子郵件,使用正則表達(dá)式將其替換為 email@example.com 或 firstname.lastname@example.org
對(duì)于IP地址,先采用正則表達(dá)式匹配,然后過濾掉以僅匿名分配給公共網(wǎng)絡(luò)的 IP 地址,最后將匹配到的IP地址替換為以下隨機(jī)生成的 IP 地址之一(22.214.171.124 、126.96.36.199 、 188.8.131.52 、 220.127.116.11 和 18.104.22.168),這些地址在創(chuàng)建數(shù)據(jù)集時(shí)未響應(yīng) ping 請(qǐng)求。
由于誤報(bào)率過高,研究人員決定不對(duì)電話號(hào)碼使用正則表達(dá)式匹配。
標(biāo)注
研究人員使用 language、language_score和token_count標(biāo)注來增強(qiáng)原始樣本;與語言相關(guān)的標(biāo)注由語言過濾器自動(dòng)生成;token_count通過gpt2分詞器獲得。
使用數(shù)據(jù)的注意事項(xiàng)
數(shù)據(jù)集的社會(huì)影響
研究人員的目標(biāo)是,在FineWeb數(shù)據(jù)集發(fā)布后,讓整個(gè)機(jī)器學(xué)習(xí)社區(qū)更容易進(jìn)行模型訓(xùn)練。
雖然過去已經(jīng)公開發(fā)布了多個(gè)具有強(qiáng)大性能的開放權(quán)重模型,但通常沒有附帶相應(yīng)的訓(xùn)練數(shù)據(jù)集,而預(yù)訓(xùn)練的關(guān)鍵就在于數(shù)據(jù),不同數(shù)據(jù)集的特殊性和特征已被證明對(duì)模型的性能具有非常大的影響和作用。
由于創(chuàng)建高質(zhì)量的訓(xùn)練數(shù)據(jù)集是訓(xùn)練能夠出色完成下游任務(wù)的 LLM 的基本要求,因此,利用FineWeb,不僅可以使數(shù)據(jù)集創(chuàng)建過程更加透明,而且借助公開的處理設(shè)置,包括所使用的代碼庫,向社區(qū)公開發(fā)布數(shù)據(jù)集,可以幫助模型創(chuàng)建者減輕數(shù)據(jù)集管理的時(shí)間和計(jì)算成本。
關(guān)于偏見的討論
通過在 URL 級(jí)別進(jìn)行過濾,研究人員最大限度地減少數(shù)據(jù)集中存在的 NSFW 和有毒內(nèi)容的數(shù)量,但最終發(fā)布的數(shù)據(jù)集中仍然存在大量可能被視為有毒或包含有害內(nèi)容的文檔。
由于FineWeb源自整個(gè)網(wǎng)絡(luò),因此其中常見的有害偏見都可能會(huì)在該數(shù)據(jù)集上重現(xiàn)。
研究人員故意避免使用基于與「gold」來源(例如維基百科或毒性分類器)的相似性來定義文本質(zhì)量的機(jī)器學(xué)習(xí)過濾方法,因?yàn)檫@些方法會(huì)不成比例地刪除特定方言中的內(nèi)容,并將其過度分類為與特定社交身份相關(guān)的有毒文本。
其他已知限制
由于應(yīng)用了一些過濾步驟,代碼內(nèi)容可能在該數(shù)據(jù)集中并不普遍。
如果用戶需要訓(xùn)練一個(gè)可執(zhí)行代碼任務(wù)的模型,研究人員建議將FineWeb與代碼數(shù)據(jù)集一起使用,例如 The Stack v2,或者還應(yīng)該考慮用專門的精選資源(例如維基百科)來補(bǔ)充 FineWeb,因?yàn)槠涓袷娇赡鼙菷ineWeb中包含的維基百科內(nèi)容更好。
許可證
FineWeb數(shù)據(jù)集根據(jù)開放數(shù)據(jù)共享歸屬許可證 (ODC-By) v1.0 許可證發(fā)布,并且使用過程還須遵守 CommonCrawl 的使用條款。
本文轉(zhuǎn)自 新智元 ,作者:新智元
