[英]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.