大語言模型涉及數據的通常有有多個階段(Aligning language models to follow instructions [1]):pre-train、sft(supervised finetune)、rlhf(optional). State of GPT:大神 Andrej 揭秘 OpenAI 大模型原理和訓練過程。
supervised finetune 一般在 base model 訓練完成后,使用 instruction 以及其他高質量的私域數據集來提升 LLM 在特定領域的性能;而 rlhf 是 openAI 用來讓model 對齊人類價值觀的一種強大技術;pre-training dataset 是大模型在訓練時真正喂給 model 的數據,從很多 paper 能看到一些觀點比如:1. 提高預訓練數據的質量能讓大模型的性能表現更好;2. LLM 要想要更加強大,除了繼續加大模型參數量之外,給模型準備更多成比例的更大量的高質量數據也很關鍵。
經過初步調研發現在英文世界的大模型,預訓練數據都來自互聯網爬取的全網數據,在英文世界有 Common crawl 這樣的組織來維護這類全網爬蟲數據集;也有 huggingface 這種非常好的社區,組織起 NLP 領域的模型 datasets 分享。
而在中文世界,似乎沒有特別公開的大規模語料數據集,huggingface、github 上也沒有找到特別多組織的很有體系的中文語料數據集。另一方面,近期中國國內公布的一些大模型,也主要以評估分結果作為輸出,很少有針對 pre-training 數據展開詳細介紹的信息。
本文旨在總結一些開源的英文大模型的 pre-training dataset,通過分析 gpt3、llama、falcon 等開源 LLM 的 paper 上提到的 dataset 部分邏輯,以及深入調研一些比如 C4、The Pile、RefinedWeb 數據集,希望能總結一些規律,給期望了解 pre-train 數據集對 LLM 最終效果有何影響的人能有更加直觀的認知。
先來看看業界大模型的公開dataset資料
先分別簡單總結一下 GPT-3、llama、falcon 的 paper 里 dataset 部分的描述。然后我們重點展開 falcon 模型的 dataset refinedWeb,這是因為 falcon-40B 在 2023-07 這個時間點打榜到了 huggingface 的第一名,且 falcon 論文中著重提到了他們的 pre-train dataset:tiiuae/falcon-refinedweb。Datasets at Hugging Face [2],是公開的 paper 中講 pre-train 講的比較詳細的一篇,且 falcon 聲稱是數據讓他們的 model 效果這么好,那我們就展開了解一下。
1.1 先看openai的GPT系列
GPT3: Language Models are Few-Shot Learners [3] (GPT3 paper)
GPT4: (GPT-4 [4]) 就沒有再公開 pre-training 的 dataset 了
GPT3 的 paper 是 2020 年 5 月發布的,大概是 3 年前。使用的 pre-training dataset 在目前看來也比較簡單,主要來源就是 web 數據、書、維基百科這 3 個,不能算很豐富。尤其沒有包含很多垂直 industry 的數據。但在 3 年前用這些數據來驗證模型的性能隨模型大小變化的趨勢,以及做常識性評估邏輯是非常合適了。
很多人都說 openAI 的核心競爭力之一就在數據,但很遺憾 GPT4 的 paper 中確實沒有再公開當前的數據細節了。這么看 elon musk 噴 openAI 變成了closeAI 好像也有點道理。哈哈哈 。。
這里引用一堆廢紙:GPT 模型成功的背后用到了哪些以數據為中心的人工智能(Data-centric AI)技術?[5] 文章總結的 openAI GPT 系列數據變化圖。
GPT3 的數據加工主要有 filter & deduplication:
filter:
用 WebText(Papers with Code - WebText Dataset [6]、openwebtext [7])作為高質量數據集訓練了一個分類器。使用分類器去過濾 Common crawl 的 documents。filter 時使用了一個公式,會使用 document_score。會有一個 α 參數,他能把大部分不符合要求的數據過濾掉同時保留一部分質量不高的數據。文章里居然也說到這樣做能提高性能。
deduplication:
使用fuzzy deduplicate做去重。提到了使用spark的minHashLSH實現來做hash。
Question1:為什么 LLM 的 pre-training dataset 要這么關注 deduplication 呢?
Answer1:
“Deduplicating Training Data Makes Language Models Better”.Katherine Lee et al. ACL 2022.[8]
minHash:
是一個對比文檔相似度的技術。wikipedia 給出的 minhash 中 K 個 hash function 的錯誤率為:。這里關鍵注意 GPT3 使用了 10 hashes。錯誤率還是相對比較高的。后面也關注下其他 LLM 的這個取值。
▲ wikipedia 上 minHash 中 k 個 hash 帶來的錯誤率
數據量:
300Billion token.
1.2 facebook llama & llama2
###updated at 20230719###
facebook 發布了 llama2 版本:https://ai.meta.com/research/publications/llama-2-open-foundation-and-fine-tuned-chat-models/
pre-trainning 數據的主亮點:
-
使用了 2trillion tokens,相比 llama1 的 1.4T token 提高了 40%
-
llama2 并沒有使用 facebook 的自己產品的數據
- 在做 filter 時干掉了包含 private personal information 多的數據。
其他亮點:
提供了pre-train數據的一些insight分析,比如下圖,感興趣還是自己看paper吧。
###end of updated at 20230719###
LLaMA: Open and Efficient Foundation Language Models
https://arxiv.org/abs/2302.13971
llama 整體的 pre-training dataset與GPT3 相比,多的部分有:
1. 使用了更豐富的數據源。比如 Github,ArXiv ,StackExchange 等。總體占比有 10%。這些高質量的數據源里有核心代碼、高質量論文、高質量問答數據。這些高質量數據對 LLM suppose 是有很大的幫助。
Question2:不同數據源的比例對 LLM 的最終 performance 有影響么?
2.還是用了C4這個數據集。類似于WebText。
再看看 filter、deduplication 的細節
llama 針對 common crawl 的處理
-
在行級別做了 deduplication,llama paper 沒有講具體細節,但在 ccnet paper 有講(CCNet: Extracting High Quality Monolingual Datasets from Web Crawl Data [9])后續專門展開講一下。
-
使用了 fastText 做文本語言分類,刪掉非英語。
-
使用了 ngram 做低質量 filter。
- 訓練了一個 model,把網頁分成被 wikipedia 引用和普通網頁,這里主要也是區分質量。
數據量:
1.4T token.
1.3 facebook CCNet pipeline分析
原始論文:
https://arxiv.org/abs/1911.00359
CCNet 是 facebook 開發的針對 common crawl 的一系列數據 ETL pipeline。
▲ ccNet pipeline
deduplication:
▲ dedup-1▲dedup-2
ccnet 的亮點:
-
提出了針對 raw common crawl data,要先做 dedup 在做語言分類鑒別,最終效果更好,尤其對小語種。
-
在對 common crawl 做 filter 時,使用了數據分級,并沒有把 tail 數據全刪掉。他分了 head middle tail,分級是使用另外訓練的 model 來做的,比如head:先使用了 wikipedia 的數據來訓練出model,然后看每一個 paragraph 的數據過這個 model 算出來 perplexity score 高的就算 head。
- 有按照不同語種分類,包含了小語種數據。
ccnet 的待提升:
-
facebook 的 deduplication 并沒有使用 minhash,而是直接采用的 SHA-1 做傳統的 hash 去重。
- 沒有更多 line 級別的嚴格 filter。
來自迪拜的falcon以及其refinedweb數據集
本文下面重點調研下 falcon,falcon 是 dubai 的一家研究機構訓練的 LLM,他不但開源了自己的 7B,40B 版本的模型,還著重開源了他的 pre-training dataset [10]。本文詳細展開看一看。
論文原文:
https://arxiv.org/pdf/2306.01116.pdf
2.1 重要論點:只用web數據做預訓練,LLM效果也能很好
僅使用互聯網的 web 數據,把filter 和 deduplicate做好,也能訓練處性能比使用精加工的數據集訓練出來的 state-of-the-art 模型。我覺得這個論點挺猛的,這給了很多 LLM 創業團隊打了很大的雞血,即使起步晚一點,沒有特別多的數據積累,似乎在大模型質量上也不一定會落后。
美中不足的是,完整版本的 refinedWeb 數據集有 5Trillion tokens,但 falcon 在 huggingface 開源的版本只有 600billion tokens,是用在訓練 1.3B/7B 參數的模型上的,而不是 40B 最大的模型。在開源的時候,也保留自己的一部分核心競爭力。重點看看他們的數據清洗邏輯,可能對從業者處理中文互聯網有幫助。
▲ RefinedWeb 在 Web 數據的 filter、deduplication 上做了很重的工作。
NSFW :Not Safe/Suitable For Work
2.2 RefinedWeb詳細加工過程
加工總原則
1. Scale first|規模第一
這個數據集是為了加工 40B~200B 參數的 LLM 設計的,因此需要 trillion 級別的 tokens。因此重點放在從 commoncrawl 的原始數據加工上準備數據,而不是耗費大量人力去處理垂直領域的數據集。
2. Strict deduplication|嚴格去重。
同時使用了 exact 和 fuzzy 去重,比其他論文報告的刪除率更高。
3. Neutral filtering|中性過濾
也使用了基于模型的語言鑒定,使用了很多啟發式的規則,后面會詳細介紹。這一切都是為了避免 pre-training 數據當中包含 biased 數據。
總體流程
下圖為總體數據清晰 pipeline,包含了每一步刪除的文本數量,下面分步驟詳細展開講
▲ falcon datapipeline 及每一步保留的數據量
▲falcon pipeline 里每一步操作背后的基本思想
2.3 URL filtering
在重度去重、過濾等任務之前,先對整體做了基于 URL 的過濾。主要目標是過濾掉一些欺詐、成人網站。這里有兩個基本規則:1)一個 4.6M 個域名的黑名單 2)URL 分,基于內容中單詞的嚴格打分。falcon 發現單單基于一些 common 的黑名單還是會犯假陽性錯誤,比如過濾掉很多 popular 的博客平臺和好的的文化網站。然后很多基于單詞規則的規則數據集加工邏輯(比如 C4)會很容易把一些醫學、法律類的網頁給 block 了。
falcon 的 URL filtering 專注于找到可能對用戶有害的成人內容相關的域名,或者包含了很多非結構化內容的域名,比如類似百度網盤這種存文件的。首先,在 4.6M 個黑名單中的域名,直接顯示的 ban 了;然后,構建了一個 URL 打分體系,基于使用匹配一系列精選單詞。這些精選單詞列表是手工維護的,也是使用 ToxicBERT 標注出來的 toxicity 單詞。
url 打分部分提到的分級操作很精細:
Strict 級別:子單詞匹配
URL 包含的內容中,單詞里哪怕 substring 里匹配上了也會被直接過濾。比如很多欺詐網站會用很多特殊表情放在很多命中黑名單的單詞中間來 hack 整個單詞級別的過濾。
Hard級別:整個單詞匹配
整個單詞命中才會被過濾
Soft級別:單詞匹配
至少 2 個單詞 match 才會過濾,這里的規則我覺得是可以調整的。soft 級別包含了一些單詞是受懷疑的單詞,單個單詞并不一定有足夠的理由是有害的,但是多個懷疑的詞同時出現才會有害。這讓我們能保留一些醫學、法律方面的內容不會被過濾掉。比如(e.g., 但一個單詞 dick)。
2.4 Text extraction
只想抽取網頁的主要內容,把 menu,header,footer,以及廣告都給去掉。其他論文發現 trafilatura 是最好的非商用 library 去從做這件事。然后把 doc 內容中的 url 都刪掉。
2.5 Language identification
使用了 CCNet 中使用到的 fastText 來做文本的語言分類,這個是 document 粒度的。他使用了字符 n-gram 模型,這個模型使用 Wikipedia 數據訓練出來,支持 176 中語言。我們把主語言低于 0.65 分的文檔直接刪掉了。
falcon 只 focus 在英語上,經過這一步處理后的數據叫 RW-RAW。
整個 refinedweb 數據處理 pipeline 是可以應用在其他語言上的,但從 common crawl 的數據分布看,中文數據是明顯不符合中文的人口分布的。中國應該是世界第二大語言,但 common crawl 里中文的數據只排第 6.. 我覺得這就是說做中文的 LLM 以及相關的語料數據整理,做得好肯定還得靠我們中國人自己(吾輩加油)
2.6 Filtering: document-wise and line-wise
Repetition removal.
因為爬蟲的錯誤或者低質量的數據源存在,網頁包含重復內容也很常見,這肯定對 LLM 不好。我們肯定可以在 deduplication 階段處理,但在更早的文檔級別去做些處理是更輕量級的。我們刪掉了大量的存在 line、paragraph、ngram能識別出來的重復的文檔。
Document-wise filtering.
及其生成的垃圾文檔占比也不低。他們往往使用了不少特殊關鍵字、無聊文檔等,這些都不適合用來訓練 LLM。
這里有個好玩的問題:幾年后當 LLM 產生的內容充斥整個互聯網時,又該怎么去過濾取舍 LLM 的 pre-trainning 數據呢?可以關注下這個話題:如果以后全網都是 AI 生成的質量不高的內容這些 AI 大模型再用這些數據訓練那么這些大模型會不會越來越差?[11]
主要參考了 Rae et al.(2021)paper 里的一些質量過濾啟發邏輯。他們主要 focus 在刪掉一些異常值比如:總體文本長度,符號和單詞比例,以及一些用于鑒定文檔是真正自然語言的一些標準。我們注意到這些過濾器應該是在語言級別去使用的,這些過濾器從英語直接遷移到其他語言,會有過擬合的現象。
這里值得詳細展開去看看 Rae et al.(2021)paper
Line-wise filter.
盡管在使用 trafilatura 庫后已經有了不錯的效果提升,很多網頁文檔還是遺留下來了一些不太符合預期的 line,比如社交網絡的 likes 啊,點贊,反對按鈕之類的。鑒于此,我們開發了一個 line 級別的矯正 filter,目標就是去糾正這些不符合預期的 line。如果這些矯正器刪除了一個 doc 里大于 5% 的內容,我們就把整個 doc 刪掉。
falcon 開發了一個 line 級別的 filter 策略,手工檢查行級別數據:
-
如果主要由大寫字母組成(刪掉)
-
如果只有數字組成(刪掉)
-
如果是點贊、反對等這些東西(刪掉);
-
如果一行只有一個單詞(刪掉);
-
如果內容很短(≤ 10 words),且匹配到一些 pattern(持續更新):
-
– 在這行的開始;
-
– 在這行的結束(e.g. 閱讀更多.....);
-
最終,如果被標記 line 的單詞量超過了整個文檔的 5%,整個 doc 都刪掉。我們是通過人工檢查數據發現的這些邏輯,在處理不同語言的預料時,也需要有個性化的做更多特殊處理。
在經歷了 URL filter、text extraction、language identification、以及 doc/line級別的 filter 之后,common crawl 整體上只剩下了 23% 的數據。
整個 filter 過程后,common crawl 剩下 23% 的數據
2.7 Deduplication: fuzzy, exact, and across dumps
Fuzzy deduplication|模糊去重
falcon 做模糊去重也使用了 minhash,但 falcon 使用了 9000 個 hash function。這相比與 GPT3 的 10 個 hash function 會帶來巨大的精度提升,但也帶來了計算量的巨大消耗。文中說到如果使用不夠激進的設置,比如類似 The Pile 數據集使用的 10 個 hash function,會帶來很低的去重比率和更差的模型性能。falcon 使用 minhash 去在 web 語料中大范圍的找到近似的重復文檔。這項技術讓我們能鑒別出通過精確去重方法鑒別不出來的長度比較小的重復內容(比如比 50 個 token 還要小的內容)。
開始先從對內容進行規范化處理做起:刪掉標點符號,把文本全部做小寫處理,NFD 正則化,口音都會被刪掉,空格都會被標準化處理。然后使用 GPT2 的 tokenizer 做了分詞,以及為每個 doc 獲取了單獨的 n-grams。然后就用標準的 minhash 做重復度檢查。最終在所有的 bucket 當中,如果 doc A and B 在一個 bucket 相似,B and C 在另一個 bucket 相似,則 A-B-C 就變成了一個 cluster。最后在 cluster 當中隨機挑一個保留下來。
Exact deduplication|精確去重
使用 substring 在句子級別,而不是文檔級別去,找到 token-by-token 的字符串匹配。如果連續超過 50 個 token 是相同的,就做刪除處理。這樣抽取子字符串去做 match 后的刪除內容做會改變文檔內容,因此還實驗了刪掉整個 doc 或者針對這些內容做 loss-masking 處理,而不是直接刪掉他們,但這些嘗試似乎沒有給 LLM 的訓練帶來明顯的性能增長。
falcon 使用了 Lee et al.(2022)論文中的 EXACTSUBSTR 實現去做精確文本匹配。精確去重作用在 minhash 的模糊去重后的數據上,進一步減少了近 40% 的數據量。EXACTSUBSTR 會找到跨 doc 的長子字符串,是通過字符粒度逐個檢查實現的。這些子字符串可能比較小沒有占到 doc 的足夠大的部分,以至于沒有在 minhash 的模糊去重階段被去掉,或者因為 minhash 的相似度檢查就是沒有找出來。
在精確去重中,文中還提到了發現 duplication span 后的幾種策略:
? EXACTSUBSTR-CUT|把 span 直接刪了:比如不到 20 個 token 的
? EXACTSUBSTR-MASK|給 span 加上 musk
? EXACTSUBSTR-DROPPARTIAL:如果重復部分超過 doc 的 20%,直接把 doc 刪了
? EXACTSUBSTR-DROPANY:只要發現有 duplicate 的 span,整個 doc 都刪了
EXACTSUBSTR-CUT 把中間的 span 刪了可能會導致 doc 內語義的不連貫;EXACTSUBSTRMASK 不會有前者的問題;EXACTSUBSTR-DROP 在文檔很大時,可能還會保留 duplicate 的內容,而 EXACTSUBSTR-DROPANY 就是更加激進的做法了。
URL deduplication|URL去重
因為計算量的限制,在整個 RW-Filtered 數據集粒度直接做全局去重是不可能的。因此,把 CommonCrawl 分成 100 份,在每一份數據中做去重。大部分的重復都其實是能在這些分片內的去重完成的,但是我們也發現了在分片之間會有顯著的一些 overlap,這是因為爬蟲對部分 URL 訪問爬取了多次。因此,又保留了在分片內發現過的做過去重操作的 URL 清單,在后續的每個分片上看到都直接做刪除處理。
精加工數據集調研:WebText、The Pile 、C4 的調研分析
3.1 WebText
WebTextDataset Replication:https://openwebtext2.readthedocs.io/en/latest/replication/
▲ WebText數據集的
數據集特殊點:
-
做 filter 時使用了 Reddit score
-
數據集和加工數據的代碼完全開源,目前 eleutherAI 也在實現openwebtext2
評價:
感覺 webText 比較局限,reddit 相關并不能 cover 很多內容。目前(202307)&未來并不適合作為大模型的 common crawl 數據基礎。
3.2 The Pile
原論文:
https://arxiv.org/abs/2101.00027
The Pile 是 EleutherAI(EleutherAI)這個組織精加工的專門為 NLP 大模型訓練用的數據集。
EleutherAI is a non-profit AI research lab that focuses on interpretability and alignment of large models.
在處理 common crawl 的互聯網數據時,有提到使用 well-designed extraciton 和 filter。
More Effective Boilerplate Removal-the GoldMiner Algorithm [13] 用到了這篇論文的方法。
評價:
-
數據種類很豐富,涵蓋了非常多垂類的高質量數據。
-
但總體數據 token 量比較小,尤其處理 common crawl 部分。
3.3 C4
C4 是 google 針對 common crawl 數據進行精加工數據集:
https://www.tensorflow.org/datasets/catalog/c4
數據集特殊點:
1. 最初只能使用 google cloud 的 beam 代碼做加工。
2. 而后有一些開源實現。比如:c4 · Datasets at Hugging Face [14],C4 Dataset Script[15]
評價:
個人沒有詳細看開源版本的 C4 加工邏輯,github repo 的文檔里加工邏輯寫的也不夠清晰。使用時相對比較黑盒子。
個人思考
falcon 的 refinedWeb paper [16] 是一篇把基于爬蟲爬取數據的處理講的這么詳細的 paper 之一,后續我會再精讀 The Pile,C4 等其他數據集,總結出更多的爬蟲爬取的網頁數據的 pre-training data 處理方法。
在對 LLM dataset 調研的過程中,我發現中文的 NLP 大型語料真的很少,除開沒有 common crawl 這樣大型公立的互聯網數據之外,也缺乏人工整理的高精 curated dataset,在 github 和 huggingface 都很少看到。
github 里搜索 chinese corpus 最高的兩個 repo,也都很久沒有更新了。https://github.com/brightmart/nlp_chinese_corpushttps://github.com/SophonPlus/ChineseNlpCorpus
不過隨著中國搞 LLM 的玩家越來越多,以及整個基于 LLM 的垂類應用越來越多,更多的人也在基于 base model 做 finetune,各個公司其實都會越來越重視整理自己的垂直語料庫,希望大家未來長期都能慢慢把一些沒有那么高壁壘的數據貢獻在 github、huggingface,或者參考 falcon 的方式,貢獻自己語料庫當中的一部分。
我也建議搞中文的 LLM 廠家不要只分享打榜結果,如果打榜效果好的話可以適當放出一些 insight,比如用了什么數據,怎么處理數據的,尤其是高校科研背景的研究機構可以更多的做公立性質的貢獻。
參考文獻
?[1] https://openai.com/research/instruction-following
[2] https://huggingface.co/datasets/tiiuae/falcon-refinedweb
[3] https://arxiv.org/abs/2005.14165
[4] https://openai.com/research/gpt-4
[5] https://zhuanlan.zhihu.com/p/617057227
[6] https://paperswithcode.com/dataset/webtext
[7] https://huggingface.co/datasets/openwebtext
[8] https://arxiv.org/abs/2107.06499
[9] https://arxiv.org/abs/1911.00359
[10] https://huggingface.co/datasets/tiiuae/falcon-refinedweb
[11] https://www.zhihu.com/question/608053796
[12] https://github.com/EleutherAI/openwebtext2
[13] https://www.scielo.org.mx/scielo.php?script=sci_arttext&pid=S1870-90442013000200011
[14] https://huggingface.co/datasets/c4
[15] https://github.com/shjwudp/c4-dataset-script
[16] https://arxiv.org/pdf/2306.01116.pdf
-
物聯網
+關注
關注
2894文章
43313瀏覽量
366436
原文標題:大語言模型(LLM)預訓練數據集調研分析
文章出處:【微信號:tyutcsplab,微信公眾號:智能感知與物聯網技術研究所】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論