首先上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] 取值为01 0对应“句子A”的标记,1对应“句子B”标记。

attention_mask: an optional torch.LongTensor of shape [batch_size, sequence_length] 取值为01

​ 如果输入序列长度小于当前批处理中的最大输入序列长度,则使用该掩码。当一批有不同长度的句子时,我们通常使用这个掩码。

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查看

GitHub 加速计划 / be / bert
37.61 K
9.55 K
下载
TensorFlow code and pre-trained models for BERT
最近提交(Master分支:2 个月前 )
eedf5716 Add links to 24 smaller BERT models. 4 年前
8028c045 - 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐