對文字的胃口
現代基礎模型是在網路規模語料庫(web-scale corpus)上訓練的:不是數百萬,而是數兆個詞元,比任何人窮盡千次人生都讀不完的文字還要多上數百倍。訓練資料是決定成品模型懂什麼、寫得多好的最大槓桿。再聰明的架構,餵它垃圾也只會產出垃圾;再樸素的架構,餵它一個乾淨、多元的語料庫,也能表現出色。
示意图:原始文本被切分为词元,映射为词元 ID,再转换为嵌入向量。
因此語料團隊的工作不只是「收集」文字——而是要「策展」它。整條流程有四個大階段:收集原始資料、清洗、移除重複、決定每個來源該佔多少比重。少了任何一個,訓練都會受害。我們會逐一走過。
原始文字從何而來
多數公開語料庫的骨幹是 Common Crawl——一個非營利組織,多年來爬遍開放網路,每月釋出數十億頁的快照,任何人都能免費下載。它無比龐大,卻也是一片沼澤:在維基百科與新聞之外,你會撈到垃圾郵件、壞掉的 HTML、導覽選單、成人內容,以及重複了上百萬次、一模一樣的 cookie 同意橫幅。
團隊會用更可信的來源補強爬蟲資料:程式碼倉庫、書籍、學術論文、經過篩選的問答網站、參考工具書。這些來源較小,但每個詞元都乾淨得多,能把模型拉向謹慎、結構良好的語言。來源的搭配是一個刻意的選擇,我們稍後會回頭談。
清洗:把沼澤變成語料庫
資料清洗(data cleaning)是一疊過濾器,每一個都便宜好跑,每一個都剔除一類垃圾。其中的藝術在於:要夠果決地拉高品質,又不能誤殺珍稀的好文字。一條典型的流程長這樣:
- 語言過濾:用快速的語言偵測器評分,只保留你打算訓練的語言。
- 品質啟發式規則:剔除字數太少、符號太多、句子破碎,或標點與數字比例可疑的頁面。
- 樣板移除:去掉重複的選單、頁首、頁尾、cookie 橫幅等不帶資訊的內容。
- 安全與個資過濾:移除最嚴重的有害內容,並洗去電子郵件、電話等明顯的個人資料(PII)。
- 模型式過濾:訓練一個小型分類器來辨認「看起來像教科書/優質維基百科」的文字,保留它高分的頁面。
每個過濾器都是一種取捨。過濾太溫和,模型就泡在垃圾裡;過濾太嚴苛,你會抹掉方言、冷門主題,以及那條讓模型變得有趣的知識長尾。團隊會藉由訓練小模型、觀察哪一種配方能在留存的可信文字上得到最低損失,來調校這些門檻。
去重複:別把同一頁讀兩遍
網路的重複程度令人吃驚。同一篇文章被數十個網站鏡像;授權條款與名言佳句出現上百萬次。去重複(deduplication)會移除這些副本,是整條流程中報酬率最高的步驟之一。為什麼影響這麼大?重複的文字會被過度加權:模型一遍又一遍地看到它,浪費容量去背它,也更可能逐字吐出原文——這同時引發了隱私與著作權的疑慮。
去重複在兩個粒度上進行。精確去重會對整份文件做雜湊,丟掉一模一樣的;模糊去重則抓出近似重複——同一篇文章只是頁首換了則廣告——通常用一種叫 MinHash 的技術,在不逐字比對的情況下估算兩份文件的重疊程度。
模糊去重用 Jaccard 相似度来衡量近似重复——即两篇文档词元集合的重叠程度。
before dedup: 2.4T tokens (raw, cleaned web) after exact: 1.9T tokens (-21%, identical copies gone) after fuzzy: 1.3T tokens (-32%, near-duplicates gone) # nearly half the corpus was redundant
從多個來源到單一資料流
現在你有了好幾堆乾淨、去重複的資料——網頁、程式碼、書籍、論文。但模型只在一條資料流上訓練,所以你必須決定每一堆貢獻多少比例的訓練詞元。這個選擇就是資料混合加權(data mixture weighting),而它的威力出乎意料:把程式碼加權,模型就更會寫程式;把某種語言加權,它就說得更流利。它如此關鍵,以致下一篇指南有一部分專門談它,並一併談你究竟該訓練多少個詞元。
对数坐标图:随着模型、数据和算力规模的增大,训练损失随之下降。