D.P*_*era 4 nlp pytorch bert-language-model huggingface-transformers
我正在尝试使用 NLP 计算句子中单词的概率或任何类型的分数。我已经使用 Huggingface Transformers 库对 GPT2 模型尝试了这种方法,但是,由于模型的单向性质,我无法在上下文中进行预测,因此无法获得令人满意的结果。所以我想知道是否有办法使用 BERT 计算上述内容,因为它是双向的。
我发现这篇文章相关,我前几天随机看到的,但没有看到任何对我有用的答案。
希望我能够收到想法或解决方案。任何帮助表示赞赏。谢谢你。
BERT 被训练为掩码语言模型,即它被训练来预测被标记替换的[MASK]
标记。
from transformers import AutoTokenizer, BertForMaskedLM
tok = AutoTokenizer.from_pretrained("bert-base-cased")
bert = BertForMaskedLM.from_pretrained("bert-base-cased")
input_idx = tok.encode(f"The {tok.mask_token} were the best rock band ever.")
logits = bert(torch.tensor([input_idx]))[0]
prediction = logits[0].argmax(dim=1)
print(tok.ids_to_tokens[prediction[2].numpy().tolist()])
Run Code Online (Sandbox Code Playgroud)
它打印令牌号。11581 即:
披头士乐队
棘手的是,单词可能会被拆分为多个子单词。您可以模拟添加多个[MASK]
标记,但是您会遇到如何可靠地比较不同长度的预测分数的问题。我可能会平均概率,但也许有更好的方法。
归档时间: |
|
查看次数: |
1633 次 |
最近记录: |