描述
理论上,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)
1条答案
按热度按时间lfapxunr1#
@stevenbird,这个问题目前出现在开发分支上,因为data.load()不再允许不安全的pickle加载(自从#3290以来),但是替代的数据和处理器(#3283)尚未合并。
同时,你可以通过使用pickle.load()来绕过这个问题,而不是使用data.load()。