运行Pegasus改写代码遇'NoneType'不可调用错误,如何规避?
解决PegasusTokenizer初始化时的TypeError问题
问题重现
已安装SentencePiece、sentence-splitter和transformers库,运行以下代码时:
import torch from transformers import PegasusForConditionalGeneration, PegasusTokenizer model_name = 'tuner007/pegasus_paraphrase' torch_device = 'cuda' if torch.cuda.is_available() else 'cpu' tokenizer = PegasusTokenizer.from_pretrained(model_name) model = PegasusForConditionalGeneration.from_pretrained(model_name).to(torch_device) def get_response(input_text,num_return_sequences,num_beams): batch = tokenizer([input_text],truncation=True,padding='longest',max_length=60, return_tensors="pt").to(torch_device) translated = model.generate(**batch,max_length=60,num_beams=num_beams, num_return_sequences=num_return_sequences, temperature=1.5) tgt_text = tokenizer.batch_decode(translated, skip_special_tokens=True) return tgt_text
出现错误:
TypeError Traceback (most recent call last) <ipython-input-6-f42eb9e8dd56> in <module> 5 model_name = 'tuner007/pegasus_paraphrase' 6 torch_device = 'cuda' if torch.cuda.is_available() else 'cpu' ----> 7 tokenizer = PegasusTokenizer.from_pretrained(model_name) 8 model = PegasusForConditionalGeneration.from_pretrained(model_name).to(torch_device) 9 TypeError: 'NoneType' object is not callable
解决方案
这个错误源于transformers版本兼容性问题,新版本中PegasusTokenizer的from_pretrained方法已被废弃或指向空对象,可通过以下方式修复:
替换为AutoTokenizer:
修改导入语句和tokenizer初始化代码,用AutoTokenizer自动适配模型对应的tokenizer类型:import torch from transformers import PegasusForConditionalGeneration, AutoTokenizer model_name = 'tuner007/pegasus_paraphrase' torch_device = 'cuda' if torch.cuda.is_available() else 'cpu' tokenizer = AutoTokenizer.from_pretrained(model_name) model = PegasusForConditionalGeneration.from_pretrained(model_name).to(torch_device) def get_response(input_text,num_return_sequences,num_beams): batch = tokenizer([input_text],truncation=True,padding='longest',max_length=60, return_tensors="pt").to(torch_device) translated = model.generate(**batch,max_length=60,num_beams=num_beams, num_return_sequences=num_return_sequences, temperature=1.5) tgt_text = tokenizer.batch_decode(translated, skip_special_tokens=True) return tgt_text指定兼容的transformers版本:
如果替换后仍有问题,可安装经过验证的兼容版本:pip install transformers==4.28.0清理缓存重新下载:
若模型缓存损坏,删除~/.cache/huggingface/hub目录下对应模型的缓存文件,重新运行代码让系统自动下载完整的模型和tokenizer文件。
内容的提问来源于stack exchange,提问作者Hanan Raihana
相关产品推荐
相关产品推荐

