Nlp 在给定上下文的情况下,如何获得句子中特定标记(单词)的概率

Nlp 在给定上下文的情况下,如何获得句子中特定标记(单词)的概率,nlp,pytorch,huggingface-transformers,bert-language-model,Nlp,Pytorch,Huggingface Transformers,Bert Language Model,我试图用NLP计算句子中单词的概率或任何类型的分数。我使用Huggingface Transformers库尝试了GPT2模型的这种方法,但是,由于模型的单向性,我无法在上下文中预测,因此我无法获得令人满意的结果。所以我想知道是否有一种方法,可以用BERT来计算上面所说的,因为它是双向的 我发现了这一点,前几天我随机看到了,但没有看到任何对我有用的答案 希望我能收到关于这方面的想法或解决方案。感谢您的帮助。多谢各位 BERT被训练为一个蒙面语言模型,即,它被训练来预测被[MASK]标记替换的标记

我试图用NLP计算句子中单词的概率或任何类型的分数。我使用Huggingface Transformers库尝试了GPT2模型的这种方法,但是,由于模型的单向性,我无法在上下文中预测,因此我无法获得令人满意的结果。所以我想知道是否有一种方法,可以用BERT来计算上面所说的,因为它是双向的

我发现了这一点,前几天我随机看到了,但没有看到任何对我有用的答案


希望我能收到关于这方面的想法或解决方案。感谢您的帮助。多谢各位

BERT被训练为一个蒙面语言模型,即,它被训练来预测被
[MASK]
标记替换的标记

来自transformers import AutoTokenizer,BertForMaskedLM
tok=来自预训练(“伯特基本外壳”)的自动煮锅
bert=来自预训练的BertForMaskedLM(“BERTBASE cased”)
input_idx=tok.encode(f“The{tok.mask_token}是有史以来最好的摇滚乐队。”)
logits=bert(火炬张量([input_idx])[0]
预测=logits[0]。argmax(dim=1)
打印(tok.ids_to_令牌[prediction[2].numpy().tolist()]))
它打印第11581号令牌,即:

披头士乐队


棘手的是,单词可能被分成多个子单词。您可以模拟添加多个
[MASK]
标记,但是您有一个问题,即如何可靠地比较不同长度的预测分数。我可能会平均概率,但也许有更好的方法。

谢谢你的回答。我想知道我是否可以根据单词的概率预测在损坏的句子中放置[MASK]标记的位置,以便可以使用蒙面语言建模预测[MASK]标记,从而得到一个语法正确的句子。@D.Perera您可能会发现这项工作很有趣。你只需要有一个巨大的空间来选择不同的编辑,然后使用给定概率的模型和贪婪的搜索来选择最佳的编辑。