nltk BLEU分数在某些测试用例中超过1,

6jjcrrmo  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(38)

描述

理论上,BLEU分数应该在0到1之间。然而,在某些情况下,使用NLTK的sentence_bleu函数计算的BLEU分数超过了1,这是意外的,可能是一个问题。

重现步骤

以下是一个最小的代码片段,可以重现这个问题:

import nltk
from nltk.translate.bleu_score import sentence_bleu

# Tokenization function
def tokenize(sentence):
    return nltk.word_tokenize(sentence)

# Test pairs with unexpected BLEU scores
test_pairs = [
    ("i think therefore i am", "i think so i am"),
    ("to infinity and beyond", "to eternity and beyond")
]

# Calculate BLEU scores
for ref, cand in test_pairs:
    score = sentence_bleu([tokenize(ref)], tokenize(cand))
    print(f"Reference: {ref}\nCandidate: {cand}\nBLEU Score: {score}\n")

预期行为

BLEU分数应该始终在0到1之间。

实际行为

对于提供的测试对,BLEU分数超过了1:

Reference: i think therefore i am
Candidate: i think so i am
BLEU Score: 1.1862800137389335e-154

Reference: to infinity and beyond
Candidate: to eternity and beyond
BLEU Score: 1.0547686614863434e-154
环境
  • NLTK版本:3.8.1
  • Python版本:3.10.12
  • 操作系统:Ubuntu 18.04(Google Collab)
lfapxunr

lfapxunr1#

@stevenbird,这个问题目前出现在开发分支上,因为data.load()不再允许不安全的pickle加载(自从#3290以来),但是替代的数据和处理器(#3283)尚未合并。
同时,你可以通过使用
pickle.load()来绕过这个问题,而不是使用data.load()

相关问题