Tokenization(分詞)
又稱:分詞 · 切詞 · tokenizer · BPE · subword · 子詞 · token 化
把一段文字切成一串 token 的那套規則 —— 每個模型家族有自己的切法。
你會在什麼時候遇到它
上一站 token 告訴你模型吃的是什麼;這一站解釋它是怎麼被切出來的。當你發現同一句話在不同模型的 token 數不一樣、或中文帳單比預期貴時,答案都藏在切法裡。不懂它,token 數對你就只是玄學,估算永遠對不上帳。
打個比方
像輸入法的聯想詞庫:越常用的詞組越會被整詞收錄,一次就選出來;冷門的詞只能一個字一個字拼。BPE 這類演算法就是這個邏輯 —— 語料裡越高頻的字串,越會變成一個完整的 token。
最小範例
BPE 的基本思路(示意):
從單一字元出發,反覆統計語料裡「哪兩個相鄰單位最常一起出現」,
就把它們合併成一個新單位,直到詞彙表到達設定的大小。
於是常見的切法像這樣(示意,實際依模型詞彙表而異):
"unhappiness" → ["un", "happi", "ness"]
罕見的人名 → 往往被切成更多碎片
常用短詞 → 多半整詞就是一個 token兩個關鍵後果。一,詞彙表是從訓練語料的頻率統計出來的,而主流模型的語料以英文為主,所以同樣的意思,中文通常要付更多 token。二,空格也只是一個字元,BPE 會把「詞前面的空格」併進該詞的第一個 token —— 這就是 token 字串裡看得見前導空格的原因。
最常搞錯的地方
- 以為存在一套「標準分詞」。每個模型家族有自己的 tokenizer 和詞彙表,同一段文字切出來的 token 數不同,帳單和上下文佔用也不同。要精確數字,只能用該模型自己的 tokenizer 去數。
- 用「字數乘一個係數」估算 token,然後奇怪為什麼跟 API 回報的用量對不上。係數只是平均值,對程式碼、JSON、中英混雜的文字誤差特別大。