如何在 PyTorch 中找到负责文本分类模型标签结果的(最重要的)负责的 Words/Tokens/embeddings
How to find the (Most important) responsible Words/ Tokens/ embeddings responsible for the label result of a text classification model in PyTorch
让我们假设我有一个像这样的模型:
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
。
我的问题是如何检查句子中的哪些词负责分类?我的意思是它可以是任何单词的集合。有没有库或方法来检查功能?正如论文和 show Attend and Tell
的 Tensorflow Implementation 所示,您可以获得模型关注的图像区域。我怎样才能为文本做到这一点?
当然可以。证明哪些词具有最大影响的一种方法是通过集成梯度方法。对于 PyTorch,您可以使用的一个软件包是 Captum。我会查看此页面以获取一个很好的示例:https://captum.ai/tutorials/IMDB_TorchText_Interpret
对于 Tensorflow,您可以使用的一个包是 Seldon。我会查看此页面以获取一个很好的示例:
https://docs.seldon.io/projects/alibi/en/stable/examples/integrated_gradients_imdb.html
让我们假设我有一个像这样的模型:
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
。
我的问题是如何检查句子中的哪些词负责分类?我的意思是它可以是任何单词的集合。有没有库或方法来检查功能?正如论文和 show Attend and Tell
的 Tensorflow Implementation 所示,您可以获得模型关注的图像区域。我怎样才能为文本做到这一点?
当然可以。证明哪些词具有最大影响的一种方法是通过集成梯度方法。对于 PyTorch,您可以使用的一个软件包是 Captum。我会查看此页面以获取一个很好的示例:https://captum.ai/tutorials/IMDB_TorchText_Interpret
对于 Tensorflow,您可以使用的一个包是 Seldon。我会查看此页面以获取一个很好的示例: https://docs.seldon.io/projects/alibi/en/stable/examples/integrated_gradients_imdb.html