Вопрос измерения важности маркера BERT. Град нет - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь измерить важность токена для BERT путем сравнения значения градуса встраивания токена. Итак, чтобы получить оценку, я скопировал 2.8.0 форвард BertModel и немного его изменил:

huggingface transformers 2.8.0 BERT https://github.com/huggingface/transformers/blob/11c3257a18c4b5e1a3c1746eefd96f180358397b/src/transformers/modeling_bert.py

Код:

        embedding_output = self.embeddings(
            input_ids=input_ids, position_ids=position_ids, token_type_ids=token_type_ids, inputs_embeds=inputs_embeds
        )
        embedding_output = embedding_output.requires_grad_(True) # my code
        encoder_outputs = self.encoder(
            embedding_output,
            attention_mask=extended_attention_mask,
            head_mask=head_mask,
            encoder_hidden_states=encoder_hidden_states,
            encoder_attention_mask=encoder_extended_attention_mask,
        )
        sequence_output = encoder_outputs[0]
        sequence_output.mean().backward() # my code
        assert(embedding_output.grad is not None) # my code

Colab ссылка: https://colab.research.google.com/drive/1MggBUaDWAAZNuXbTDM11E8jvdMGEkuRD Но это дает ошибку утверждения. Я не понимаю, почему, и, похоже, это ошибка для меня. Пожалуйста, помогите!

1 Ответ

2 голосов
/ 22 апреля 2020

Мне нужно было добавить эту строку:

embedding_output = torch.tensor(embedding_output, requires_grad=True)

Кажется, я неправильно использовал метод .requires_grad_.

...