-
Notifications
You must be signed in to change notification settings - Fork 99
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Text attribution fails for XLM-Roberta models #123
Comments
I'm getting the same error also on CamemBERT (which is based on RoBERTa). |
@nishantgurunath , Have you managed to solve this issue? I am getting the same error on XLNet base. Here is how to reproduce the error:from transformers import AutoModelForSequenceClassification, AutoTokenizer model_name = "xlnet-base-cased" from transformers_interpret import SequenceClassificationExplainer word_attributions = cls_explainer("I love you and I like you.") |
Having the same issue for the fine-tuned xlm-roberta: IndexError: index out of range in self |
I've managed to solve the problem it seems. But in the code of explainer.py in the function def _make_input_reference_token_type_pair(
self, input_ids: torch.Tensor, sep_idx: int = 0
) -> Tuple[torch.Tensor, torch.Tensor]:
"""
Returns two tensors indicating the corresponding token types for the `input_ids`
and a corresponding all zero reference token type tensor.
Args:
input_ids (torch.Tensor): Tensor of text converted to `input_ids`
sep_idx (int, optional): Defaults to 0.
Returns:
Tuple[torch.Tensor, torch.Tensor]
"""
seq_len = input_ids.size(1)
token_type_ids = torch.tensor([0 if i <= sep_idx else 1 for i in range(seq_len)], device=self.device).expand_as(
input_ids
)
ref_token_type_ids = torch.zeros_like(token_type_ids, device=self.device).expand_as(input_ids)
return (token_type_ids, ref_token_type_ids) Tensor is created with 0, except for the sep_idx position (in my case it was the last token), where it is 1. So just change the function to something like this. def _make_input_reference_token_type_pair(
self, input_ids: torch.Tensor, sep_idx: int = 0
) -> Tuple[torch.Tensor, torch.Tensor]:
"""
Returns two tensors indicating the corresponding token types for the `input_ids`
and a corresponding all zero reference token type tensor.
Args:
input_ids (torch.Tensor): Tensor of text converted to `input_ids`
sep_idx (int, optional): Defaults to 0.
Returns:
Tuple[torch.Tensor, torch.Tensor]
"""
seq_len = input_ids.size(1)
if self.model.config.model_type == 'xlm-roberta':
token_type_ids = torch.zeros(seq_len, dtype=torch.int, device=self.device).expand_as(input_ids)
else:
token_type_ids = torch.tensor([0 if i <= sep_idx else 1 for i in range(seq_len)], device=self.device).expand_as(
input_ids
)
ref_token_type_ids = torch.zeros_like(token_type_ids, device=self.device).expand_as(input_ids)
return (token_type_ids, ref_token_type_ids) |
Can this small change be promoted to the main track please? I have now spent half day looking for a problem until I found this unclosed issue which solves otherwise mysterious CUDA errors. |
Issue:
I was testing the package on huggingface "xlm-roberta-base" model and it failed with the following error.
IndexError: index out of range in self
Here's how to reproduce the error:
The text was updated successfully, but these errors were encountered: