bert transformers mask预测,预测缺失的mask字

今天需要用到transformer里面的bert进行mask预测,我这里分享一下我的代码:

import torch
from transformers import BertTokenizer, BertModel, BertForMaskedLM

# OPTIONAL: if you want to have more information on what's happening, activate the logger as follows
import logging
logging.basicConfig(level=logging.INFO)

# Load pre-trained model tokenizer (vocabulary)
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')

text = '[CLS] 我 是 [MASK] 国 人 [SEP]'
tokenized_text = tokenizer.tokenize(text)
indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)

# Create the segments tensors.
segments_ids = [0] * len(tokenized_text)

# Convert inputs to PyTorch tensors
tokens_tensor = torch.tensor([indexed_tokens])
segments_tensors = torch.tensor([segments_ids])

# Load pre-trained model (weights)
model = BertForMaskedLM.from_pretrained('bert-base-chinese')
model.eval()
masked_index = tokenized_text.index('[MASK]')
# Predict all tokens
with torch.no_grad():
    predictions = model(tokens_tensor, segments_tensors)

predicted_index = torch.argmax(predictions[0][0][masked_index]).item()
predicted_token = tokenizer.convert_ids_to_tokens([predicted_index])[0]
print(predicted_token)

预测的结果:

.....
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
中

还不错吧,挺神奇的。transformer版本为:

transformers                       3.0.2

参考文献

[1].predicting-missing-words-in-a-sentence-natural-language-processing-model. https://stackoverflow.com/questions/54978443/predicting-missing-words-in-a-sentence-natural-language-processing-model

 

 

你可以使用BERT模型进行文本填空任务。BERT模型是一种基于Transformer架构的预训练语言模型,可以用来进行文本的表示学习和理解。 对于文本填空任务,你需要首先将待填空的句子进行处理,将填空位置用特殊的标记"[MASK]"替换。然后将处理后的句子输入到BERT模型中进行预测。 以下是一个使用Python代码示例: ```python from transformers import BertTokenizer, BertForMaskedLM # 加载BERT模型和分词器 model_name = 'bert-base-uncased' tokenizer = BertTokenizer.from_pretrained(model_name) model = BertForMaskedLM.from_pretrained(model_name) # 定义待填空的句子 text = "I love [MASK]." # 使用分词器对句子进行分词和编码 tokens = tokenizer.tokenize(text) tokens_ids = tokenizer.convert_tokens_to_ids(tokens) # 找到填空的位置 mask_index = tokens.index('[MASK]') tokens_ids[mask_index] = tokenizer.mask_token_id # 将编码后的句子转换为Tensor输入模型 input_ids = torch.tensor([tokens_ids]) # 使用BERT模型进行预测 with torch.no_grad(): outputs = model(input_ids) predictions = outputs[0] # 获取填空位置的预测结果 predicted_index = torch.argmax(predictions[0, mask_index]).item() predicted_token = tokenizer.convert_ids_to_tokens([predicted_index])[0] # 打印预测结果 filled_text = text.replace('[MASK]', predicted_token) print(filled_text) ``` 上述代码中,我们首先加载了预训练的BERT模型和分词器。然后定义了待填空的句子,并使用分词器对句子进行分词和编码。接下来,我们找到填空的位置,并将其替换为"[MASK]"对应的编码。最后,我们将编码后的句子输入到BERT模型中进行预测,并获取填空位置的预测结果。最终,将预测结果填入句子中,并打印结果。 请注意,上述代码使用了Hugging Face的`transformers`库,你需要先安装该库才能运行代码。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农民小飞侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值