使用transformers加载BertModel时遭遇UnicodeDecodeError问题求助
问题分析与解决建议
首先,你的核心问题出在模型加载类的选择错误,导致代码试图把二进制权重文件当成JSON配置文件来读取,进而触发了UnicodeDecodeError。
为什么会报错?
你用TFBertModel.from_pretrained(model_file)加载模型,但TFBertModel是TensorFlow版本的BERT实现,而你转换得到的pytorch_model.bin是PyTorch格式的二进制权重文件。当from_pretrained方法接收到这个文件路径时,它会默认尝试读取成JSON配置文件,二进制文件的字节自然无法用UTF-8解码,就出现了'utf-8' codec can't decode byte 0x80的错误。
解决方案
方案1:使用PyTorch版本的模型类加载(推荐,因为你已经转成了PyTorch权重)
修改代码,用BertModel(PyTorch版本)替代TFBertModel,并且直接传入模型文件夹路径即可,from_pretrained会自动加载文件夹内的config.json、pytorch_model.bin和词表:
from transformers import BertModel, BertTokenizer import os current_dir = os.path.dirname(__file__) model_folder = os.path.join(current_dir, 'torch_bert_model') # 加载Tokenizer tokenizer = BertTokenizer.from_pretrained(model_folder) # 加载PyTorch模型 model = BertModel.from_pretrained(model_folder)
方案2:如果确实需要TensorFlow版本的模型
如果你想使用TensorFlow的TFBertModel,有两种方式:
- 直接从谷歌下载TensorFlow版本的预训练模型,不需要转成PyTorch格式;
- 把已有的PyTorch权重转换成TensorFlow格式,使用
transformers提供的转换工具:
之后就可以用from transformers import BertModel, TFBertModel # 先加载PyTorch模型 pt_model = BertModel.from_pretrained("./torch_bert_model") # 转换为TensorFlow模型并保存 tf_model = TFBertModel.from_pretrained("./torch_bert_model", from_pt=True) tf_model.save_pretrained("./tf_bert_model")TFBertModel.from_pretrained("./tf_bert_model")加载了。
额外检查项
确认你的torch_bert_model文件夹结构完全正确:
- 包含
config.json(原bert_config.json重命名后的文件) - 包含
pytorch_model.bin(转换后的PyTorch权重) - 包含
vocab.txt(原模型的词表文件)
内容的提问来源于stack exchange,提问作者hapmlpy
相关产品推荐
相关产品推荐

