【问题标题】:Any reason to save a pretrained BERT tokenizer?有什么理由保存预训练的 BERT 标记器?
【发布时间】:2021-01-09 02:38:15
【问题描述】:

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

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

【问题讨论】:

    标签: save pytorch bert-language-model huggingface-tokenizers


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    您总是可以通过以下方式唤醒分词器:

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

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

    【讨论】:

      【解决方案3】:

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

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

      The Huggingface Tokenizer Summary 介绍了这些词汇是如何建立起来的。

      【讨论】:

      • 当然,通常标记器适合语料库,并且它们的词汇是这样构建的,但对于 BertTokenizer 来说,词汇似乎是预先构建的,我看不到它得到的任何地方在微调层的训练过程中修改...除非tokenizer.encode()方法以某种方式修改了tokenizer对象?
      猜你喜欢
      • 2022-01-04
      • 2020-10-09
      • 2021-03-12
      • 2022-12-10
      • 2021-10-19
      • 2021-12-25
      • 2019-07-23
      • 1970-01-01
      • 2021-07-20
      相关资源
      最近更新 更多