本图介绍了Transformers v5 版本中 Tokenization(分词)的架构、组件及与 v4 版本的差异,是理解大语言模型分词流程升级的核心图解,分 4 个核心模块解析:
一、Tokenization Overview(分词流程总览)
Tokenization 是 “将原始文本转换为语言模型可消费的 Token 序列” 的过程,v5 版本将其拆解为4 个独立可定制的模块化阶段,流程如下:
- Raw Text(原始文本):输入未处理的文本;
- Normalizer(归一化):统一文本格式(如大小写转换:
HELLO World→ hello world);
- Pre-tokenizer(预分词):将文本拆分为子串(如
hello world→ ["hello", "world"]);
- Model(核心分词模型):用 BPE、Unigram、WordPiece 等算法将子串转换为 Token ID(如
["hello", "world"]→ [1900, 19017, 2]);
- Post-processor(后处理):添加特殊 Token(如
<s>/</s>),最终输出Token IDs;
- Decoder(解码器):将 Token ID 反向转换为文本(如
[1900, 19017, 2]→ hello world)。
二、v4 vs v5 Architecture(版本架构对比)
v5 的核心升级是 “从耦合黑箱变为透明模块化”:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
三、Class Hierarchy(类层级结构)
v5 采用清晰的类继承体系:
-
基础接口: PreTrainedTokenizerBase(定义了模板、特殊 Token 等核心接口); -
后端实现: TokenizersBackend(Rust 实现,默认高效); PythonBackend/SentencePieceBackend(纯 Python 或 SentencePiece 的遗留实现); -
具体分词器:如 LlamaTokenizer、GPT2Tokenizer等,基于后端实现; AutoTokenizer:自动选择对应模型的分词器类,简化调用。
四、v5 Workflow(v5 分词器工作流)
v5 支持 “从架构实例化到训练、部署” 的完整流程:
- Instantiate Architecture
:实例化目标分词器架构(如 LlamaTokenizer); - Train on Data
:通过 tokenizer.train_from_iterator(...)用数据训练,生成自定义词表、合并规则; - Trained Tokenizer
:得到包含预定义结构的训练后分词器; - Push to Hub / Load
:保存到 Hub 或本地,后续直接加载使用。
五、Transformers v4 和 v5(核心聚焦分词器模块)对比
从架构设计、可定制性、开发效率等核心维度展开,结合两者的设计定位差异:
一、核心对比表格
|
|
|
|
|---|---|---|
| 架构设计 |
|
nn.Module缺点:初期迁移需适应新的模块化结构
|
| 可定制性 |
AutoTokenizer即可用缺点:组件强耦合,无法单独定制分词流程(如仅修改归一化规则)
|
|
| 训练能力 |
|
train_from_iterator(...)从头训练,可生成自定义词表、合并规则缺点:训练需额外数据与资源,简单场景无必要
|
| 开发与维护 |
Tokenizervs TokenizerFast)、维护成本高
|
|
| 行为一致性 |
|
|
| 调试与观测 |
|
|
二、核心优缺点总结
1. Transformers v4(分词器)的核心优劣势
- 优势:早期生态成熟,对于 “直接加载预训练模型 + 简单使用” 的场景,门槛低、上手快:Rust 实现的
TokenizerFast性能较好,满足基础性能需求。
- 劣势:架构耦合、黑箱化:无法拆分或定制分词的单个阶段(如想修改预分词规则,需重写整个分词器);
-
无法从头训练:只能依赖预训练 Checkpoint,无法针对特定领域数据(如专业术语密集的文本)定制词表; -
维护成本高:Python/Rust 双实现导致代码重复、行为不一致,排查问题困难。
2. Transformers v5(分词器)的核心优劣势
- 优势:模块化透明:4 个分词阶段独立可定制,适配复杂场景(如为特定语言调整归一化规则、为专业领域选择 BPE/Unigram 算法);
-
可从头训练:支持从自定义数据训练分词器,生成适配场景的词表,提升模型在垂直领域的表现; -
易维护、易调试:类层级清晰、组件可观测,减少代码重复,便于定位分词问题。
- 劣势:
-
迁移成本:习惯 v4 的用户需适应新的模块化架构,旧项目需重构分词器相关代码; -
定制门槛:复杂场景需了解 Normalizer、Pre-tokenizer 等组件的细节,对新手不够友好(但简单场景仍可通过 AutoTokenizer快速调用)。
三、适用场景总结
- 选 v4 的场景:简单任务、无需定制分词流程、依赖旧项目生态的快速开发;
- 选 v5 的场景:复杂任务(如垂直领域分词)、需要定制分词流程、需从头训练分词器、追求长期可维护性的项目。

