一、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算法为例,其核心步骤为:
- 初始化:将文本拆分为字符序列。
- 统计相邻字符对频率,合并最高频对(如”un”→”u”+”n”合并为”un”)。
- 重复合并直至达到预设词汇表大小。
1.2 Token的作用与挑战
Token的作用是将非结构化文本转换为模型可处理的数字序列,但面临两大挑战:
- 词汇表大小:需平衡覆盖性与计算效率。例如GPT-3使用50,257个Token,而中文模型可能因字符量更大需调整策略。
- 多语言支持:跨语言场景需设计统一Tokenizer,如mBERT通过共享子词覆盖104种语言。
实践建议:
- 自定义模型时,建议使用Hugging Face的
tokenizers库训练领域专属Tokenizer,例如医学文本需包含专业术语。 - 监控Token利用率(如填充比例),避免因序列过长导致计算浪费。
二、Embedding:从离散符号到连续向量的映射
2.1 Embedding的数学本质
Embedding是将Token转换为密集向量的过程,其核心目标是捕捉语义与语法信息。数学上,Embedding层可表示为:
E = W * T
其中,T为One-Hot编码的Token向量(维度=词汇表大小),W为可训练的Embedding矩阵(维度=词汇表大小×隐藏层维度),E为输出Embedding向量(如768维)。
2.2 Embedding的层次结构
现代LLM的Embedding通常包含三层信息:
- 语义信息:同义词(如”快乐”与”愉快”)的Embedding距离较近。
- 语法信息:词性(名词/动词)和句法角色(主语/宾语)影响向量方向。
- 上下文信息:通过Transformer的自注意力机制动态调整,例如”苹果”在”水果”和”公司”语境下的Embedding不同。
可视化示例:
使用PCA降维后,Embedding空间可能呈现如下分布:
- 中心区域:高频通用词(如”的”、”是”)。
- 边缘簇:专业领域词(如”量子”、”基因”)。
- 线性轨迹:反义词对(如”大”与”小”)沿相反方向延伸。
2.3 Embedding的训练与优化
Embedding的优化目标是最小化预测损失(如交叉熵),同时通过正则化防止过拟合。常见技巧包括:
- 权重共享:输入/输出Embedding共享同一矩阵(如GPT系列),减少参数量。
- 动态调整:使用Adapter层或LoRA(低秩适应)在微调时仅更新部分Embedding参数。
- 稀疏化:对低频Token的Embedding施加L1正则,提升泛化能力。
三、Token与Embedding的协作机制
3.1 数据流视角
在LLM的推理流程中,Token与Embedding的协作可分为四步:
- Tokenization:输入文本→Token序列(如”Hello world”→[234, 567])。
- Embedding Lookup:通过Embedding矩阵将Token ID转换为向量(如[234]→[0.1, -0.3, …])。
- 上下文化:Transformer层通过自注意力机制融合上下文信息,生成动态Embedding。
- 解码:将最终层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倍。
五、未来趋势与行业实践
当前研究聚焦于两大方向:
- 动态Embedding:如Meta提出的”Contextual Embedding Adaptation”,通过轻量级网络根据输入动态调整Embedding。
- 统一模态表示:百度等机构正在探索将文本、图像、音频的Token统一映射到共享Embedding空间,支持多模态推理。
开发者建议:
- 自定义模型时,优先复用成熟Tokenizer(如BERT的WordPiece),避免重复造轮子。
- 监控Embedding的L2范数分布,异常值(如范数>10)可能指示训练不稳定。
- 结合知识图谱增强Embedding,例如将实体关系注入Embedding层,提升事实准确性。
通过深入理解Token与Embedding的机制,开发者能够更高效地调试模型、优化性能,并在自定义场景中构建更具竞争力的语言应用。