XLM/BERT 序列输出到带加权平均池化的池化输出
XLM/BERT sequence outputs to pooled output with weighted average pooling
假设我有一个长度为 10 的标记化句子,并将其传递给 BERT 模型。
bert_out = bert(**bert_inp)
hidden_states = bert_out[0]
hidden_states.shape
>>>torch.Size([1, 10, 768])
This returns me 一个形状的张量:[batch_size, seq_length, d_model] 其中每个单词在序列被编码为768维向量
在 TensorFlow BERT 中也 returns 所谓的池化输出,它对应于整个句子的向量表示。
我想通过对序列向量进行加权平均来获得它,我的做法是:
hidden_states.view(-1, 10).shape
>>> torch.Size([768, 10])
pooled = nn.Linear(10, 1)(hidden_states.view(-1, 10))
pooled.shape
>>> torch.Size([768, 1])
- 这是正确的方法吗,还是我应该把整个东西弄平然后应用线性?
- 还有其他方法可以获得良好的句子表示吗?
有两种简单的方法可以获取句子表示:
- 获取
CLS
标记的向量。
- 获得
pooler_output
假设输入是[batch_size, seq_length, d_model]
,其中batch_size
是句子的个数,那么要得到每个句子的CLS token:
bert_out = bert(**bert_inp)
hidden_states = bert_out['last_hidden_state']
cls_tokens = hidden_states[:, 0, :] # 0 for the CLS token for every sentence.
您将得到一个形状为 (batch_size、d_model) 的张量。
获取pooler_output
:
bert_out = bert(**bert_inp)
pooler_output = bert_out['pooler_output']
你又得到一个形状为 (batch_size, d_model) 的张量。
假设我有一个长度为 10 的标记化句子,并将其传递给 BERT 模型。
bert_out = bert(**bert_inp)
hidden_states = bert_out[0]
hidden_states.shape
>>>torch.Size([1, 10, 768])
This returns me 一个形状的张量:[batch_size, seq_length, d_model] 其中每个单词在序列被编码为768维向量
在 TensorFlow BERT 中也 returns 所谓的池化输出,它对应于整个句子的向量表示。
我想通过对序列向量进行加权平均来获得它,我的做法是:
hidden_states.view(-1, 10).shape
>>> torch.Size([768, 10])
pooled = nn.Linear(10, 1)(hidden_states.view(-1, 10))
pooled.shape
>>> torch.Size([768, 1])
- 这是正确的方法吗,还是我应该把整个东西弄平然后应用线性?
- 还有其他方法可以获得良好的句子表示吗?
有两种简单的方法可以获取句子表示:
- 获取
CLS
标记的向量。 - 获得
pooler_output
假设输入是[batch_size, seq_length, d_model]
,其中batch_size
是句子的个数,那么要得到每个句子的CLS token:
bert_out = bert(**bert_inp)
hidden_states = bert_out['last_hidden_state']
cls_tokens = hidden_states[:, 0, :] # 0 for the CLS token for every sentence.
您将得到一个形状为 (batch_size、d_model) 的张量。
获取pooler_output
:
bert_out = bert(**bert_inp)
pooler_output = bert_out['pooler_output']
你又得到一个形状为 (batch_size, d_model) 的张量。