在理解 BERTforTokenClassification class 来自 Transformers 库的输出时感到困惑
Confusion in understanding the output of BERTforTokenClassification class from Transformers library
是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] 是否代表最终的隐藏状态向量?
如果您查看源代码,特别是 BertEncoder
,您可以看到返回的状态被初始化为一个空元组,然后在每一层的每次迭代中简单地附加。
最后一层附加为最后一个元素在这个循环之后,参见here,所以我们可以安全地假设hidden_states[12]
是最终向量.
是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] 是否代表最终的隐藏状态向量?
如果您查看源代码,特别是 BertEncoder
,您可以看到返回的状态被初始化为一个空元组,然后在每一层的每次迭代中简单地附加。
最后一层附加为最后一个元素在这个循环之后,参见here,所以我们可以安全地假设hidden_states[12]
是最终向量.