Skip to content
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

Trouble when used on a fine-tuned on my own dataset: TypeError: argument after ** must be a mapping, not Tensor #149

Open
Novampe opened this issue Sep 9, 2024 · 0 comments

Comments

@Novampe
Copy link

Novampe commented Sep 9, 2024

I fine-tuned a Huggingface model (hfl/chinese-roberta-wwm-ext) to do sequence classification task on my own dataset. The fine-tuning process followed the official getting-started guide (https://transformers.run/) and the fine-tuned model ran successfully completed the sequence classification task. I am now seeking to do interpretable analysis with this package but there are some problems. I would greatly appreciate any help or insights that anyone could provide regarding this issue.

Here is part of my code. I firstly instantiated a model and loaded the weights from the saved fine-tuned model. I also loaded the pretrained tokenizer:

class BertForClas(BertPreTrainedModel):
    def __init__(self, config):
        super().__init__(config)
        self.bert = BertModel(config, add_pooling_layer=False)
        self.dropout = nn.Dropout(config.hidden_dropout_prob)
        self.classifier = nn.Linear(768, 2)
        self.post_init()
    
    def forward(self, x):
        bert_output = self.bert(**x)
        cls_vectors = bert_output.last_hidden_state[:, 0, :]
        cls_vectors = self.dropout(cls_vectors)
        logits = self.classifier(cls_vectors)
        return logits

model_0 = BertForClas(config).to(device)
model_0.load_state_dict(torch.load("/path_of_my_finetuned_model.bin"))

tokenizer = BertTokenizerFast.from_pretrained("/path_of_the_downloaded_original_model")

Then I made an explainer and tried:

cls_explainer = SequenceClassificationExplainer(model_0, tokenizer)
text = 'I love you, I like you'
word_attributions = cls_explainer(text)

Here I got the error:


  File /this_code.py:186 in forward
    bert_output = self.bert(**x)

TypeError: BertModel(
  (embeddings): BertEmbeddings(
    (word_embeddings): Embedding(21128, 768, padding_idx=0)
    (position_embeddings): Embedding(512, 768)
    (token_type_embeddings): Embedding(2, 768)
    (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)
    (dropout): Dropout(p=0.1, inplace=False)
  )
  (encoder): BertEncoder(
    (layer): ModuleList(
      (0-11): 12 x BertLayer(
        (attention): BertAttention(
          (self): BertSdpaSelfAttention(
            (query): Linear(in_features=768, out_features=768, bias=True)
            (key): Linear(in_features=768, out_features=768, bias=True)
            (value): Linear(in_features=768, out_features=768, bias=True)
            (dropout): Dropout(p=0.1, inplace=False)
          )
          (output): BertSelfOutput(
            (dense): Linear(in_features=768, out_features=768, bias=True)
            (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)
            (dropout): Dropout(p=0.1, inplace=False)
          )
        )
        (intermediate): BertIntermediate(
          (dense): Linear(in_features=768, out_features=3072, bias=True)
          (intermediate_act_fn): GELUActivation()
        )
        (output): BertOutput(
          (dense): Linear(in_features=3072, out_features=768, bias=True)
          (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)
          (dropout): Dropout(p=0.1, inplace=False)
        )
      )
    )
  )
) argument after ** must be a mapping, not Tensor

I guess the inputed text was not converted by the tokenizer into the mapping format ({input_ids, attention_mask, token_type_ids}), but I have no idea how to fix this. Any assistance or guidance on this matter would be greatly appreciated!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant