Pytorch 从BertForSequenceClassification获取特征向量

Pytorch 从BertForSequenceClassification获取特征向量,pytorch,embedding,bert-language-model,Pytorch,Embedding,Bert Language Model,我已经成功地使用BertForSequenceClassificationfrom构建了一个情绪分析工具,将$tsla推文分类为正面或负面 然而,我不知道如何从我的优化模型中获得每条tweet的特征向量(更具体地说是嵌入[CLS]) 有关所用型号的更多信息: model = BertForSequenceClassification.from_pretrained(OUTPUT_DIR, num_labels=num_labels) model.config.output_hidden_stat

我已经成功地使用
BertForSequenceClassification
from构建了一个情绪分析工具,将$tsla推文分类为正面或负面

然而,我不知道如何从我的优化模型中获得每条tweet的特征向量(更具体地说是嵌入
[CLS]

有关所用型号的更多信息:

model = BertForSequenceClassification.from_pretrained(OUTPUT_DIR, num_labels=num_labels)
model.config.output_hidden_states = True
tokenizer = BertTokenizer(OUTPUT_DIR+'vocab.txt')
但是,当我运行
输出下的代码时
变量只包含logits

model.eval()
eval_loss = 0
nb_eval_steps = 0
preds = []

for input_ids, input_mask, segment_ids, label_ids in tqdm_notebook(eval_dataloader, desc="Evaluating"):
    input_ids = input_ids.to(device)
    input_mask = input_mask.to(device)
    segment_ids = segment_ids.to(device)
    label_ids = label_ids.to(device)

    with torch.no_grad():
        output = model(input_ids,token_type_ids= segment_ids,attention_mask= input_mask)

BertForSequenceClassification
是一个包装器,由两部分组成:BERT模型(attribute
BERT
)和分类器(attribute
classifier


您可以直接调用下属伯特模型。如果您将输入直接传递给它,您将获得隐藏状态。它返回一个元组:元组的第一个成员都是隐藏状态,第二个是
[CLS]
向量。

在微调BertForSequenceClassification后,我也有这个问题。我知道您的目的是获取[CLS]的隐藏状态作为每条推文的表示。对吗?根据的指示,我认为代码是:

model=BertForSequenceClassification.from\u pretrained(输出\u DIR,输出\u hidden\u states=True)
logits,hidden_states=模型(输入ID,附件掩码)
cls_hidden_state=隐藏_状态[-1][:,0,:]#最后一层中的第一个隐藏状态

model=BertForSequenceClassification.from\u pretrained(输出\u DIR,输出\u hidden\u states=True)
最后隐藏的状态=model.bert(输入ID、附件掩码)[0]
cls_hidden_state=上次_hidden_states[:,0,:]

谢谢您的回答。我尝试了您的解决方案(请参阅更新问题),但它只提供了登录。你现在知道问题出在哪里了吗?没关系,我使用的是pytorch transformers的旧版本,它不允许将隐藏状态设置为true:)。我现在可以把它们取出来了。非常感谢。