给定权重 = [0.25, 0.25, 0.25, 0.25](默认值),
sentence_bleu([['a', 'b', 'c']], ['a', 'b', 'c']) = 0
而sentence_bleu([['a', 'b', 'c']], ['a', 'b', 'd']) = 0.7598
显然前面的分数应该大于后面的,或者两个分数都应该是0
您使用的是哪个版本的代码?
$ python
>>> import nltk
>>> nltk.__version__
'3.2.1'
BLEU 实现最近刚刚修复,#1330 已解决。 如果您使用的是develop
的分支nltk
,这应该是输出:
>>> import nltk
>>> from nltk import bleu
>>> ref = hyp = 'abc'
>>> bleu([ref], hyp)
1.0
>>> from nltk import bleu
>>> ref, hyp = 'abc', 'abd'
>>> bleu([ref], hyp)
0.7598356856515925
由于字符串是一个字符列表,并且nltk
将sentence_bleu()
导入到顶级导入中,因此上面的代码与以下代码相同:
>>> from nltk.translate.bleu_score import sentence_bleu
>>> sentence_bleu([['a', 'b', 'c']], ['a', 'b', 'c'])
1.0
>>> sentence_bleu([['a', 'b', 'c']], ['a', 'b', 'd'])
0.7598356856515925
要安装最新的develop
分支,请尝试:
pip install https://github.com/nltk/nltk/archive/develop.zip
(注意develop分支有_更多意外bug_,建议用户安装master
或者官方版本)
在一个相关的注释中,但不直接涉及bleu
的当前nltk
实现,没有 #1330 修复的先前实现会受到流行的multi-bleu.perl
的相同缺陷的影响。 也许您可能会发现为什么它在没有最近修复的情况下返回 0 会很有趣: https :
谢谢@alvations 。 我使用的 nltk 的原始版本是 3.2。 我现在已经将它更新到 3.2.1,它现在正在引发 ZeroDivisionError。 我使用了 Python 3.5.2
BLEU 的唯一稳定版本位于develop
分支中。 请等待它在 NLTK 3.2.2 中发布或安装develop
分支(但请注意,开发分支可能存在未经测试的错误)。
行。 我将等待。 但是在你上面提到的情况下,如果权重为[0.25, 0.25, 0.25, 0.25],结果sentence_bleu([['a', 'b', 'c']], ['a', 'b ', 'c']) 和 sentence_bleu([['a', 'b', 'c']], ['a', 'b', 'd']) 都应该是 0,根据原始论文
如果参考/假设的长度小于n
,则原始论文没有考虑p_n
可以为 0 的事实,请参阅http://www.aclweb 的第 2.3 节中的等式n
的可能性。
如果我们查看 2.3 节中的公式,它需要exp(log(p_n))
并且当p_n
为 0 时,它会进入数学域错误,因为对数函数(即y = log x
)在 x = 0 处有一个渐近线,因此 x 的范围必须大于 0。
因此,如果我们要实现原始的 BLEU,只要出现数学域错误,用户就会收到一条警告,内容类似于“无法计算 BLEU”。 所以更高版本的 BLEU 试图用几个不同的黑客来修复它,版本的历史可以在https://github.com/moses-smt/mosesdecoder/blob/master/scripts/generic/mteval-v13a上找到
请注意,最新版本的 BLEU 带有 Chen 和 Cherry (2014) 论文中的平滑函数,但mteval.pl
的摩西版本中没有。
我希望解释有帮助。
最有用的评论
如果参考/假设的长度小于
n
,则原始论文没有考虑p_n
可以为 0 的事实,请参阅http://www.aclweb 的第 2.3 节中的等式n
的可能性。如果我们查看 2.3 节中的公式,它需要
exp(log(p_n))
并且当p_n
为 0 时,它会进入数学域错误,因为对数函数(即y = log x
)在 x = 0 处有一个渐近线,因此 x 的范围必须大于 0。因此,如果我们要实现原始的 BLEU,只要出现数学域错误,用户就会收到一条警告,内容类似于“无法计算 BLEU”。 所以更高版本的 BLEU 试图用几个不同的黑客来修复它,版本的历史可以在https://github.com/moses-smt/mosesdecoder/blob/master/scripts/generic/mteval-v13a上找到
请注意,最新版本的 BLEU 带有 Chen 和 Cherry (2014) 论文中的平滑函数,但
mteval.pl
的摩西版本中没有。我希望解释有帮助。