调用Huggingface预训练roberta-base Tokenizer返回绑定方法报错求助
解决方案
核心错误原因
你调用类方法时没有添加括号(),并没有实际执行方法逻辑,只是将方法对象本身赋值给了变量,因此打印时会输出绑定方法对象的描述。
第一步:修正调用代码
你写的tokenize_and_filter方法会同时返回问题、答案两组分词结果,不需要重复调用两次方法,修正后的调用代码如下:
# 加括号执行方法,同时接收两个返回值 tokenized_questions, tokenized_answers = self.get_tokenizer().tokenize_and_filter() print(tokenized_questions)
完成这一步即可拿到预期的分词结果。
第二步:优化类代码(避免后续问题)
你现有的类实现存在可优化点,调整后运行效率和稳定性更高:
- 预训练分词器不要每次调用
tokenize_and_filter都重新加载,重复读取本地文件会严重拖慢运行速度,建议放到build方法中仅初始化一次 - 分词时补充
truncation=True参数,配合你设置的max_length实现过长输入自动截断,避免后续模型输入长度不匹配的问题 - 把返回张量类型做成可配置参数,适配不同框架需求
优化后的完整类代码如下:
from transformers import AutoTokenizer class Roberta(MyTokenizer): def build(self, *args, **kwargs): self.max_length = self.phd.max_length self.untokenized_data = self.questions + self.answers # 分词器仅初始化加载一次 self.tokenizer = AutoTokenizer.from_pretrained('roberta-base') def tokenize_and_filter(self, return_tensors=None): # 分词时加入截断逻辑 inputs = self.tokenizer( self.questions, padding=True, truncation=True, max_length=self.max_length, return_tensors=return_tensors ) outputs = self.tokenizer( self.answers, padding=True, truncation=True, max_length=self.max_length, return_tensors=return_tensors ) return inputs['input_ids'], outputs['input_ids']
如果需要返回TensorFlow格式的张量,调用时传入参数即可:
tokenized_questions, tokenized_answers = self.get_tokenizer().tokenize_and_filter(return_tensors='tf')
内容的提问来源于stack exchange,提问作者GuenTheTech
相关产品推荐
相关产品推荐

