为了账号安全,请及时绑定邮箱和手机立即绑定

如何解释fairseq生成的P数?

如何解释fairseq生成的P数?

DIEA 2022-09-06 16:20:06
使用 fairseq-generate.py,在转换器架构中,每个翻译都会生成如下部分: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数相对较高,并且(最终的P数在大多数上都是左右。-0.6099-0.3091-0.11
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

问:我想知道在P行中说一个低(绝对)数字是否合理,这意味着对该特定单词的置信度更高?


是的。正如文档所说,“P是每个令牌位置的位置分数”。分数实际上是对数概率,因此越高(即,绝对数越低)越“自信”。源代码可能不那么容易理解,但分数是由SequencScorer生成的,在那里你可以看到分数是规范化的(其中包括一个如果你使用单个模型或一个集合)。此外,在打印分数时,它们将它们从以e为底数转换为2:log


print('P-{}\t{}'.format(

    sample_id,

    ' '.join(map(

        lambda x: '{:.4f}'.format(x),

        # convert from base e to base 2

        hypo['positional_scores'].div_(math.log(2)).tolist(),

))

问:我试图弄清楚的是,我是否可以使用H数,或者以某种方式使用单个P数,以获得其转换中的置信度。


事实证明,H 值只是 P 值的平均值,如您所见:


score_i = avg_probs_i.sum() / tgt_len

也转换为基数 2。您可以在您的示例中检查这一点:


import numpy as np

print(np.mean([-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 存储库的语言模型示例所示:


# Compute perplexity for a sequence

en_lm.score('Barack Obama is coming to Sydney and New Zealand')['positional_scores'].mean().neg().exp()

# tensor(15.1474)

我不是NLP方面的专家,所以我不能真正告诉你在你的案例中应该使用哪一个。


查看完整回答
反对 回复 2022-09-06
  • 1 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信