Skip to content

BLEU / ROUGE 文本质量评估

五层读懂一个词。这次拆的是:BLEU 和 ROUGE--评估生成文本与参考答案重叠度的两大经典指标。BLEU 测精确率(生成内容有多少在参考里),ROUGE 测召回率(参考内容有多少被生成出来)。本质都是 N-gram 匹配,但都只看字面不计语义——"猫在垫子上" 和 "垫子上有只猫" 得分很低。LLM 时代正在被 BERTScore/COMET/GPT-Eval 取代。


L1 · 一句话点破

BLEU = 生成文本相对于参考答案的 N-gram 精确率(机器翻译专用),ROUGE = 参考答案相对于生成文本的 N-gram 召回率(摘要专用)。两者都是字面匹配指标:比较生成文本和参考答案的 N-gram(连续 N 个词)重叠度。优点是简单可复现,致命缺点是不计语义——同义改写、换词序全扣分。LLM 时代被基于 embedding 的语义指标(BERTScore/COMET)和 LLM-as-Judge 快速取代。


L2 · 通俗类比

BLEU 像「老师对答案」

  • 学生翻译了一句话
  • 老师有标准答案
  • BLEU 数学生用了多少个标准答案里的词(精确率)
  • 多用标准答案里的词 → 高分
  • 但如果学生用自己的话说,哪怕更地道,BLEU 扣分

ROUGE 像「检查覆盖度」

  • 学生写了一篇摘要
  • 老师有关键信息列表
  • ROUGE 数关键信息有多少被覆盖(召回率)
  • 覆盖越多 → 高分
  • 但学生如果写了 10 倍长度的摘要,ROUGE 自然高(需要配合精确率)

两者的本质

指标如果翻译"我爱你"
参考I love you
输出 1(精确)I love you → BLEU=100%, ROUGE=100%
输出 2(同义)I'm in love with you → BLEU≈20%, ROUGE≈20%
输出 3(不相关)The weather is nice → BLEU=0%, ROUGE=0%

问题:输出 2 其实很好(语义对),但 BLEU/ROUGE 给低分。这就是 N-gram 匹配的致命缺陷。

计算直觉

参考: "the cat sat on the mat"
生成: "the cat is on the mat"

Unigram (1-gram) 匹配: the, cat, on, the, mat = 5/6 ≈ 83%
Bigram (2-gram) 匹配:  the_cat, on_the, the_mat = 3/5 ≈ 60%
→ BLEU ≈ 几何平均 ≈ 70%
→ 加上长度惩罚(参考 6 词,生成 6 词,无惩罚)
→ BLEU = 70%

代价

  • BLEU/ROUGE 高 ≠ 语义对——同义改写被扣分
  • 单一参考答案不够(不同人能写出不同好翻译)
  • 不看流畅度和语法(可以是 BLEU 高分但语法破碎)
  • 不适合开放性任务(对话、创意写作)

适用

  • 机器翻译(BLEU 的原始场景)
  • 自动摘要(ROUGE 的原始场景)
  • 有明确参考答案的任务
  • 快速基线评估(不依赖 LLM 打分)

L3 · 正经定义

BLEU(Bilingual Evaluation Understudy): 由 Papineni et al. 2002 提出,衡量机器翻译输出与人工参考翻译的 N-gram 精确率。

$$ BLEU = BP \cdot \exp\left(\sum_{n=1}^{N} w_n \log p_n\right) $$

  • $p_n$:N-gram 精确率(生成文本的 N-gram 有多少出现在参考中)
  • $w_n$:各 N-gram 的权重(通常 $w_n = 1/N$)
  • $BP$:Brevity Penalty(长度惩罚,防止过短翻译得高分)

Brevity Penalty

$$ BP = \begin{cases} 1 & \text{if } c > r \ \exp(1 - r/c) & \text{if } c \le r \end{cases} $$

  • $c$:生成译文长度
  • $r$:最接近的参考译文长度
  • 生成太短 → 惩罚

ROUGE(Recall-Oriented Understudy for Gisting Evaluation): 由 Lin 2004 提出,衡量自动摘要对人工参考摘要的召回率。

ROUGE-N(N-gram 召回率):

$$ ROUGE\text{-}N = \frac{\sum \text{Count}_{match}(\text{N-gram})}{\sum \text{Count}(\text{N-gram in reference})} $$

ROUGE-L(最长公共子序列 LCS):

$$ R_{LCS} = \frac{LCS(X, Y)}{|Y|}, \quad P_{LCS} = \frac{LCS(X, Y)}{|X|}, \quad F_{LCS} = \frac{(1+\beta^2)R_{LCS}P_{LCS}}{R_{LCS} + \beta^2 P_{LCS}} $$

$\beta$ 控制召回权重(通常 $\beta>1$ 偏向召回)。

参考资料

  • 📄 Papineni et al., BLEU: a Method for Automatic Evaluation of Machine Translation, ACL 2002
  • 📄 Lin, ROUGE: A Package for Automatic Evaluation of Summaries, ACL 2004
  • 📄 Zhang et al., BERTScore: Evaluating Text Generation with BERT, ICLR 2020
  • 📄 Rei et al., COMET: A Neural Framework for MT Evaluation, EMNLP 2020
  • 🔧 HuggingFace evaluate:evaluate.load("bleu"), evaluate.load("rouge")

L4 · 原理深挖

4.1 BLEU 的详细计算

Step 1: 计算每个 N-gram 的精确率

参考: "the cat is on the mat"
生成: "the cat the cat is on the mat"

个词: the(2), cat(2), is(1), on(1), mat(1)
参考中: the(2), cat(1), is(1), on(1), mat(1)

匹配计数(取 min):
the: min(2, 2) = 2
cat: min(2, 1) = 1
is:  min(1, 1) = 1
on:  min(1, 1) = 1
mat: min(1, 1) = 1

p1 = 6/6 = 1.0

注意:cat 在参考中只有 1 个,所以即使生成了 2 个 cat,也只算 1 个匹配(clipped count)。

Step 2: N=1,2,3,4 的加权几何平均

python
# 通常 w = [0.25, 0.25, 0.25, 0.25]
bleu = bp * exp(w1*log(p1) + w2*log(p2) + w3*log(p3) + w4*log(p4))

Step 3: Brevity Penalty

参考长度: 6
生成长度: 6
c=6, r=6, c>r → BP = 1.0

如果生成长度=3:

c=3, r=6 → BP = exp(1 - 6/3) = exp(-1) ≈ 0.37

短翻译大扣分。

4.2 ROUGE 的变体

ROUGE-1, ROUGE-2, ROUGE-L, ROUGE-SU

变体计算适用
ROUGE-1Unigram 召回检查信息覆盖
ROUGE-2Bigram 召回检查流畅度
ROUGE-LLCS 召回检查语序
ROUGE-SUSkip-bigram允许间隔匹配

实践:摘要评估常用 ROUGE-1/2/L。

4.3 BLEU/ROUGE 的局限

局限 1: 同义改写被惩罚

参考: "The cat sat on the mat"
生成: "A feline rested upon the rug"

BLEU ≈ 0%(几乎没有词重叠)
实际: 语义完全相同(完美翻译)

局限 2: 单一参考答案不够

参考: "她是一个好老师"
生成 1: "她是一位优秀的教师" → BLEU 低("优秀"不在参考)
生成 2: "她是一个好老师" → BLEU 高(逐词复制)

生成 1 可能更自然,但 BLEU 给低分。

局限 3: 不衡量语法和流畅度

参考: "The food was delicious"
生成: "Delicious was the food" → N-gram 匹配率还行,但语法诡异

局限 4: 不适合对话/创意

  • 对话没有「参考答案」
  • 创意写作有无限多种好答案
  • BLEU/ROUGE 全部分低分

局限 5: 语种和 tokenization 敏感

  • "我爱你" vs "I love you" — 中文单字切分后 N-gram 完全没法比
  • 不同 tokenizer 给不同分

局限 6: N 越大越严苛

  • BLEU-4(默认 N=4)要求连续 4 个词匹配
  • 对长句翻译极不友好

4.4 LLM 时代的替代方案

BERTScore:用 BERT embedding 的余弦相似度替代 N-gram 匹配

python
# 生成: "A feline rested upon the rug"
# 参考: "The cat sat on the mat"

# BLEU: 0%(无 N-gram 重叠)
# BERTScore: 85%(语义接近)

优势

  • 理解同义词("feline" ≈ "cat")
  • 理解改写("rested upon" ≈ "sat on")
  • 不依赖精确 N-gram 匹配

COMET:训练神经网络直接预测人工评分

python
# 输入:(源文, 翻译, 参考)
# 输出:预测的人类评分(0-100)
# 经过 WMT 人工评分训练

优势

  • 直接预测人类评分
  • 不需要参考也能评(COMET-QE)
  • 比 BLEU 更接近人类判断

GPT-Eval / LLM-as-Judge:用 GPT-4 打分

python
# Prompt:
# "参考翻译: X, 候选翻译: Y
#  评分 1-5,考虑语义准确、流畅度、自然度"

优势:最接近人类判断的自动评估 劣势:依赖 GPT-4 API,成本高,评分可能有偏置(偏好自己的输出)

对比

指标语义理解需要参考成本稳定性
BLEU❌ 只看字面极低极高
BERTScore✅ 部分
COMET✅ 强❌ (COMET-QE)
GPT-Eval✅ 最强✅/❌

4.5 BLEU/ROUGE 仍有用的场景

  • 快速回归测试:模型更新后 BLEU 暴跌 → 有 bug
  • 消融实验:改了个模块 BLEU 降了 2% → 量化影响
  • 排行榜:WMT 仍用 BLEU 作为翻译竞赛的一级指标(加上 COMET 做辅助)
  • 成本考虑:GPU 没钱跑 LLM 打分,BLEU 免费

L5 · 沿革与坑

5.1 沿革

  • 2002:BLEU 论文(IBM),机器翻译自动评估的里程碑
  • 2004:ROUGE 论文(USC/ISI),摘要评估标准
  • 2005-2015:BLEU/ROUGE 成为 NLP 任务的标准评估指标
  • 2016-2019:NMT(神经网络翻译)时代,BLEU 和人类判断的差距被广泛批评
  • 2020:BERTScore(ICLR 2020),首次用预训练模型做语义评估
  • 2020:COMET(EMNLP 2020),神经网络直接预测人类评分
  • 2023-2024:GPT-Eval/LLM-as-Judge 兴起
  • 2024-2025:BLEU/ROUGE 从「核心指标」变为「快速基线」

5.2 常见坑

坑 1: 用 BLEU 评估对话/创意。BLEU 只适合有参考答案的任务。对话没有标准答案。

坑 2: 不看 tokenization。中文 BLEU 受分词工具影响(jieba vs pkuseg)。要统一。

坑 3: BLEU=30 就说好。BLEU 取值范围和参考数量、任务难度相关。要和 baseline 比。

坑 4: 使用单一参考。至少 4 个参考——BLEU 论文本身建议多重参考。

坑 5: BLEU 高但不看生成质量。模型可以学会「逐词复制参考」→ BLEU 高但无泛化。

坑 6: ROUGE-L 用在不合适场景。ROUGE-L(LCS)偏长匹配,不适合需要关键信息覆盖的场景。

坑 7: 忽略统计显著性。BLEU 差 0.5 可能只是噪音。要做 bootstrap 显著性测试。

坑 8: BLEU/ROUGE 替代人工评估。它们是自动代理,不能完全替代。关键决策要人工审。

坑 9: BLEU 的平滑方法没设。0 N-gram 匹配时需要用平滑(smoothing),否则 log(0) = -inf。

坑 10: Python 库版本不同算法有差异。NLTK BLEU ≠ SacreBLEU。SacreBLEU 是标准。

坑 11: COMET 模型选择错。COMET-22 和 COMET-20 评分标准不同。用最新的 wmt23-cometkiwi-da。

坑 12: GPT-Eval 有 position bias。GPT 偏好第一个选项。要交换选项位置取平均。

5.3 面试怎么考

  1. BLEU 怎么算的? 答:N-gram 精确率(生成文本的 N-gram 有多少在参考中)的加权几何平均 × Brevity Penalty(防止过短)。N=1 到 4。
  2. BLEU 和 ROUGE 的区别? 答:BLEU 是精确率(我写了多少对的),ROUGE 是召回率(对的我有多少写到了)。BLEU 偏翻译,ROUGE 偏摘要。
  3. BLEU 的致命缺陷? 答:只看字面不看语义——同义改写被误判为错;单一参考不全;不衡量流畅度/语法/事实。
  4. BERTScore 为什么比 BLEU 好? 答:用 BERT embedding 的余弦相似度替代 N-gram,理解同义词("feline"≈"cat")和改写。但仍然需要参考。
  5. 什么时候用 BLEU,什么时候用 LLM-as-Judge? 答:快速回归/消融/排行榜用 BLEU(免费、稳定、可复现);最终评估/开放任务/语义敏感任务用 LLM-as-Judge 或人工。

速记卡

BLEU 公式

$$ BLEU = BP \cdot \exp\left(\sum_{n=1}^{4} \frac{1}{4} \log p_n\right) $$ $$ BP = \begin{cases} 1 & c > r \ \exp(1 - r/c) & c \le r \end{cases} $$

ROUGE-N 公式

$$ ROUGE\text{-}N = \frac{\text{参考和生成匹配的 N-gram 数}}{\text{参考中 N-gram 总数}} $$

BLEU vs ROUGE

维度BLEUROUGE
指标精确率召回率
原始场景机器翻译摘要
是否有 BP
主要缺点不惩罚过长不惩罚过长

指标进化

BLEU/ROUGE → BERTScore → COMET → GPT-Eval
(2002)       (2020)      (2020)   (2023)
字面匹配      语义相似      预测人评   LLM 打分

对比总结

指标语义需参考成本适用
BLEU快速基线
BERTScore语义评估
COMET翻译质量
GPT-Eval✅/❌开放任务

一句话记忆:BLEU = N-gram 精确率 + 长度惩罚,ROUGE = N-gram 召回率。字面匹配指标:看生成文本和参考答案有多少词重叠。优点是简单可复现;致命缺点是不计语义——"A feline rested upon the rug" 和 "The cat sat on the mat" BLEU≈0 但语义完全相同。LLM 时代正被 BERTScore(embedding 相似度)→ COMET(预测人工评分)→ GPT-Eval(LLM 打分)取代。但仍用于快速回归、消融、排行榜基线。注意:跨 tokenizer/语种不可比,SacreBLEU 是标准实现,需要多重参考。


上一篇:Perplexity 困惑度 -- PPL 测模型内部预测,BLEU/ROUGE 测生成文本和参考答案的匹配。下一篇:MT-Bench & LLM-as-Judge -- BLEU 只看字面,LLM-as-Judge 用另一个 LLM 打分,更接近人类判断。

内容采用 CC BY-SA 4.0,代码采用 MIT。