登录
推荐 文章 Go 技术 课程 下载 专题 AI
首页 >  科技周边 >  人工智能

SacreBLEU 怎样组织多个参考译文的输入维度

来源:17golang原创

时间:2026-10-30 20:04:46 131浏览 收藏

使用 SacreBLEU 评估机器翻译时,多条参考译文不是把整段文本简单拼在一起,而是要保留“同一条系统输出对应多条参考”的输入维度。最直接的做法是把参考文件作为多个位置参数传入;如果数据管道已经按行合并,也可以用制表符组织参考字段,再用 --num-refs 明确每行有几条参考。

独立文件适合手工或脚本调用,TSV 适合已经按行对齐的数据管道。无论采用哪种写法,系统输出和参考译文必须逐行对应,参考数量也必须与文件结构一致。
  • 多文件模式:把 ref-a.txt、ref-b.txt 作为多个位置参数传入。
  • TSV 模式:每行放一条系统输出对应的多个参考字段,并用 --num-refs 2 声明数量。
  • 指标范围:BLEU、chrF 和 TER 都支持多参考评估,但每次运行仍要保持输入行数和语义一致。

先把三类输入分清楚

一组评估至少包含系统输出和参考译文。系统输出是待评价的翻译结果,参考译文是同一源句的一个或多个可接受表达。多参考的价值在于允许不同但合理的译法参与比较,因此不能把参考 A、参考 B 当成两批互不相关的数据。

例如,下面的文件关系表示同一行的 system.txt 同时对应 ref-a.txt 与 ref-b.txt。示例只说明输入结构,不代表实际得分:

# 中文注释:三个文件必须按相同顺序保存对应句子
system.txt   # 待评价的系统译文,每行一条
ref-a.txt    # 第一套人工参考译文,与 system.txt 逐行对应
ref-b.txt    # 第二套人工参考译文,与 system.txt 逐行对应
SacreBLEU 系统输出与两份参考译文进入多个评估指标的静态结构说明图
图1:结构说明图,展示多个独立参考文件如何共同进入 SacreBLEU 的评估输入。

用多个位置参数传入参考译文

当每套参考译文各自保存为一个文件时,可以把两个参考文件写在系统输出之后。下面的命令把 ref-a.txt 和 ref-b.txt 作为两套参考输入,-m 则同时请求三种指标:

# 中文注释:多个参考文件作为位置参数,-i 指向待评价系统输出
sacrebleu ref-a.txt ref-b.txt -i system.txt -m bleu chrf ter

这种写法的重点是参数位置和文件含义:参考文件是位置参数,系统输出由 -i 指定。多个文件都必须有与系统输出相匹配的句子顺序;如果某套参考少了一行,评估的对应关系就会被破坏。参考文件的命名可以按项目习惯调整,但不要把不同数据集的参考混入同一次运行。

如果只关心 BLEU,可以把指标收窄,减少输出解析负担:

# 中文注释:只输出 BLEU,适合流水线只消费一个指标的场景
sacrebleu ref-a.txt ref-b.txt -i system.txt -m bleu -b

合并成 TSV 时声明参考数量

有些数据处理流程会把每行的多个参考译文放在同一个制表符文件中。此时可以把一行理解为“系统输出对应的参考字段集合”,并通过 --num-refs 告诉 SacreBLEU 每行应读取几个参考字段:

# 中文注释:每行是参考字段集合,字段之间用制表符分隔
paste ref-a.txt ref-b.txt > refs.tsv

# 中文注释:声明 refs.tsv 每行包含两条参考译文
sacrebleu refs.tsv --num-refs 2 -i system.txt -m bleu

这里的 2 不是系统输出行数,而是每行参考译文的数量。它必须与 refs.tsv 的字段组织相符:若实际每行有三条参考,却仍写成 --num-refs 2,后续字段就不能按预期参与评估;反过来,声明数量大于实际字段也会造成输入不完整。

SacreBLEU TSV 每行两个参考字段与 num-refs=2 参数的静态数据结构说明图
图2:结构说明图,展示制表符参考文件与 --num-refs=2 的数据维度关系。

指标选择与输入排查

SacreBLEU 的 BLEU、chrF 和 TER 都支持多参考评估。可以按项目需要选择指标:BLEU 适合延续已有 BLEU 报表,chrF 更关注字符 n-gram,TER 用于观察编辑距离式的翻译修改成本。不要因为增加了参考译文就把不同指标的结果直接横向等同;归档时应同时保存命令、参考数量和指标名称。

遇到结果异常时,先检查三个静态条件:系统输出、每套参考是否逐行对齐;多参考文件是否属于同一测试集;TSV 模式的 --num-refs 是否等于每行字段数量。确认这些条件后,再查看语言对和 tokenizer 等其他参数。以下命令保留文本格式,便于旧脚本按行读取:

# 中文注释:-f text 保留文本格式,便于已有脚本解析结果
sacrebleu ref-a.txt ref-b.txt -i system.txt -m bleu -f text

常见问题

多个参考文件能直接写在 -i 后面吗?

不建议这样理解。官方示例把参考文件作为位置参数,把系统输出交给 -i;先区分这两类角色,命令更容易检查。

--num-refs 2 表示有两条系统输出吗?

不是。它表示合并输入时,每行包含两条参考译文。系统输出仍由单独的输入文件或标准输入提供。

三种指标必须一起运行吗?

不必。可以用 -m bleu 只计算 BLEU,也可以按报告需要组合 BLEU、chrF 和 TER。关键是记录本次使用的指标和输入结构。

声明:本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>