模型層 開放閱讀

分詞器

Tokenizer

概念 ID
tokenizer
更新時間
2026-05-29
來源數量
待補

分詞器

3 秒看懂

分詞器(Tokenizer)是大型語言模型將原始文本轉化為模型可運算的離散符號(token)序列的核心元件。它定義了模型的“詞彙量”,直接決定模型如何理解每個字元、單詞與上下文,並影響推論成本、多語言能力以及最大有效上下文長度。

3 分鐘產業解釋

在 ChatGPT、LLaMA、文心一言等大型模型中,使用者輸入的任意文本並不能直接被 Transformer 計算。Tokenizer 就是那座橋樑:它先把文本規範化(例如處理全半形、大小寫),再按照一個學好的子詞詞表,將文本切割成 token 序列,最後將每個 token 對映為一個整數 ID,送入嵌入層。

主流的子詞分詞方案包括 BPE(位元組對編碼)、WordPiece、Unigram 和 SentencePiece。這些演算法的目標是在“詞彙量不宜過大(以免嵌入矩陣巨重)”與“儘可能保留完整單詞語義”之間取得平衡。分詞器的詞彙量通常設定在 3 萬到 10 萬之間,多語言模型會用到 25 萬甚至更多。對於未知字元,現代分詞器會回退到位元組級的表示(byte‑level BPE),徹底杜絕 <UNK>(未知詞標記)的出現。

產業中,分詞器不僅是模型訓練的一個預處理環節,更滲透到服務和商業模型:API 呼叫按 token 計費、上下文視窗以 token 數衡量、Prompt 設計需要計算 token 長度。一套高效、一致的分詞器庫(如 HuggingFace tokenizers、OpenAI tiktoken)已成為大型模型生態的標配基礎設施。

15 分鐘專家深入

Tokenization 流水線

一個完整的文本到 token 的流水線通常包括:

  1. 規範化(Normalization):統一字元形式,例如全形轉半形、大小寫摺疊、Unicode 正規化(NFKC/NFD)。
  2. 預分詞(Pre‑tokenization):將文本初步拆分為“詞”或“字元”段。常見方法是按空格和標點分割,或者基於正規表示式。
  3. 分詞模型(Tokenization Model):在預分詞的基礎上,應用子詞合併或分割演算法,將每個段進一步劃分為更小的 token。這是整個系統的核心。
  4. 後處理(Post‑processing):新增特殊 token(如 [CLS]、[SEP]、<s>、</s>、<pad>),並生成 attention mask 等。

主流子詞演算法概覽

  • BPE(Byte Pair Encoding):從字元開始,反覆合併出現頻率最高的符號對,直到達到設定的詞彙量。GPT‑2、RoBERTa 均使用 BPE。因其基於頻率,確定性強,且易於實現。
  • WordPiece:類似 BPE,但合併的依據是最大化訓練語料的似然(即選擇能最大提升語言模型機率的符號對)。BERT 採用此方案,詞彙量通常設為 30k 左右。
  • Unigram Language Model:從一個大的種子詞彙表出發,通過 EM 演算法估算每個子詞的機率,然後反覆刪除低機率子詞,直到達到目標詞彙量。T5、XLNet 使用這種分詞器,訓練時容易通過子詞正則化(Subword Regularization)引入隨機性,提升魯棒性。
  • SentencePiece:一種實現架構,將輸入文本視為原始位元組流,內部同時處理分詞和去分詞,語言完全無關。它既可以搭配 BPE,也可以搭配 Unigram。LLaMA 系列即基於 SentencePiece 的 BPE。

位元組級回退(Byte‑level Fallback)

GPT‑2 之後的模型普遍將最小單元下沉到位元組(共 256 個位元組 token),所有 Unicode 字元都可以用 UTF‑8 位元組序列表示。這樣,任何生僻字或程式碼都不會出現 &lt;UNK>。合併時在這些位元組 token 上進行 BPE,最終詞彙量 = 256 + 合併出的符號數。

工程視角

  • Fast vs Slow Tokenizer:HuggingFace 提供了 Rust 實現的高速 tokenizer,並可以直接與 Python 繫結,速度提升數十倍。
  • 訓練成本:訓練一個分詞器本身不需要 GPU,但需要遍歷大規模語料進行頻率統計或 EM 迭代。詞彙量越大,所需語料越多,否則許多子詞得不到有意義的學習。
  • 與模型訓練的耦合:Tokenizer 的詞彙量直接決定了模型嵌入層的大小(V × d),通常在訓練前固定,之後不可更改。因此分詞器被視為模型權重的一部分,分發模型時需嚴格配套。

技術原理

BPE 的合併過程(確定性)

假設語料中只有單詞 “low”、“lower”、“newest”。初始詞彙為所有出現過的字元:&#123;l,o,w,e,r,n,s,t&#125;(空格作為單詞分隔符,不參與合併)。

  1. 遍歷語料,統計每個單詞內部相鄰符號對的頻率。例如在 “l o w” 中,l o 出現了 1 次,“o w” 出現了 1 次;在 “l o w e r” 中,“o w” 出現 1 次等。找出最高頻的符號對,如 o w 在 “low” 和 “lower” 中共出現 2 次,為最高頻之一。
  2. 將最高頻符號對(比如 o w)合併成一個新符號 ow,更新詞彙表並將語料中所有 o w 替換為 ow
  3. 重複步驟 1‑2,直到詞彙表大小達到設定的 V(例如 32,000)。

程式碼化偽邏輯:

vocab = set(all characters)
pairs = count_bigram_freq(corpus)
while len(vocab) &lt; target_vocab_size:
    best_pair = max(pairs, key=pairs.get)
    vocab.add(best_pair)
    corpus = merge_corpus(corpus, best_pair)
    pairs = recount_pairs(corpus)

WordPiece 的機率合併

不是根據頻率,而是計算一個語言模型下的似然增益。假設現有詞彙表 V,對每個候選合併符號對 (a, b) 組成新符號 ab,計算:

score = (freq(ab) / (freq(a) * freq(b)))

選擇使訓練集對數似然上升最多的合併。因此 WordPiece 更容易保留常見且不可分割的組合,而 BPE 可能因高頻噪聲合併錯誤。

Unigram 模型與 Viterbi 分割

Unigram 假設每個 token 獨立出現:

P(x) = ∏_&#123;i=1}^n p(x_i)

給定一個文本序列,用 Viterbi 演算法尋找使 P 最大的分割方案。訓練時,通過 EM 演算法交替更新每個子詞的機率,並逐漸刪去機率低於閾值的子詞,直至詞彙量 V。訓練完成後,可使用子詞正則化:在 Viterbi 生成的多個合理分割中按機率取樣,增加模型對分詞變異性的魯棒性。

Byte‑level BPE 示例

輸入“你好”的 UTF‑8 編碼為 \xe4\xbd\xa0\xe5\xa5\xbd(6 個位元組)。初始位元組 token 對應 256 個 ID。經過 BPE 合併,可能形成 “\xe4\xbd” 和 “\xe5\xa5” 等複合字節 token。最終詞表包含這些位元組組合。無論什麼語言、表情符號、程式碼,都能表示為 token 序列。

關鍵引數

  • vocab_size:目標詞彙量,影響嵌入矩陣體積和子詞粒度。
  • character_coverage:在 Unigram 種子中,覆蓋多少比例的字元種類,影響稀有字元的處理。
  • max_sentencepiece_length:SentencePiece 限制的 token 長度,防止過長的位元組序列合併。
  • byte_fallback:是否啟用位元組級回退,若啟用則不會產生 &lt;UNK>

(注:具體數值因模型而異,未列明硬規格,以上為機制定性描述。)

技術演進史

  • 基於詞的分詞(2013 以前):使用預先定義的詞典,將文本按空格和切詞規則分成詞。致命缺陷:詞表巨大,OOV 嚴重。
  • 字元級分詞:每個字元為一個 token。詞彙量小但序列極長,模型難以捕獲長距離語義,訓練慢。
  • BPE 引入機器翻譯(Sennrich et al., 2016):將 BPE 從資料壓縮遷移到 NLP,有效緩解了稀有詞翻譯問題,拉開子詞時代序幕。
  • WordPiece 被 BERT 採納(Devlin et al., 2019):沿襲語音搜尋中的 WordPiece,BERT 的 30,522 詞彙量成為事實標準之一,推動預訓練分詞器普及。
  • Unigram 與 SentencePiece(Kudo, 2018; Kudo & Richardson, 2018):提出語言完全無關的一體化方案,支援子詞正則化,被 T5、ALBERT、LLaMA 等眾多後續模型所使用。
  • 位元組級 BPE(Radford et al., 2019):GPT‑2 直接將位元組作為最小單位,消除了 &lt;UNK>,使模型能夠處理任意 Unicode 文本,成為後續 GPT‑3、GPT‑4 分詞器的基礎。
  • 現代化的專用實現:HuggingFace tokenizers(Rust, 2020)提供超高速無狀態分詞,OpenAI tiktoken 為 GPT‑3.5/4 提供確定性且高效的分詞,並與 API 計費體系緊耦合。
  • Token‑free 範式的探索:ByT5、CANINE 等嘗試直接以位元組或畫素為輸入,但尚未動搖子詞分詞器的主導地位。

技術路線對比

方案代表模型底層演算法最小單元詞彙量典型範圍(1)是否可逆(2)多語言友好去詞 (detokenization)
BPEGPT‑2, RoBERTa頻率合併的 BPE字元/位元組50k‑60k需空格處理一般(未統一)需還原空格
WordPieceBERT似然合併的 BPE字元約30k需處理 ## 字首一般拼接後去字首
Unigram (SentencePiece)T5, XLNet機率語言模型剪枝字元/位元組32k‑64k是(可重建)好(語言無關)直接拼接
Byte‑level BPE (SentencePiece)LLaMA 2, GPT‑4(3)BPE 在位元組流上位元組32k‑100k(4)是(位元組級恢復)極好(無OOV)位元組拼回 UTF‑8
無分詞(token‑free)ByT5直接處理位元組序列位元組256完美位元組還原

注:(1) 根據相關論文常見配置及社群實踐估算; (2) 指是否可以從 token 序列無損恢復原始文本位元組;(3) GPT‑4 分詞器未完全開源,但基於位元組級 BPE,詞彙量超過 100k [據 OpenAI 技術報告/API 文件];(4) 具體以模型釋出版本為準。

上下游

上游:語料與工具

  • 訓練語料:分詞器需先在目標領域的大規模無標註文本上進行訓練,語料規模通常與後續預訓練語料相同或更大範圍。語料質量直接影響子詞合併的合理性和稀有詞的覆蓋度。
  • 開發工具庫
    • HuggingFace tokenizers:Rust 實現,支援 BPE、WordPiece、Unigram,提供快速訓練和批次編碼。
    • SentencePiece(Google):內建 BPE 和 Unigram,C++ 核心,命令列和 Python 介面。
    • tiktoken(OpenAI):為 GPT 系列定製的 Python 庫,僅用於推斷,不支援訓練新分詞器。
    • YouTokenToMe 等第三方庫:追求更快的 BPE 訓練。
  • 訓練過程:需要統計全語料的符號對頻率或採用線上增量訓練。BPE 訓練 I/O 密集,SentencePiece 可即時訓練。

下游:模型與推論

  • 預訓練/微調:分詞器與模型權重繫結,任何模型權重分發必須包含對應的分詞器配置(tokenizer.jsonsp.model)。
  • 推論服務:使用者 Query 先經 tokenizer 編碼為 IDs,模型推論生成 token IDs,再由 tokenizer 解碼為可讀文本。
  • Token 計數與計費:OpenAI、Anthropic 等 API 按 token 總量計費,需用官方提供的分詞器準確計數,一套 prompt+completion 消耗的 token 數直接影響成本。
  • 上下文視窗截斷:當輸入 token 數超過模型最大上下文長度時,需按分詞器決定如何截斷(保留最近或最重要的部分)。

關鍵指標

  • 詞彙量大小 (V):通常在 3 萬~10 萬。V 越大,每個 token 承載的語義更豐富,但嵌入矩陣引數量 V*d 更重。
  • 未知詞率(OOV rate):現代位元組級分詞器可做到 0%,不再出現 &lt;UNK>
  • 平均 token 長度(壓縮率):以平均每個單詞被拆成多少個 token 來度量。英文 BPE 詞彙量 50k 時,典型值約為 1.31.5 個 token/詞。中文每個漢字可能 12 個 token。壓縮率影響同等文本所需的 token 數,進而影響推論成本和延遲。
  • 分詞速度:通常用 token/sec 衡量,Rust 實現的 tokenizer 可達 GB/s 級別,對即時服務影響很小。
  • 跨平台一致性:同一模型的 tokenizer 在不同執行環境(Python、Rust、行動端)的解碼結果必須完全一致,否則會導致輸出錯亂。
  • 嵌入引數量V * d_model,當 V 較大時,這部分引數佔模型總引數的比例在不同規模模型中差異很大:對於BERT-base等中小模型,嵌入引數可能佔20%左右;而對於GPT-3等超大型模型,佔比可低至0.1%以下,直接增加 GPU 視訊記憶體開銷。

供需與市場資料

分詞器本身是軟體庫,不形成獨立市場交易,但其演進受大型模型生態的強烈需求驅動:

  • 需求端:所有部署大型模型的企業都需要配套分詞器。高效的多語言分詞器成為模型出海和覆蓋多語種的關鍵,能直接提升非英語使用者的體驗。雲端服務商按 token 計費的模式使得分詞效率(同樣語義消耗更少 token)可轉化為成本優勢。
  • 供給端:開源生態高度成熟,HuggingFace tokenizers 庫已被數千個模型採用,月下載量極高。Google 的 SentencePiece 也是 Linux 發行版及眾多深度學習架構的預設組成部分。OpenAI tiktoken 雖然只服務於自家模型,但其設計思路影響了後續閉源模型的分詞器選型。
  • 競爭動態:位元組級 BPE + 大規模詞彙量(100k 級)已成為領先模型的標配,新進入者若採用過小詞表或缺乏位元組回退,會在多語言評測中顯著落後。因此,分詞器的選擇和定製逐漸成為大型模型技術棧中不容忽視的一環。

代表公司與資本對映

  • OpenAI:開發 tiktoken,內置於 GPT‑3.5、GPT‑4 體系。雖然庫本身開源,但分詞器配置繫結其閉源模型,構築了與 API 計費體系緊密耦合的護城河。
  • Meta:LLaMA 系列使用基於 SentencePiece 的 BPE 分詞器,並在開源模型中與權重一併釋出,影響了大量衍生模型的標準。
  • Google:研發並開源 SentencePiece,被 T5、PaLM、Gemini 等內部模型及大量外部模型採用,奠定了語言無關子詞分詞的事實標準。
  • HuggingFace:通過維護 tokenizers(Rust)與 transformers 深度整合,成為開源模型分發的預設樞紐。其生態控制力部分體現在幾乎所有社群模型都使用 HF tokenizer 格式。
  • 其他大型模型廠商(Anthropic、百度、阿里等):通常基於 BPE 或 Unigram 自研分詞器,與自身訓練資料對齊,建置差異化語言覆蓋能力。

資本對映層面,分詞器並非獨立投資標的,而是評估一家 AI 公司技術自洽性和工程能力的視窗。擁有自研高效分詞器併成功封裝為模型服務能力的企業,在成本控制和多語言拓展上具備潛在優勢。

投資邏輯

  1. token 經濟模型:API 按 token 計費,分詞器的壓縮率直接影響每一條請求的收費 token 數。若某家廠商的分詞器能使同等語義消耗更少 token,則其 API 定價在同等效果下更具競爭力,或能獲取更高獲利。
  2. 多語言能力與市場擴張:一個優秀的字元層級或位元組級分詞器能平滑支援上百種語言,無需為每種語言獨立調優。此類技術積累可加速全球化產品落地,影響遊戲、社交、跨境電商等出海賽道。
  3. 模型分發標準:HuggingFace 生態的分詞器格式已成為事實標準,其背後的商業化路徑(如 Inference Endpoints、AutoTrain)可繫結使用者。投資於平台型工具鏈(雖不一定直接上市)可關注相關開源公司的商業化進展。
  4. 風險與替代:token‑free 架構或新型分詞範式若在保持效能的同時大幅簡化流水線,可能削弱現有分詞器壁壘。但短期內,子詞分詞器仍為主流,相關投入具備確定性的技術紅利。

常見誤讀糾偏

  1. “分詞器只是簡單切詞,模型好壞主要看 Transformer 架構” 實際上,分詞器定義了模型最基本的輸入單元,大量下游問題(如程式碼補全、多語言拼寫、數字運算)若在 tokenization 層面被不合理拆分,會導致模型難以學習。錯誤的詞彙表可能直接使模型對某些任務“致盲”。
  2. “詞表越大越好” 詞表增大會增加嵌入矩陣的引數量和訓練開銷。過大的詞表使每個 token 出現頻率更低,其 token embedding 訓練不充分,反而損害泛化。極端情況下,冗餘 token 浪費視訊記憶體且降低批處理效率。因此必須基於語料統計在粒度與稀疏性之間折中。
  3. “Unigram 分詞器每次結果固定” 當應用子詞正則化時,Unigram 會從機率分佈中取樣分割方案,相同的輸入可得到不同的 token 序列。這實際上是訓練時的一種資料增強,而非缺陷,但推論時需固定為最佳分割(關閉取樣)。
  4. “detokenization 完全可逆” 許多分詞器在規範化階段會丟失資訊(如去掉特殊空白字元),導致去分詞後無法保留原始格式。只有嚴格基於位元組級且規範化可逆的方案才能恢復原始位元組流。

學習路徑

  1. 快速上手:使用 HuggingFace tokenizers 庫,載入 bert-base-uncasedgpt2 分詞器,觀察編碼輸出、token 到 ID 的對映、attention mask 生成。
  2. 訓練自定義分詞器:選擇一箇中文或混合語言語料,訓練 BPE tokenizer,調整 vocab_sizemin_frequency 引數,對比不同詞彙量下編碼長度與罕見字覆蓋率。
  3. 理解核心論文
    • Sennrich et al. (2016) “Neural Machine Translation of Rare Words with Subword Units” – BPE 在 NLP 的創始論文。
    • Kudo (2018) “Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates” – Unigram 及正則化。
    • Kudo & Richardson (2018) “SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing” – 架構設計。
  4. 深入程式碼:閱讀 tokenizers 的 Rust 原始碼中 BPE 的 TrainerModel 部分,理解優先順序佇列、checkpointing 及並行化實現。
  5. 排查工程問題:在推論服務中解決 tokenizer 與模型不匹配、版本不一致導致的輸出亂碼;使用 tiktoken 準確估算 token 數以最佳化 prompt 設計。

一句話總結

分詞器是大型模型的“文字感知器”,它以無懈可擊的位元組回退和精妙的子詞平衡,將人類語言的流變符號轉化為數學模型可以計算的固定顆粒度訊號,其設計水準直接封印著模型的多語言智慧與成本邊界。

延伸閱讀與來源

  • Sennrich, R., Haddow, B., & Birch, A. (2016). Neural Machine Translation of Rare Words with Subword Units. ACL.
  • Schuster, M., & Nakajima, K. (2012). Japanese and Korean voice search. ICASSP. (WordPiece 起源)
  • Kudo, T. (2018). Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates. EMNLP.
  • Kudo, T., & Richardson, J. (2018). SentencePiece: A simple and language independent subword tokenizer and detokenizer for Neural Text Processing. EMNLP.
  • Radford, A., et al. (2019). Language Models are Unsupervised Multitask Learners. OpenAI Blog.
  • HuggingFace Tokenizers: https://github.com/huggingface/tokenizers
  • OpenAI tiktoken: https://github.com/openai/tiktoken
source: 公開揭露與公開資料整理 本頁僅用於產業鏈學習、資訊檢索和研究輔助;不構成投資建議,不預測漲跌,不提供買賣、部位或目標價建議。
完整概念頁 複盤 13 節結構 公司投研頁 沿產業鏈找到受益公司 投資課 把概念轉成可跟蹤模型