有什么理由保存预训练的 BERT 分词器吗?

Any reason to save a pretrained BERT tokenizer?

假设我正在使用 tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', do_lower_case=True),并且我在微调新模型期间使用该分词器所做的一切都是标准的 tokenizer.encode()

我在大多数地方都看到人们在保存模型的同时保存了分词器,但我不清楚为什么需要保存,因为它看起来像是一个开箱即用的分词器在训练期间不会以任何方式修改。

您始终可以通过以下方式唤醒分词器:

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', do_lower_case=True)

这可能只是套路的一部分,并不是那么需要。

分词器根据训练语料库中单词(或 byte pair encoding 中的子词)的频率创建词汇表。同一个分词器可能有不同的词汇表,这取决于训练它的语料库。

出于这个原因,您可能希望在语料库上“训练”分词器并随后训练使用该分词器的模型后保存分词器。

Huggingface Tokenizer Summary 涵盖了这些词汇表的构建方式。

在您的情况下,如果您仅使用分词器对文本进行分词 (encode()),则无需保存分词器。您可以随时加载预训练模型的分词器。

但是,有时您可能想使用预训练模型的分词器,然后将新的分词添加到它的词汇表中,或者重新定义特殊符号,例如'[CLS]'、'[MASK]'、'[SEP] ]'、'[PAD]' 或任何此类特殊标记。在这种情况下,由于您已经对分词器进行了更改,因此保存分词器以备将来使用会很有用。