Ch10 LLM架构

Token (词元)

一句话理解

Token 是 LLM 处理文本的最小单位——不是字,不是词,而是介于两者之间的”子词单元”。LLM 先把文本切成 Token,再给每个 Token 一个数字 ID,然后才能做数学运算。

零基础理解

你要把”我喜欢吃苹果”翻译成英文。你不能直接翻译每个字(“我”→“I”, “喜”→“like”, “欢”→”?”——“喜欢”是一个词不能拆),也不能整句背下来(世界上有无限多种句子)。Token 的解决方案是:把”喜欢”拆成”喜”+“欢”两个子词单元,既保留了一定的语义,又控制了词汇表大小。常见词保持完整(“the”→1个 token),罕见词拆成子词(“unbelievable”→“un”+“believe”+“able”)。

Token 的三种粒度

粒度例子 (输入: “我喜欢吃苹果”)词表大小优点缺点
字符级 (Character)[“我”, “喜”, “欢”, “吃”, “苹”, “果”] (6 tokens)极小(~100)无 OOV 问题序列太长,语义信息弱
词级 (Word)[“我”, “喜欢”, “吃”, “苹果”] (4 tokens)极大(~10万+)语义完整大量 OOV,词表爆炸
子词级 (Subword)[“我”, “喜欢”, “吃”, “苹果”] (4 tokens,常见词)中等(3万-25万)平衡序列长度和语义分词规则需要学习
子词级(罕见词)“unbelievable” → [“un”, “believe”, “able”]中等处理罕见词能力强—

OOV (Out-Of-Vocabulary):词表中没有的词。词级分词遇到未登录词只能标记为 <UNK>,子词级可以拆成已知子词组合。

主流 Tokenizer 算法

BPE (Byte-Pair Encoding)

核心思想:从字符开始,反复合并最频繁出现的字符对,直到达到目标词表大小。

初始词表:{"a", "b", "c", ..., "z", " "}
迭代1: 发现 "t"+"h" 出现最频繁 → 合并为 "th"
迭代2: 发现 "th"+"e" 出现最频繁 → 合并为 "the"
迭代3: 发现 "a"+"n" 出现最频繁 → 合并为 "an"
...
迭代N: 词表达到目标大小(如 50,000)

BPE 训练示例:

原始文本: "low lower lowest"
步骤1: l o w _ l o w e r _ l o w e s t  (字符级)
步骤2: 合并 "l"+"o" → "lo"
步骤3: 合并 "lo"+"w" → "low"
步骤4: 合并 "e"+"r" → "er"
步骤5: 合并 "e"+"s" → "es"
最终词表: {"l", "o", "w", "low", "e", "r", "er", "s", "t", "es", ...}

代表模型:GPT 系列 (GPT-2/3/4 使用 BPE 变体)

WordPiece

核心思想:与 BPE 类似,但合并标准不是频率,而是最大化训练数据的似然——选择能让语言模型概率增加最多的字符对合并。

代表模型:BERT, DistilBERT

SentencePiece

核心思想:直接在原始文本(不预分词)上训练 BPE 或 Unigram 模型,将空格视为普通字符,用 ”▁“(U+2581) 表示空格。语言无关,无需预分词规则。

代表模型:LLaMA, Mistral, T5, ALBERT

Unigram

核心思想:从大词表开始,逐步删除对训练数据似然贡献最小的子词,直到达到目标词表大小。

代表模型:XLNet, mBART

Tokenizer 对比

特性BPEWordPieceSentencePieceUnigram
合并策略频率似然增益BPE 或 Unigram删除低贡献
预分词需要(空格/标点)需要不需要不需要
语言无关否否是是
空格处理显式保留显式保留用 ▁ 表示用 ▁ 表示
解码直接拼接用 ## 标记去掉 ▁ + 直接拼接直接拼接
代表模型GPT-2/3/4BERTLLaMA, MistralXLNet
2026 年使用广泛老模型最广泛较少

Token 在 LLM 中的实际表现

中英文 Token 数量差异

文本字符数Token 数 (GPT-4 tokenizer)原因
“Hello world”112英文常见词
“你好世界”46-8中文每个字通常 1-2 tokens
“I love machine learning”244英文词边界清晰
“我喜欢机器学习”78-12中文需更多 tokens

中文用户的代价:同样的语义内容,中文需要的 token 数通常是英文的 1.5-3 倍。这意味着中文用户使用 API 的成本更高,且在相同上下文窗口下能输入的文本更少。

Token 数量估算

规则说明
1 token ≈ 0.75 个英文单词常见英文词 1 token,罕见词 2-3 tokens
1 token ≈ 0.5 个中文字符常见汉字 1-2 tokens,罕见字更多
1 token ≈ 4 个英文字符包括空格和标点
1000 tokens ≈ 750 个英文单词API 计费基准

词表大小 (Vocabulary Size)

模型词表大小Tokenizer
GPT-250,257BPE
GPT-3/GPT-4100,000+BPE (cl100k_base)
BERT30,522WordPiece
LLaMA 1/232,000SentencePiece (BPE)
LLaMA 3128,000SentencePiece (BPE)
DeepSeek-V3129,280SentencePiece (BPE)
Qwen 2.5152,064SentencePiece (BPE)

趋势:词表越来越大。更大的词表意味着每个 token 承载更多语义 → 相同上下文窗口能容纳更多信息 → 推理效率更高。

Token 与上下文窗口

LLM 的上下文窗口用 Token 数衡量,而非字符数或词数。

模型上下文窗口 (tokens)约等于
GPT-4 (2023)8K-128K约 6000-96000 英文词
Claude 3 (2024)200K约 150000 英文词
Gemini 1.5 Pro (2024)1M-2M约 750000-1500000 英文词
DeepSeek-V3 (2024)128K约 96000 英文词

相关笔记

来源

关联9

知识图谱

局部图谱 · 点节点跳转