https://poloclub.github.io/transformer-explainer/
看了一下早期的 gpt tokenier
https://github.com/kaisugi/gpt4_vocab_list/tree/main
有關中文的部分也少少的 鳥鳥的 但也是能用吧
我突然覺得,tokenizer 其實比較像是 LLM 裡的「節能壓縮層」,不是 Transformer 真正的核心。
一開始我以為 tokenizer 很重要,是因為它要把語言切得很漂亮,像中文斷詞、英文單字、詞根詞綴那種。但後來想想,其實 Transformer 根本不要求你切得像人類語言學。
你就算完全不壓縮,每個中文字、英文字母、符號、emoji 都當成一個 token,理論上模型還是可以跑。甚至更極端一點,用 UTF-8 byte,256 種基本單位就能表示全世界所有文字。
所以 tokenizer 的重點不是「讓模型懂語言」,而是「讓模型省力」。
常見詞合併成一個 token,句子就變短;句子變短,attention 計算就便宜;context window 也能塞更多內容。
換句話說,tokenizer 比較像壓縮格式,不是智慧本身。
真正的語意理解、上下文組合、推理能力,還是在 embedding 之後的 Transformer layers 裡面發生。
所以我現在的理解是:
Tokenizer 負責把文字變成省 token 的 ID 序列;
Embedding 負責把 ID 變成向量;
Transformer 才是負責理解關係、組合語意、預測下一步的核心。
這樣想之後,很多事情就通了。
中文 tokenizer 看起來很鳥,不代表模型不能懂中文;只是代表中文可能比較吃 token,比較不省電。
Tokenizer 不是語言理解的靈魂。
它比較像 LLM 世界裡的資料壓縮工程。
我後來又補了一個觀念:token 跟 embedding table 的關係。
Tokenizer 做的事情,是把文字切成 token,然後把每個 token 轉成一個 ID。
例如:
我喜歡機器學習
→ ["我", "喜歡", "機器", "學習"]
→ [8192, 12001, 33002, 33003]
但 Transformer 不能直接吃這些 ID。
ID 本身只是編號,沒有語意。
所以模型裡面還會有一張 embedding table。
這張表可以想成:
token ID → 一條向量
例如:
8192 → 「我」的向量
12001 → 「喜歡」的向量
33002 → 「機器」的向量
33003 → 「學習」的向量
也就是說,tokenizer 決定「文字被切成哪些 ID」;embedding table 則決定「每個 ID 對應到哪一條向量」。
這樣想之後,整個流程就清楚很多:
文字
→ tokenizer 切成 token
→ token 轉成 ID
→ ID 去 embedding table 查向量
→ 向量進 Transformer
所以 token 本身不是模型真正計算的東西。
真正進入 Transformer 的,是 token 對應到的 embedding vector。