You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整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}")

关键说明

  1. 双向评估适配:如果需要评估法语到英文的翻译质量,只需将pair[1]和pair[0]互换即可。
  2. 大数据量处理:10万条语料在内存充足的情况下可直接一次性处理;若内存不足,建议分批次读取语料,但需注意:分批计算的BLEU值与全量计算会有细微误差(因为n-gram统计基于全语料),优先推荐全量处理。
  3. 结果解读:若预测与参考完全匹配,结果会接近100(如示例中的100.0000004),属于正常的浮点精度误差。

内容的提问来源于stack exchange,提问作者Raptor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:07:54