使用from_pretrained()函数加载预训练的生成模型。
from transformers import BertForMaskedLM
# 加载预训练的Bert语言模型
model = BertForMaskedLM.from_pretrained('bert-base-uncased')
# 输入文本
text = "I love to [MASK]"
# 将文本转换为Bert模型输入的格式
input_ids = tokenizer.encode(text, add_special_tokens=True)
input_ids = torch.tensor(input_ids).unsqueeze(0)
# 使用模型生成预测
outputs = model(input_ids)
predictions = outputs[0]
# 提取填充标记的概率分布
mask_index = input_ids[0].tolist().index(tokenizer.mask_token_id)
masked_prediction = predictions[0, mask_index].detach().numpy()
# 打印预测的前5个标记
top_5_tokens = masked_prediction.argsort()[-5:][::-1]
top_5_words = [tokenizer.convert_ids_to_tokens([token])[0] for token in top_5_tokens]
print("Top 5 predicted tokens:")
for word in top_5_words:
print("-", word)
# 输出结果:
# Top 5 predicted tokens:
# - do
# - go
# - like
# - love
# - want
在上面的代码中,我们使用Hugging Face的transformers库加载了预训练的BertForMaskedLM模型。这是一个用于掩码语言建模的模型,可以生成给定输入句子中掩码标记的概率分布。
首先,我们指定了要加载的预训练模型,这里使用了bert-base-uncased,它是一个基于小写字母的英文文本的Bert模型。
然后,我们定义了一个输入文本"I love to [MASK]",其中"[MASK]"是一个特殊的标记,用于指示要生成的部分。
接下来,我们将文本转换为Bert模型所需的输入格式。我们使用tokenizer对文本进行编码,并将编码后的输入转换为张量。
然后,我们使用模型对输入进行预测。由于我们使用的模型是一个掩码语言模型,它会生成一个概率分布,表示每个可能的标记在掩码处的可能性。
我们提取了掩码标记的索引,并使用索引提取出对应的概率分布。然后,我们根据预测的概率将标记排序,并选择前5个标记作为预测结果。
最后,我们输出了预测的前5个标记。在上面的例子中,模型预测的前5个标记是["do", "go", "like", "love", "want"]。这些标记表示模型认为最可能出现在"[MASK]"处的词汇。
