从基础概念到实践:解析LLM中的Token与Embedding

一、Token:语言模型的基础单元

1.1 Token的定义与类型

Token是LLM处理文本的最小单元,其本质是将连续文本拆分为离散符号序列的过程。根据拆分粒度,Token可分为三类:

  • 字符级Token:以单个字符(如英文的”a”、”b”或中文的”你”)为单位,适用于处理未知词或极简模型,但会导致序列过长(如英文单词”hello”拆为5个字符)。
  • 子词级Token:主流方案采用BPE(Byte Pair Encoding)或WordPiece算法,通过统计词频合并高频子串。例如英文中”unhappiness”可能拆分为[“un”, “happ”, “iness”],兼顾词汇覆盖与序列长度。
  • 词级Token:以完整单词为单位(如英文”apple”),但中文因无明确词边界需依赖分词工具,且难以处理未登录词(OOV问题)。

以BPE算法为例,其核心步骤为:

  1. 初始化:将文本拆分为字符序列。
  2. 统计相邻字符对频率,合并最高频对(如”un”→”u”+”n”合并为”un”)。
  3. 重复合并直至达到预设词汇表大小。

1.2 Token的作用与挑战

Token的作用是将非结构化文本转换为模型可处理的数字序列,但面临两大挑战:

  • 词汇表大小:需平衡覆盖性与计算效率。例如GPT-3使用50,257个Token,而中文模型可能因字符量更大需调整策略。
  • 多语言支持:跨语言场景需设计统一Tokenizer,如mBERT通过共享子词覆盖104种语言。

实践建议

  • 自定义模型时,建议使用Hugging Face的tokenizers库训练领域专属Tokenizer,例如医学文本需包含专业术语。
  • 监控Token利用率(如填充比例),避免因序列过长导致计算浪费。

二、Embedding:从离散符号到连续向量的映射

2.1 Embedding的数学本质

Embedding是将Token转换为密集向量的过程,其核心目标是捕捉语义与语法信息。数学上,Embedding层可表示为:

  1. E = W * T

其中,T为One-Hot编码的Token向量(维度=词汇表大小),W为可训练的Embedding矩阵(维度=词汇表大小×隐藏层维度),E为输出Embedding向量(如768维)。

2.2 Embedding的层次结构

现代LLM的Embedding通常包含三层信息:

  1. 语义信息:同义词(如”快乐”与”愉快”)的Embedding距离较近。
  2. 语法信息:词性(名词/动词)和句法角色(主语/宾语)影响向量方向。
  3. 上下文信息:通过Transformer的自注意力机制动态调整,例如”苹果”在”水果”和”公司”语境下的Embedding不同。

可视化示例
使用PCA降维后,Embedding空间可能呈现如下分布:

  • 中心区域:高频通用词(如”的”、”是”)。
  • 边缘簇:专业领域词(如”量子”、”基因”)。
  • 线性轨迹:反义词对(如”大”与”小”)沿相反方向延伸。

2.3 Embedding的训练与优化

Embedding的优化目标是最小化预测损失(如交叉熵),同时通过正则化防止过拟合。常见技巧包括:

  • 权重共享:输入/输出Embedding共享同一矩阵(如GPT系列),减少参数量。
  • 动态调整:使用Adapter层或LoRA(低秩适应)在微调时仅更新部分Embedding参数。
  • 稀疏化:对低频Token的Embedding施加L1正则,提升泛化能力。

三、Token与Embedding的协作机制

3.1 数据流视角

在LLM的推理流程中,Token与Embedding的协作可分为四步:

  1. Tokenization:输入文本→Token序列(如”Hello world”→[234, 567])。
  2. Embedding Lookup:通过Embedding矩阵将Token ID转换为向量(如[234]→[0.1, -0.3, …])。
  3. 上下文化:Transformer层通过自注意力机制融合上下文信息,生成动态Embedding。
  4. 解码:将最终层Embedding映射回Token概率分布(如Softmax输出各Token的得分)。

3.2 性能影响分析

  • 序列长度:Token粒度越细,序列越长,对自注意力计算的平方复杂度影响显著。例如,1024个字符级Token的计算量是256个子词级Token的16倍。
  • Embedding维度:隐藏层维度(如768 vs 1024)直接影响模型容量。实验表明,维度每增加25%,推理延迟上升约15%。

四、实践中的关键问题与解决方案

4.1 处理未知Token(OOV)

  • 方案1:使用<unk>通配符Token,但会丢失语义信息。
  • 方案2:采用字节级Tokenizer(如Byte-Level BPE),确保所有字符可编码。
  • 方案3:在微调阶段扩展词汇表,例如将领域术语加入Tokenizer。

4.2 多语言模型的Embedding设计

  • 共享词汇表:如mBERT通过子词重叠覆盖多语言,但需处理字符集冲突(如阿拉伯文与拉丁文)。
  • 语言专属Embedding:XLM-R为每种语言分配独立Embedding段,通过语言ID切换。

4.3 性能优化技巧

  • 量化:将32位浮点Embedding压缩为8位整数,减少内存占用(如从3GB降至750MB)。
  • 稀疏激活:对低频Token的Embedding使用稀疏矩阵存储,提升缓存命中率。
  • 硬件适配:针对NVIDIA GPU的Tensor Core优化Embedding查找操作,吞吐量提升3倍。

五、未来趋势与行业实践

当前研究聚焦于两大方向:

  1. 动态Embedding:如Meta提出的”Contextual Embedding Adaptation”,通过轻量级网络根据输入动态调整Embedding。
  2. 统一模态表示:百度等机构正在探索将文本、图像、音频的Token统一映射到共享Embedding空间,支持多模态推理。

开发者建议

  • 自定义模型时,优先复用成熟Tokenizer(如BERT的WordPiece),避免重复造轮子。
  • 监控Embedding的L2范数分布,异常值(如范数>10)可能指示训练不稳定。
  • 结合知识图谱增强Embedding,例如将实体关系注入Embedding层,提升事实准确性。

通过深入理解Token与Embedding的机制,开发者能够更高效地调试模型、优化性能,并在自定义场景中构建更具竞争力的语言应用。