轻松计算可共享、可比较和可重复的 BLEU、chrF 和 TER 分数
项目描述
圣布鲁
SacreBLEU(2018 年发布)提供了可共享、可比较和可重现的BLEU分数的轻松计算。受 Rico Sennrich 的启发multi-bleu-detok.perl,它产生了官方的 WMT 分数,但适用于纯文本。它还知道所有标准测试集,并为您处理下载、处理和标记化。
正式版托管在https://github.com/mjpost/sacrebleu。
动机
比较 BLEU 分数比它应该的要难。每个解码器都有自己的实现,通常是从摩西那里借来的,但可能会有细微的变化。Moses 本身有许多作为独立脚本的实现,几乎没有说明它们有何不同(注意:它们大多没有,但multi-bleu.pl需要标记化的输入)。传递给这些脚本中的每一个的不同标志可能会在最终得分中产生很大的波动。所有这些都可能以不同的方式处理标记化。最重要的是,下载和管理测试集是一个适度的烦恼。
圣蓝!真是一团糟。
SacreBLEU旨在通过将原始参考实现 ( Papineni et al., 2002 ) 与其他有用的特性包装在一起来解决这些问题。默认设置为计算 BLEU 的方式,此外,脚本会输出一个简短的版本字符串,让其他人可以准确地知道你做了什么。作为额外的奖励,它会自动为您下载和管理测试集,因此您可以简单地告诉它得分wmt14,而无需在本地文件系统上寻找路径。这一切都是为了更认真地对待 BLEU。毕竟,即使存在所有问题,BLEU 也是默认的,而且——承认这一点——我们整个研究社区深受喜爱的指标。圣蓝。
特征
- 它会自动下载常见的 WMT 测试集并将其处理为纯文本
- 它生成一个简短的版本字符串,便于跨论文比较
- 它使用 WMT(机器翻译会议)标准标记化正确计算去标记输出的分数
mteval-v13a.pl它产生与WMT 使用的官方脚本 ( ) 相同的值- 它输出不带逗号的 BLEU 分数,因此您不必使用
sed(看着你,multi-bleu.perl)将其删除 - 它支持 BLEU 的不同标记器,包括对日语和中文的支持
- 它支持chrF、chrF++和翻译错误率 (TER)指标
- 它为统计显着性报告执行配对引导重采样和配对近似随机化测试
重大变化
v2.0.0
从 v2.0.0 开始,默认输出格式更改json为减少痛苦的解析体验。这意味着解析 sacreBLEU 输出的软件应修改为 (i) 使用例如jq实用程序解析 JSON 或 (ii) 传递-f text给 sacreBLEU 以保留旧的文本输出。后一种更改也可以通过导出相关的 shell 配置文件来持久进行。SACREBLEU_FORMAT=text
下面是一个使用解析scoreJSON 输出的键的示例jq:
$ sacrebleu -i output.detok.txt -t wmt17 -l en-de | jq -r .score
20.8
安装
从 PyPI 安装官方 Python 模块(仅限 Python>=3.6):
pip install sacrebleu
为了通过 安装日语标记器支持mecab-python3,您需要运行以下命令,以执行具有依赖项的完整安装:
pip install "sacrebleu[ja]"
为了通过 安装韩语标记器支持pymecab-ko,您需要运行以下命令,以执行具有依赖项的完整安装:
pip install "sacrebleu[ko]"
命令行用法
您可以使用 获取可用测试集的列表sacrebleu --list。请参阅DATASETS.md
以获取支持的数据集的最新列表。
基本
下载测试集
当您请求测试集时会触发下载。如果数据集不可用,则将其下载并解压缩。
例如,您可以使用以下命令下载源代码,将其传递给您的翻译系统translate.sh,然后对其评分:
$ sacrebleu -t wmt17 -l en-de --echo src > wmt17.en-de.en
$ cat wmt17.en-de.en | translate.sh | sacrebleu -t wmt17 -l en-de
JSON 输出
从 version>=2.0.0开始,sacreBLEU 以 JSON 格式打印计算的分数,以减少解析的痛苦:
$ sacrebleu -i output.detok.txt -t wmt17 -l en-de
{
"name": "BLEU",
"score": 20.8,
"signature": "nrefs:1|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0",
"verbose_score": "54.4/26.6/14.9/8.7 (BP = 1.000 ratio = 1.026 hyp_len = 62880 ref_len = 61287)",
"nrefs": "1",
"case": "mixed",
"eff": "no",
"tok": "13a",
"smooth": "exp",
"version": "2.0.0"
}
如果你想保持旧的行为,你可以通过-f text或导出SACREBLEU_FORMAT=text:
$ sacrebleu -i output.detok.txt -t wmt17 -l en-de -f text
BLEU|nrefs:1|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0 = 20.8 54.4/26.6/14.9/8.7 (BP = 1.000 ratio = 1.026 hyp_len = 62880 ref_len = 61287)
计分
(下面的所有示例都假定旧式文本输出用于节省空间的紧凑表示)
假设您刚刚使用您喜欢的 MT 系统翻译了WMT17en-de的测试集,并且去标记化的翻译在一个名为的文件中:output.detok.txt
# Option 1: Redirect system output to STDIN
$ cat output.detok.txt | sacrebleu -t wmt17 -l en-de
BLEU|nrefs:1|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0 = 20.8 54.4/26.6/14.9/8.7 (BP = 1.000 ratio = 1.026 hyp_len = 62880 ref_len = 61287)
# Option 2: Use the --input/-i argument
$ sacrebleu -t wmt17 -l en-de -i output.detok.txt
BLEU|nrefs:1|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0 = 20.8 54.4/26.6/14.9/8.7 (BP = 1.000 ratio = 1.026 hyp_len = 62880 ref_len = 61287)
您可以通过以下方式获取签名的简短版本--short/-sh:
$ sacrebleu -t wmt17 -l en-de -i output.detok.txt -sh
BLEU|#:1|c:mixed|e:no|tok:13a|s:exp|v:2.0.0 = 20.8 54.4/26.6/14.9/8.7 (BP = 1.000 ratio = 1.026 hyp_len = 62880 ref_len = 61287)
如果您只想打印分数,可以使用--score-only/-b标志:
$ sacrebleu -t wmt17 -l en-de -i output.detok.txt -b
20.8
分数的精度可以通过--width/-w标志配置:
$ sacrebleu -t wmt17 -l en-de -i output.detok.txt -b -w 4
20.7965
使用您自己的参考文件
SacreBLEU 知道常见的测试集(如--list上面的示例中详述),但您也可以使用它对带有任意引用的系统输出进行评分。在这种情况下,不要忘记提供去标记化的参考和假设文件:
# Let's save the reference to a text file
$ sacrebleu -t wmt17 -l en-de --echo ref > ref.detok.txt
# Option 1: Pass the reference file as a positional argument to sacreBLEU
$ sacrebleu ref.detok.txt -i output.detok.txt -m bleu -b -w 4
20.7965
# Option 2: Redirect the system into STDIN (Compatible with multi-bleu.perl way of doing things)
$ cat output.detok.txt | sacrebleu ref.detok.txt -m bleu -b -w 4
20.7965
使用多个指标
让我们首先使用默认设置计算 BLEU、chrF 和 TER:
$ sacrebleu -t wmt17 -l en-de -i output.detok.txt -m bleu chrf ter
BLEU|nrefs:1|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0 = 20.8 <stripped>
chrF2|nrefs:1|case:mixed|eff:yes|nc:6|nw:0|space:no|version:2.0.0 = 52.0
TER|nrefs:1|case:lc|tok:tercom|norm:no|punct:yes|asian:no|version:2.0.0 = 69.0
现在让我们启用chrF++它是 chrF 的修订版本,它考虑了单词 n-gram。观察签名中的nw:0变化情况:nw:2
$ sacrebleu -t wmt17 -l en-de -i output.detok.txt -m bleu chrf ter --chrf-word-order 2
BLEU|nrefs:1|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0 = 20.8 <stripped>
chrF2++|nrefs:1|case:mixed|eff:yes|nc:6|nw:2|space:no|version:2.0.0 = 49.0
TER|nrefs:1|case:lc|tok:tercom|norm:no|punct:yes|asian:no|version:2.0.0 = 69.0
特定于指标的参数在以下输出中进行了详细说明--help:
BLEU related arguments:
--smooth-method {none,floor,add-k,exp}, -s {none,floor,add-k,exp}
Smoothing method: exponential decay, floor (increment zero counts), add-k (increment num/denom by k for n>1), or none. (Default: exp)
--smooth-value BLEU_SMOOTH_VALUE, -sv BLEU_SMOOTH_VALUE
The smoothing value. Only valid for floor and add-k. (Defaults: floor: 0.1, add-k: 1)
--tokenize {none,zh,13a,char,intl,ja-mecab,ko-mecab}, -tok {none,zh,13a,char,intl,ja-mecab,ko-mecab}
Tokenization method to use for BLEU. If not provided, defaults to `zh` for Chinese, `ja-mecab` for Japanese, `ko-mecab` for Korean and `13a` (mteval) otherwise.
--lowercase, -lc If True, enables case-insensitivity. (Default: False)
--force Insist that your tokenized input is actually detokenized.
chrF related arguments:
--chrf-char-order CHRF_CHAR_ORDER, -cc CHRF_CHAR_ORDER
Character n-gram order. (Default: 6)
--chrf-word-order CHRF_WORD_ORDER, -cw CHRF_WORD_ORDER
Word n-gram order (Default: 0). If equals to 2, the metric is referred to as chrF++.
--chrf-beta CHRF_BETA
Determine the importance of recall w.r.t precision. (Default: 2)
--chrf-whitespace Include whitespaces when extracting character n-grams. (Default: False)
--chrf-lowercase Enable case-insensitivity. (Default: False)
--chrf-eps-smoothing Enables epsilon smoothing similar to chrF++.py, NLTK and Moses; instead of effective order smoothing. (Default: False)
TER related arguments (The defaults replicate TERCOM's behavior):
--ter-case-sensitive Enables case sensitivity (Default: False)
--ter-asian-support Enables special treatment of Asian characters (Default: False)
--ter-no-punct Removes punctuation. (Default: False)
--ter-normalized Applies basic normalization and tokenization. (Default: False)
版本签名
您可能已经注意到,sacreBLEU 会生成版本字符串,例如BLEU|nrefs:1|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0出于可重复性的原因。强烈建议在您的论文中分享这些签名!
输出其他元数据
Sacrebleu 知道一些测试集的元数据,你可以像这样输出它:
$ sacrebleu -t wmt21 -l en-de --echo src docid ref | head 2
Couple MACED at California dog park for not wearing face masks while having lunch (VIDEO) - RT USA News rt.com.131279 Paar in Hundepark in Kalifornien mit Pfefferspray besprüht, weil es beim Mittagessen keine Masken trug (VIDEO) - RT USA News
There's mask-shaming and then there's full on assault. rt.com.131279 Masken-Shaming ist eine Sache, Körperverletzung eine andere.
如果请求多个字段,它们将作为制表符分隔的列(TSV)输出。
要查看可用字段,请添加--echo asdf(或其他一些垃圾数据):
$ sacrebleu -t wmt21 -l en-de --echo asdf
sacreBLEU: No such field asdf in test set wmt21 for language pair en-de.
sacreBLEU: available fields for wmt21/en-de: src, ref:A, ref, docid, origlang
翻译支持
如果您对翻译效果感兴趣,您可以在具有给定原始语言的句子子集上评估 BLEU(根据origlang原始 SGM 文件中的标签识别)。例如,仅针对翻译成英语的原始德语句子进行评估:
$ sacrebleu -t wmt13 -l de-en --origlang=de -i my-wmt13-output.txt
并根据补码(在本例中为origlangen、fr、cs、ru、de)进行评估,请使用:
$ sacrebleu -t wmt13 -l de-en --origlang=non-de -i my-wmt13-output.txt
请注意,评估器将仅在请求的子集上返回 BLEU 分数,但它希望您通过整个翻译的测试集。
语言和预处理
蓝光
--lowercase您可以通过传递给 sacreBLEU来计算不区分大小写的 BLEU- BLEU 的默认标记器
13a模仿了mteval-v13aMoses 的脚本。 - 其他标记器是:
none这根本不会应用任何类型的标记化char用于与语言无关的字符级标记化intl应用国际标记化并模仿mteval-v14摩西的脚本zh使用分词器分离出汉字并标记非中文部分13aja-mecab使用MeCab形态分析器标记日语输入ko-mecab使用MeCab-ko形态分析器标记韩语输入spm使用从 Flores-101 数据集 ( https://github.com/facebookresearch/flores#list-of-languages ) 构建的 SentencePiece 模型。注意:如果在本地找不到,将自动获取规范的 .spm 文件。
- 您可以使用
--tokenizesacreBLEU 的标志来切换标记器。或者,如果您使用--language-pair/-l,提供语言对字符串zh,ja-mecab并且如果目标语言分别是or或,ko-mecab则将使用标记器。zhjako - 请注意,假设没有自动检测语言,因此您需要确保正确选择了Japanese、Korean和Chinese的标记器。
默认的 13a 分词器会为日语产生较差的结果:
$ sacrebleu kyoto-test.ref.ja -i kyoto-test.hyp.ja -b
2.1
让我们使用分ja-mecab词器:
$ sacrebleu kyoto-test.ref.ja -i kyoto-test.hyp.ja --tokenize ja-mecab -b
14.5
如果您提供语言对,sacreBLEU 将自动使用 ja-mecab:
$ sacrebleu kyoto-test.ref.ja -i kyoto-test.hyp.ja -l en-ja -b
14.5
chrF / chrF++
chrF 在处理字符 n-gram 时对无预处理应用最小:
- 如果您通过
--chrf-whitespace,则在计算字符 n-gram 时将保留空白字符。 - 如果您通过
--chrf-lowercase, sacreBLEU 将计算不区分大小写的 chrF。 - 如果您启用非零
--chrf-word-order(通过2)chrF++,将在内部应用一个非常简单的标点符号化。
TER
翻译错误率 (TER) 有自己的特殊标记器,您可以通过命令行配置。提供的默认值与上游 TER 实现 (TERCOM) 兼容,但您仍然可以通过命令行修改行为:
- TER 默认情况下不区分大小写。通过
--ter-case-sensitive以启用区分大小写。 - 通过
--ter-normalize应用一般的西方标记化 - 通过
--ter-asian-support以启用亚洲字符的标记化。如果提供了--ter-normalize,则两者都将被应用。 - 通过
--ter-no-punct去除标点符号。
多参考评价
所有三个指标都支持在评估期间使用多个参考。让我们首先将所有引用作为位置参数传递:
$ sacrebleu ref1 ref2 -i system -m bleu chrf ter
BLEU|nrefs:2|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0 = 61.8 <stripped>
chrF2|nrefs:2|case:mixed|eff:yes|nc:6|nw:0|space:no|version:2.0.0 = 75.0
TER|nrefs:2|case:lc|tok:tercom|norm:no|punct:yes|asian:no|version:2.0.0 = 31.2
或者(不太推荐),我们也可以使用制表符作为分隔符来连接引用。在这种情况下不要忘记通过--num-refs/-nr!
$ paste ref1 ref2 > refs.tsv
$ sacrebleu refs.tsv --num-refs 2 -i system -m bleu
BLEU|nrefs:2|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0 = 61.8 <stripped>
多系统评估
从 version>=2.0.0开始,SacreBLEU 支持针对特定测试集和语言对评估任意数量的系统。这样做的好处是可以在格式良好的表格中查看所有结果。
让我们将所有与 shell glob 匹配的系统输出文件传递newstest2017.online-*给 sacreBLEU 进行评估:
$ sacrebleu -t wmt17 -l en-de -i newstest2017.online-* -m bleu chrf
╒═══════════════════════════════╤════════╤═════════╕
│ System │ BLEU │ chrF2 │
╞═══════════════════════════════╪════════╪═════════╡
│ newstest2017.online-A.0.en-de │ 20.8 │ 52.0 │
├───────────────────────────────┼────────┼─────────┤
│ newstest2017.online-B.0.en-de │ 26.7 │ 56.3 │
├───────────────────────────────┼────────┼─────────┤
│ newstest2017.online-F.0.en-de │ 15.5 │ 49.3 │
├───────────────────────────────┼────────┼─────────┤
│ newstest2017.online-G.0.en-de │ 18.2 │ 51.6 │
╘═══════════════════════════════╧════════╧═════════╛
-----------------
Metric signatures
-----------------
- BLEU nrefs:1|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0
- chrF2 nrefs:1|case:mixed|eff:yes|nc:6|nw:0|space:no|version:2.0.0
您还可以将输出格式更改为latex:
$ sacrebleu -t wmt17 -l en-de -i newstest2017.online-* -m bleu chrf -f latex
\begin{tabular}{rcc}
\toprule
System & BLEU & chrF2 \\
\midrule
newstest2017.online-A.0.en-de & 20.8 & 52.0 \\
newstest2017.online-B.0.en-de & 26.7 & 56.3 \\
newstest2017.online-F.0.en-de & 15.5 & 49.3 \\
newstest2017.online-G.0.en-de & 18.2 & 51.6 \\
\bottomrule
\end{tabular}
...
单一系统评估的置信区间
当启用该--confidence标志时,SacreBLEU 将打印 (1) 实际系统分数,(2) 从引导重采样估计的真实平均值和 (3)平均值周围的95%置信区间。默认情况下,引导重采样的数量为 1000(bs:1000在签名中),可以通过以下方式更改--confidence-n:
$ sacrebleu -t wmt17 -l en-de -i output.detok.txt -m bleu chrf --confidence -f text --short
BLEU|#:1|bs:1000|rs:12345|c:mixed|e:no|tok:13a|s:exp|v:2.0.0 = 22.675 (μ = 22.669 ± 0.598) ...
chrF2|#:1|bs:1000|rs:12345|c:mixed|e:yes|nc:6|nw:0|s:no|v:2.0.0 = 51.953 (μ = 51.953 ± 0.462)
注意:虽然作为一项功能提供,但仅访问一个系统的置信区间可能不会透露有关基础模型的太多信息。跨多个系统执行配对统计测试通常更有意义 。
注意:重采样时,numpy随机数生成器 (RNG) 的种子固定为12345. 如果您想放松这一点并设置自己的种子,可以将环境变量导出为SACREBLEU_SEED整数。或者,您可以导出
SACREBLEU_SEED=None以跳过初始化 RNG 的种子并允许非确定性行为。
多系统评估的配对显着性检验
理想情况下,在以下情况下,人们可以访问许多系统,例如 (1) 调查新添加的功能是否会产生与基线明显不同的分数或 (2) 评估特定共享任务的提交。SacreBLEU 提供了两种不同的成对显着性检验,广泛用于 MT 研究。
配对引导重采样 (--paired-bs)
这是论文Statistical Significance Tests for Machine Translation Evaluation的有效实现,结果与参考 Moses implementation兼容。引导重采样的数量可以通过--paired-bs-n标志更改,默认为 1000。
启动时,配对引导重采样将执行:
- 引导重采样以估计所有系统和基线的 95% CI
- 基线和每个系统之间的显着性检验以计算p 值。
配对近似随机化(--paired-ar)
配对近似随机化 (AR) 是另一种类型的配对显着性检验,据称在 I 类错误方面比配对引导重采样更准确(Riezler 和 Maxwell III,2005 年)。I 类错误表明当原假设为真时无法拒绝原假设。换句话说,AR 在理论上应该对跨系统的细微变化更加稳健。
我们的实现经过验证与Multeval 工具包的结果兼容,该工具包还使用配对 AR 测试进行配对比较。默认情况下,近似随机化试验的数量设置为 10,000。这可以用--paired-ar-n标志来改变。
运行测试
- 提供给的第一个系统
--input/-i将自动作为您要比较其他系统的基准系统。 - 使用
--input/-i时,系统输出文件会根据文件路径自动命名。为简单起见,如果 SacreBLEU也出现在其他系统中,它将自动丢弃基线系统。如果您想通过传递. 在这里,该文件也不会被视为候选系统。-i systems/baseline.txt systems/*.txtbaseline.txt - 或者,您也可以使用重定向到 SacreBLEU 的制表符分隔的输入文件。在这种情况下,第一列假设将作为基线系统。但是,不推荐使用此方法,因为它不允许以人类可读的方式命名您的系统。相反,它将按照制表符分隔输入中的列顺序从 1 到 N 枚举系统。
- 在 Linux 和 Mac OS X 上,您可以通过传递标志在多个 CPU 上启动测试
--paired-jobs N。如果N == 0,SacreBLEU 将为每个配对比较启动一个工人。如果N > 0,N将产生工作进程。此功能将大大加快运行时间,特别是如果您希望计算TER指标。
示例:配对引导重采样
在下面的示例中,我们选择newstest2017.LIUM-NMT.4900.en-de作为基线,并使用配对引导重采样将其与其他 4 个 WMT17 提交进行比较。根据结果,以下比较不能拒绝原假设(即两个系统基本相同)(显着性水平为 0.05):
- 基线和在线 B 系统之间的 0.1 BLEU 差异(p = 0.3077)
$ sacrebleu -t wmt17 -l en-de -i newstest2017.LIUM-NMT.4900.en-de newstest2017.online-* -m bleu chrf --paired-bs
╒════════════════════════════════════════════╤═════════════════════╤══════════════════════╕
│ System │ BLEU (μ ± 95% CI) │ chrF2 (μ ± 95% CI) │
╞════════════════════════════════════════════╪═════════════════════╪══════════════════════╡
│ Baseline: newstest2017.LIUM-NMT.4900.en-de │ 26.6 (26.6 ± 0.6) │ 55.9 (55.9 ± 0.5) │
├────────────────────────────────────────────┼─────────────────────┼──────────────────────┤
│ newstest2017.online-A.0.en-de │ 20.8 (20.8 ± 0.6) │ 52.0 (52.0 ± 0.4) │
│ │ (p = 0.0010)* │ (p = 0.0010)* │
├────────────────────────────────────────────┼─────────────────────┼──────────────────────┤
│ newstest2017.online-B.0.en-de │ 26.7 (26.6 ± 0.7) │ 56.3 (56.3 ± 0.5) │
│ │ (p = 0.3077) │ (p = 0.0240)* │
├────────────────────────────────────────────┼─────────────────────┼──────────────────────┤
│ newstest2017.online-F.0.en-de │ 15.5 (15.4 ± 0.5) │ 49.3 (49.3 ± 0.4) │
│ │ (p = 0.0010)* │ (p = 0.0010)* │
├────────────────────────────────────────────┼─────────────────────┼──────────────────────┤
│ newstest2017.online-G.0.en-de │ 18.2 (18.2 ± 0.5) │ 51.6 (51.6 ± 0.4) │
│ │ (p = 0.0010)* │ (p = 0.0010)* │
╘════════════════════════════════════════════╧═════════════════════╧══════════════════════╛
------------------------------------------------------------
Paired bootstrap resampling test with 1000 resampling trials
------------------------------------------------------------
- Each system is pairwise compared to Baseline: newstest2017.LIUM-NMT.4900.en-de.
Actual system score / bootstrap estimated true mean / 95% CI are provided for each metric.
- Null hypothesis: the system and the baseline translations are essentially
generated by the same underlying process. For a given system and the baseline,
the p-value is roughly the probability of the absolute score difference (delta)
or higher occurring due to chance, under the assumption that the null hypothesis is correct.
- Assuming a significance threshold of 0.05, the null hypothesis can be rejected
for p-values < 0.05 (marked with "*"). This means that the delta is unlikely to be attributed
to chance, hence the system is significantly "different" than the baseline.
Otherwise, the p-values are highlighted in red.
- NOTE: Significance does not tell whether a system is "better" than the baseline but rather
emphasizes the "difference" of the systems in terms of the replicability of the delta.
-----------------
Metric signatures
-----------------
- BLEU nrefs:1|bs:1000|seed:12345|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0
- chrF2 nrefs:1|bs:1000|seed:12345|case:mixed|eff:yes|nc:6|nw:0|space:no|version:2.0.0
示例:配对近似随机化
现在让我们为相同的比较运行配对近似随机化测试。根据结果,这些发现与配对自举重采样测试兼容。但是,比较的 p 值比配对引导重采样测试baseline vs. online-B高得多 ( )。0.8066
(请注意, AR 测试不提供围绕真实均值的置信区间,因为它不执行自举重采样。)
$ sacrebleu -t wmt17 -l en-de -i newstest2017.LIUM-NMT.4900.en-de newstest2017.online-* -m bleu chrf --paired-ar
╒════════════════════════════════════════════╤═══════════════╤═══════════════╕
│ System │ BLEU │ chrF2 │
╞════════════════════════════════════════════╪═══════════════╪═══════════════╡
│ Baseline: newstest2017.LIUM-NMT.4900.en-de │ 26.6 │ 55.9 │
├────────────────────────────────────────────┼───────────────┼───────────────┤
│ newstest2017.online-A.0.en-de │ 20.8 │ 52.0 │
│ │ (p = 0.0001)* │ (p = 0.0001)* │
├────────────────────────────────────────────┼───────────────┼───────────────┤
│ newstest2017.online-B.0.en-de │ 26.7 │ 56.3 │
│ │ (p = 0.8066) │ (p = 0.0385)* │
├────────────────────────────────────────────┼───────────────┼───────────────┤
│ newstest2017.online-F.0.en-de │ 15.5 │ 49.3 │
│ │ (p = 0.0001)* │ (p = 0.0001)* │
├────────────────────────────────────────────┼───────────────┼───────────────┤
│ newstest2017.online-G.0.en-de │ 18.2 │ 51.6 │
│ │ (p = 0.0001)* │ (p = 0.0001)* │
╘════════════════════════════════════════════╧═══════════════╧═══════════════╛
-------------------------------------------------------
Paired approximate randomization test with 10000 trials
-------------------------------------------------------
- Each system is pairwise compared to Baseline: newstest2017.LIUM-NMT.4900.en-de.
Actual system score is provided for each metric.
- Null hypothesis: the system and the baseline translations are essentially
generated by the same underlying process. For a given system and the baseline,
the p-value is roughly the probability of the absolute score difference (delta)
or higher occurring due to chance, under the assumption that the null hypothesis is correct.
- Assuming a significance threshold of 0.05, the null hypothesis can be rejected
for p-values < 0.05 (marked with "*"). This means that the delta is unlikely to be attributed
to chance, hence the system is significantly "different" than the baseline.
Otherwise, the p-values are highlighted in red.
- NOTE: Significance does not tell whether a system is "better" than the baseline but rather
emphasizes the "difference" of the systems in terms of the replicability of the delta.
-----------------
Metric signatures
-----------------
- BLEU nrefs:1|ar:10000|seed:12345|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0
- chrF2 nrefs:1|ar:10000|seed:12345|case:mixed|eff:yes|nc:6|nw:0|space:no|version:2.0.0
在 Python 中使用 SacreBLEU
对于评估,从 Python 脚本计算 BLEU、chrF 或 TER 可能很有用。推荐的方法是使用面向对象的 API,通过创建metrics.BLEU类的实例,例如:
In [1]: from sacrebleu.metrics import BLEU, CHRF, TER
...:
...: refs = [ # First set of references
...: ['The dog bit the man.', 'It was not unexpected.', 'The man bit him first.'],
...: # Second set of references
...: ['The dog had bit the man.', 'No one was surprised.', 'The man had bitten the dog.'],
...: ]
...: sys = ['The dog bit the man.', "It wasn't surprising.", 'The man had just bitten him.']
In [2]: bleu = BLEU()
In [3]: bleu.corpus_score(sys, refs)
Out[3]: BLEU = 48.53 82.4/50.0/45.5/37.5 (BP = 0.943 ratio = 0.944 hyp_len = 17 ref_len = 18)
In [4]: bleu.get_signature()
Out[4]: nrefs:2|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0
In [5]: chrf = CHRF()
In [6]: chrf.corpus_score(sys, refs)
Out[6]: chrF2 = 59.73
可变数量的参考文献
现在让我们删除第一个系统句子的第一个参考句子,The dog bit the man.将其替换为Noneor 或空字符串''。这允许每个假设使用可变数量的参考段。观察签名如何从nrefs:2变为nrefs:var:
In [1]: from sacrebleu.metrics import BLEU, CHRF, TER
...:
...: refs = [ # First set of references
# 1st sentence does not have a ref here
...: ['', 'It was not unexpected.', 'The man bit him first.'],
...: # Second set of references
...: ['The dog had bit the man.', 'No one was surprised.', 'The man had bitten the dog.'],
...: ]
...: sys = ['The dog bit the man.', "It wasn't surprising.", 'The man had just bitten him.']
In [2]: bleu = BLEU()
In [3]: bleu.corpus_score(sys, refs)
Out[3]: BLEU = 29.44 82.4/42.9/27.3/12.5 (BP = 0.889 ratio = 0.895 hyp_len = 17 ref_len = 19)
In [4]: bleu.get_signature()
Out[4]: nrefs:var|case:mixed|eff:no|tok:13a|smooth:exp|version:2.0.0
兼容性 API
您还可以使用兼容性 API 提供围绕面向对象 API 的包装函数来计算句子级和语料库级 BLEU、chrF 和 TER:(应该注意,此 API 可以在未来的版本中删除)
In [1]: import sacrebleu
...:
...: refs = [ # First set of references
...: ['The dog bit the man.', 'It was not unexpected.', 'The man bit him first.'],
...: # Second set of references
...: ['The dog had bit the man.', 'No one was surprised.', 'The man had bitten the dog.'],
...: ]
...: sys = ['The dog bit the man.', "It wasn't surprising.", 'The man had just bitten him.']
In [2]: sacrebleu.corpus_bleu(sys, refs)
Out[2]: BLEU = 48.53 82.4/50.0/45.5/37.5 (BP = 0.943 ratio = 0.944 hyp_len = 17 ref_len = 18)
执照
SacreBLEU 在Apache 2.0 许可下获得许可。
学分
这都是 Rico Sennrich 的主意。最初由马特·波斯特撰写。Martin Popel (@martinpopel) 和 Ozan Caglayan (@ozancaglayan) 提供的新功能和持续支持。
如果您使用 SacreBLEU,请引用以下内容:
@inproceedings{post-2018-call,
title = "A Call for Clarity in Reporting {BLEU} Scores",
author = "Post, Matt",
booktitle = "Proceedings of the Third Conference on Machine Translation: Research Papers",
month = oct,
year = "2018",
address = "Belgium, Brussels",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/W18-6319",
pages = "186--191",
}
发行说明
-
2.2.1 (2022-09-13) 修正:标准用法是返回(并使用)每个引用两次。
-
2.2.0 (2022-07-25) 特点:
- 添加了 WMT21 数据集(感谢@BrighXiaoHan)
--echo现在公开可用的文档元数据(例如,docid、流派、origlang)- 错误修正:允许空引用 (#161)
- 添加韩语标记器(感谢@NoUnique)
引擎盖下:
- 适度的代码重构
- 处理后的文件在 ~/.sacrebleu 下采用了更合理的内部命名方案(例如,wmt17_ms.zh-en.src 而不是 zh-en.zh)
- 处理后的文件扩展名对应于传递给的值
--echo(例如,“src”) - 现在明确表示 NoneTokenizer
- 摆脱了用于下载的“.lock”锁定文件(使用 tarball 本身)
非常感谢 @BrightXiaoHan ( https://github.com/BrightXiaoHan ) 在此版本中的大部分代码贡献。
-
2.1.0 (2022-05-19) 特点:
- 添加
-tok spm了多语言 SPM 标记化 (#168)(感谢 Facebook 的 Naman Goyal 和 James Cross)
修复:
- 处理由于标记器中的 LRU 缓存而导致的潜在内存使用问题 (#167)
- 错误修正:BLEU.corpus_score() 现在使用 max_ngram_order (#173)
- 将 ja-mecab 升级到 1.0.5 (#196)
- 添加
-
2.0.0 (2021-07-18)
- 构建:将 Windows 和 OS X 测试添加到 Travis CI。
- 改进文档和类型注释。
- 放弃
Python < 3.6支持并迁移到 f-strings。 - 放松
portalocker版本锁定,添加regex, tabulate, numpy依赖项。 isinstance通过检查删除输入类型操作。如果用户不遵守预期的注释,则会引发异常。过去的鲁棒性尝试会导致混淆和混淆分数错误(#121)- 默认情况下,所有指标都支持每个段的变量 # 引用。它仍然只能通过 API 获得。
- 通过包的帮助在表格输出(多系统评估模式)中使用彩色字符串
colorama。 - 标记器:向标记器添加缓存,这似乎可以加快速度。
intl标记器:使用regex模块。对于特定的测试集评估,速度从 ~4 秒变为 ~0.6 秒。(#46)- 签名:格式更改(主要是删除“+”分隔符,因为它干扰了 chrF++)。字段分隔符现在是“|” 和键值用“:”而不是“。”分隔。
- 签名:布尔真/假值缩短为是/否。
- 签名:引用
var数是使用可变引用数的情况。 - 签名:向 BLEU 和 chrF 签名添加有效顺序(是/否)。
- 指标:将所有指标缩放到 [0, 100] 范围内 (#140)
- Metrics API:对指标使用显式参数名称和默认值,而不是传递晦涩的
argparse.Namespace对象。 - Metrics API:
Metric引入了一个基本抽象类来指导进一步的度量开发。此类定义应在派生类中实现的方法,并为通用功能提供样板方法。以这种方式实施的新指标将自动支持重要性测试。 - 指标 API:所有指标现在
references在初始化时接收一个可选参数来处理和缓存引用。通过这种方式,例如在使用显着性检验时,针对相同参考对不同系统的进一步评估变得更快。 - BLEU:如果根本没有 n-gram 匹配,跳过平滑并返回 0.0 BLEU (#141)。
- CHRF:添加了多引用支持,根据 chrF++.py 验证分数,添加了测试用例。
word_orderCHRF:通过参数添加了 chrF+ 支持。添加了针对 chrF++.py 的测试用例。通过 CLI (--chrf-word-order) (#124) 公开它- CHRF:增加禁用有效订单平滑的可能性(通过--chrf-eps-smoothing)。这样,获得的分数与 chrF++、Moses 和 NLTK 实现完全相同。我们将有效排序保留为兼容性的默认值,因为这只会影响非常短句子的句子级别评分。(#144)
- CLI:
--input/-i现在可以摄取多个系统。出于这个原因,位置references应该总是在-i标志之前。 - CLI:允许通过 CLI 修改 TER 参数。我们仍然保留 TERCOM 默认值。
- CLI:使用 --chrf 和 --ter 为特定于指标的参数添加前缀。为了保持兼容性,BLEU 参数名称保持不变。
--helpCLI:为清楚起见,在打印时将特定于度量的参数分开。- CLI:添加了
--format/-f标志。现在json默认为单系统输出模式。如果您想永久保留旧的文本格式,您可以导出SACREBLEU_FORMAT=text到您的 shell。 - CLI:对于多系统模式,
json回退到纯文本。latex只能为多系统模式生成输出。 - CLI:sacreBLEU 现在支持以有效的方式评估给定测试集的多个系统。通过使用
tabulate包,结果可以很好地呈现为纯文本表格、LaTeX、HTML 或 RST(参见 --format/-f 参数)。系统可以作为纯文本文件列表给出,也可以-i/--input作为制表符分隔的单个流重定向到STDIN. 在前一种情况下,文件的基本名称将自动用作系统名称。 - 统计测试:sacreBLEU 现在支持通过对单系统评估 (
--confidenceflag) 进行引导重采样以及在评估多个系统(#40 和 #78)时配对引导重采样 (--paired-bs) 和配对近似随机化测试 ( ) 进行置信区间估计。--paired-ar
-
1.5.1 (2021-03-05)
- 修复 WMT18 额外测试集 (test-ts) 的提取错误 (#142)
- 为多语言 TEDx 添加了验证和测试数据集
-
1.5.0 (2021-01-15)
- 修复 chrF 中的断言错误 (#121)
- 为 BLEU 和 TER添加缺失
__repr__()的方法 - TER: 使用时修复异常
--short(#131) - 将 Mecab 版本固定到 1.0.3 以支持 Python 3.5
- [API 更改]:平滑的默认值
floor现在是 0.1 而不是 0。 - [API 更改]:
sacrebleu.sentence_bleu()现在使用exp平滑方法,与 CLI 的 --sentence-level 行为完全相同。这样做主要是为了使两种方法的行为相同。 - 为 BLEU 签名添加平滑值 (#98)
- 数据集:修复 IWSLT 链接 (#128)
- 允许 BLEU 的可变引用数量(仅通过 API)(#130)。感谢 Ondrej Dusek (@tuetschek)
-
1.4.14 (2020-09-13)
- 添加了基于字符的标记化 (
-tok char)。感谢克里斯蒂安·费德曼。 - 添加了 TER (
-m ter)。感谢 Ales Tamchyna!(修复 #90) - 允许将脚本作为独立实用程序调用(修复 #86)
- 修复类型注释问题(修复 #100)并将 sacrebleu 标记为支持 mypy
- 添加了 WMT20 稳健性测试集:
- wmt20/robust/set1 (en-ja, en-de)
- wmt20/robust/set2 (en-ja, ja-en)
- wmt20/robust/set3 (de-en)
- 添加了基于字符的标记化 (
-
1.4.13 (2020-07-30)
- 添加了 WMT20 新闻测试测试集 (#103)
- 使 mecab3-python 成为一个额外的依赖项,使代码适应新的 mecab3-python 这也修复了最近的 Windows 安装问题 (#104) 现在应该通过 sacrebleu[ja] 包显式安装日语支持。
- 修复 corpus_bleu() 的返回类型注释
- 改进 sentence_score 的文档,不允许单个 ref 字符串 (#98)
-
1.4.12 (2020-07-03)
- 修复部署错误 (#96)
-
1.4.11 (2020-07-03)
- 添加了 Multi30k 多模式 MT 测试集元数据
- 将所有标记器重构为各自的类(修复 #85)
- 将所有指标重构为各自的类
- 将实用程序功能移至
utils.py BLEUSignature使用和CHRFSignature类实现签名- 简化汉字检查(修复 #5)
- 标记器的统一通用正则表达式标记化代码(修复 #27)
- 修复了没有提供测试集时 --detail 失败的问题
- 修复了使用制表符分隔的参考流时多参考 BLEU 失败的问题
- 删除了 ChrF 不起作用的小写选项 (#85)
- 简化 ChrF 并使用与 BLEU 相同的 I/O 逻辑,以允许未来的多参考读取
- 使用参考 chrF++ 实现为 chrF 添加了分数回归测试
- 添加了多引用和标记器和签名测试
-
1.4.10 (2020-05-30)
- 使用 mecab 标记器修复了签名中的错误
- 清理弃用警告(感谢 Karthikeyan Singaravelan @tirkarthi)
- 现在只将外部类型
模块列为 Python 的依赖
<= 3.4项,因为它已集成在 Python 3.5 的标准库中(感谢 Erwan de Lépinau @ErwanDL)。 - 向 pypi 添加了许可证(感谢 Mark Harfouche @hmaarrfk)
-
1.4.9 (2020-04-30)
- 更改
get_available_testsets()为返回列表 - 从要求中删除日本 MeCab 标记器。(必须手动安装以避免 Windows 不兼容)。非常感谢 Makoto Morishita (@MorinoseiMorizo)。
- 更改
-
1.4.8 (2020-04-26)
- 添加到 API:
- 获取源文件()
- 获取参考文件()
- get_available_testsets()
- get_langpairs_for_testset()
- 一些内部重构
- 修复了一些 WMT19/google 测试集的描述
- 添加 API 测试用例 (test/test_apy.py)
- 添加到 API:
-
1.4.7 (2020-04-19)
- 添加了 Google 的额外 wmt19/en-de refs (-t wmt19/google/{ar,arp,hqall,hqp,hqr,wmtp} ) arxiv.org/abs/2004.06063)
- 将 SACREBLEU_DIR 和 smart_open 恢复为导出(感谢 Thomas Liao @tholiao)
-
1.4.6 (2020-03-28)
- 作为一个模块的大型内部重组(感谢 Thamme Gowda @thammegowda)
-
1.4.5 (2020-03-28)
- 添加了日语 MeCab 标记器 (
-tok ja-mecab)(感谢 Makoto Morishita @MorinoseiMorizo) - 添加了 wmt20/dev 测试集(感谢 Martin Popel @martinpopel)
- 添加了日语 MeCab 标记器 (
-
1.4.4 (2020-03-10)
- 平滑变化(Sebastian Nickels @sn1c)
- 修复了仅在 n > 2 时对 n-gram 应用平滑的错误
- 为方法“floor”(0)和“add-k”(1)添加了默认平滑值
--list-t现在与(例如,sacrebleu -t wmt19 --list)组合时返回任务的所有语言对列表- 为 IWSLT17 添加了缺失的语言
- 小的代码改进(Thomas Liao @tholiao)
- 平滑变化(Sebastian Nickels @sn1c)
-
1.4.3 (2019-12-02)
- 错误修正:处理 CHRF 的结果对象
- 改进的 API 示例
-
1.4.2 (2019-10-11)
- chrF 签名中省略了标记化变体;它仅与 BLEU 相关(感谢 Martin Popel)
- 错误修正:调用 sentence_bleu(感谢 Rachel Bawden)
- Python API 的文档示例(感谢 Vlad Lyalin)
- 对 corpus_chrf 和 sentence_chrf 的调用现在返回一个对象而不是浮点数(使用 result.score)
-
1.4.1 (2019-09-11)
- 通过 -sl (--sentence-level) 添加句子级评分
-
1.4.0 (2019-09-10)
- 非常感谢 Martin Popel 所做的所有更改!
- 添加了对级联测试集的评估(例如,
-t wmt17,wmt18)。只要它们都具有相同的语言对就可以工作。 - 添加
sacrebleu --origl