電腦只懂數字
在理解 token 之前,必須先接受一件事:電腦底層只能處理數字。不管是文字、圖片、聲音,所有資訊在電腦裡最終都是 0 和 1 的組合。
AI 也不例外。AI 的核心是一個超大的數學函數,輸入數字、輸出數字。這個數學函數可以有幾百億個參數,可以在幾秒內處理幾萬個數字,但它的本質從來沒有改變:接受數字,回傳數字。
問題來了:你打給 Claude 的一段話,像是「幫我 review 這段 code」,這串文字要怎麼變成數字?圖片、音樂、影片呢?這正是 token 要解決的問題。
Token 是什麼
最直覺的做法是把每個字母對應一個數字。A=1, B=2, C=3⋯⋯這確實可以,但有個根本問題:字母本身幾乎沒有語義。h、e、l、p 四個字母各自沒有意義,要湊在一起才有。而且這樣切的話,「helping」就是 7 個輸入單位,context window 很快就會被用完。
另一個極端是把每個完整的單字對應一個數字。但英文單字加上所有變形,help、helps、helped、helping、helper,就已經有幾十種;加上全世界所有語言的詞彙、縮寫、新造詞、拼錯字,詞彙表會無限膨脹,永遠枚舉不完。
Token 是介於這兩個極端之間的解法:把文字切成「有意義的片段」,每個片段給一個 ID。
"helping" 不會被切成 7 個字母,也不會是一個完整單字,而是切成 help + ing 兩個 token。
"tokenization" 則是 token + ization,兩個 token。
每個 AI 模型都有一張「詞彙表(Vocabulary)」,把已知的 token 對應到整數 ID:
"hello" → 15496
"help" → 1037
"ing" → 278
"你" → 7979
"好" → 1131
GPT-4 的詞彙表大約有 100,277 個 token。你說的每一句話,都先被這張表查詢、轉換成一串整數 ID,AI 才開始「思考」。這個把文字轉成 token ID 的過程,叫做 Tokenization。
Token 的邊界從哪裡來:BPE 演算法
詞彙表不是人工設計的,而是從資料裡「學」出來的。這個演算法叫做 BPE(Byte Pair Encoding,位元組對編碼)。
BPE 的運作流程
第一步:從最小單位開始。先把所有文字拆成最小單位,字母或 byte。
help → h e l p
helped → h e l p e d
helping → h e l p i n g
helper → h e l p e r第二步:找最常一起出現的相鄰對,合併。統計所有相鄰字元對的出現頻率,找到最高的那個,合併成一個新單位。假設 h e 出現最頻繁,合併成 he:
he l p
he l p e d
he l p i n g
he l p e r第三步:重複。繼續找最常出現的相鄰對。這次 he l 最常出現,合併成 hel,接著 hel p 合併成 help⋯⋯這個過程重複幾萬次,每次合併都會產生一個新的 token。最終你得到一張涵蓋字母、常見字根、常見單字的詞彙表,總量通常落在幾萬到幾十萬個 token。
BPE 帶來的關鍵特性
常見的東西變成一個 token,罕見的東西被拆開:
"the" → 1 個 token (超高頻,直接一個)
"helping" → 2 個 token (help + ing)
"tokenization" → 3 個 token (視模型而定)
"Anthropic" → 2-3 個 token (專有名詞,出現頻率不一)
"Zyxqwvutsrp" → 8+ 個 token (罕見組合,拆到字母級別)
這個機制很聰明:詞彙表有限,但能表達無限的文字。遇到沒看過的詞,就拆成更小的已知片段來表達。
為什麼不同語言和程式碼的 Token 效率差很多
BPE 是從訓練資料裡學出來的。訓練資料越多、結構越規律,學出來的詞彙表就越有效率。這直接影響了不同語言的 token 消耗。
英文的情況
英文是 BPE 最舒適的語言。它用字母組合,常見的詞根(help、tion、ing、un-)出現頻率高,都能被學成高效的 token。英文一個 token 平均代表約 4 個字元。
中文的情況
中文每個字本身就有完整語義。早期 tokenizer 常接近「一字一 token」,但在新一代大詞彙表 tokenizer(例如 o200k_base 類)中,常見詞組更容易被合併成單一 token。也就是說,中文的 token 效率整體比過去更好;在許多常見句子裡,中文與英文的 token 消耗通常仍在同一量級,差異主要取決於模型的 tokenizer 與實際字詞分佈。
低資源語言的劣勢
泰文、阿拉伯文等語言,如果在訓練資料裡出現得少,BPE 就沒學到夠多的高頻組合,很多字會被拆到 byte 層級。一個泰文單字可能需要 5-8 個 token,但它只表達一個英文單字的意思。這代表同樣一段話,泰文版消耗的 token 可能是英文的 3-4 倍,context window 更快用完,API 成本更高。
這也是 AI 在低資源語言上表現較差的原因之一。不只是訓練資料少,連 tokenization 效率都先輸一截。
程式碼的特殊問題
程式碼最「浪費」token 的地方不是邏輯,而是空白、縮排、標點符號。
def calculate_average(numbers):
return sum(numbers) / len(numbers)這段程式碼裡,def、return 這些關鍵字是高頻 token,效率好。早期 tokenizer 常把縮排空格拆得很碎;現代 tokenizer 已常把 4 或 8 個連續空格合併成較少 token。不過 calculate_average 這類識別字仍可能被切成 calculate、_、average,括號與標點也會持續消耗 token。
這正是為什麼針對程式碼訓練的模型(Codex、DeepSeek Coder)會使用特別優化的 tokenizer,把常見的縮排模式、符號組合學成單一 token,降低程式碼的 token 消耗。對開發者來說,你的 TypeScript 或 Python 丟給 AI,token 消耗比你想的多,縮排和符號很「貴」。在設計 prompt 時,程式碼的 token 成本要特別留意。
Embedding:數字向量為什麼能代表語義
到目前為止,我們知道文字被切成 token,token 被對應成整數 ID。但 AI 真正拿去計算的,不是這個整數 ID。
整數 ID 本身沒有語義。help = 1037,dog = 2891,這兩個數字的大小差距跟它們的語義毫無關係。你不能從 ID 的數值判斷兩個詞是否意思相近。
AI 真正使用的是 Embedding 向量:每個 token ID,對應到一個高維度的浮點數向量。
"help" → ID 1037 → [0.23, -0.81, 0.45, 0.12, -0.33, ...] (768 個數字)
"assist" → ID 4567 → [0.21, -0.79, 0.47, 0.11, -0.31, ...] (768 個數字)
"dog" → ID 2891 → [-0.54, 0.33, -0.12, 0.88, 0.21, ...] (768 個數字)help 和 assist 的向量非常接近。dog 的向量跟它們差很遠。這張「token ID → 向量」的對照表,叫做 Embedding Table,是模型裡的一個巨大矩陣。
向量空間裡的幾何關係
Embedding 向量最令人驚訝的特性,是它們的幾何關係對應到語義關係:
向量("king") - 向量("man") + 向量("woman") ≈ 向量("queen")
這不是巧合。「性別關係」在向量空間裡形成了一個穩定的方向,king → queen 的向量差距,跟 man → woman 的向量差距,在幾何上幾乎平行。類似的結構也出現在:
"Paris" - "France" + "Japan" ≈ "Tokyo"
"走" - "現在" + "過去" ≈ "走了"
向量空間裡有真實的語義幾何結構。AI 學到的不只是「這個詞出現在哪裡」,而是詞與詞之間的關係網絡。
為什麼向量能承載語義:訓練過程的秘密
看到這裡你可能會問:768 個數字是怎麼學到語義的?是有人手動設計每個維度的意義嗎?完全不是。這是訓練過程中自動浮現的。
從一個簡單的比喻開始
假設你要用數字描述水果,給兩個維度:甜度和酸度。
檸檬 → [1, 9]
蘋果 → [7, 4]
西瓜 → [8, 1]
葡萄柚 → [4, 8]
檸檬和葡萄柚的向量很接近,因為它們都很酸;西瓜和蘋果很接近,因為它們都偏甜。意義相近的東西,在向量空間裡自然聚在一起。但兩個維度只能描述甜酸,語言的「意義」遠比這複雜,詞性、情緒色彩、抽象程度、領域、與其他詞的關係⋯⋯每一種語義維度都需要一個數字軸來承載。這就是為什麼需要 768 個維度,而不是 2 個。
語義是怎麼自動浮現的
訓練開始時,Embedding Table 是完全隨機初始化的,help 和 dog 的向量毫無意義。訓練的任務只有一個:給你前面的 token,預測下一個 token 是什麼。
模型看到「Please _____ me with this task」,要預測空格。正確答案是 help,但模型猜 dog,這是錯的。錯了就修正。一個叫做反向傳播(Backpropagation)的機制,會追蹤「是哪些數字導致這個錯誤」,然後微調那些數字。
這個過程發生了什麼?模型發現,在「Please ___ me」這個上下文裡,help、assist、support 都是合理答案,dog 不是。所以它慢慢把 help、assist、support 的向量推向彼此,把 dog 推遠。
這個過程重複幾千億次,用幾兆個字的文章訓練。最終,向量空間自動形成了語義結構。不是因為有人設計,而是因為意思相近的詞,天然會出現在相似的上下文裡,訓練過程把這個統計規律壓進了向量的幾何關係。
沒有人告訴模型「help 和 assist 是同義詞」,它從幾兆個字裡自己統計出來的。
Embedding Model 是什麼
理解了 Embedding Table 之後,你可能在 Dify、OpenAI API 或其他 AI 工具裡看過「Embedding Model」這個設定,例如 text-embedding-3-small。它跟 Embedding Table 是同一件事嗎?不完全是。
Embedding Table 的問題:靜態,不懂上下文
Embedding Table 是一張靜態對照表。bank = [0.12, -0.34, ...],不管你說的是「銀行」還是「河岸」,查出來的向量永遠一樣。但同一個詞在不同句子裡的意思可能截然不同:
"I went to the bank to deposit money" → bank = 金融機構
"The river bank was covered in mud" → bank = 河岸靜態的 Embedding Table 無法區分這兩種意思。
Embedding Model:動態的上下文向量
Embedding Model 在查完 Embedding Table 之後,多做了一件事:透過 Attention 機制,讓每個 token 的向量根據周圍的 token 動態調整。
在第一個句子裡,bank 的向量被 deposit、money 影響,移動到「金融機構」的方向。在第二個句子裡,bank 被 river、mud 影響,移動到「河岸」的方向。這就是 Embedding Model 做的事:把靜態的 token 向量,轉換成帶有上下文語義的動態向量。
作為獨立產品的 Embedding Model
你在 Dify 設定的 Embedding Model,是一個特殊用途的版本:只輸出向量,不生成文字。它的典型用途是 RAG(Retrieval-Augmented Generation):
- 上傳文件,文件被切成段落
- 每段跑 Embedding Model,得到一個代表整段語義的向量
- 存進向量資料庫
- 你問問題,問題也跑 Embedding Model 得到向量
- 在向量資料庫裡找最近的段落(語義最相近的內容)
- 把找到的段落丟給 LLM 生成回答
這就是為什麼 RAG 能「理解」你的問題和文件的語義關係,而不只是做關鍵字匹配。如果你想深入了解 RAG 的完整實作,可以參考這篇:檢索增強生成 RAG 的介紹與實作。
三者的關係整理如下:
Embedding Table
→ 靜態字典,token ID 換成基礎向量,不懂上下文
Embedding Model(作為大模型的一部分)
→ 查完表之後,用 Attention 讓向量動態調整,理解上下文
Embedding Model(作為獨立產品)
→ 把整段文字壓成一個語義向量,給 RAG 或相似度搜尋使用
程式碼的 Tokenization
程式碼跟自然語言最大的差異:結構是嚴格的,一個字元的差異可能讓整段程式完全不同。
縮排有語義
在自然語言裡,空格只是視覺分隔。但在 Python 裡,縮排決定了程式的執行邏輯:
if x > 0:
return x # 這在 if 裡面
return -x # 這在 if 外面兩行 return 只差了縮排,語義完全不同。對 BPE 來說,空格只是一個普通字元,沒有結構意義。早期的程式碼模型在處理縮排時容易出錯,現代的 coding tokenizer 會把常見的縮排模式(例如四個空格)學成單一 token。
Token 邊界與語法邊界不一致
camelCase 和 snake_case 的命名,讓 BPE 切出的邊界千變萬化。常見的 API 命名(例如 getUserById)可能被學成較少的 token,但你自己取的長命名(例如 calculateMonthlyRevenueByRegion)就會被切得很碎:
calculateAverageScore
→ calculate / Average / Score
或
→ calc / ulate / Average / Score同一個符號,不同語言意義完全不同
{} 在 TypeScript → 物件、程式區塊
{} 在 Python → 字典、集合
{} 在 CSS → 樣式區塊通用 tokenizer 不知道這些差異,只知道 { 是一個高頻字元。語義的差異要靠後面的 Attention 從上下文中學。
語法正確性不是 Tokenizer 的責任
Tokenization 只是把文字切成片段、給 ID。語法是否正確,是模型在訓練過程中從大量程式碼裡學到的統計規律。這就是為什麼 AI 有時候會生成「幾乎正確但少了一個括號」的程式碼,tokenizer 沒有語法檢查能力,模型只能靠統計規律猜。
基因序列的 Tokenization
這裡有一個讓很多人驚訝的事實:基因序列和文字,在 tokenization 的層面上驚人地相似。
先建立基本認識
DNA 由四種鹼基組成:A(腺嘌呤)、T(胸腺嘧啶)、G(鳥嘌呤)、C(胞嘧啶)。一段人類基因看起來像這樣:
ATCGGCTATGCAATCGGCTATGCA...就是一串很長的 ATCG。人類完整的基因組大約有 32 億個鹼基。
文字和基因序列的相似性
文字是字母組成的序列,有意義的單位是詞。基因是 ATCG 組成的序列,有意義的單位是基因片段。文字裡,某些字母組合特別常出現(the、ing、tion);基因裡,某些 ATCG 組合也特別常出現,而且這些組合通常有生物功能。這個相似性不是巧合,兩者本質上都是在有限的符號集合上,用排列組合編碼資訊。
基因序列怎麼 Tokenize
方法一:固定長度的 k-mer。切成固定長度的片段,例如 6 個鹼基一組(6-mer):
ATCGGCTATGCA
→ ATCGGC / TATGCA4 種鹼基、6 個位置,理論上有 4⁶ = 4096 種可能的 6-mer,這就是詞彙表的大小。
方法二:直接用 BPE。跟文字完全相同的演算法,從資料裡學出高頻的鹼基組合。結果發現,BPE 學出來的「基因 token」,很多時候對應到真實的生物功能單位,不是因為有人告訴它,而是因為有功能的片段在基因組裡重複出現,頻率自然高。
Embedding 在基因上同樣成立
把基因 token 丟進和文字一樣的 Transformer 訓練,結果:
- 功能相似的基因片段,向量在空間裡靠近彼此
- 「編碼蛋白質的片段」和「調控基因表現的片段」在向量空間裡形成不同的聚落
- 就像
help和assist靠近、king - man + woman ≈ queen成立一樣
Meta 的 ESM(蛋白質語言模型)學的是蛋白質序列(由 20 種氨基酸組成),邏輯完全一樣。AlphaFold 能預測蛋白質的 3D 結構,核心也建立在這種序列 Embedding 上。
最關鍵的是:訓練在基因序列上的模型,學到的向量幾何關係,跟生物學家花幾十年實驗發現的規律高度吻合。模型沒有讀過任何生物教科書,只是看了幾十億個 ATCG,就自動把有相似功能的片段推到向量空間的相近位置。
文字: 字母 → BPE token → Embedding → 語言語義
基因: ATCG → k-mer / BPE token → Embedding → 生物語義
自動駕駛的 Tokenization
自動駕駛把 tokenization 推向了一個新的維度:輸入不是符號,而是連續的物理世界感測器資料。
自動駕駛的輸入有多複雜
攝影機 → 每秒 30 張圖片,通常 8-12 個不同角度
LiDAR → 每秒數十次,發射雷射掃描周圍 360°,得到 3D 點雲
雷達 → 偵測遠距離物體的速度和距離
GPS → 當前位置
IMU → 加速度、角速度每種資料的格式完全不同,必須各自設計 tokenization 策略。
最大的挑戰:3D 點雲
攝影機圖片可以切 patch,但 LiDAR 的輸出是點雲(Point Cloud):幾萬個 3D 座標點,每個點記錄 (x, y, z) 和反射強度。
(1.2, 3.4, 0.1, 0.8)
(1.3, 3.5, 0.1, 0.9)
(5.7, 2.1, 1.4, 0.3)
...(共 100,000 個點)這些點沒有固定順序、沒有網格結構,不像圖片可以整齊切成 patch。解決方案有兩種:
體素化(Voxelization):把 3D 空間切成一格一格的小立方體,每個有點落入的方塊取平均,得到一個向量,這個向量就是這個空間位置的 token。
Point Token:PointNet 等模型直接把每個 3D 點視為 token 的輸入,用神經網路學出每個點的向量,再用 Attention 讓點與點之間互相影響。
多模態融合
自動駕駛的核心挑戰是把所有感測器的 token 融合在一起。攝影機看到顏色和紋理,能辨識紅綠燈、行人的臉;LiDAR 看到精確的 3D 距離,知道前方物體距離 8.3 公尺、高度 1.7 公尺;雷達能穿透雨霧,攝影機失效時仍能偵測移動速度。
融合方式是讓不同感測器的 token 在同一個 Attention 層裡互相影響。攝影機的「行人 patch token」和 LiDAR 的「1.7 公尺高物體 token」,如果在 3D 空間裡對應到同一個位置,Attention 機制會讓它們互相強化,「這個位置既有人形輪廓,又有符合人體高度的點雲,確認是行人」。
時間維度
自動駕駛還需要理解移動。解法是把過去幾幀的感測器資料一起丟進模型,讓 Attention 跨時間運作:
t-2(200ms 前)的點雲 token
t-1(100ms 前)的點雲 token
t(現在)的點雲 token
↓
跨時間 Attention
↓
「前方行人正在以 1.2 m/s 向右移動」
現代自動駕駛模型(Tesla FSD、Waymo 最新架構)的輸出也是 token,也就是行為 token。這讓模型能用自然語言解釋自己的決策,也讓工程師更容易 debug。
3D Modeling 的 Tokenization
3D Modeling 的 tokenization 是點雲概念的延伸,但因為 3D 資料的格式多樣,所以有好幾種不同的策略。
3D 物體的資料格式
點雲(Point Cloud) → 一堆 3D 座標點,沒有連接關係
網格(Mesh) → 頂點 + 三角形面,定義物體表面
體素(Voxel) → 3D 版像素,把空間切成小立方體
隱式表達(NeRF / SDF) → 用數學函數描述空間中每個點是否在物體內部Mesh Token
Mesh 是 Blender、Maya 等 3D 建模軟體最常用的格式,由頂點(vertex)和三角形面(face)組成。把 Mesh 序列化成 token,就是把頂點座標和面的連接關係攤平成一個序列。Google 的 MeshGPT 就是這個思路,把 Mesh 當成一種「語言」,用 Transformer 學習生成合法的頂點和面序列。
頂點列表:
V1 = (0, 0, 1)
V2 = (0.7, 0, 0.7)
面列表:
F1 = (V1, V2, V3) ← 三個頂點組成一個三角形生成 3D 模型,就是預測「下一個頂點座標」或「下一個面的連接關係」,跟預測「下一個文字 token」完全一樣的機制。
NeRF 和 3D Gaussian 的隱式 Token
3D Gaussian Splatting 用幾十萬個 3D 高斯橢球來表達場景,每個橢球有位置、大小、方向、顏色、透明度等參數。這組參數本身就是向量:
高斯橢球 1:(x, y, z, scale_x, scale_y, scale_z, rotation, r, g, b, opacity)
高斯橢球 2:(...)
→ 每組參數 = 一個 token
最新的研究開始用 Diffusion Model 直接在「高斯 token 空間」裡生成和編輯 3D 場景,跟圖片生成在 Latent Space 去噪的邏輯完全一樣。
天氣預測的 Tokenization
2023 年,Google DeepMind 的 GraphCast 和 Huawei 的 Pangu-Weather 在特定評測設定下,展現了可與歐洲中期天氣預報中心(ECMWF)競爭、甚至在部分指標領先的結果。ECMWF 是人類用了幾十年的物理數值預報系統,通常需要超級電腦運算數小時;相對地,這類 AI 模型可在較短時間內完成全球 10 天預報推論。
天氣資料長什麼樣
天氣預報的輸入資料叫做再分析資料(Reanalysis Data)。把地球表面想像成一張網格,ERA5 是最常用的資料集,解析度是 0.25° × 0.25°,全球切成 1440 × 721 個格子,每個格子有 37 層大氣,每 6 小時一筆,從 1940 年到現在。這是一個 4D 資料集:緯度 × 經度 × 高度 × 時間。每個格子記錄溫度、氣壓、風速(東西方向、南北方向)、濕度、位勢高度等數值。
天氣資料怎麼 Tokenize
第一步:空間切割。把地球表面的網格切成一塊一塊的區域,跟圖片切 patch 一樣。每個區塊裡的所有格子屬性,展平成一個向量,這個向量就是一個空間 token。
第二步:加入高度維度。每個空間位置有 37 層大氣,每層各自一個 token 或打包進同一個向量裡。
第三步:加入時間序列。單一時間點的快照不夠,天氣是動態系統:
t-2(12 小時前)的全球網格 token
t-1(6 小時前)的全球網格 token
t(現在)的全球網格 token
↓
預測 t+1(6 小時後)的全球網格狀態
GraphCast 的特別之處:圖神經網路
地球是球形的,平面網格會有扭曲問題,赤道附近和極地的格子面積差很多,但在平面上看起來一樣大。GraphCast 把地球表面建成一張圖(Graph):節點是地球表面的位置點,邊是相鄰位置的連接。訊息沿著真實的球面鄰近關係傳遞,而不是所有 token 互相看,讓模型能正確處理球形幾何。
為什麼 AI 比物理模型更準
傳統物理模型的問題:物理方程式有簡化假設,某些細節(湍流、雲的微物理)太複雜,只能近似,近似誤差在長期預報裡累積。AI 的做法:不寫物理方程式,直接從 80 年的歷史資料學習「輸入狀態 → 未來狀態」的映射,包含所有物理方程式沒捕捉到的複雜規律。
訓練完之後,模型的向量空間裡出現了有趣的結構:颱風生成前幾天,相關海域的 token 向量開始朝「颱風前兆」的方向移動;太平洋海溫異常(聖嬰現象)的 token,和幾千公里外歐洲降雨量的 token,在 Attention 層裡被學到高度相關,這是氣象學家花幾十年才釐清的遠距大氣連動,AI 從資料裡自己學到了。
物理學家的方程式是人類對大氣的理解,AI 的 Embedding 是資料對大氣的理解。
Token 的共同本質
走過文字、程式碼、基因、自動駕駛、3D 模型、天氣預測,現在把它們並排:
文字 → 字母序列 → BPE 切詞 → 語言語義
程式碼 → 字元序列 → BPE 切語法單位 → 程式結構
圖片 → 像素網格 → 切 patch → 視覺語義
音訊 → 聲壓波形 → 切頻譜 patch → 聲音語義
影片 → 圖片序列 → 時空 patch → 動態語義
基因 → ATCG 序列 → k-mer / BPE → 生物語義
自動駕駛 → 感測器資料 → 體素 / 點 token → 空間語義
3D 模型 → 幾何資料 → 頂點 / 面 token → 幾何語義
天氣 → 地球網格 → 時空 patch → 大氣語義
每個領域的輸入資料完全不同,但如果把「做了什麼」抽象出來,每一行都在做同樣的三件事。
所有 Tokenization 都在做的三件事
第一件:找到有意義的最小單位。不是最小的物理單位(字母、像素、單一鹼基),而是在這個領域裡有獨立語義的最小切割。文字的最小有意義單位是詞根片段,圖片是 patch,基因是功能性片段。切太細,語義消失;切太粗,組合爆炸。Tokenization 就是在這兩個極端之間找到甜蜜點。
第二件:把這個單位變成固定格式的向量。不管原始資料是符號、像素、座標還是氣壓值,最終都要變成同一種格式:一個固定維度的浮點數向量。這是因為 Transformer 只接受這一種輸入。向量是所有模態進入 AI 的通用介面。
第三件:讓語義從統計規律裡自動浮現。沒有人定義「這個向量代表什麼意思」。意義是訓練過程中從大量資料的統計規律裡自動學出來的。功能相似的片段,天然會出現在相似的上下文裡,訓練完之後它們的向量就自然靠近。這個邏輯在所有領域都成立。
一個更深的洞察
這三件事其實在描述同一個更根本的概念:
把連續的、複雜的世界,離散化成 AI 可以計算的符號單位。
人類也在做一樣的事。人類用「詞」來離散化語言,用「音符」來離散化音樂,用「像素」來離散化圖片,用「ATCG」來離散化基因。這些都是人類發明的 tokenization 系統,只是我們不這樣叫它。AI 的 tokenization,本質上是在模仿人類理解世界的方式:把連續的現實切成離散的符號,再從符號的排列組合裡找出意義。差別在於,人類的符號系統是文化演化出來的,AI 的 token 系統是從資料裡統計學習出來的。
Token 的邊界,就是 AI 能理解的世界的邊界
很多人以為 token 是「AI 的技術細節」,一個工程實作的問題,跟 AI 能不能理解這個世界沒有關係。但你現在看到的是:tokenization 的方式,決定了 AI 能理解什麼、不能理解什麼。
切割方式不對,語義消失,一個鹼基一個 token,模型學不到基因功能。訓練資料不夠,向量學不好,泰文 tokenization 效率差,模型就比較笨。模態沒有 tokenization 方案,AI 就無法處理,直到有人設計出點雲的 tokenization,AI 才能「看懂」3D 世界。
在很大程度上,AI 能理解的世界邊界,取決於人類能否為該模態設計出有效的 tokenization 與表示方式。
Token 的代價:它也會製造盲點
前面我們談了 tokenization 的威力,但它也帶來可預期的限制。第一個常見例子是「草莓難題」:問模型 "strawberry" 裡有幾個 r,模型有時會答錯。原因不是它「沒看見字」,而是它先把字串切成 token(例如 straw + berry 或其他切法),再在向量空間裡運算。對語義任務來說,這很有效;但對精確字元計數,這個表示方式不是最自然的介面。
第二個例子是數字計算。像 12345 這種字串,往往會被切成不同長度的片段。這種切法是為了語言統計效率,不是為了數學進位規則。近年的研究也顯示,數字 tokenization 的設計會明顯影響加減乘除表現。這也是為什麼實務上常搭配外部計算工具,或在 prompt 裡要求模型先展開中間步驟。
結語
從這篇文章的起點「token 是什麼」,到現在,應該能看出一條清晰的脈絡:Token 不是文字的專利。它是一個更普遍的概念,把任何形式的資訊,切成有意義的最小單位,轉換成向量,讓 AI 能在統一的數學空間裡處理。
文字、圖片、基因、天氣、3D 模型、自動駕駛,這些看似截然不同的領域,在 AI 的眼中,都是同一種東西:一串 token。
而語義,是從幾千億次的預測和修正裡,自然浮現在向量的幾何關係裡的。這不只是技術細節,而是 AI 理解世界的方式。
