HuggingFace Tokenizers 快速入门指南
什么是 Tokenizers 库
HuggingFace Tokenizers 是一个高性能的文本分词库,它实现了当今最常用的分词算法,使用简单且速度极快。该库支持多种分词方式,包括 Byte-Pair Encoding (BPE)、WordPiece 和 Unigram 等,能够满足不同 NLP 任务的需求。
从零开始构建分词器
准备数据集
我们将使用 wikitext-103 数据集(516MB 文本)来训练一个新的 BPE 分词器。这个数据集包含了大量百科类文本,非常适合用于语言模型的训练。
初始化分词器
首先需要创建一个 BPE 模型的分词器实例:
from tokenizers import Tokenizer
from tokenizers.models import BPE
tokenizer = Tokenizer(BPE())
配置训练器
BPE 训练器需要指定一些关键参数:
from tokenizers.trainers import BpeTrainer
trainer = BpeTrainer(
special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"]
)
这里我们设置了几个特殊标记,它们在后续的 NLP 任务中会非常有用。注意这些标记的顺序很重要,它们将按照这个顺序被分配 ID。
添加预分词器
为了防止生成的 token 跨越多个单词,我们需要添加一个预分词器:
from tokenizers.pre_tokenizers import Whitespace
tokenizer.pre_tokenizer = Whitespace()
这个预分词器会简单地在空格处分割文本,确保每个 token 不会超过一个单词的长度。
训练分词器
现在可以开始训练了:
files = ["wikitext-103-raw/wiki.train.raw"]
tokenizer.train(files, trainer)
训练过程通常只需要几秒钟,即使是在大型数据集上。
保存和加载
训练完成后,可以保存分词器:
tokenizer.save("my_tokenizer.json")
之后可以随时重新加载:
tokenizer = Tokenizer.from_file("my_tokenizer.json")
使用分词器
基本编码
对文本进行分词非常简单:
output = tokenizer.encode("Hello, y'all! How are you 😁")
这会返回一个 Encoding 对象,包含分词后的各种信息。
查看分词结果
可以查看分词后的 tokens:
print(output.tokens)
# ['Hello', ',', 'y', "'", 'all', '!', 'How', 'are', 'you', '[UNK]']
以及对应的词汇 ID:
print(output.ids)
# [27253, 16, 93, 11, 5097, 5, 796, 1252, 21, 0]
对齐信息
Tokenizers 库提供了强大的对齐跟踪功能,可以找到原始文本中对应每个 token 的部分:
print(output.offsets[9])
# (24, 26) # 对应 😁 的位置
后处理
添加特殊标记
很多 NLP 模型需要在输入中添加特殊标记,如 BERT 需要的 [CLS] 和 [SEP]。可以通过后处理器来实现:
from tokenizers.processors import TemplateProcessing
tokenizer.post_processor = TemplateProcessing(
single="[CLS] $A [SEP]",
pair="[CLS] $A [SEP] $B [SEP]",
special_tokens=[
("[CLS]", 1),
("[SEP]", 2),
],
)
处理句子对
处理句子对时,会自动添加适当的特殊标记和类型 ID:
output = tokenizer.encode("Hello, y'all!", "How are you 😁")
print(output.type_ids)
# [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
批量处理
为了获得最佳性能,建议使用批量处理:
output = tokenizer.encode_batch(["Hello, y'all!", "How are you 😁"])
批量处理可以显著提高处理速度,特别是在处理大量文本时。
总结
HuggingFace Tokenizers 库提供了一个高效、灵活的分词解决方案。通过本指南,您已经学会了如何:
- 从零开始训练一个 BPE 分词器
- 保存和加载分词器
- 使用分词器处理文本
- 添加后处理步骤
- 进行批量处理
这些功能使得 Tokenizers 库成为 NLP 工作流中不可或缺的工具,无论是用于研究还是生产环境。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



