huggingface-transformers - Hugging-Face Transformers:从路径错误中加载模型
问题描述
我对 Hugging-Face 变形金刚很陌生。当我尝试从给定路径加载xlm-roberta-base模型时,我遇到了以下问题:
>> tokenizer = AutoTokenizer.from_pretrained(model_path)
>> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/user/anaconda3/lib/python3.7/site-packages/transformers/tokenization_auto.py", line 182, in from_pretrained
return tokenizer_class.from_pretrained(pretrained_model_name_or_path, *inputs, **kwargs)
File "/home/user/anaconda3/lib/python3.7/site-packages/transformers/tokenization_utils.py", line 309, in from_pretrained
return cls._from_pretrained(*inputs, **kwargs)
File "/home/user/anaconda3/lib/python3.7/site-packages/transformers/tokenization_utils.py", line 458, in _from_pretrained
tokenizer = cls(*init_inputs, **init_kwargs)
File "/home/user/anaconda3/lib/python3.7/site-packages/transformers/tokenization_roberta.py", line 98, in __init__
**kwargs,
File "/home/user/anaconda3/lib/python3.7/site-packages/transformers/tokenization_gpt2.py", line 133, in __init__
with open(vocab_file, encoding="utf-8") as vocab_handle:
TypeError: expected str, bytes or os.PathLike object, not NoneType
但是,如果我按其名称加载它,则没有问题:
>> tokenizer = AutoTokenizer.from_pretrained('xlm-roberta-base')
我将不胜感激任何帮助。
解决方案
我假设您已经按照文档中的描述创建了该目录:
tokenizer.save_pretrained('YOURPATH')
目前有一个问题正在调查中,该问题仅影响 AutoTokenizers,但不影响底层的 tokenizers,如 (XLMRobertaTokenizer)。例如以下应该工作:
from transformers import XLMRobertaTokenizer
tokenizer = XLMRobertaTokenizer.from_pretrained('YOURPATH')
要使用 AutoTokenizer,您还需要保存配置以离线加载:
from transformers import AutoTokenizer, AutoConfig
tokenizer = AutoTokenizer.from_pretrained('xlm-roberta-base')
config = AutoConfig.from_pretrained('xlm-roberta-base')
tokenizer.save_pretrained('YOURPATH')
config.save_pretrained('YOURPATH')
tokenizer = AutoTokenizer.from_pretrained('YOURPATH')
我建议为标记器和模型使用不同的路径,或者model.save_pretrained()
保留模型的 config.json,因为您应用于模型的一些修改将存储在 config.json 中在您的模型之后保存如上所述的标记器(即,您将无法使用标记器 config.json 加载修改后的模型)。
推荐阅读
- node.js - node.js 中的 SAML 身份提供程序实现?
- node.js - 如何使用 azure sdk for node 安排推送通知
- java - 文件未找到异常,访问被拒绝,Java
- ios - 有没有办法清除 iOS 上个人热点的 DHCP 租约?
- mongodb - mongodb - 副本集创建错误:仲裁检查失败,因为没有足够的投票节点响应
- c++ - 等待串口数据并合并结果
- python - 是否有任何优雅的方法来定义具有 dtype 数组列的数据框?
- python - 如何在 Python 中跟踪图像中的曲线?
- vuejs2 - 如何在RouteUpdate导航守卫之前测试vue路由器?
- php - Laravel:会话变量或多次设置变量?