You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:36:03