如何调整Python代码用SacreBLEU计算十万级平行语料的语料级BLEU值
如何用evaluate库计算十万级英法平行语料的语料级BLEU值?
问题描述
我拥有超过10万条英法平行语料对,格式如下:
[ ["How are you doing today", "comment allez-vous aujourd'hui"], ["Look out! He is a thief", "Chercher! C'est un voleur"], ... # 更多翻译对 ]
已知evaluate库的示例代码如下:
import evaluate predictions = ["hello there general kenobi", "foo bar foobar"] references = [["hello there general kenobi", "hello there !"], ["foo bar foobar", "foo bar foobar"]] sacrebleu = evaluate.load("sacrebleu") results = sacrebleu.compute(predictions=predictions, references=references) print(results["score"])
该代码在预测与参考完全匹配时会输出100.0000004。我希望计算上述平行语料的语料级BLEU值以评估翻译质量,请问如何调整代码适配我的数据集?
解决方案
核心调整思路
sacrebleu要求predictions是待评估的翻译文本列表,references是对应每个预测的参考翻译列表(每个元素是一个包含1个或多个参考翻译的子列表)。针对你的平行语料,只需按格式拆分数据集即可。
调整后的代码示例
import evaluate # 假设你的平行语料已加载到变量corpus中 corpus = [ ["How are you doing today", "comment allez-vous aujourd'hui"], ["Look out! He is a thief", "Chercher! C'est un voleur"], # ... 更多翻译对 ] # 拆分数据集:以英法翻译为例,将法语作为待评估的预测文本 predictions = [pair[1] for pair in corpus] # 每个预测对应唯一参考翻译,因此包装为单元素子列表 references = [[pair[1]] for pair in corpus] # 加载sacrebleu并计算语料级BLEU sacrebleu = evaluate.load("sacrebleu") results = sacrebleu.compute(predictions=predictions, references=references) # 格式化输出结果 print(f"语料级BLEU值: {results['score']:.2f}")
关键说明
- 双向评估适配:如果需要评估法语到英文的翻译质量,只需将
pair[1]和pair[0]互换即可。 - 大数据量处理:10万条语料在内存充足的情况下可直接一次性处理;若内存不足,建议分批次读取语料,但需注意:分批计算的BLEU值与全量计算会有细微误差(因为n-gram统计基于全语料),优先推荐全量处理。
- 结果解读:若预测与参考完全匹配,结果会接近100(如示例中的
100.0000004),属于正常的浮点精度误差。
内容的提问来源于stack exchange,提问作者Raptor
相关产品推荐
相关产品推荐

