BERT 的输出通常是动态的,其形状取决于输入文本的长度。但是,为了方便某些应用程序的特定需求,可以使用统一的形状生成BERT的输出。
下面是使用 pytorch 实现这个想法的示例代码:
import torch
from transformers import BertModel, BertTokenizer
# 使用BERT模型和标记器
model = BertModel.from_pretrained('bert-base-uncased')
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
# 定义新的输入形状
max_seq_len = 128
input_ids = torch.randint(0, 1000, (1, max_seq_len))
attention_mask = torch.ones((1, max_seq_len))
# 用新的输入调用model
output = model(input_ids, attention_mask)
# 将模型的输出堆叠成固定的形状
output_shape = (1, 768)
fixed_output = torch.zeros(output_shape)
fixed_output[:, :output[0].shape[1]] = output[0]
# 显示 fixed_output的形状
print(fixed_output.shape) # 输出:torch.Size([1, 768])
这个示例代码中,我们定义了新的输入形状,并使用它调用了BERT模型。该模型返回的输出具有动态形状。接下来,我们将输出堆叠到固定大小,并将结果分配给fixed_output变量。最后,我们打印它的形状,以证明它已经被重塑为固定的形状。