簡體   English   中英

如何解釋 fairseq 生成的 P 數?

[英]How to interpret the P numbers that fairseq generate produces?

使用 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 是每個標記位置的位置分數”。 分數實際上是對數概率,因此越高(即絕對數越低)越“有信心”。 源代碼可能不太容易理解,但分數是由SequenceScorer生成的,在那里您可以看到分數是標准化的(如果您使用單個模型集合,其中包括log )。 此外,在打印分數時,他們將它們從基數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(), ))

問:我正在嘗試解決的是,我是否可以使用 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

    另一種常用於評估語言模型性能的度量是Perplexity 好消息是,可以根據 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 方面的專家,所以我不能真正告訴你應該在你的情況下使用哪個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM