LLM Tokenization
LLM Tokenization 是訓練語言模型中最關鍵卻常被忽略的步驟之一。
近期,AI 教學名人 Andrej Karpathy 發表了一場新講座,完整解釋了 Tokenization 的原理與陷阱,甚至手把手教你「如何從零實作一個 GPT 的分詞器」。
什麼是 Tokenization?
Tokenization(分詞)是訓練大型語言模型(LLMs)時的關鍵步驟之一。
它的目的,是把一整段文字切割成模型可以理解的單位(稱為 tokens),例如單字、詞組、甚至是子詞或單個字母。
例如 GPT 所用的 Byte Pair Encoding(BPE)就是一種依據資料統計頻率來決定切法的演算法。
這張圖是 Andrej Karpathy 在講解 LLM Tokenization 時的重點清單,裡面幽默卻精準地指出了「大型語言模型怪異行為的真正元兇」──Tokenization(分詞機制)。以下是這些問題的中英對照解釋
| 原文 | 中文翻譯 | 解釋 |
|---|---|---|
| Why can’t LLM spell words? | 為什麼 LLM 拼不出單字? | 因為單字常被拆成不連續的 token(例如 “apple” 可能被切成 “ap”, “ple”) |
| Why can’t LLM do super simple string processing tasks like reversing a string? | 為什麼不能反轉字串這種簡單任務? | 因為字元不是一個 token,而是多個組合 |
| Why is LLM worse at non-English languages (e.g. Japanese)? | 為什麼處理非英文語言表現較差? | 分詞器多數以英文為主訓練,非英語切得比較亂 |
| Why is LLM bad at simple arithmetic? | 為什麼連簡單算數都會出錯? | 數字不是單一 token,會被拆成複雜組合 |
| Why did GPT-2 have more than necessary trouble coding in Python? | 為什麼 GPT-2 寫 Python 很不順? | 因為特殊符號與語法結構被切成難以理解的 token |
| Why did my LLM abruptly halt when it sees the string “”? | 為什麼看到 <endoftext> 就停止? |
那是訓練資料的結束符號,被模型誤認為應結束 |
| What is this weird warning I get about a “trailing whitespace”? | 為什麼尾端空白也會有警告? | 空白本身也是一個 token,會被當作資訊處理 |
| Why the LLM break if I ask it about “SolidGoldMagikarp”? | 為什麼問到奇怪詞就壞掉? | 因為那是極少出現或特殊的 token,模型沒見過 |
| Why should I prefer to use YAML over JSON with LLMs? | 為什麼建議用 YAML 而非 JSON? | YAML 格式更友善於 token 切分,JSON 結構太嚴格 |
| Why is LLM not actually end-to-end language modeling? | 為什麼 LLM 並非真正的端對端語言模型? | 因為語言是先經過分詞器處理過的中間表示 |
| What is the real root of suffering? Tokenization. | 真正痛苦的根源是什麼?Tokenization。 | Karpathy 的幽默:所有痛苦皆由錯誤切詞而起 |
實務提醒:理解分詞,就是 Prompt 工程的第一步
- 分詞影響模型的理解與輸出品質
- 許多 prompt 的錯誤其實來自 token 切錯
- 善用工具(如 tiktoken)檢查你的 prompt 分詞情形
- 少用複雜單字、簡化結構,可以改善模型理解力
初學者該學什麼?
- 分詞不是簡單的空格切割,而是根據資料頻率、語言規則、甚至壓縮邏輯進行的壓縮單位拆解。
- Token ≠ 字元 ≠ 單字,這三者常常不同。
- 練習改寫提示詞,讓分詞更合理(這就是 prompt engineering 的一環)
References
上一篇:LLM Research Findings - 大型語言模型的可信度
下一篇:LLM Research Findings - 什麼是 Groq?
