如何理解 BertModel 中返​​回的隐藏状态?(huggingface-transformers)

isl*_*287 16 nlp pytorch bert-language-model electrate huggingface-transformers

\n

返回last_hidden_​​state(torch.FloatTensor,形状为(batch_size,\n sequence_length,hidden_​​size)):模型最后一层输出的隐藏状态序列。

\n\n

pooler_output (torch.FloatTensor: of shape (batch_size, hide_size)):\n 序列第一个标记的最后一层隐藏状态\n(分类标记)由线性层和 Tanh\n 激活函数进一步处理。线性层权重是在预训练期间根据下一个句子预测(分类)目标进行训练的。

\n\n

此输出通常不是输入语义内容的良好摘要,对整个输入序列的隐藏状态序列进行平均或池化通常会更好。

\n\n

hidden_​​states(tuple(torch.FloatTensor),可选,当 config.output_hidden_​​states=True 时返回):形状的 torch.FloatTensor 元组(一个用于\n 嵌入的输出 + 一个用于\n 每层的输出) (批量大小、序列长度、隐藏大小)。

\n\n

每层输出处模型的隐藏状态加上初始嵌入输出。

\n\n

注意(tuple(torch.FloatTensor),可选,当 config.output_attentions=True 时返回):torch.FloatTensor 的元组(每层一个),形状(batch_size、num_heads、sequence_length、sequence_length)。

\n\n

注意力权重位于注意力softmax之后,用于计算自注意力头中的加权平均值。

\n
\n\n

这是来自https://huggingface.co/transformers/model_doc/bert.html#bertmodel。虽然文档中描述的很清楚,但是我还是不明白returns的hidden_​​states。有一个元组,一个用于嵌入的输出,另一个用于每一层的输出。\n请告诉我如何区分它们,或者它们的含义是什么?非常感谢!![眨眼~

\n

Moh*_*fin 21

hidden_​​states (tuple(torch.FloatTensor),可选,当 config.output_hidden_​​states=True 时返回):形状(batch_size、sequence_length、hidden_​​size)的 torch.FloatTensor 的元组(一个用于嵌入的输出,一个用于每一层的输出) )。

每层输出处模型的隐藏状态加上初始嵌入输出。

对于给定的标记,其输入表示是通过对相应的标记嵌入、分段嵌入和位置嵌入求和来构造的。该输入表示称为初始嵌入输出,可以在index 0元组hidden_​​states中找到。该图解释了如何计算嵌入。 在此输入图像描述

元组中剩余的 12 个元素包含相应隐藏层的输出。例如:最后一个隐藏层可以在 处找到index 12,它是元组中的第13 项。初始嵌入输出和隐藏状态的维度均为[batch_size, sequence_length, hidden_size]将hidden_​​states的索引自下而上与 BERT 论文中的图像进行比较会很有用。

在此输入图像描述


小智 5

last_hidden_state包含批次的每个序列中每个标记的隐藏表示。所以尺寸是(batch_size, seq_len, hidden_size). 您可以参考CLS 隐藏状态和 pooled_output 之间的差异以获得更多说明。


isl*_*287 2

我在这个元组的长度中找到了答案。长度为(1+num_layers)。并且最后一层的输出与embedding输出不同,因为层输出加上初始embedding。:D