【问题标题】:How to get the probability of a particular token(word) in a sentence given the context如何在给定上下文的句子中获取特定标记(单词)的概率
【发布时间】:2020-08-30 10:14:18
【问题描述】:

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

我发现这个post 相关,前几天我随机看到但没有看到任何对我有用的答案。

希望我能够收到有关此问题的想法或解决方案。任何帮助表示赞赏。谢谢你。

【问题讨论】:

    标签: nlp pytorch huggingface-transformers bert-language-model


    【解决方案1】:

    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.convert_ids_to_tokens(prediction[2].numpy().tolist()))
    

    它打印令牌号。 11581 是:

    披头士乐队

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

    【讨论】:

    • 感谢您的回答。我想知道我是否可以根据单词的概率预测将 [MASK] 标记放置在损坏的句子中的位置,以便可以使用掩码语言建模来预测 [MASK] 标记,以获得正确干净且语法正确的句子。
    • @D.Perera 您可能会发现this 的工作很有趣。您只需要拥有大量的替代编辑空间,然后使用给定概率的模型和贪婪搜索来选择最佳编辑。
    猜你喜欢
    • 1970-01-01
    • 2017-08-08
    • 2019-02-21
    • 2020-10-23
    • 2018-05-12
    • 1970-01-01
    • 2019-02-20
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多