模型層 開放閱讀

詞表大小

Vocabulary Size

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

詞表大小(Vocabulary Size)

3 秒看懂

一句話: 詞表大小 = 模型”認識多少個不同 token”。它是 tokenizer 把原始文本切成的離散符號集合的基數,直接決定了模型輸入嵌入層和輸出機率分佈的寬度。

類比: 如果把大語言模型比作一個翻譯官,詞表大小就是他腦子裡能區分的”詞彙條目數”。條目越細碎(詞表小),表達同一句話要用更多條目;條目越粗粒度(詞表大),一句話拆得更少,但每條條目需要獨立分配引數。

3 分鐘產業解釋

為什麼詞表大小值得關注?

大語言模型(LLM)的第一步是 tokenization——把原始文本切分為離散 token 序列。詞表大小(記作 $V$)決定了:

  1. 序列長度: 同樣一段文本,詞表越大,通常切出的 token 越少(因為更多詞/子詞被整塊編碼),這意味著更短的序列 → 更低的推論延遲和更少的 KV Cache 佔用。
  2. 模型引數量: 輸入嵌入矩陣和輸出 lm_head 的引數量均為 V \times d_{\text{model}},在小模型中可佔總引數的 20%–40%。
  3. 多語言效率: 詞表越大,對中文、日文、阿拉伯文等非拉丁語系的覆蓋率越好,同等文本消耗 token 更少。
  4. 訓練與推論計算量: 輸出層的 softmax 計算量與 $V$ 成正比。

產業現狀: 從 GPT-2 時代的約 5 萬 tokens,到 GPT-4/LLaMA 3/Qwen2 時代的 10–15 萬 tokens,行業趨勢是 顯著擴大詞表,核心驅動力是多語言支援和推論效率最佳化。

15 分鐘專家深入

核心權衡架構

詞表大小 V 增大的影響:

                    好處                              代價
              ┌──────────────┐                ┌──────────────┐
              │ 序列更短      │                │ Embedding矩陣│
              │ → 推論更快    │                │ 引數量膨脹    │
              │ → KV Cache↓  │                │              │
              │              │                │ Softmax計算量│
              │ 多語言覆蓋↑  │                │ 與V成正比     │
              │              │                │              │
              │ 頻繁詞可整詞  │                │ 稀有token訓練 │
              │ 編碼效率↑    │                │ 樣本不足,嵌入 │
              │              │                │ 學不充分      │
              └──────────────┘                └──────────────┘

2.1 Tokenizer 型別與詞表建置

方法代表模型建置策略典型詞表規模
BPE(Byte Pair Encoding)GPT-2/3/4, LLaMA 1/2/3從字元級開始,反覆合併最頻繁的相鄰對50K–150K
WordPieceBERT, DistilBERT類似 BPE,但用似然增益選擇合併30K
Unigram + SentencePieceT5從大詞表剪枝,最小化語料似然損失32K
Byte-level BPEGPT-2, GPT-3/3.5, LLaMA 3將所有字元先轉 UTF-8 位元組再做 BPE50K–128K

2.2 關鍵引數關係

Embedding 引數量 = V × d_model
lm_head 引數量   = V × d_model  (若不做權重繫結)
Softmax FLOPs    ≈ O(n_seq × V)  per layer, 僅在最後輸出層

權重繫結(Weight Tying): 多數現代 LLM 將輸入 embedding 矩陣與輸出 lm_head 共享同一權重,此時 embedding 引數只存一份,大小仍為 V \times d_{\text{model}}。這在小模型中意義重大——例如一個 V{=}128\text{K}d_{\text{model}}{=}4096 的模型,僅 embedding 就佔 128\text{K} \times 4096 \approx 5.24\text{億} 引數。

2.3 詞表大小與序列壓縮比

同一段中文文本,不同 tokenizer 的切分結果差異顯著:

示例文本: "人工智慧正在改變世界"
大致估計(具體結果取決於實現細節):

LLaMA 1 tokenizer (V≈32K, 多中文語料不足):  ~12-18 tokens
LLaMA 3 tokenizer (V≈128K, 加強中文):        ~6-9 tokens  
Qwen tokenizer    (V≈152K, 針對中文最佳化):     ~5-8 tokens

含義: 大詞表 + 多語言最佳化的 tokenizer 可以將中文序列壓縮 50%–70%,這直接轉化為:

  • 推論延遲降低(prefill 和 decode 都更快)
  • KV Cache 記憶體減少
  • 有效上下文視窗變長(同樣的 token 預算能裝更多語義)

技術原理(最深)

3.1 詞表在模型架構中的位置

                    ┌─────────────────────────────────────┐
                    │          Transformer Block ×N        │
                    │  ┌────────────────────────────────┐  │
     Input IDs      │  │  Self-Attention + FFN           │  │
    [batch, seq]──→ │  │  (引數與 V 無關)                 │  │
         │          │  └──────────────┬─────────────────┘  │
         ▼          │                 │                     │
  ┌──────────────┐  │                 │                     │
  │  Embedding   │  │                 │                     │
  │  Table       │  │                 │                     │
  │  [V, d]      │  │                 │                     │
  └──────┬───────┘  │                 ▼                     │
         │          │         ┌──────────────┐              │
         └──────────┼────────→│  lm_head     │──→ logits    │
                    │         │  [d, V]       │  [b, seq, V] │
                    │         │  (=Embedding^T│              │
                    │         │   if tied)    │              │
                    │         └──────────────┘              │
                    └─────────────────────────────────────┘

關鍵: Transformer block 內部的 Self-Attention 和 FFN 引數量完全與 $V$ 無關。$V$ 僅影響:

  • 輸入端的 Embedding Table(引數量 V \times d
  • 輸出端的 lm_head(引數量 d \times V,權重繫結時複用 embedding)
  • 最終 softmax 的計算量($O(V)$ 逐元素)

3.2 Softmax 瓶頸與大詞表

輸出層 softmax 計算:

P(w_i) = \frac{\exp(z_i)}{\sum_{j=1}^{V} \exp(z_j)}, \quad z = \mathbf{h} \cdot \mathbf{W}_{\text{head}}^T

當 $V$ 很大時:

  1. 計算瓶頸: 計算 logits 需要 d_{\text{model}} \times V 次乘加,softmax 歸一化需要遍歷 $V$ 個元素。在 decode 階段逐 token 生成時,這一步的 FLOPs 佔比可能超過 30%(小模型)至 10%(大型模型)。
  2. Softmax 瓶頸:V \gg d_{\text{model}} 時,logits 的變化受限於 d_{\text{model}} 維子空間(softmax 瓶頸),softmax 輸出分佈的表達能力受限。但這在現代 LLM 中通常不構成嚴重問題,因為 d_{\text{model}} 一般足夠大(如 4096–12288)。

3.3 Byte-level Fallback 機制

現代 tokenizer 多采用 byte-level fallback

編碼流程:
  原始文本 → UTF-8 位元組序列 → 在詞表中查詢/合併

  如果某個 Unicode 字元(如罕見中日韓字元、emoji)
  從未在訓練語料中出現 → 回退到逐位元組編碼
  (256 個基本位元組 token 保證 100% 覆蓋)

這意味著:理論上任何輸入都能被編碼,不會 OOV (Out-of-Vocabulary)
但罕見字元會被拆成 2-4 個位元組 token,效率降低

3.4 Softmax 中的數值穩定性

大 $V$ 帶來的另一個工程挑戰:logits 數值範圍大,直接做 \exp 容易溢位。實踐中必須使用:

\text{logits}_i' = \text{logits}_i - \max_j(\text{logits}_j)

log-sum-exp trick。幾乎所有深度學習架構預設實現這一點。


技術演進史

時期代表模型詞表大小Tokenizer關鍵事件
2018BERT-base/large30,522WordPiece確立 subword 標準,中文 BERT 用 21,128
2019GPT-250,257Byte-level BPE首次將 byte-level 思路引入大規模 LM
2020GPT-350,257Byte-level BPE沿用 GPT-2 tokenizer
2020T532,000SentencePiece (Unigram)Google 的 encoder-decoder 標準
2022ChatGPT/GPT-3.5~100,256cl100k_base (tiktoken)OpenAI 大幅擴充套件詞表,提升多語言效率
2023-02LLaMA 132,000SentencePiece BPEMeta 開源,中文覆蓋有限
2023-07LLaMA 232,000SentencePiece BPE沿用 LLaMA 1 tokenizer
2023-Q3Qwen (通義千問)~151,936Byte-level BPE (自研)阿里大幅擴充,中文效率顯著提升
2024-04LLaMA 3128,256tiktoken (Byte-level BPE)Meta 詞表擴大 4×,追趕多語言能力
2024DeepSeek-V2/V3~100K+Byte-level BPE [自研/供應鏈估算]針對程式碼和中英文最佳化
2024GPT-4o~200K [估算]o200k_base (tiktoken)OpenAI 進一步擴充套件

趨勢: 詞表大小在 5 年內從約 3 萬增長到約 20 萬,增長約 6–7 倍,核心驅動力是多語言覆蓋和推論效率。


技術路線對比

維度小詞表(~30K)中詞表(~50–100K)大詞表(~128–200K)
代表BERT, LLaMA 1/2, T5GPT-3, DeepSeek-V2LLaMA 3, Qwen2, GPT-4o
序列長度(同一文本)最長中等最短
Embedding 引數量($d$=4096)~1.2 億2–4 億5–8 億
多語言效率較差(非英語系需更多 token)中等較好
稀有 token 嵌入學習相對充分(出現頻率相對較高)中等可能不充分
Softmax 計算開銷最低中等最高
Tokenizer 訓練複雜度高(需更大語料)
KV Cache 節省部分顯著
適合場景英語為主、小模型通用多語言、大上下文、長文件

上下游

上游:Tokenizer 訓練

上游依賴鏈:

大規模多語言語料 ──→ Tokenizer 訓練(BPE/Unigram)


                    詞表檔案(vocab.json / tokenizer.model / .tiktoken)


              ┌───────────────────────┐
              │  模型訓練/推論         │
              │  Embedding層 初始化    │
              │  詞表中每個token分配    │
              │  一個d維向量           │
              └───────────────────────┘

Tokenizer 訓練的關鍵輸入:

  • 語料規模與語言分佈(決定詞表覆蓋哪些語言/領域)
  • 目標詞表大小(超引數,需要權衡)
  • 特殊 token 配置([BOS], [EOS], [PAD], 工具呼叫 token 等)

下游:推論最佳化

詞表大小影響的下游最佳化環節:

下游環節影響方式
KV Cache詞表大 → 序列短 → KV Cache 小 → 批處理吞吐量提高
Speculative Decoding草稿模型和目標模型需共享詞表
FlashAttention不直接受 $V$ 影響,但序列長度變短會減少 Attention 計算量
Tensor Parallelism輸出層可按 $V$ 維度切分(Megatron 中的 Column Parallel)
量化Embedding 層的量化需要與 $V$ 維度配合

關鍵指標

指標含義典型範圍
詞表大小 $V$不同 token 的總數30K–200K
序列壓縮比原始字元數 / token 數中文:1.5–4.0(取決於 tokenizer)
OOV 率無法被詞表覆蓋的 token 比例byte-level fallback 時理論為 0
平均每 token 資訊量語料 bits / token 數詞表越大,通常越高
Embedding 引數佔比V \times d / \text&#123;總引數&#125;小模型 20–40%;大型模型(70B+)< 5%
Top-K 命中率取樣時 Top-K 內 token 的累積機率與詞表大小無直接關係,取決於分佈

供需與市場資料

供給側

  • Tokenizer 訓練本身計算量低:訓練一個 BPE tokenizer 在單 GPU 上幾小時可完成,不構成瓶頸。
  • 真正的成本在於詞表擴充套件後的模型重訓: 當 Meta 將 LLaMA 3 詞表從 32K 擴充套件到 128K,所有嵌入引數需要重新初始化和訓練,且因為序列變短,原有的超引數配置(如學習率、上下文長度)可能需要重新調優。
  • Tokenizer 工具生態: HuggingFace Tokenizers、SentencePiece(Google)、tiktoken(OpenAI)為主流開源方案。

需求側

需求方對詞表大小的訴求
中文/日文等非拉丁語系應用需要大詞表(≥100K)以保證編碼效率
程式碼生成程式碼中大量 ASCII 符號和關鍵詞,需要專門的程式碼 token
長上下文推論更大的詞表 → 更短序列 → 更多有效上下文
邊緣部署/小模型傾向中等詞表以控制 embedding 引數量
RAG/文件處理專業術語(醫學、法律)可能需要領域特定 token

量化估算

以一個 7B 引數模型、$V$=128K、$d$=4096 為例:

  • Embedding 引數量:128&#123;,&#125;000 \times 4&#123;,&#125;096 = 5.24 \text&#123;億&#125; \approx 5.24 \text&#123;億引數&#125;
  • 佔總引數比:5.24\text&#123;億&#125; / 70\text&#123;億&#125; \approx 7.5\%
  • 若 $V$=32K,則 embedding 引數量僅為 1.31\text&#123;億&#125;,佔比 \approx 1.9\%

代表公司與資本對映

公司/機構詞表策略說明
OpenAIGPT-2: 50K → GPT-3.5: ~100K → GPT-4o: ~200K [估算]逐步擴充套件,tiktoken 開源了 tokenizer 實現
MetaLLaMA 1/2: 32K → LLaMA 3: 128K一次性大幅擴充套件 4 倍,追趕多語言能力
GoogleBERT: 30K, T5/PaLM: 32K → PaLM: 256KPaLM 論文[參考 PaLM 論文]使用了約 256K 的大詞表,Gemini 系列未公開具體數字
阿里巴巴(Qwen)~152K自研 tokenizer,中文最佳化程度高
DeepSeek~100K+ [供應鏈估算]程式碼 + 中英文最佳化
Anthropic (Claude)未公開使用自研 tokenizer,具體詞表大小 [未充分揭露]
HuggingFace開源 Tokenizers 庫為開源社群提供 tokenizer 訓練基礎設施

產業鏈關鍵節點:

  • Tokenizer 訓練工具 → 模型廠商自研或使用開源庫
  • 詞表決定推論側 KV Cache 效率 → 影響 GPU 需求量
  • 大詞表 → 更大的 embedding 權重檔案 → 影響模型分發和載入時間

投資邏輯

1. 多語言大型模型趨勢利好”大詞表”

隨著非英語市場(中國、日本、中東、東南亞)對 LLM 需求爆發,大詞表 + 多語言最佳化的 tokenizer 成為標配。這意味著:

  • 推論效率提升 → 降低 token 成本 → 擴大應用場景
  • 但也意味著模型的 embedding 權重更大 → 儲存和載入開銷增加

2. 長上下文趨勢與詞表的協同

詞表越大 → 同樣上下文視窗(如 128K tokens)能承載更多原始文本 → 等效上下文能力增強。這與長上下文推論的技術趨勢(RoPE 外推、Ring Attention 等)形成協同。

3. 邊緣部署的小模型挑戰

端側小模型(1B–3B 引數)中,大詞表的 embedding 引數佔比可能過高(15%–40%),迫使採用更小詞表或知識蒸餾策略。這可能催生 專用端側 tokenizer 的需求。

4. Tokenizer 本身不是護城河

Tokenizer 訓練成本極低,不是競爭壁壘。真正的壁壘在於 詞表確定後的大規模預訓練——一旦選定了 tokenizer,更換成本極高(需要重訓整個模型)。


常見誤讀糾偏

❌ 誤讀 1:“詞表越大,模型越聰明”

糾偏: 詞表大小與模型智慧無直接關係。詞表大小影響的是 輸入編碼效率輸出機率分佈的寬度,而不是模型的推論能力或知識量。一個 128K 詞表的模型並不比 32K 詞表的模型”更聰明”——它只是能用更少的 token 表達同樣內容。模型的”聰明”來自訓練資料、模型架構、訓練規模(Chinchilla scaling law)等。

❌ 誤讀 2:“詞表大了,引數量就一定大幅增加”

糾偏: 詞表增大影響的是 embedding 層(V \times d),在大型模型中佔比很小。例如 LLaMA 3 70B 模型,embedding 引數約 128\text&#123;K&#125; \times 8192 \approx 10.5\text&#123;億&#125;,僅佔 70B 總引數的約 1.5%。只有在小模型(1B–3B)中,詞表擴展才會顯著影響引數佔比。

❌ 誤讀 3:“不同 tokenizer 切出來的 token 數可以跨模型直接比較”

糾偏: 不同 tokenizer 的 token 定義完全不同,無法直接比較 token 數來判斷效率。例如 GPT-3.5 的 “token” 和 LLaMA 3 的 “token” 切分粒度不同。真正的比較基準應是 同一文本在不同 tokenizer 下的 token 數

❌ 誤讀 4:“詞表大小需要手動選擇最優值”

糾偏: 在實踐中,詞表大小通常是一個啟發式選擇,基於:

  • 參考已有模型的經驗(如 32K、128K 是常見檔位)
  • 目標語言的覆蓋需求
  • 模型大小與 embedding 引數佔比的平衡

沒有嚴格的理論最優值。BPE 訓練中設定的合併次數決定了最終詞表大小,這更像是一個工程決策而非理論最佳化。


學習路徑

Level 1: 理解基本概念
├── 學習 BPE 演算法原理(建議讀 GPT-2 原論文的 tokenizer 部分)
├── 用 HuggingFace tokenizers 庫手動訓練一個 BPE tokenizer
└── 對比不同 tokenizer 對同一段中文文本的切分結果

Level 2: 理解工程影響
├── 計算你熟悉模型的 embedding 引數量(V × d_model)
├── 分析序列長度對 KV Cache 記憶體的影響
└── 實驗:用不同 vocab size 訓練小模型,觀察 loss 曲線差異

Level 3: 理解架構設計決策
├── 研讀 LLaMA 3 技術報告(關於 tokenizer 從 32K 擴充套件到 128K 的決策)
├── 理解 Megatron-LM 中輸出層的 Tensor Parallel 切分方式
└── 研究 Speculative Decoding 中草稿模型與目標模型的詞表共享問題

Level 4: 前沿研究
├── 關注多語言 tokenizer 的公平性問題(某些語言是否被過度切分)
├── 研究動態詞表(Dynamic Vocabulary)或自適應 tokenization
└── 探索 byte-level models(如 MegaByte, ByT5)對 subword 範式的挑戰

推薦實操

# 用 tiktoken 對比 GPT-3.5 和 GPT-4o 的 tokenizer
import tiktoken

text = "人工智慧正在改變世界"

# GPT-3.5 era tokenizer
enc_cl100k = tiktoken.get_encoding("cl100k_base")
tokens_cl = enc_cl100k.encode(text)
print(f"cl100k: {len(tokens_cl)} tokens, vocab size ≈ 100K")

# GPT-4o era tokenizer  
enc_o200k = tiktoken.get_encoding("o200k_base")
tokens_o2 = enc_o200k.encode(text)
print(f"o200k:  {len(tokens_o2)} tokens, vocab size ≈ 200K")

一句話總結

詞表大小是 LLM 的”字典厚度”——它不決定模型多聰明,但直接決定了模型處理文本的效率:詞表越大,同等文本用更少 token 表示,推論更快,多語言覆蓋更好,但 embedding 引數和 softmax 計算開銷也隨之增長;當前行業趨勢是從 3–5 萬大幅擴充套件到 10–20 萬,核心驅動力是全球化多語言需求和長上下文推論效率。


延伸閱讀與來源

  1. Sennrich et al., “Neural Machine Translation of Rare Words with Subword Units” (2016) — BPE 演算法原始論文
  2. Kudo & Richardson, “SentencePiece: A simple and language independent subword tokenizer and detokenizer” (2018) — SentencePiece 方法論
  3. Radford et al., “Language Models are Unsupervised Multitask Learners” (2019) — GPT-2 的 byte-level BPE tokenizer 設計 [OpenAI 論文]
  4. Touvron et al., “LLaMA: Open and Efficient Foundation Language Models” (2023) — 32K 詞表設計 [Meta 論文]
  5. Meta, “Introducing Meta Llama 3” (2024) — 詞表擴充套件到 128K 的說明 [Meta 官方技術部落格]
  6. OpenAI tiktoken 開源庫 — cl100k_base / o200k_base 詞表大小可通過程式碼直接驗證 [GitHub: openai/tiktoken]
  7. Qwen 技術報告 — ~152K 詞表的中文最佳化策略 [阿里通義千問官方文件]
  8. Chowdhery et al., “PaLM: Scaling Language Modeling with Pathways” (2022) — 約 256K 詞表的大規模模型 [Google 論文]

⚠️ 資料口徑說明: 本文中 GPT-4o 詞表大小約 200K 為基於 o200k_base 的 [估算],Anthropic 詞表大小 [未充分揭露]。DeepSeek 詞表大小為 [供應鏈估算]。其他資料均來自對應模型的技術論文或官方開原始碼。

source: 公開揭露與公開資料整理 本頁僅用於產業鏈學習、資訊檢索和研究輔助;不構成投資建議,不預測漲跌,不提供買賣、部位或目標價建議。
完整概念頁 複盤 13 節結構 公司投研頁 沿產業鏈找到受益公司 投資課 把概念轉成可跟蹤模型