假设我正在使用tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', do_lower_case=True)
,并且我在微调新模型期间使用该标记器所做的只是标准tokenizer.encode()
我在大多数地方都看到人们在保存模型的同时保存该标记器,但我不清楚为什么需要保存,因为它似乎是一个开箱即用的标记器,没有在训练期间的任何方式。
假设我正在使用tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', do_lower_case=True)
,并且我在微调新模型期间使用该标记器所做的只是标准tokenizer.encode()
我在大多数地方都看到人们在保存模型的同时保存该标记器,但我不清楚为什么需要保存,因为它似乎是一个开箱即用的标记器,没有在训练期间的任何方式。
在您的情况下,如果您仅使用标记器来标记文本(encode()
),那么您无需保存标记器。您始终可以加载预训练模型的标记器。
但是,有时您可能希望使用预训练模型的标记器,然后将新标记添加到它的词汇表中,或者重新定义特殊符号,例如 '[CLS]'、'[MASK]'、'[SEP]'、'[ PAD]' 或任何此类特殊标记。在这种情况下,由于您已经对标记器进行了更改,因此保存标记器以备将来使用将很有用。
您始终可以通过以下方式唤醒标记器:
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', do_lower_case=True)
这可能只是例行程序的一部分,并不是那么需要。
标记器根据训练语料库中单词(或字节对编码中的子词)的频率创建他们的词汇表。相同的分词器可能具有不同的词汇表,具体取决于训练它的语料库。
出于这个原因,您可能希望在语料库上“训练”它并随后训练使用该标记器的模型之后保存标记器。
Huggingface Tokenizer Summary涵盖了这些词汇表是如何构建的。