幾乎所有大型語言模型(LLM)都有自己獨立的詞表(Vocabulary)。這是模型設計和訓練過程中的核心組件之一。以下是關于詞表的關鍵點:
1. 詞表的作用
- 分詞基礎:詞表定義了模型如何將輸入文本拆分成基本單元(如單詞、子詞、符號等)。
- 數值化映射:每個詞表中的單元對應一個唯一整數(Token ID),模型通過處理這些 ID 進行運算。
- 模型容量:詞表大小直接影響模型的參數量和處理效率。
2. 不同模型的詞表差異
- 語言差異:
- 中文模型(如 ChatGLM、Qwen)包含大量中文字符和常見中文詞匯。
- 多語言模型(如 mBART、NLLB)的詞表可能覆蓋數十種語言的字符。
- 訓練數據:
- 代碼模型(如 CodeLlama)的詞表包含編程語言關鍵詞(
if
,def
,{}
等)。 - 專業領域模型可能包含生物/化學術語(如 AlphaFold 相關的蛋白質序列 token)。
- 代碼模型(如 CodeLlama)的詞表包含編程語言關鍵詞(
- 分詞算法:
- BPE(Byte Pair Encoding):GPT 系列、RoBERTa。
- WordPiece:BERT、DistilBERT。
- Unigram:T5、XLM-R。
- SentencePiece:LLaMA、Gemini(支持跨語言無空格分詞)。
3. 典型模型的詞表大小對比
模型 | 詞表大小 | 特點 |
---|---|---|
GPT-2 | 50,257 | 英文為主,含常見符號 |
BERT | 30,522 | 英文+WordPiece 子詞 |
LLaMA 3 | 128,256 | 多語言優化,支持代碼 |
Qwen-1.5 | 152,064 | 中英混合,覆蓋數學/代碼符號 |
Claude 3 | ~200k | 強調多語言和長上下文支持 |
4. 為什么需要自定義詞表?
- 效率優化:避免對常見詞(如英文的
the
、中文的的
)過度拆分。 - 語言適配:中文/日文等非空格語言需要不同的分詞策略。
- 領域適配:醫學/法律模型需保留專業術語的完整性(如
"冠狀動脈"
不應被拆解)。 - 生僻詞處理:通過子詞組合(如
"Deep" + "##seek" → "Deepseek"
)解決未登錄詞問題。
5. 詞表如何影響模型行為?
- 分詞結果差異:
- 輸入
"ChatGPT is amazing!"
:- GPT-2 可能拆為
["Chat", "G", "PT", " is", " amazing", "!"]
- LLaMA 可能拆為
["Chat", "GPT", " is", " amazing", "!"]
- GPT-2 可能拆為
- 輸入
- 語言偏誤:詞表以英文為主時,中文/泰文等語言的效率會下降。
- 信息損失:過小的詞表可能導致專有名詞被強制拆解(如
"Transformer" → "Trans" + "##former"
)。
6. 特殊 Token 示例
除了常見詞匯,詞表還包含功能性 Token:
[CLS]
、[SEP]
→ BERT 用于句子分類/分隔<|im_start|>
→ ChatML 格式中的對話開始標記<0x04>
(EOS)→ 句子結束符▁
→ SentencePiece 表示空格
總結:
詞表是每個大模型的身份證和語言基因,決定了模型如何看待文本。不同模型因目標語言、領域和算法選擇差異,會采用完全不同的詞表設計。這也是同一段輸入在不同模型中表現各異的原因之一!