HuggingFace Tokenizers 快速入门指南

HuggingFace Tokenizers 快速入门指南

【免费下载链接】tokenizers 💥 Fast State-of-the-Art Tokenizers optimized for Research and Production 【免费下载链接】tokenizers 项目地址: https://gitcode.com/gh_mirrors/to/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 库提供了一个高效、灵活的分词解决方案。通过本指南,您已经学会了如何:

  1. 从零开始训练一个 BPE 分词器
  2. 保存和加载分词器
  3. 使用分词器处理文本
  4. 添加后处理步骤
  5. 进行批量处理

这些功能使得 Tokenizers 库成为 NLP 工作流中不可或缺的工具,无论是用于研究还是生产环境。

【免费下载链接】tokenizers 💥 Fast State-of-the-Art Tokenizers optimized for Research and Production 【免费下载链接】tokenizers 项目地址: https://gitcode.com/gh_mirrors/to/tokenizers

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值