bert-base-uncased模型的tokenizer.json和vocab.txt的区别和联系

发布于:2024-12-06 ⋅ 阅读:(27) ⋅ 点赞:(0)

说在前面

突然发现这两个文件是由区别的,之前傻傻的把两个文件都下载到模型里面了,transformers工具包使用bert加载分词器时并不是都需要这两个文件的,而是工具加载器类型类具体决定的。

vocab.txt 的作用

  • 词汇表文件,通常是一个纯文本文件,其中列出了模型使用的所有词汇(Token)。
  • BERT 和类似的模型中,vocab.txt 是必需的,因为它包含了从输入文本到模型输入的映射(即词汇到 ID 的映射)。
    • 例如,对于一个分词器,它会将 "hello" 映射到一个 ID(如 1012),并通过这种方式来执行文本的分词。
  • vocab.txt 是传统的分词器(如 BertTokenizer)的核心文件,加载分词器时,分词器会根据这个词汇表来进行分词。

tokenizer.json 的作用

  • tokenizer.json 文件通常是由 Fast Tokenizer(如 BertTokenizerFast)生成的,它包含了分词器的详细配置信息。
    • tokenizer.json 包含的不仅仅是词汇表,还包括分词器的一些算法配置、特殊字符的映射、字节对编码(BPE)相关的合并规则等。
    • Fast Tokenizer 使用 tokenizers 库,它是一个专为高效文本处理设计的库,能加速分词的过程。
    • 当你使用 BertTokenizerFast 这样的 Fast 版本时,tokenizer.json 会被生成,并且通常会保存为一个文件。

加载分词器时使用哪个文件?

  • 对于传统的 BertTokenizer(非 Fast 版本),加载分词器时,主要使用 vocab.txt 文件。这个文件是必须的,它包含了词汇和其对应的 ID。
    • BertTokenizer 加载时,不会使用 tokenizer.json,因为传统版本的分词器只依赖于 vocab.txt
  • 对于 BertTokenizerFast(Fast 版本),它会使用 tokenizer.json 文件,且这个文件是通过 tokenizers 库生成的。虽然它也会依赖 vocab.txt 文件来获取词汇信息,但 tokenizer.json 文件则包含了更多细节(如合并规则、特殊字符处理等)。

为什么你训练后的模型没有 tokenizer.json 文件?

  • 如果你使用的是传统的 BertTokenizer 进行训练,模型保存后就不会包含 tokenizer.json,只会包含 vocab.txt 和其他一些配置文件。
  • 如果你希望生成 tokenizer.json,你需要使用 Fast Tokenizer,比如 BertTokenizerFast,这种情况下,分词器会在保存时自动生成 tokenizer.json 文件。

是否需要同时使用 tokenizer.jsonvocab.txt

  • 不需要同时使用 tokenizer.jsonvocab.txt,它们的作用不同,且它们通常并不同时存在于一个模型的保存目录中。
    • 传统的 BertTokenizer 只需要 vocab.txt
    • Fast Tokenizer(如 BertTokenizerFast)需要 tokenizer.json,但也会使用 vocab.txt

加载分词器时的代码

无论你是否有 tokenizer.json 文件,加载分词器的代码都类似,区别在于你使用的是哪种类型的分词器:

  • 对于传统的 BertTokenizer

    from transformers import BertTokenizer
    
    tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")  # 加载词汇表和配置文件
    
  • 对于 BertTokenizerFast(如果使用了 Fast 版本)

    from transformers import BertTokenizerFast
    
    tokenizer = BertTokenizerFast.from_pretrained("bert-base-uncased")  # 加载tokenizer.json及vocab.txt
    

Fast Tokenizer 的情况下,tokenizer.json 会被自动加载,但你仍然需要确保保存了 vocab.txt 文件,因为它包含了词汇表。

总结:

  • vocab.txt 是传统分词器(如 BertTokenizer)所必需的文件,加载时会使用该文件。
  • tokenizer.jsonFast Tokenizer(如 BertTokenizerFast)的核心文件,包含更多的配置和细节,但不是必需的(只有 Fast Tokenizer 才会使用)。
  • 如果你训练的是传统的 BertTokenizer,那么只有 vocab.txt 文件即可,没有 tokenizer.json 文件也没有问题。
  • 如果你希望生成 tokenizer.json 文件,需要使用 Fast Tokenizer(如 BertTokenizerFast)。


网站公告

今日签到

点亮在社区的每一天
去签到