LLM的输入/输出(Tokenization与Embedding)本质是什么
P0 · rag
🏷 标签:tokenization, embedding, llm-basics, bpe
1️⃣ 考察意图
面试官想考察你对 LLM 底层数据流的理解,而非简单背诵概念。这是典型的“基础概念+工程取舍”题,刁钻点在于:很多人能说出 Tokenization 和 Embedding 的定义,但说不清它们如何协同影响模型性能、长文本处理、多语言支持等实际问题。答好了能展示你对 Transformer 输入输出机制的扎实掌握,以及从数据预处理到模型推理的全局视野,这是大厂做 RAG 或 Agent 系统调优的硬实力。
2️⃣ 标准答
本质一句话:Tokenization 是文本到离散 ID 的“编码映射”,Embedding 是离散 ID 到连续向量的“语义嵌入”。两者共同构成 LLM 的输入输出桥梁。
输入侧:Tokenization 与 Embedding 的协作
- Tokenization 角色:将原始文本分割为子词单元(subword),常用 BPE(Byte Pair Encoding)或 SentencePiece。例如,GPT-4 使用 BPE,词汇表约 100k tokens。关键参数:
vocab_size决定模型能处理的词汇量,max_length限制序列长度(如 2048 或 8192)。 - Embedding 角色:将每个 Token ID 映射为稠密向量(如 4096 维),通过可训练的 Embedding 矩阵实现。这个矩阵是模型参数的一部分,维度
vocab_size × d_model直接决定模型容量。 - 工程取舍:Embedding 维度与模型容量正相关,但过大导致参数量爆炸(100k × 4096 ≈ 400M 参数),需平衡。实际中,小模型(如 7B)常用 4096 维,大模型(如 70B)用 8192 维。
- 位置编码:Embedding 后必须加位置编码(如 RoPE 或 ALiBi),否则 Transformer 无法感知 token 顺序。RoPE 通过旋转矩阵注入相对位置信息,支持外推(extrapolation)到更长序列。
输出侧:从向量到 Token 的反向过程
- LM Head:模型最后一层输出向量(
d_model维)通过线性层(d_model × vocab_size)映射回词汇表大小的 logits,再经 Softmax 转为概率分布。 - 采样策略:从概率分布中采样生成下一个 Token,常用 Top-k(如 k=50)或 Top-p(如 p=0.9)过滤低概率 token,避免生成退化文本。
- 实际落地的坑:Tokenization 不一致会导致灾难。例如,训练时用 SentencePiece 的 BPE,推理时用不同版本,可能产生 OOV(Out-of-Vocabulary) token,导致生成乱码。解法:统一 Tokenizer 版本,并在预处理时做严格校验。
Tokenization 对模型性能的影响
- 多语言支持:BPE 在英文上压缩率高(平均 1.3 tokens/word),但在中文上表现差(平均 2-3 tokens/character),因为中文缺乏空格分隔。解法:使用 SentencePiece 的 unigram 模式,或专门训练中文 Tokenizer(如 Baichuan 的 64k vocab)。
- 长文本处理:Tokenization 直接决定序列长度。例如,一篇 5000 字的文章,英文 BPE 约 6500 tokens,中文 BPE 约 10000 tokens。若模型 max_length=8192,中文可能被截断。解法:使用 sliding window 或 chunking 策略,或选择支持更长上下文的模型(如 GPT-4 的 128k)。
- Embedding 维度与模型容量:Embedding 维度越大,语义表示越丰富,但训练成本越高。实际中,7B 模型用 4096 维,13B 用 5120 维,70B 用 8192 维。这是一个经典的 trade-off:维度翻倍,参数量翻 4 倍(因为 Embedding 矩阵是
vocab_size × d_model)。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从输入、输出、工程影响三个层面回答。输入侧,Tokenization 将文本转为离散 ID,Embedding 将 ID 映射为稠密向量,再加位置编码送入 Transformer。输出侧,模型向量经 LM Head 和 Softmax 转为概率分布,采样生成 Token。工程上,Tokenization 直接影响多语言压缩率和长文本处理,Embedding 维度决定模型容量。总结一句:Tokenization 是离散编码,Embedding 是连续语义,两者共同定义 LLM 的输入输出边界。”
4️⃣ 高频追问 & 应对
追问 1:为什么 BPE 在中文上效率低?如何改进?
BPE 基于字节对合并,英文有空格作为天然分隔符,合并效率高。中文缺乏空格,每个字符独立成 token,导致序列长度膨胀。改进方案:1)使用 SentencePiece 的 unigram 模式,基于语言模型概率选择子词,对中文更友好。2)训练中文专用 Tokenizer,如 Baichuan 的 64k vocab,将常见中文双字词(如“中国”)合并为单 token。3)在预处理阶段,对中文文本做分词(如 jieba),再训练 BPE,可提升压缩率 30-50%。
追问 2:Embedding 维度如何影响模型性能?有没有理论依据?
理论依据来自“缩放定律”(Scaling Laws):Embedding 维度与模型参数量、训练数据量呈幂律关系。维度太小,语义表示不足,导致欠拟合;维度太大,参数量爆炸,训练成本高。实际中,7B 模型用 4096 维是经验值,来自 GPT-3 的验证。工程取舍:Embedding 维度应与 Transformer 的 hidden_size 一致(如 LLaMA 的 4096),否则需额外投影层,增加复杂度。
追问 3:如果 Tokenizer 词汇表大小不同(如 32k vs 128k),对模型有什么影响?
词汇表越大,单 token 信息密度越高,序列长度更短,但 Embedding 矩阵参数量更大(32k × 4096 ≈ 131M,128k × 4096 ≈ 524M)。trade-off:大词汇表适合多语言或代码场景(如 CodeLlama 的 128k),但训练成本高;小词汇表适合英文单语场景,推理速度更快。实际中,GPT-4 用 100k,LLaMA 用 32k,各有取舍。
5️⃣ 避坑 · 常见错误答法
- ❌ 说“Tokenization 就是分词,Embedding 就是向量化”,过于笼统,没区分离散 vs 连续的本质。 → ✅ 应明确:Tokenization 是离散映射(文本→ID),Embedding 是连续映射(ID→向量),两者是不同层级的抽象。
- ❌ 说“Embedding 维度越大越好”,忽略参数量和训练成本。 → ✅ 应指出 trade-off:维度翻倍,参数量翻 4 倍,需根据模型规模和任务平衡。
- ❌ 说“位置编码不重要”,忽略 Transformer 的置换不变性。 → ✅ 应强调:没有位置编码,模型无法区分“我打你”和“你打我”,必须加 RoPE 或 ALiBi。
6️⃣ 简历呼应
- 如果你有 RAG 项目:从 Tokenization 对检索 chunk 长度的影响切入,说明如何选择 Tokenizer 和 chunk size(如 256 tokens)以平衡检索精度和上下文窗口。
- 如果你只做过传统 NLP:用词向量(Word2Vec)类比 Embedding,但强调 LLM 的 Embedding 是端到端训练的,且维度更大(4096 vs 300),并指出 BPE 相比传统分词的优势。
- 如果你是校招无项目:聚焦论文复现,如 LLaMA 的 Tokenizer 设计(BPE with 32k vocab)和 Embedding 维度选择(4096),展示对 Scaling Laws 的理解。
- “Neural Machine Translation of Rare Words with Subword Units”(BPE 论文)
- “SentencePiece: A simple and language independent subword tokenizer and detokenizer”
- “Scaling Laws for Neural Language Models”(Kaplan et al., 2020)
- “RoFormer: Enhanced Transformer with Rotary Position Embedding”(RoPE 论文)
- “LLaMA: Open and Efficient Foundation Language Models”(Tokenizer 和 Embedding 设计细节)