0

我对此很陌生,所以我可能完全遗漏了一些东西,但这是我的问题:我正在尝试创建一个使用 Huggingface 的预训练标记器模型的 Tokenizer 类。然后我想在更大的变压器模型中使用这个类来标记我的输入数据。下面是类代码类 Roberta(MyTokenizer):

from transformers import AutoTokenizer
from transformers import RobertaTokenizer


class Roberta(MyTokenizer):

def build(self, *args, **kwargs):
    self.max_length = self.phd.max_length
    self.untokenized_data = self.questions + self.answers

def tokenize_and_filter(self):
    # Initialize the tokenizer with a pretrained model
    Tokenizer = AutoTokenizer.from_pretrained('roberta')

    tokenized_inputs, tokenized_outputs = [], []

    inputs = Tokenizer(self.questions, padding=True)
    outputs = Tokenizer(self.answers, padding=True)

    tokenized_inputs = inputs['input_ids']
    tokenized_outputs = outputs['input_ids']

    return tokenized_inputs, tokenized_outputs

当我在我的 Transformer 模型中调用函数 tokenize_and_filter 时,如下所示

    questions = self.get_tokenizer().tokenize_and_filter
    answers   = self.get_tokenizer().tokenize_and_filter

    print(questions)

我尝试打印标记化的数据,我收到以下消息:

<bound method Roberta.tokenize_and_filter of <MyTokenizer.Roberta.Roberta object at 
      0x000002779A9E4D30>>

似乎该函数返回一个方法而不是列表或张量 - 我尝试传递参数'return_tensors='tf'',我尝试使用 tokenizer.encode() 方法,我尝试使用 AutoTokenizer 和使用 RobertaTokenizer,我尝试了 batch_encode_plus() 方法,似乎没有任何效果。

请帮忙!

4

1 回答 1

0

看来这对我来说是一个非常愚蠢的错误,我在调用函数时忘记加括号

questions = self.get_tokenizer().tokenize_and_filter
answers   = self.get_tokenizer().tokenize_and_filter

实际上应该是

questions = self.get_tokenizer().tokenize_and_filter()
answers   = self.get_tokenizer().tokenize_and_filter()

它是这样工作的:)

于 2021-11-29T15:48:21.940 回答