使用BertTokenizer.from_pretrained加载模型时触发UnicodeDecodeError如何解决?
问题解决:加载BertTokenizer时触发UnicodeDecodeError
错误原因
你传给BertTokenizer.from_pretrained()的是模型权重文件pytorch_model.bin,这是二进制格式的权重数据,但BertTokenizer需要加载的是包含词汇表(vocab.txt)、配置文件(config.json)的模型目录(或预训练模型名称),而非单个权重文件。当tokenizer尝试把二进制权重文件当作文本格式的词汇表读取时,自然会触发UTF-8解码错误。
解决方案
1. 修正路径指向模型目录
确保你的模型文件都放在同一个目录下,目录结构大致如下:
model_directory/ ├── vocab.txt ├── config.json └── pytorch_model.bin
修改代码,传入目录路径:
from transformers import BertTokenizer tokenizer = BertTokenizer.from_pretrained("/path/to/model_directory")
2. 补充缺失的必要文件
如果你的预训练脚本只生成了pytorch_model.bin,需要补充以下文件:
- vocab.txt:如果是基于已有BERT模型微调,直接复制原模型的
vocab.txt到目录;如果是从头预训练,导出训练时使用的词汇表为vocab.txt(每行一个token)。 - config.json:可以用
BertConfig生成并保存,示例代码:from transformers import BertConfig config = BertConfig( vocab_size=你的词汇表大小, hidden_size=768, # 根据你的训练配置调整 num_hidden_layers=12, num_attention_heads=12, # 其他参数根据你的预训练设置补充 ) config.save_pretrained("/path/to/model_directory")
3. 验证加载
完成上述步骤后,重新运行tokenizer加载代码,即可正常初始化。
内容的提问来源于stack exchange,提问作者Raptor
相关产品推荐
相关产品推荐

