使用transformers 2.1.1调用BertTokenizer报错:'BertTokenizer'对象不可调用
问题解决:TypeError: 'BertTokenizer' object is not callable
问题原因
你使用的transformers 2.1.1是早期版本,该版本的BertTokenizer对象不支持直接调用(即tokenizer(text)这种写法),需要用版本专属的编码方法处理文本。
解决方案
方案1:适配旧版本API,使用encode_plus方法
将原代码中直接调用tokenizer的部分替换为encode_plus方法,这是该版本的标准文本编码方式,参数与你的需求匹配:
from transformers import AutoTokenizer, AutoModel import torch tokenizer = AutoTokenizer.from_pretrained("bert-base-multilingual-cased") model = AutoModel.from_pretrained("bert-base-multilingual-cased") text = 'welcome to Miami' # 用encode_plus替代直接调用tokenizer inputs = tokenizer.encode_plus( text, return_tensors='pt', padding=True ) with torch.no_grad(): outputs = model(**inputs) embeddings = outputs.last_hidden_state[:, 0, :] embeddings.detach().cpu().numpy()
方案2:升级transformers版本(长期推荐)
如果环境允许,建议升级到transformers 4.x系列的稳定版本,新版本支持直接调用tokenizer的便捷写法,还修复了旧版本的诸多bug、新增大量功能。升级命令:
pip install --upgrade transformers
升级后你原本的代码即可正常运行。
内容的提问来源于stack exchange,提问作者anitasp
相关产品推荐
相关产品推荐

