HuggingFace | 各种tokenizer有啥区别

发布时间 2023-07-30 11:53:20作者: 张Zong在修行

在 Hugging Face 中,有多种不同的 tokenizer 实现可供选择,每种实现都有其独特的优缺点和用途。

  1. BertTokenizer:适用于 BERT 模型,支持 WordPiece 分词和 Byte-Pair Encoding(BPE)分词算法。它还支持对输入序列进行截断和填充,以适应模型的输入要求。
  2. RobertaTokenizer:适用于 RoBERTa 模型,与 BertTokenizer 类似,但使用的是更大的词表和更严格的分词规则。同时,它还支持处理 Unicode 字符和多语言文本。
  3. AlbertTokenizer:适用于 ALBERT 模型,采用 SentencePiece 分词算法,支持截断和填充等功能。
  4. GPT2Tokenizer:适用于 GPT-2 模型,采用 Byte-Pair Encoding(BPE)分词算法,支持截断和填充等功能。它还支持对特殊标记进行编码,如 [CLS][SEP][MASK]
  5. XLNetTokenizer:适用于 XLNet 模型,支持 SentencePiece 分词算法和 Transformer-XL 模型的相对位置编码。它还支持对输入序列进行截断和填充,以适应模型的输入要求。
  6. ElectraTokenizer:适用于 ELECTRA 模型,也支持 WordPiece 分词和 Byte-Pair Encoding(BPE)分词算法,同时还支持生成嵌入式掩码(masked embeddings)。

MT5Tokenizer

MT5Tokenizer 是 Hugging Face 中用于 Multilingual Translation 5(MT5)模型的分词器。MT5 模型是 Google 最近发布的一种基于 Transformer 的多语言翻译模型,它可以同时处理多种语言之间的翻译任务,包括文本翻译、语音翻译等。

MT5Tokenizer 基于 SentencePiece 分词算法实现,使用了与 MT5 模型相同的词汇表。它支持对多语言文本进行分词,并可以将分词结果转换为模型可接受的输入格式

导入 MT5Tokenizer:导入 MT5Tokenizer 类,并使用 from_pretrained 方法加载预训练的 MT5Tokenizer 分词器。

from transformers import MT5Tokenizer

tokenizer = MT5Tokenizer.from_pretrained("google/mt5-small")

对输入文本进行分词:使用 tokenizer.encode 方法对输入文本进行分词,生成 token id 序列。

text = "Hello, how are you?"
encoded_text = tokenizer.encode(text)
input_ids = encoded_text.input_ids

将分词结果转换为模型的输入格式:根据模型的输入格式要求,对分词结果进行适当的截断和填充,并将其转换为 PyTorch 或 TensorFlow 张量。

import torch

max_length = 128
padding = "max_length"
truncation = True

# 对分词结果进行截断和填充
encoded_text = tokenizer.encode_plus(
    text,
    max_length=max_length,
    padding=padding,
    truncation=truncation,
    return_tensors="pt",
)

# 转换为 PyTorch 张量
input_ids = encoded_text["input_ids"]
attention_mask = encoded_text["attention_mask"]

需要注意的是,MT5Tokenizer 是专门为 MT5 模型设计的分词器,但是可以用于其他模型。

比如:

mGPT 模型和mT5 模型都使用的 MT5Tokenizer 分词器,我们看看两个模型文件中分词器的区别。

mGPT 模型文件

mT5 模型文件

由于 MT5Tokenizer 基于 SentencePiece 分词算法实现,所以两个模型的spiece.model文件相同,tokenizer_config.jsonspecial_tokens_map.json大致相同。

总结

  • 在选择 tokenizer 时,需要根据具体的任务和数据集的特点来进行选择。同时,还需要考虑 tokenizer 的性能、速度、词表大小等因素。如果您不确定该使用哪种 tokenizer,可以尝试使用 Hugging Face 的 AutoTokenizer 类,它会自动根据模型类型选择最适合的 tokenizer。