代码中bert的输入和输出
首先上API,使用形式如下所示:
all_encoder_layers, pooled_output = bertmodel(input_ids, token_type_ids, input_mask)
pooled_output :只输出句首的CLS的内容,相当于将整句的信息浓缩到第一个词语中。
我们可以知道BERT是由transformer的encoder堆叠而成,有12层的小bert和24层的大bert这也导致了encoded_layers有两种输出形式:
1、如果只取最后一层encoder的输出,也就是output_all_encoded_layers=False,那么只会输出一个tensor形状如[batch_size, sequence_length, hidden_size],
2、如果需要取每一层的encoder的输出,也就是output_all_encoded_layers=True,那么会输出一个list,该list中包含有12个或者24个tensor形状如[batch_size, sequence_length, hidden_size]。
下面是官方(非Transformer)文档注释:
Inputs:
input_ids
: a torch.LongTensor of shape [batch_size, sequence_length] 词汇表中的单词标记索引
token_type_ids
: an optional torch.LongTensor of shape [batch_size, sequence_length] 取值为0
或1
0
对应“句子A”的标记,1
对应“句子B”标记。
attention_mask
: an optional torch.LongTensor of shape [batch_size, sequence_length] 取值为0
或1
如果输入序列长度小于当前批处理中的最大输入序列长度,则使用该掩码。当一批有不同长度的句子时,我们通常使用这个掩码。
output_all_encoded_layers
: boolean Default: True
. 控制着 encoded_layers
的输出,如下所述。
Outputs:
Tuple of (encoded_layers, pooled_output)
1、encoded_layers
: 由 output_all_encoded_layers
控制
1.1、output_all_encoded_layers=True
: 在每个注意块的末尾输出隐藏状态的完整序列的列表 (i.e. 12 full sequences for BERT-base, 24 for BERT-large),每一个 encoded-hidden-state is a torch.FloatTensor 形状为[batch_size, sequence_length, hidden_size],
1.2、output_all_encoded_layers=False
: 只输出最后一个注意块的隐藏状态的完整序列形状为:[batch_size,sequence_length, hidden_size]
2、pooled_output
: a torch.FloatTensor of size [batch_size, hidden_size] 句首的CLS
的输出内容
标题Transformer中的BERT有更进一步的封装,大家可以去hugging face查看
更多推荐
所有评论(0)