【问题标题】:Confusion in understanding the output of BERTforTokenClassification class from Transformers library从 Transformers 库中理解 BERTforTokenClassification 类的输出的困惑
【发布时间】:2020-07-05 21:46:32
【问题描述】:

是transformers pytorch库文档中给出的例子

from transformers import BertTokenizer, BertForTokenClassification
import torch

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForTokenClassification.from_pretrained('bert-base-uncased', 
                      output_hidden_states=True, output_attentions=True)

input_ids = torch.tensor(tokenizer.encode("Hello, my dog is cute", 
                         add_special_tokens=True)).unsqueeze(0)  # Batch size 1
labels = torch.tensor([1] * input_ids.size(1)).unsqueeze(0)  # Batch size 1
outputs = model(input_ids, labels=labels)

loss, scores, hidden_states,attentions = outputs

这里的hidden_states 是一个长度为 13 的元组,包含模型在每一层输出的隐藏状态以及初始嵌入输出。我想知道,hidden_​​states[0] 还是 hidden_​​states[12] 代表最终的隐藏状态向量

【问题讨论】:

  • 您能指定您使用的是哪个版本的拥抱脸转换器吗?对于 2.6 版,我只会为您的示例代码获得两个输出。
  • 我在加载模型时忘记指定output_hidden_states=Trueoutput_attentions=True。对不起。当您包含这两个参数时,它将返回四个输出。 @dennlinger

标签: nlp pytorch huggingface-transformers bert-language-model


【解决方案1】:

如果您查看源代码,特别是 BertEncoder,您可以看到返回的状态被初始化为一个空元组,然后在每个层的每次迭代中简单地附加。

最后一层作为最后一个元素添加这个循环之后,参见here,所以我们可以安全地假设hidden_states[12]是最终的向量。

【讨论】:

  • 你提供的两个链接,@dennlinger,现在都坏了......
  • 感谢您的提示,我相应地更新了链接!
猜你喜欢
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2013-10-14
相关资源
最近更新 更多