代码:
import nltk
from nltk.translate.bleu_score import sentence_bleu
score1 = sentence_bleu(ref1, cand)
如何忽略此处计算的 BLEU 分数的简洁惩罚?
代码:
import nltk
from nltk.translate.bleu_score import sentence_bleu
score1 = sentence_bleu(ref1, cand)
如何忽略此处计算的 BLEU 分数的简洁惩罚?
如果您查看 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 精度和简洁惩罚。