[ PROMPT_NODE_23010 ]
Tokenization Huggingface Tokenizers 集成
[ SKILL_DOCUMENTATION ]
# Transformers 集成
将 HuggingFace Tokenizers 与 Transformers 库结合使用的完整指南。
## AutoTokenizer
加载分词器的最简单方法。
### 加载预训练分词器
python
from transformers import AutoTokenizer
# 从 HuggingFace Hub 加载
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
# 检查是否使用快速分词器(基于 Rust)
print(tokenizer.is_fast) # True
# 访问底层的 tokenizers.Tokenizer
if tokenizer.is_fast:
fast_tokenizer = tokenizer.backend_tokenizer
print(type(fast_tokenizer)) #
### 快速与慢速分词器对比
| 特性 | 快速 (Rust) | 慢速 (Python) |
|--------------------------|----------------|---------------|
| 速度 | 快 5-10 倍 | 基准 |
| 对齐跟踪 | ✅ 完全支持 | ❌ 有限 |
| 批量处理 | ✅ 已优化 | ⚠️ 较慢 |
| 偏移映射 | ✅ 是 | ❌ 否 |
| 安装 | `tokenizers` | 内置 |
**在可用时始终使用快速分词器。**
### 检查可用分词器
python
from transformers import TOKENIZER_MAPPING
# 列出所有快速分词器
for config_class, (slow, fast) in TOKENIZER_MAPPING.items():
if fast is not None:
print(f"{config_class.__name__}: {fast.__name__}")
## PreTrainedTokenizerFast
为 Transformers 封装自定义分词器。
### 转换自定义分词器
python
from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.trainers import BpeTrainer
from transformers import PreTrainedTokenizerFast
# 训练自定义分词器
tokenizer = Tokenizer(BPE())
trainer = BpeTrainer(
vocab_size=30000,
special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"]
)
tokenizer.train(files=["corpus.txt"], trainer=trainer)
# 保存分词器
tokenizer.save("my-tokenizer.json")
# 为 transformers 封装
transformers_tokenizer = PreTrainedTokenizerFast(
tokenizer_file="my-tokenizer.json",
unk_token="[UNK]",
sep_token="[SEP]",
pad_token="[PAD]",
cls_token="[CLS]",
mask_token="[MASK]"
)
# 以 transformers 格式保存
transformers_tokenizer.save_pretrained("my-tokenizer")
**结果**:包含 `tokenizer.json` + `tokenizer_config.json` + `special_tokens_map.json` 的目录
### 像任何 transformers 分词器一样使用
python
# 加载
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("my-tokenizer")