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
左右在多数人身上。)
问:我想知道 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 数,以获得其翻译的置信度度量。
事实证明,H 值只是 P 值的平均值,如下所示:
score_i = avg_probs_i.sum() / tgt_len
Run Code Online (Sandbox Code Playgroud)
也转换为基数 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
Run Code Online (Sandbox Code Playgroud)
另一个经常用于评估语言模型性能的度量是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)
Run Code Online (Sandbox Code Playgroud)
我不是 NLP 专家,所以我无法真正告诉您在您的情况下应该使用哪一个。
归档时间: |
|
查看次数: |
508 次 |
最近记录: |