0

代码:

import nltk
from nltk.translate.bleu_score import sentence_bleu 
score1 = sentence_bleu(ref1, cand) 

如何忽略此处计算的 BLEU 分数的简洁惩罚?

4

1 回答 1

1

如果您查看 NLTK 中的源代码,您可以在计算中看到简洁惩罚是硬编码的,就在返回最终分数之前,在下一行。

s = bp * math.exp(math.fsum(s))

您当然可以复制和修改源代码。还有一个breivity_penalty功能,它允许您自己计算并再次划分分数。

此外,请注意 NLTK 中的 BLEU 实现与最近在sacrebleu包中完全复制的原始参考实现不同。主要问题是 BLEU 的参考实现使用了 NLTK 没有实现的非标准标记化规则。当前所有机器翻译文献都使用 sacrebleu 报告 BLEU 分数。

使用 sacrebleu,你可以像这样得到句子级别的 BLEU:

import sacrebleu
bleu = sacrebleu.sentence_bleu("I am the walrus.", ["I am the walrus."])

输出是一个元组,其中包含最终分数以及各个组件:n-gram 精度和简洁惩罚。

于 2021-04-12T08:17:30.657 回答