Python 如何解释fairseq生成的P数?

Python 如何解释fairseq生成的P数?,python,pytorch,transformer,Python,Pytorch,Transformer,使用fairseq-generate.py和transformer体系结构,每次转换都会生成如下部分: Why is it rare to discover new marine mammal species? S-0 Why is it rare to discover new marine mam@@ mal species ? H-0 -0.0643349438905716 Pourquoi est-il rare de découvrir de nouvelles

使用fairseq-generate.py和transformer体系结构,每次转换都会生成如下部分:

Why is it rare to discover new marine mammal species?
S-0     Why is it rare to discover new marine mam@@ mal species ?
H-0     -0.0643349438905716     Pourquoi est-il rare de découvrir de nouvelles espèces de mammifères marins?
P-0     -0.0763 -0.1849 -0.0956 -0.0946 -0.0735 -0.1150 -0.1301 -0.0042 -0.0321 -0.0171 -0.0052 -0.0062 -0.0015
与:

H是假设和平均对数似然;P是每个标记位置的位置分数,包括句末标记

我想知道,如果说p行中的一个低(绝对)数字意味着对这个特定单词的信心更高,这是否合理?例如,“Pourquoi”的-0.07是否意味着它比“est il”的-0.1849更快乐?最后的低-0.0015意味着它确信判决应该在这里结束

背景:我想弄清楚的是,我是否可以使用H数,或者以某种方式使用单个的p数,来获得其翻译的置信度。我一直在根据H数分析一些翻译,并没有注意到它和我对翻译质量的主观看法之间有多少对应关系。但我有一对夫妇,我认为它特别差-它错过了一些关键信息-最终的P值相对较高
-0.6099
-0.3091
(最终的P值是
-0.11
,大多数都是如此。)

问:我想知道说p行中的一个低(绝对)数字意味着对这个词有更高的信心是否合理

  • 对。正如文档所说,“P是每个标记位置的位置分数”。分数实际上是对数概率,因此越高(即绝对数越低)越“自信”。源代码可能不那么容易理解,但是分数是由生成的,在那里您可以看到分数是标准化的(如果使用a或a,则包括
    log
    )。此外,在打印分数时,他们:

    print('P-{}\t{}'。格式(
    样本编号:,
    ''加入(地图)(
    lambda x:'{.4f}'。格式(x),
    #从基数e转换为基数2
    hypo['positional_scores'].div_(math.log(2)).tolist(),
    ))
    
问:我想弄清楚的是,我是否可以使用H数,或者以某种方式使用个别的p数,来获得其翻译的置信度

  • 结果表明,H值只是p值的平均值,如您所见:

    score\u i=avg\u probs\u i.sum()/tgt\u len
    
    此外,您可以在示例中检查:

    将numpy导入为np
    印刷品(np.平均值([-0.0763,-0.1849,-0.0956,-0.0946,-0.0735,-0.1150,-0.1301,-0.0042,-0.0321,-0.0171,-0.0052,-0.0062,-0.0015]))
    # >>> -0.06433076923076922
    
    另一个常用于评估语言模型性能的度量是。一件好事是,可以根据p值轻松计算复杂度,如fairseq存储库的中所示:

    #计算序列的复杂度
    en_lm.score(‘巴拉克·奥巴马即将来到悉尼和新西兰’)[‘位置得分’].mean().neg().exp()
    #张量(15.1474)
    
    我不是NLP方面的专家,所以我真的不能告诉你在你的案例中应该使用哪一个


谢谢-非常感谢与源代码的链接。我所说的“(绝对)数字”是指“忽略减号,看看大小”;所以我认为我们在说同样的话。@DarrenCook当然。也许我读得太快了。对不起,我相应地更新了答案。