【问题标题】:Get feature vectors from BertForSequenceClassification从 BertForSequenceClassification 获取特征向量
【发布时间】:2020-02-04 20:21:30
【问题描述】:

我已经成功地使用来自huggingface/transformersBertForSequenceClassification 构建了一个情绪分析工具,以将$tsla 推文分类为正面或负面。

但是,我不知道如何从我的微调模型中获取每条推文的特征向量(更具体地说是 [CLS] 的嵌入)。

更多二手型号信息:

model = BertForSequenceClassification.from_pretrained(OUTPUT_DIR, num_labels=num_labels)
model.config.output_hidden_states = True
tokenizer = BertTokenizer(OUTPUT_DIR+'vocab.txt')

但是,当我运行output 变量下方的代码时,它只包含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)

【问题讨论】:

    标签: pytorch embedding bert-language-model


    【解决方案1】:

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

    model = BertForSequenceClassification.from_pretrained(OUTPUT_DIR, output_hidden_states=True)
    logits, hidden_states = model(input_ids, attn_masks)
    cls_hidden_state = hidden_states[-1][:, 0, :] # the first hidden state in last layer
    

    model = BertForSequenceClassification.from_pretrained(OUTPUT_DIR, output_hidden_states=True)
    last_hidden_states = model.bert(input_ids, attn_masks)[0]
    cls_hidden_state = last_hidden_states[:, 0, :]
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的回答。我尝试了您的解决方案(请参阅更新问题),但它只给出了 logits。你现在有什么问题吗?
      • 没关系,我使用的是旧版本的 pytorch 转换器,它不允许将隐藏状态设置为 true :)。我现在能够提取它们。谢谢。
      猜你喜欢
      • 2021-06-23
      • 1970-01-01
      • 2022-01-05
      • 2015-11-01
      • 2017-09-27
      • 2017-04-30
      • 1970-01-01
      • 2019-04-02
      • 2016-04-02
      相关资源
      最近更新 更多