为什么 Sacrebleu returns 短句的 BLEU 分数为零?
Why Sacrebleu returns zero BLEU score for short sentences?
为什么 scarebleu
需要句子以点结尾?如果我删除点,则值为零。
import sacrebleu, nltk
sys = ["This is cat."]
refs = [["This is a cat."],
["This is a bad cat."]]
b3 = sacrebleu.corpus_bleu(sys, refs)
print("b3", b3.score)
print("b3", round(b3.score,2))
这个returns以下:
b3 35.1862973998119
b3 35.19
当我删除结束点时。
sys = ["This is cat"]
refs = [["This is a cat"],
["This is a bad cat"]]
b3 = sacrebleu.corpus_bleu(sys, refs)
print("b3", b3.score)
print("b3", round(b3.score,2))
它使用 scarebleu 打印零,这又很奇怪!:
b3 0.0
b3 0.0
BLEU 被定义为 unigram 的(修改后的)n-gram 精度的几何平均值,最多为 4-gram(乘以简洁惩罚)。因此,如果在整个测试集中没有匹配的 4-gram(没有 4 元组的单词),则 BLEU 根据定义为 0。在末尾有一个点将被标记化,使得现在有 4 克的匹配,因为应用了平滑。
BLEU 设计用于对包含数百个句子的测试集进行评分,而这种情况不太可能发生。对于单个句子的评分,可以使用句子级版本的 BLEU,它使用了某种平滑,但结果仍然不理想。您还可以使用基于字符的指标,例如chrF (sacrebleu -m chrf
).
您还可以将 use_effective_order=True
传递给 corpus_bleu,以便只计算匹配的 n-gram 顺序,而不是 4 个 n-gram。但是,在那种情况下,该指标并不完全是人们所指的 BLEU。
为什么 scarebleu
需要句子以点结尾?如果我删除点,则值为零。
import sacrebleu, nltk
sys = ["This is cat."]
refs = [["This is a cat."],
["This is a bad cat."]]
b3 = sacrebleu.corpus_bleu(sys, refs)
print("b3", b3.score)
print("b3", round(b3.score,2))
这个returns以下:
b3 35.1862973998119
b3 35.19
当我删除结束点时。
sys = ["This is cat"]
refs = [["This is a cat"],
["This is a bad cat"]]
b3 = sacrebleu.corpus_bleu(sys, refs)
print("b3", b3.score)
print("b3", round(b3.score,2))
它使用 scarebleu 打印零,这又很奇怪!:
b3 0.0
b3 0.0
BLEU 被定义为 unigram 的(修改后的)n-gram 精度的几何平均值,最多为 4-gram(乘以简洁惩罚)。因此,如果在整个测试集中没有匹配的 4-gram(没有 4 元组的单词),则 BLEU 根据定义为 0。在末尾有一个点将被标记化,使得现在有 4 克的匹配,因为应用了平滑。
BLEU 设计用于对包含数百个句子的测试集进行评分,而这种情况不太可能发生。对于单个句子的评分,可以使用句子级版本的 BLEU,它使用了某种平滑,但结果仍然不理想。您还可以使用基于字符的指标,例如chrF (sacrebleu -m chrf
).
您还可以将 use_effective_order=True
传递给 corpus_bleu,以便只计算匹配的 n-gram 顺序,而不是 4 个 n-gram。但是,在那种情况下,该指标并不完全是人们所指的 BLEU。