2

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

我在大多数地方都看到人们在保存模型的同时保存该标记器,但我不清楚为什么需要保存,因为它似乎是一个开箱即用的标记器,没有在训练期间的任何方式。

4

3 回答 3

2

在您的情况下,如果您仅使用标记器来标记文本(encode()),那么您无需保存标记器。您始终可以加载预训练模型的标记器。

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

于 2020-09-24T08:18:35.630 回答
0

您始终可以通过以下方式唤醒标记器:

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

这可能只是例行程序的一部分,并不是那么需要。

于 2020-09-23T00:05:54.817 回答
0

标记器根据训练语料库中单词(或字节对编码中的子词)的频率创建他们的词汇表。相同的分词器可能具有不同的词汇表,具体取决于训练它的语料库。

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

Huggingface Tokenizer Summary涵盖了这些词汇表是如何构建的。

于 2020-09-23T00:47:36.610 回答