【问题标题】:How to understand hidden_states of the returns in BertModel?(huggingface-transformers)如何理解 BertModel 中回报的 hidden_​​states?(huggingface-transformers)
【发布时间】:2020-08-03 00:34:35
【问题描述】:

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

pooler_output (torch.FloatTensor: 形状 (batch_size, hidden_​​size)): 序列的第一个标记的最后一层隐藏状态 (分类标记)由线性层和 Tanh 进一步处理 激活函数。线性层权重是从 下一句预测(分类)目标在 预训练。

这个输出通常不能很好地概括语义内容 输入,你通常会更好地对序列进行平均或池化 整个输入序列的隐藏状态。

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

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

attentions(tuple(torch.FloatTensor),可选,当返回 config.output_attentions=True):torch.FloatTensor 的元组(一个用于 每层)的形状(batch_size,num_heads,sequence_length, 序列长度)。

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

【解决方案2】:

hidden_​​states (tuple(torch.FloatTensor), 可选, config.output_hidden_​​states=True 时返回): 形状为 (batch_size,序列长度,隐藏大小)。

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

对于给定的token,其输入表示是通过对相应的token embedding、segment embedding和位置embedding求和来构造的。这个输入表示称为初始嵌入输出,可以在 hidden_​​states 元组的index 0 找到。 该图解释了如何计算嵌入。

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

猜你喜欢
  • 1970-01-01
  • 2020-08-25
  • 2020-11-23
  • 2023-01-31
  • 1970-01-01
  • 2021-10-25
  • 2019-12-26
  • 2020-12-19
  • 2020-08-02
相关资源
最近更新 更多