如何解释 fairseq 生成的 P 数?

Dar*_*ook 5 python transformer-model pytorch

使用 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
Run Code Online (Sandbox Code Playgroud)

有了这个解释

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

我想知道在 P 行中说低(绝对)数字意味着对该特定单词的更高信心是否合理?例如,“Pourquoi”的 -0.07 是否意味着它比“est-il”的(-0.1849)更快乐?最后的低 -0.0015 意味着它真的有信心句子应该在那里结束。

背景:我想要解决的是,我是否可以使用 H 数或以某种方式使用单个 P 数来获得其翻译的置信度。我一直在针对 H 数字分析一些翻译,并没有注意到它与我对翻译质量的主观看法之间有太多对应。但我有一对夫妇,我认为这是特别差-它已经错过了一点关键信息-而且,最终的P数是比较高的-0.6099-0.3091(最终数量P是-0.11左右在多数人身上。)

Ber*_*iel 5

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

  • 是的。正如文档所说,“ P 是每个标记位置的位置分数”。分数实际上是对数概率,因此越高(即绝对数越低)越“自信”。源代码可能不太容易理解,但是分数是由 生成的SequenceScorer,并且您可以在其中看到分数已标准化(其中包括log当您使用单个模型整体时的 if )。此外,在打印分数时,他们将它们从e基数转换为 2

    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(),
    ))
    
    Run Code Online (Sandbox Code Playgroud)

问:我正在尝试解决的是是否可以使用 H 数,或者以某种方式使用单独的 P 数,以获得其翻译的置信度度量。