You need to agree to share your contact information to access this model

This repository is publicly accessible, but you have to accept the conditions to access its files and content.

請說明您的使用目的。本詞表以台灣繁體中文為主要目標,開放供研究與開發使用。

Log in or Sign Up to review the conditions and access this model content.

tw-tokenizer-v1

為台灣繁體中文從零訓練的 byte-level BPE tokenizer。

中文壓縮率比 Qwen3.8-27B 高 46%,vocab 只有它的 81%,英文效率幾乎持平。

規格

vocab 200,000 + 1,069 特殊 token = 201,069
演算法 byte-level BPE
normalizer NFC(非 NFKC——NFKC 會把全形英數轉半形、拆解「㈠」)
純漢字 token 上限 6 字
訓練語料 19.27 億字元(繁中 60.6% / 英文 22.8% / 程式碼 10.4% / 數學 6.2%)

壓縮率(held-out,訓練語料零重疊)

單位為字元/token,越高越省。

tokenizer vocab 中文平均 英文
本詞表 201,069 2.026 4.657
Qwen3.8-27B 248,044 1.388 4.674
DeepSeek-V4 128,000 1.369 4.855
gemma-4-31B 262,144 1.282 4.735

中文各領域細分:判決書 2.516 / 翻譯繁中 2.267 / 中文網頁 1.983 / 文言 1.796 / 政府文書 1.481。

切分品質

壓縮率高不代表切得對,所以另外量了切分邊界(以 jieba 繁中斷詞為參考)。

tokenizer 字/token 切點命中詞邊界 單字 token 佔比
本詞表 2.169 85.6% 17.6%
Qwen3.8-27B 1.475 77.8% 41.7%
DeepSeek-V4 1.391 74.9% 49.6%
專業素養、特質或經公告審查優勝
  本詞表:['專業素養', '、', '特質', '或經', '公告', '審查', '優勝']
  Qwen  :['專業', '素', '養', '、', '特質', '或', ...]     ← 「素養」被拆成兩字

下游驗證

用兩個詞表各從零訓練一顆 270M 模型(同架構、同資料來源),以 bits-per-character 比較——BPC 以字元數為分母,是唯一能跨詞表公平比較的指標。

條件 本詞表 Qwen 詞表
等算力(各 200M token) 4.434 4.591 本詞表低 3.4%
等文字量(各 4 億字元) 4.595 4.379 Qwen 低 4.7%(但多花 43% 算力)

等算力下本詞表勝出,且是在參數少 13%(229M vs 259M,因 vocab 較小)的條件下。等文字量下 Qwen 勝出屬預期——它用了 43% 更多的算力跑同樣內容。

實務上算力才是限制,所以等算力那組是主要結論。

詞表污染稽核

逐一檢查全部 201,069 個 token。

數量 佔比
含漢字 token 146,339 72.8%
含異體字 0 0%
含簡體專屬字 55 0.04%

那 55 個逐一判讀後,多數為誤報:(大寫數字,判決書與契約的法定寫法)、(人名)、(咨文)、(合卺)。真簡體約 8 個單字 token

對照:Qwen3.8-27B 有 27,364 個簡體專屬的多字 token(佔其詞表 11%)。

特殊 token

具名 45 個 + 保留 1,024 個。ChatML 風格。

類別 內容
核心 <|pad|> <|bos|> <|eos|> <|unk|>
對話 <|im_start|> <|im_end|> <|system|> <|user|> <|assistant|> <|tool|>
思考 <|think_start|> <|think_end|> <|no_think|>
工具 <|tool_call_start|> <|tool_result_start|> <|tool_schema_start|>
語音 <|audio_start|> <|task:asr|> <|task:tts|> <|duplex_user|>
視覺 <|image_start|> <|video_start|> <|task:ocr|>
文件 <|doc_start|> <|page_sep|> <|table_start|> <|cite_start|>
保留 <|reserved_0000|><|reserved_1023|>

保留 1,024 個是為了讓未來加新功能時能直接改名,不必擴充 embedding 重訓。

用法

from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("lianghsun/tw-tokenizer-v1")

tok.tokenize("中華民國憲法增修條文第十條")
# ['中華民國憲法', '增修條文', '第十條']

tok.apply_chat_template(
    [{"role": "user", "content": "..."},
     {"role": "assistant", "reasoning": "...", "content": "..."}],
    tokenize=False, enable_thinking=True)

語料前處理

順序不可顛倒:

  1. 異體字正規化(12.7 萬處)——爲→為、裏→裡、麽→麼、著→着等。不做的話同一個詞會學出兩套 merge
  2. 陸用語整列丟棄——55 個無歧義詞(質量、身份、通脹、網絡…),命中即丟整列。不改寫、不使用 OpenCC 整段轉換
  3. NFC
  4. 近似去重——判決書實測近似重複率 23%

法律語料不套第 2 步:「制作」(刑事訴訟法第 39 條)、「公安」(同法第 10 條)是法定用語。

已知限制

  • 台語羅馬字支援不佳。台語漢字表現優於對照組(1.683 vs Qwen 1.391),但台羅拼音(áîiann)會被拆得很碎。訓練語料中台語僅 4.7 萬字元
  • 下游驗證規模小。270M 參數、200M token,遠低於實用規模。結果支持但不證明大模型上也成立
  • vocab size 未達邊際遞減點。64K→200K 的掃描顯示增益仍在遞減但未轉平,更大的 vocab 可能還有空間
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support