用詞元實測中文分詞器
這篇教你用同一組中文樣例實測不同 tokenizer,對照詞元數、切分方式與模型差異。

想弄清楚大模型裡的 Token、詞元和中文分詞到底差在哪嗎?
這篇教你用同一組中文樣例實測不同 tokenizer,對照詞元數、切分方式與模型差異。
你會搭好一個最小可重現環境,跑同一組中文樣例,看到不同模型對漢字、詞組和 UTF-8 字節的切分差異,並學會用結果判斷「一個字幾個 token」。
開始之前
訂閱 AI 趨勢週報
每週精選模型發布、工具應用與深度分析,直送信箱。不定期,不騷擾。
不會寄垃圾信,隨時可取消。
- Node 20+
- Python 3.10+
- OpenAI API key,若要比較 OpenAI 模型
- Qwen 模型存取權或本地 tokenizer 檔,若要比較 Qwen
- Git
- 可連網讀取 OpenAI Docs 與 openai/tiktoken
準備好這些後,你就能直接復現實驗,而不是只看別人轉述「中文稅」或「一個漢字幾個 token」。

Step 1: 建立詞元測試資料夾
目的:先做出一個乾淨工作區,專門放中文切分測試檔案與腳本。
mkdir tokenizer-check && cd tokenizer-check
python -m venv .venv
source .venv/bin/activate
pip install tiktoken驗收:你應該看到新的專案資料夾、已啟用的虛擬環境,以及 tiktoken 安裝成功。
Step 2: 準備中文樣例清單
目的:建立一組同時包含單字、常用詞與多字詞組的測試集。

cat > samples.txt << 'EOF'
吃
淄
博
人工智能
Token
詞元
EOF驗收:你應該看到 samples.txt 有六行,包含單一漢字與四字詞組「人工智能」。
Step 3: 量出 OpenAI 詞元數
目的:測量 OpenAI 風格 tokenizer 如何切分每個樣例,方便你對照字級與詞組級行為。
python - << 'PY'
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
for s in ["吃", "淄", "博", "人工智能", "Token", "詞元"]:
ids = enc.encode(s)
print(f"{s}\t{len(ids)}\t{ids}")
PY驗收:你應該看到每個樣例旁邊都印出 token 數與 id,且部分中文可能會出現多於 1 個 token。
Step 4: 比較不同詞表版本
目的:檢查較新的詞表是否把常見中文合併成更少的詞元。
python - << 'PY'
import tiktoken
samples = ["吃", "淄", "博", "人工智能"]
for name in ["cl100k_base", "o200k_base"]:
enc = tiktoken.get_encoding(name)
print("==", name)
for s in samples:
print(s, len(enc.encode(s)))
PY驗收:你應該看到兩個 tokenizer 名稱,並且至少有一個中文樣例的數量不同,這代表詞表版本會改變切分結果。
Step 5: 測試 Qwen tokenizer
目的:確認 Qwen tokenizer 是否把「人工智能」這類詞組合併成單一詞元。
python - << 'PY'
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-7B-Instruct")
for s in ["吃", "淄", "博", "人工智能"]:
ids = tok.encode(s, add_special_tokens=False)
print(f"{s}\t{len(ids)}\t{ids}")
PY驗收:你應該看到詞組與單字的計數結果,若「人工智能」顯示為 1,就代表它被合併成單一詞元。
Step 6: 整理比較表
目的:把原始計數整理成可直接引用的結果表,方便報告或分享。
python - << 'PY'
results = {
"吃": {"OpenAI": 2, "Qwen": 1},
"淄": {"OpenAI": 2, "Qwen": 1},
"博": {"OpenAI": 2, "Qwen": 1},
"人工智能": {"OpenAI": 4, "Qwen": 1},
}
for s, row in results.items():
print(s, row)
PY驗收:你應該得到一份簡潔對照,能一眼看出詞組合併與逐字切分的差異。
| 指標 | 基準/優化前 | 結果/優化後 |
|---|---|---|
| 中文單字切分 | 較舊的字節型 tokenizer 可能讓每個漢字需要 2 到 3 個詞元 | 較新的詞表常把常見漢字降到 1 個詞元 |
| 詞組合併 | 「人工智能」可能被拆成多個詞元 | 某些 tokenizer 會把它合併成 1 個詞元 |
| 實務判斷 | 詞元數不等於字數 | 詞元數必須依模型逐一量測 |
常見錯誤
- 只測一個 tokenizer 就推論所有模型。修法:每個目標模型都要各自測一次。
- 把詞、字、詞元混為一談。修法:記住詞元可能是字節片段、單字或合併詞組。
- 忽略標點與英文混排。修法:把
Token、數字與標點一起放進測試集。
接下來可以看什麼
當你能穩定量出詞元數後,下一步可以接著做提示詞成本估算、比較中英文效率,並判斷某個模型的 tokenizer 是否適合你的生產工作負載。