如何从预训练模型加载保存的分词器

Posted

技术标签:

【中文标题】如何从预训练模型加载保存的分词器【英文标题】:How to load the saved tokenizer from pretrained model 【发布时间】:2020-02-13 11:23:35 【问题描述】:

我使用 huggingface 转换器在 Pytorch 中微调了预训练的 BERT 模型。所有的训练/验证都在云端的 GPU 上完成。

在训练结束时,我保存模型和分词器,如下所示:

best_model.save_pretrained('./saved_model/')
tokenizer.save_pretrained('./saved_model/')

这会在saved_model 目录中创建以下文件:

config.json
added_token.json
special_tokens_map.json
tokenizer_config.json
vocab.txt
pytorch_model.bin

现在,我在我的计算机中下载了saved_model 目录,并希望加载模型和标记器。我可以像下面这样加载模型

model = torch.load('./saved_model/pytorch_model.bin',map_location=torch.device('cpu'))

但是如何加载分词器?我是 pytorch 的新手,不确定因为有多个文件。可能我没有以正确的方式保存模型?

【问题讨论】:

tokenizer = BertTokenizer.from_pretrained('./saved_model/') 我确信它必须工作。让我知道它是否有效,我会将其发布为答案。 @AshwinGeetD'Sa 是的,将其发布为答案,我会标记它 【参考方案1】:

如果您查看语法,它是您应该通过的预训练模型的目录。因此,加载分词器的正确方法必须是:

tokenizer = BertTokenizer.from_pretrained(<Path to the directory containing pretrained model/tokenizer>)

在你的情况下:

tokenizer = BertTokenizer.from_pretrained('./saved_model/')

./saved_model 这里是您保存预训练模型和标记器的目录。

【讨论】:

如何使这个对本地模型的引用在 docker 中工作?我将模型和标记器放在名为“./saved”的文件夹中,但出现以下错误。看来 Docker 仍在从拥抱脸中寻找配置、模型、标记器文件。 404 客户端错误:未找到 url:huggingface.co/saved/resolve/main/config.json Traceback(最后一次调用):文件“/usr/local/lib/python3.7/site-packages/transformers/configuration_utils.py ",第 505 行,get_config_dict user_agent=user_agent,文件 "/usr/local/lib/python3.7/site-packages/transformers/file_utils.py",第 1337 行,

以上是关于如何从预训练模型加载保存的分词器的主要内容,如果未能解决你的问题,请参考以下文章

Gensim Word2Vec 从预训练模型中选择少量词向量

如何从预训练的 GPT2 模型中获取 onnx 格式?

gensim doc2vec 从预训练模型中训练更多文档

Keras - 分类器未从预训练模型的转移值中学习

预测时是不是可以从预训练的 vgg 模型中获得第 1 层和第 5 层输出? [复制]

无需在 Pytorch 中进行微调即可从预训练模型中获取 128 个暗淡的特征向量