Сообщение об ошибке при попытке использовать предварительно обученный токенизатор huggingface (roberta-base)

#tokenize #huggingface-transformers #transformer #huggingface-tokenizers #roberta

Вопрос:

Я довольно новичок в этом, так что, возможно, мне чего-то совершенно не хватает, но вот моя проблема: я пытаюсь создать класс токенизатора, который использует предварительно обученные модели токенизатора из Huggingface. Затем я хотел бы использовать этот класс в более крупной модели трансформатора для маркирования моих входных данных. Вот код класса класса Роберта(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  

Когда я вызываю функцию tokenize_and_filter в своей модели трансформатора, как показано ниже

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

и я пытаюсь распечатать маркированные данные, я получаю это сообщение:

 lt;bound method Roberta.tokenize_and_filter of lt;MyTokenizer.Roberta.Roberta object at   0x000002779A9E4D30gt;gt;  

Похоже, что функция возвращает метод вместо списка или тензора — я пытался передать параметр ‘return_tensors=’tf», я пытался использовать метод tokenizer.encode (), я пробовал как с автотокенизатором, так и с RobertaTokenizer, я пробовал метод batch_encode_plus (), кажется, ничего не работает.

Пожалуйста, помогите!

Комментарии:

1. в чем заключается ошибка?

2. вы не вызываете функцию tokenize_and_filter , а только назначаете ее. Для чего предназначен вывод self.get_tokenizer().tokenize_and_filter() (обратите внимание на дополнительное () в конце)?

3. @dennlinger да, я понял сегодня утром :фейспалм -спасибо!

Ответ №1:

похоже, это была действительно глупая ошибка с моей стороны, я забыл поставить круглые скобки при вызове функции

 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()  

и это работает следующим образом 🙂