I've been trying to use transformers-interpret library and have been successful in getting the results for facebook's BART model, but not for the RoBERTa. My code goes as follows for the BART model :
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from transformers_interpret import ZeroShotClassificationExplainer
tokenizer_zeroshot = AutoTokenizer.from_pretrained("facebook/bart-large-mnli")
model_zeroshot = AutoModelForSequenceClassification.from_pretrained("facebook/bart-large-mnli")
zero_shot_explainer_1 = ZeroShotClassificationExplainer(model_zeroshot, tokenizer_zeroshot)
word_attributions = zero_shot_explainer_1(
"reporter : mr . trump , how are you planning on making america great again ? trump : it 's simple ... # trump # parody # meme # funny # rt emoji_1942",
labels = ["ironic", "non-ironic"],
)
html = zero_shot_explainer_1.visualize()
which works perfectly fine, giving me output that I want.
But when I try to use the following code :
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from transformers_interpret import ZeroShotClassificationExplainer
tokenizer = AutoTokenizer.from_pretrained("roberta-large-mnli")
model = AutoModelForSequenceClassification.from_pretrained("roberta-large-mnli")
zero_shot_explainer = ZeroShotClassificationExplainer(model, tokenizer)
word_attributions = zero_shot_explainer(
"reporter : mr . trump , how are you planning on making america great again ? trump : it 's simple ... # trump # parody # meme # funny # rt emoji_1942",
labels = ["ironic", "non-ironic"],
)
I get following errors,
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-14-a7052a056405> in <module>()
1 word_attributions = zero_shot_explainer(
2 "reporter : mr . trump , how are you planning on making america great again ? trump : it 's simple ... # trump # parody # meme # funny # rt emoji_1942",
----> 3 labels = ["ironic", "non-ironic"],
4 )
11 frames
/usr/local/lib/python3.7/dist-packages/transformers_interpret/explainers/zero_shot_classification.py in __call__(self, text, labels, embedding_type, hypothesis_template, include_hypothesis, internal_batch_size, n_steps)
290 self.hypothesis_labels = [hypothesis_template.format(label) for label in labels]
291
--> 292 predicted_text_idx = self._get_top_predicted_label_idx(text, self.hypothesis_labels)
293
294 for i, _ in enumerate(self.labels):
/usr/local/lib/python3.7/dist-packages/transformers_interpret/explainers/zero_shot_classification.py in _get_top_predicted_label_idx(self, text, hypothesis_labels)
135 token_type_ids, _ = self._make_input_reference_token_type_pair(input_ids, sep_idx)
136 attention_mask = self._make_attention_mask(input_ids)
--> 137 preds = self._get_preds(input_ids, token_type_ids, position_ids, attention_mask)
138 entailment_outputs.append(float(torch.sigmoid(preds[0])[0][self.entailment_idx]))
139
/usr/local/lib/python3.7/dist-packages/transformers_interpret/explainers/question_answering.py in _get_preds(self, input_ids, token_type_ids, position_ids, attention_mask)
204 token_type_ids=token_type_ids,
205 position_ids=position_ids,
--> 206 attention_mask=attention_mask,
207 )
208
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
1128 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
1129 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1130 return forward_call(*input, **kwargs)
1131 # Do not call functions when jit is used
1132 full_backward_hooks, non_full_backward_hooks = [], []
/usr/local/lib/python3.7/dist-packages/transformers/models/roberta/modeling_roberta.py in forward(self, input_ids, attention_mask, token_type_ids, position_ids, head_mask, inputs_embeds, labels, output_attentions, output_hidden_states, return_dict)
1213 output_attentions=output_attentions,
1214 output_hidden_states=output_hidden_states,
-> 1215 return_dict=return_dict,
1216 )
1217 sequence_output = outputs[0]
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
1128 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
1129 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1130 return forward_call(*input, **kwargs)
1131 # Do not call functions when jit is used
1132 full_backward_hooks, non_full_backward_hooks = [], []
/usr/local/lib/python3.7/dist-packages/transformers/models/roberta/modeling_roberta.py in 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)
844 token_type_ids=token_type_ids,
845 inputs_embeds=inputs_embeds,
--> 846 past_key_values_length=past_key_values_length,
847 )
848 encoder_outputs = self.encoder(
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
1128 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
1129 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1130 return forward_call(*input, **kwargs)
1131 # Do not call functions when jit is used
1132 full_backward_hooks, non_full_backward_hooks = [], []
/usr/local/lib/python3.7/dist-packages/transformers/models/roberta/modeling_roberta.py in forward(self, input_ids, token_type_ids, position_ids, inputs_embeds, past_key_values_length)
127 if inputs_embeds is None:
128 inputs_embeds = self.word_embeddings(input_ids)
--> 129 token_type_embeddings = self.token_type_embeddings(token_type_ids)
130
131 embeddings = inputs_embeds + token_type_embeddings
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
1128 if not (self._backward_hooks or self._forward_hooks or self._forward_pre_hooks or _global_backward_hooks
1129 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1130 return forward_call(*input, **kwargs)
1131 # Do not call functions when jit is used
1132 full_backward_hooks, non_full_backward_hooks = [], []
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/sparse.py in forward(self, input)
158 return F.embedding(
159 input, self.weight, self.padding_idx, self.max_norm,
--> 160 self.norm_type, self.scale_grad_by_freq, self.sparse)
161
162 def extra_repr(self) -> str:
/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py in embedding(input, weight, padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse)
2197 # remove once script supports set_grad_enabled
2198 _no_grad_embedding_renorm_(weight, input, max_norm, norm_type)
-> 2199 return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
2200
2201
IndexError: index out of range in self
Can anyone explain what's this error about, It would be of great help!