如何在PyTorch中找到文本分类模型标签结果的(最重要的)负责单词/令牌/嵌入。

3
假设我有一个像下面这样的模型:

class BERT_Subject_Classifier(nn.Module):

    def __init__(self,out_classes,hidden1=128,hidden2=32,dropout_val=0.2):
      super(BERT_Subject_Classifier, self).__init__()

      self.hidden1 = hidden1
      self.hidden2 = hidden2
      self.dropout_val = dropout_val
      self.logits = logit
      self.bert = AutoModel.from_pretrained('bert-base-uncased')
      self.out_classes = out_classes
      self.unfreeze_n = unfreeze_n # make the last n layers trainable
      
      self.dropout = nn.Dropout(self.dropout_val)
      self.relu =  nn.ReLU()
      self.fc1 = nn.Linear(768,self.hidden1)
      self.fc2 = nn.Linear(self.hidden1,self.hidden2)
      self.fc3 = nn.Linear(self.hidden2,self.out_classes)

    def forward(self, sent_id, mask):
      _, cls_hs = self.bert(sent_id, attention_mask=mask)
      x = self.fc1(cls_hs)
      x = self.relu(x)
      x = self.dropout(x)
      x = self.fc2(x)
      x = self.dropout(x)
      return self.fc3(x)

我训练了我的模型,对于一个新的数据点 x = ['My Name is Slim Shady'],我得到了标签结果为3

我的问题是如何检查哪些单词在句子中负责分类?我想说它可以是任何一组单词。是否有库或方法来检查功能?就像论文和Tensorflow Implementation of show Attend and Tell所示,您可以获取模型关注的图像区域。我如何在文本中做到这一点?


我不知道这个方法 - 所以我会测试更短的句子 - '我的是Slim Shady''我的名字Slim Shady''我的名字是Shady'等等,然后再去掉两个词的句子等等。也许通过这种方式,我可以确定哪个词(或词组)能够得到更好的结果。 - furas
1
我们可以通过检查每一层的输出并获取梯度热图,然后将其叠加在图像上来实现对图像的相同操作,具体操作可参考此博客 - Deshwal
1个回答

2

非常感谢您的帮助。您能告诉我用于文本的方法吗?对于图像来说,它是显著性地图 - Deshwal
我相信答案是综合梯度。 - sbecon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接