[ PROMPT_NODE_23006 ]
huggingface-tokenizers
[ SKILL_DOCUMENTATION ]
# HuggingFace Tokenizers - NLP 的快速分词工具
兼具 Rust 性能与 Python 易用性的生产级快速分词器。
## 何时使用 HuggingFace Tokenizers
**在以下情况使用 HuggingFace Tokenizers:**
- 需要极快的分词速度(每 GB 文本 <20 秒)
- 从零开始训练自定义分词器
- 需要对齐跟踪(Token → 原始文本位置)
- 构建生产级 NLP 工作流
- 需要高效处理大规模语料库
**性能:**
- **速度**:CPU 上处理 1GB 数据 <20 秒
- **实现**:Rust 核心,带有 Python/Node.js 绑定
- **效率**:比纯 Python 实现快 10-100 倍
**可替代方案:**
- **SentencePiece**:与语言无关,T5/ALBERT 使用
- **tiktoken**:OpenAI 用于 GPT 模型的 BPE 分词器
- **transformers AutoTokenizer**:仅用于加载预训练模型(内部使用此库)
## 快速入门
### 安装
bash
# 安装 tokenizers
pip install tokenizers
# 结合 transformers 使用
pip install tokenizers transformers
### 加载预训练分词器
python
from tokenizers import Tokenizer
# 从 HuggingFace Hub 加载
tokenizer = Tokenizer.from_pretrained("bert-base-uncased")
# 编码文本
output = tokenizer.encode("Hello, how are you?")
print(output.tokens) # ['hello', ',', 'how', 'are', 'you', '?']
print(output.ids) # [7592, 1010, 2129, 2024, 2017, 1029]
# 解码回文本
text = tokenizer.decode(output.ids)
print(text) # "hello, how are you?"
### 训练自定义 BPE 分词器
python
from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.trainers import BpeTrainer
from tokenizers.pre_tokenizers import Whitespace
# 使用 BPE 模型初始化分词器
tokenizer = Tokenizer(BPE(unk_token="[UNK]"))
tokenizer.pre_tokenizer = Whitespace()
# 配置训练器
trainer = BpeTrainer(
vocab_size=30000,
special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"],
min_frequency=2
)
# 在文件上训练
files = ["train.txt", "validation.txt"]
tokenizer.train(files, trainer)
# 保存
tokenizer.save("my-tokenizer.json")
**训练时间**:100MB 语料库约 1-2 分钟,1GB 约 10-20 分钟
### 带填充的批量编码
python
# 启用填充
tokenizer.enable_padding(pad_id=3, pad_token="[PAD]")
# 批量编码
texts = ["Hello world", "This is a longer sentence"]
encodings = tokenizer.encode_batch(texts)
for encoding in encodings:
print(encoding.ids)
# [101, 7592, 2088, 102, 3, 3, 3]
# [101, 2023,