如何使用 BLEU 将假设与参考相匹配?

问题描述

在下面的 sys 中包含 happy 是第二个引用的完全匹配,但为什么 bleu 分数仍然为零?

import sacrebleu
sys = ["happy"] 
refs = [["like achieve"],["happy"]] 

b3 = sacrebleu.corpus_bleu(sys,refs)
print("b3",b3.score)
print("b3",round(b3.score,2))

打印

b3 0.0
b3 0.0

如果 bleu 不是用于此目的的好指标,我会寻找一个指标,该指标可以对假设中的匹配项或子字符串进行评分,并提供任何参考。我认为 bleu 分数是为了同样的目的!

解决方法

BLEU 被定义为(修改的)n-gram 精度的几何平均值,用于高达 4-gram 的 unigram(乘以简洁惩罚)。因此,如果整个测试集中没有匹配的 4-gram(没有 4-tuple 单词),则 BLEU 根据定义为 0。 BLEU 旨在对包含数百个句子的测试集进行评分,而这种情况不太可能发生。对于单个句子的评分,您可以使用使用某种平滑的句子级版本的 BLEU,但结果仍然不理想。您还可以使用基于字符的度量,例如chrF (sacrebleu -m chrf)。

您还可以将 use_effective_order=True 传递给 corpus_bleu,以便只计算匹配的 n-gram 订单而不是 4 个 n-gram。但是,在这种情况下,该指标并不完全是人们所指的 BLEU。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...