robertuito
robertuito copied to clipboard
Model fails with index out of range in self when used on a text-classification pipeline
Steps to reproduce
nlp = pipeline("text-classification", "pysentimiento/robertuito-sentiment-analysis")
nlp("long text"*300)
IndexError Traceback (most recent call last)
Input In [23], in <cell line: 1>()
----> 1 nlp("long text"*300)
File /opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py:125, in TextClassificationPipeline.__call__(self, *args, **kwargs)
[92](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=91) def __call__(self, *args, **kwargs):
[93](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=92) """
[94](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=93) Classify the text(s) given as inputs.
[95](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=94)
(...)
[123](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=122) If `self.return_all_scores=True`, one such dictionary is returned per label.
[124](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=123) """
--> [125](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=124) result = super().__call__(*args, **kwargs)
[126](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=125) if isinstance(args[0], str):
[127](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=126) # This pipeline is odd, and return a list when single item is run
[128](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=127) return [result]
File /opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py:1027, in Pipeline.__call__(self, inputs, num_workers, batch_size, *args, **kwargs)
[1025](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=1024) return self.iterate(inputs, preprocess_params, forward_params, postprocess_params)
[1026](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=1025) else:
-> [1027](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=1026) return self.run_single(inputs, preprocess_params, forward_params, postprocess_params)
File /opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py:1034, in Pipeline.run_single(self, inputs, preprocess_params, forward_params, postprocess_params)
[1032](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=1031) def run_single(self, inputs, preprocess_params, forward_params, postprocess_params):
[1033](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=1032) model_inputs = self.preprocess(inputs, **preprocess_params)
-> [1034](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=1033) model_outputs = self.forward(model_inputs, **forward_params)
[1035](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=1034) outputs = self.postprocess(model_outputs, **postprocess_params)
[1036](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=1035) return outputs
File /opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py:944, in Pipeline.forward(self, model_inputs, **forward_params)
[942](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=941) with inference_context():
[943](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=942) model_inputs = self._ensure_tensor_on_device(model_inputs, device=self.device)
--> [944](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=943) model_outputs = self._forward(model_inputs, **forward_params)
[945](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=944) model_outputs = self._ensure_tensor_on_device(model_outputs, device=torch.device("cpu"))
[946](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/base.py?line=945) else:
File /opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py:137, in TextClassificationPipeline._forward(self, model_inputs)
[136](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=135) def _forward(self, model_inputs):
--> [137](file:///opt/conda/lib/python3.8/site-packages/transformers/pipelines/text_classification.py?line=136) return self.model(**model_inputs)
File /opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py:1102, in Module._call_impl(self, *input, **kwargs)
[1098](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1097) # If we don't have any hooks, we want to skip the rest of the logic in
[1099](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1098) # this function, and just call forward.
[1100](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1099) if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
[1101](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1100) or _global_forward_hooks or _global_forward_pre_hooks):
-> [1102](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1101) return forward_call(*input, **kwargs)
[1103](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1102) # Do not call functions when jit is used
[1104](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1103) full_backward_hooks, non_full_backward_hooks = [], []
File /opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py:1204, in RobertaForSequenceClassification.forward(self, input_ids, attention_mask, token_type_ids, position_ids, head_mask, inputs_embeds, labels, output_attentions, output_hidden_states, return_dict)
[1196](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1195) r"""
[1197](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1196) labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
[1198](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1197) Labels for computing the sequence classification/regression loss. Indices should be in `[0, ...,
[1199](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1198) config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
[1200](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1199) `config.num_labels > 1` a classification loss is computed (Cross-Entropy).
[1201](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1200) """
[1202](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1201) return_dict = return_dict if return_dict is not None else self.config.use_return_dict
-> [1204](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1203) outputs = self.roberta(
[1205](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1204) input_ids,
[1206](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1205) attention_mask=attention_mask,
[1207](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1206) token_type_ids=token_type_ids,
[1208](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1207) position_ids=position_ids,
[1209](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1208) head_mask=head_mask,
[1210](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1209) inputs_embeds=inputs_embeds,
[1211](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1210) output_attentions=output_attentions,
[1212](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1211) output_hidden_states=output_hidden_states,
[1213](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1212) return_dict=return_dict,
[1214](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1213) )
[1215](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1214) sequence_output = outputs[0]
[1216](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=1215) logits = self.classifier(sequence_output)
File /opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py:1102, in Module._call_impl(self, *input, **kwargs)
[1098](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1097) # If we don't have any hooks, we want to skip the rest of the logic in
[1099](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1098) # this function, and just call forward.
[1100](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1099) if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
[1101](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1100) or _global_forward_hooks or _global_forward_pre_hooks):
-> [1102](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1101) return forward_call(*input, **kwargs)
[1103](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1102) # Do not call functions when jit is used
[1104](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1103) full_backward_hooks, non_full_backward_hooks = [], []
File /opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py:843, in RobertaModel.forward(self, input_ids, attention_mask, token_type_ids, position_ids, head_mask, inputs_embeds, encoder_hidden_states, encoder_attention_mask, past_key_values, use_cache, output_attentions, output_hidden_states, return_dict)
[836](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=835) # Prepare head mask if needed
[837](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=836) # 1.0 in head_mask indicate we keep the head
[838](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=837) # attention_probs has shape bsz x n_heads x N x N
[839](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=838) # input head_mask has shape [num_heads] or [num_hidden_layers x num_heads]
[840](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=839) # and head_mask is converted to shape [num_hidden_layers x batch x num_heads x seq_length x seq_length]
[841](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=840) head_mask = self.get_head_mask(head_mask, self.config.num_hidden_layers)
--> [843](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=842) embedding_output = self.embeddings(
[844](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=843) input_ids=input_ids,
[845](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=844) position_ids=position_ids,
[846](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=845) token_type_ids=token_type_ids,
[847](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=846) inputs_embeds=inputs_embeds,
[848](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=847) past_key_values_length=past_key_values_length,
[849](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=848) )
[850](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=849) encoder_outputs = self.encoder(
[851](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=850) embedding_output,
[852](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=851) attention_mask=extended_attention_mask,
(...)
[860](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=859) return_dict=return_dict,
[861](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=860) )
[862](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=861) sequence_output = encoder_outputs[0]
File /opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py:1102, in Module._call_impl(self, *input, **kwargs)
[1098](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1097) # If we don't have any hooks, we want to skip the rest of the logic in
[1099](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1098) # this function, and just call forward.
[1100](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1099) if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
[1101](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1100) or _global_forward_hooks or _global_forward_pre_hooks):
-> [1102](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1101) return forward_call(*input, **kwargs)
[1103](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1102) # Do not call functions when jit is used
[1104](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1103) full_backward_hooks, non_full_backward_hooks = [], []
File /opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py:136, in RobertaEmbeddings.forward(self, input_ids, token_type_ids, position_ids, inputs_embeds, past_key_values_length)
[134](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=133) embeddings = inputs_embeds + token_type_embeddings
[135](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=134) if self.position_embedding_type == "absolute":
--> [136](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=135) position_embeddings = self.position_embeddings(position_ids)
[137](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=136) embeddings += position_embeddings
[138](file:///opt/conda/lib/python3.8/site-packages/transformers/models/roberta/modeling_roberta.py?line=137) embeddings = self.LayerNorm(embeddings)
File /opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py:1102, in Module._call_impl(self, *input, **kwargs)
[1098](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1097) # If we don't have any hooks, we want to skip the rest of the logic in
[1099](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1098) # this function, and just call forward.
[1100](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1099) if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
[1101](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1100) or _global_forward_hooks or _global_forward_pre_hooks):
-> [1102](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1101) return forward_call(*input, **kwargs)
[1103](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1102) # Do not call functions when jit is used
[1104](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/module.py?line=1103) full_backward_hooks, non_full_backward_hooks = [], []
File /opt/conda/lib/python3.8/site-packages/torch/nn/modules/sparse.py:158, in Embedding.forward(self, input)
[157](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/sparse.py?line=156) def forward(self, input: Tensor) -> Tensor:
--> [158](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/sparse.py?line=157) return F.embedding(
[159](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/sparse.py?line=158) input, self.weight, self.padding_idx, self.max_norm,
[160](file:///opt/conda/lib/python3.8/site-packages/torch/nn/modules/sparse.py?line=159) self.norm_type, self.scale_grad_by_freq, self.sparse)
File /opt/conda/lib/python3.8/site-packages/torch/nn/functional.py:2044, in embedding(input, weight, padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse)
[2038](file:///opt/conda/lib/python3.8/site-packages/torch/nn/functional.py?line=2037) # Note [embedding_renorm set_grad_enabled]
[2039](file:///opt/conda/lib/python3.8/site-packages/torch/nn/functional.py?line=2038) # XXX: equivalent to
[2040](file:///opt/conda/lib/python3.8/site-packages/torch/nn/functional.py?line=2039) # with torch.no_grad():
[2041](file:///opt/conda/lib/python3.8/site-packages/torch/nn/functional.py?line=2040) # torch.embedding_renorm_
[2042](file:///opt/conda/lib/python3.8/site-packages/torch/nn/functional.py?line=2041) # remove once script supports set_grad_enabled
[2043](file:///opt/conda/lib/python3.8/site-packages/torch/nn/functional.py?line=2042) _no_grad_embedding_renorm_(weight, input, max_norm, norm_type)
-> [2044](file:///opt/conda/lib/python3.8/site-packages/torch/nn/functional.py?line=2043) return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
IndexError: index out of range in self
Hmmmm, strange. As far as I can see on tokenizer.json, there is a max_length
set. Let me check it
Do not understand why this fails, as the tokenizer has the model_max_len
property set. Please report on transformers
.