太大塊(整個單字)→ 字典爆炸;太小塊(一個字母)→ 句子太長。
三兄弟都想找「剛剛好」的積木,只是挑積木的規則不一樣。
數一數:哪兩塊積木最常貼在一起?就把它們黏成一塊。重複做,直到積木數量夠了。
範例語料:low ×5、lower ×2、newest ×6、widest ×3
切新字時:照「黏的順序」重播一次。GPT 系列用的是 byte-level BPE(從位元組開始黏,所以任何字都切得動,包括中文和 emoji)。
跟 BPE 一樣往上黏,但打分方式不同:兩塊很常一起出現,而且各自單獨時很少見,才值得黏。
以下數字來自《愛麗絲夢遊仙境》全書(27,427 個詞次,全部小寫)。
→ 選 he(3,118 > 188)
→ 選 qu(黏性約 7.7 倍;書裡 188 個 q 全都接著 u)
## =「我是接在前面那塊後面的」。BERT 家族就是用這個。這是在《愛麗絲》上學 1,500 塊後的真實切法:語料太小,WordPiece 常把字尾拆成單個字母。
反方向!先準備一個超大積木箱,每塊有「常見機率」。每一輪丟掉「丟了也最不心疼」的積木,直到箱子夠小。
它切字時會比較好幾種切法,挑整體機率最高的那個(每塊機率相乘):
機率是在《愛麗絲》上訓練 1,500 塊後的真實值。lowest 不在書裡,共有 20 種切法。長條用對數尺度(10⁻¹¹ 到 10⁻⁷)。
因為手上有「每種切法的機率」,它還能故意偶爾換一種切法訓練模型(subword regularization),讓模型更耐打。T5、ALBERT、XLNet 用它(透過 SentencePiece)。
| 方向 | 挑積木的規則 | 切新字的方式 | 代表模型 | |
|---|---|---|---|---|
| BPE | 小 → 大(黏) | 一起出現次數最多 | 照黏的順序重播 | GPT-2/3/4、RoBERTa、LLaMA |
| WordPiece | 小 → 大(黏) | 次數 ÷ 各自次數(黏性) | 從左貪心抓最長,## 標接續 | BERT、DistilBERT、ELECTRA |
| Unigram LM | 大 → 小(砍) | 砍掉後總機率掉最少的 | 比較所有切法,挑機率最高 | T5、ALBERT、XLNet、mBART |
小提醒:SentencePiece 不是第四種演算法,而是一個工具箱,裡面可以選 BPE 或 Unigram;它把空白也當成一般字元(▁),所以中文、日文這種不用空白分詞的語言也能直接用。