如何解释fairseq生成的P数?

使用 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


DIEA
浏览 157回答 1
1回答

慕森王

问:我想知道在P行中说一个低(绝对)数字是否合理,这意味着对该特定单词的置信度更高?是的。正如文档所说,“P是每个令牌位置的位置分数”。分数实际上是对数概率,因此越高(即,绝对数越低)越“自信”。源代码可能不那么容易理解,但分数是由SequencScorer生成的,在那里你可以看到分数是规范化的(其中包括一个如果你使用单个模型或一个集合)。此外,在打印分数时,它们将它们从以e为底数转换为2:logprint('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 npprint(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 sequenceen_lm.score('Barack Obama is coming to Sydney and New Zealand')['positional_scores'].mean().neg().exp()# tensor(15.1474)我不是NLP方面的专家,所以我不能真正告诉你在你的案例中应该使用哪一个。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python