我现在正在研究使用 BERT 模型预测掩码单词的任务。与其他人不同,需要从特定选项中选择答案。
例如:
sentence: "In my daily [MASKED], ..."
options: A.word1 B.word2 C.word3 D.word4
the predict word will be chosen from four given words
我使用拥抱脸的 BertForMaskedLM 来完成这项任务。这个模型会给我一个概率矩阵,它代表每个单词出现在 [MASK] 中的概率,我只需要比较选项中单词的概率来选择答案。
# Predict all tokens
with torch.no_grad():
predictions = model(tokens_tensor, segments_tensors)
#predicted_index = torch.argmax(predictions[0, masked_index]).item()
#predicted_token = tokenizer.convert_ids_to_tokens([predicted_index])[0]
A = predictions[0, masked_pos][tokenizer.convert_tokens_to_ids([option1])]
B = predictions[0, masked_pos][tokenizer.convert_tokens_to_ids([option2])]
C = predictions[0, masked_pos][tokenizer.convert_tokens_to_ids([option3])]
D = predictions[0, masked_pos][tokenizer.convert_tokens_to_ids([option4])]
#And then select from ABCD
但问题是:如果选项不在“bert-vocabulary.txt”中,上述方法将不起作用,因为输出矩阵没有给出它们的概率。如果选项不是一个单词,也会出现同样的问题。
我应该更新词汇表吗?如何更新?或者如何在预训练的基础上训练模型添加新词?