美食街上新开张一家“AI 翻译小馆”,掌勺的是一位叫“小译师傅”的翻译模型。客人用英文点了一道菜,小译师傅就“翻译”出对应的中文菜式。可这道菜做得正不正宗,总得有个评判办法。于是,美食街的评委老王师傅想出一套打分法:不用凭感觉,直接拿小译师傅的菜跟金牌大厨的招牌菜(参考译文)放在一起比对——数一数食材块(n-gram)重合了多少。这套“食材块比对”就是 BLEU 的核心理念;后来又有人发明了更精细的“切丁颗粒比对”(字符级 n-gram),也就是 chrF。本文就带你读懂这两张打分卡背后的原理、数学公式、优缺点,以及在实际项目中怎么选、怎么用。
掌握 BLEU 与 chrF 是 NLP 工程师的基本功:你不仅要知道模型“翻得好不好”,还要知道用什么尺子量、量出来的数字意味着什么,才能在真实项目中科学地评估与迭代模型。
可视化演示
动态演示BLEU/chrF的核心机制,通过入门/进阶/实战/优化四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
BLEU/chrF:一BLE 一、BLEU指标的核心设计与n 二、短句惩罚BP与BLEU综合 核心机制可视化 BLEU/chrF整体架构与关键组件
BLEU 核心思想
美食街的“AI 翻译小馆”开业后,小译师傅的菜到底正不正宗?评委老王师傅想了个笨办法:他先把金牌大厨的招牌菜(参考译文)放在左边,把小译师傅的菜(候选译文)放在右边,然后把两盘菜都切成小块——比如“番茄、鸡蛋、葱花”这样一组一组的小料。接下来,老王师傅数一数:小译师傅菜里的小料组合,能在招牌菜里对上多少?对得上的比例,就叫“食材块匹配度”。这就是 BLEU 最核心的思想:n-gram 精度。
在自然语言处理里,“小料组合”叫做 n-gram——连续 n 个词组成的最小单元。1-gram 是“番茄”这样的单个词,2-gram 是“番茄炒”这样的连续两个词,3-gram 是“番茄炒蛋”这样的连续三个词。BLEU 会统计候选译文里每个 n-gram 在参考译文里出现的情况,算出一个比例,这就是精度(precision)。
这里有一个关键细节:直接数重合次数会闹出“刷词”笑话。比如参考译文里“the“只出现了一次,候选译文却狂热地写了十个”the”,如果简单计数,精度会虚高得离谱。所以 BLEU 采用截断计数(clipped count):对每个 n-gram,候选里出现的次数最多按参考里出现的最大次数来算,超出的部分不算数。用公式表示,第 n 阶精度 p_n 是:
1. 切出所有 n-gram:把候选译文里所有连续 n 个词的组合全部枚举出来,集合记作 G_n(cand)。
2. 分子:截断计数求和:对每个候选 n-gram,统计它在参考译文里的最大出现次数;候选自身出现次数超过这个上限的部分全部作废,然后累加。
3. 分母:候选 n-gram 总数:候选译文本身切出来的 n-gram 总个数,无论是否匹配都算进去。
你看,这套逻辑就像美食街的评菜员在说:小师傅,你的菜里这些“食材块”跟招牌菜对得上的我才认,对不上的我不认;而且同一块食材你重复放十遍,我也只按招牌菜里的用量给你记账。这样一来,“想靠堆词蒙混过关”的路就被堵死了。
简洁惩罚 BP
没多久,老王师傅又发现一个新问题。有的学徒很机灵,看到招牌菜有十道,他干脆只做最拿手的那两道端上来。这两道菜做得确实完美,食材块全对得上。可老王师傅盯着桌上空荡荡的盘子,忍不住问:剩下的菜呢?学徒支支吾吾——因为不会做,干脆不做了。老王师傅一拍桌子:不行!得分必须打折!这个“上菜量不足要扣分”的规则,在 BLEU 里就是 brevity penalty(简洁惩罚,简称 BP)。
翻译场景里,这种“会做的才翻译”被称为漏译。候选译文如果比参考译文短太多,它的 n-gram 精度往往会虚高,因为从长句里挑出几句“最安全”的话来译,自然更容易对上。所以 BLEU 引入 BP:当候选译文长度 c 小于参考译文长度 r 时,BLEU 分数要按比例打折。BP 的形式非常直观:
1. 候选更长不罚:当候选译文长度 c 大于参考译文长度 r 时,说明模型“把话说全了”,BP 取 1,分数不打折。
2. 候选更短打折:当 c ≤ r 时,用指数函数 $e^{1-r/c}$ 在 0 到 1 之间取值;越短,折扣越狠。
所以 BP 不是一种“鼓励翻译得更长”的规则,而是一种“防止偷工减料”的护栏。它不管译文的文采,只管一件事——你要么把整桌菜做齐,要么就接受扣分。
BLEU 计算流程
有了食材块匹配度,又有了上菜量扣分,老王师傅终于可以把两者合在一起,给每位学徒打一个总评分。这个总评分的数学名称就叫 BLEU(Bilingual Evaluation Understudy,双语评估替补)。它像一个“替补裁判”,虽然自己不上场,但拿着参考译文这盘标准菜,替人类评审数数打分。
BLEU 并不是只看 1-gram,它同时看 1-gram、2-gram、3-gram、4-gram 四档精度的“平均表现”。为什么要看 2-gram、3-gram?因为单个词对得上,不代表顺序对得上。比如“我吃饭”和“饭吃我”的 1-gram 完全一样,可意思差远了;2-gram 和 3-gram 能把顺序信息带进来。BLEU 用的是“几何平均”而非简单的算术平均——只要有一个 n 阶的精度趋近于 0,整体 BLEU 就会趋近于 0。这很像美食评分中“一道菜哪怕其他方面完美,只要有一处致命的糊味,整桌打分也会被拉下来”。标准公式为:
1. 对每阶精度取对数:把 p_n 从乘法空间转换到加法空间,后续平均才更公平,避免某一档过小被其他档“平摊”掉。
2. 四阶平均:将 log p1 到 log p4 求和后除以 4,即几何平均的对数形式。
3. 指数还原并乘 BP:exp 把对数平均还原成普通数值,最后乘上简短惩罚,就是 BLEU 总分。
整个公式读起来就是:先看 1 到 4 阶的食材块匹配度,再看上菜量是否足够,两者相乘,得到最终评分。这就是日常论文里那个常见的 BLEU 分数。
chrF 字符级 F 值
美食街的客户越来越多。有一天,一位韩国客人点了一份韩式料理,小译师傅端出来的菜明明看起来像模像样,可老王师傅拿着 BLEU 一打分,分数却低得离谱。老王师傅琢磨了半天,发现问题出在“食材块”上:韩语的词形变化太丰富了,“吃”在不同句式里有好几种写法,按词切出来的块跟招牌菜对不上。
于是评委们换了一种思路:干脆不按“块”来切,按“切丁颗粒”来比——每个字符就是一个颗粒。只要读音、拼写相近,颗粒就能对上一部分。这就是 chrF(character n-gram F-score)的核心:在字符级别计算 n-gram 的精确率和召回率,再用 F 值把它们综合。字符级 n-gram 默认取连续 6 个字符(n=6),但可以调节。因为是在字符层面工作,chrF 天然不需要分词器,对没有空格的语言(中文、日文)特别友好。而且它同时使用精确率和召回率——不仅看候选译文里有几分参考的味道,还看参考里的内容有没有被漏掉。精确率与召回率分别为:
再把两者用 Fβ 调和平均合成:
1. 切字符 n-gram:C 与 R 分别表示候选文本和参考文本里所有连续 n 个字符的集合(n 默认 6)。
2. 精确率 P:候选的字符块里,参考也出现过的占多少。
3. 召回率 R:参考的字符块里,候选覆盖到的占多少。
4. Fβ 调和:用 β 调控“更重视召回”的力度,β 越大召回权重越高,β=3 即 chrF3。
chrF 最常用的变体是 chrF3。为什么更重视召回?因为翻译任务里“漏译”比“多译”危害更大——你宁可多翻几句让评委挑,也不能把关键信息吞了。这就像做韩国料理,宁可选料时多抓几把,也别让招牌菜里的核心食材缺席。
指标优缺点
评菜这事永远没有完美的打分卡。老王师傅用了几年 BLEU,琢磨出了它的问题:有时候小译师傅明明用更自然的说法表达了完全相同的意思,比如把“汽车”换成“车”,食材块对不上,分数就掉得厉害。这说明 BLEU 只认“表面食材”不认“内在味道”。
BLEU 的优点:计算简单、速度快、实现几十年,社区里人人会用;在语料规模较大时与人类判断有中等程度的相关性。BLEU 的缺点:只比表面词形,不关心语义;对同义改写毫不留情;单句分数波动大;对词序完全不允许变化(1-gram 除外)。chrF 的优点:免分词、抓字符级相似,对形态丰富的语言更稳;同时用 P 和 R,对漏译敏感。chrF 的缺点:字符级比对可能把拼写错误和语义改写混为一谈;在某些语言对上不一定优于 BLEU。用调和平均可以直观看出“偏科”有多吃亏:
1. P 和 R 先取倒数:任意一方偏小,其倒数就突出,调和平均会被明显拉低。
2. 倒数之和取平均:2 除以两者倒数之和,得到调和平均;它不会像算术平均那样被高分“带飞”。
如果用一句话总结:BLEU 像“大块食材比对”,评分快但有盲区;chrF 像“细颗粒比对”,更细腻但也要付出代价。真正专业的做法是把它们当成镜子,而不是上帝。
评估相关性
老王师傅逐渐意识到,评分卡再严谨,最终也得让食客满意。于是美食街做了一次“民意测验”:请一批真正的食客(人类评审)给各家小馆打分,再和 BLEU、chrF 自动分数对比——看两套分数“谁高谁低”的排序是否一致。
这种“两套排序的一致性”叫相关性。在机器翻译评测领域,常用 Spearman 相关系数来衡量:把每个样本按自动指标分数排名,再按人类分数排名,算两组排名的相关性。研究表明,BLEU 和 chrF 在语料库层面与人类判断都有中等到较高的相关性,但单句层面噪声很大——一句话的 BLEU 可能因为一个同义词替换就暴跌二十分。所以行业惯例是:自动指标用于“快速筛选”和“大批量对比”,最终“拍板”仍离不开人工评估。Spearman 公式如下:
1. 算排名差:对每个翻译样本,分别用自动指标打分和人工打分排名,d_i 是两个排名之差。
2. 排名差平方和:偏差平方和越小,两套排名越接近。
3. 归一化到 [-1,1]:除以总样本组合数再取补,1 表示两套排序完全一致,0 表示毫无关系。
回到比喻:食客一口下去觉得好吃,胜过评分卡上再多数字。指标的意义不在于“替代人”,而在于“在没有人手时,先用一把还算靠谱的尺子过滤一遍”。
指标选择策略
到了这篇内容的最后一站,老王师傅把多年的评菜经验整理成了一本《选卡指南》:不同菜系、不同场合,要用不同的评分卡。给小译师傅试用什么卡,取决于语言特点、任务目标和手里的资源。
具体策略是这样的:如果语种是英语、法语这类用空格分词的语言,BLEU 是行业默认标配;如果是中文、日文、韩文,或者形态变化丰富的语言(德语、捷克语),chrF 往往更稳定;如果你的任务特别在乎“漏译”(比如医疗翻译、摘要生成),可以上调 chrF 里的 β,甚至直接用 chrF3;如果既想跑得快又想稳,就用 BLEU + chrF 组合打分,再辅以少量人工抽检。在工程项目里,很多人会把两个指标加权合成一个综合分:
1. α 是权重旋钮:α 越接近 1 越相信 BLEU,越接近 0 越相信 chrF。
2. 极端情形:α=1 退化为纯 BLEU,α=0 退化为纯 chrF,其余情况是两者的线性组合。
最终,没有哪个指标是“万能的金牌评分卡”。选择的标准不是“哪个更高级”,而是“哪个能在这个场景下最可靠地帮你排雷”。就像美食街的评分卡,给川菜馆用麻辣度,给日料店用鲜度——适合的才是最好的。
AI 应用场景
NMT 模型训练中的 Checkpoint 筛选
阶段:模型训练与验证
解决的问题:训练过程中每个 epoch 都会产出一个 checkpoint,人工逐个看译文不现实。用 BLEU 在验证集上自动打分,能快速筛选出最优 checkpoint 继续训练,避免训练回退。
具体案例:某电商翻译团队训练中英商品标题翻译模型,每个 epoch 在 2000 句验证集上算 BLEU,把分数最高的 checkpoint 保存为最佳模型;同时用 chrF 辅助检查日语标题的翻译质量。
WMT 机器翻译评测比赛
阶段:评测与排榜
解决的问题:参赛系统众多,需要统一、可复现的自动评估协议,否则各家自报分数没有可比性。
具体案例:WMT 组织方在英德、英中、英日等语言对上公布 BLEU、chrF 等自动指标分数,并结合人工评估生成最终排名;chrF 在形态丰富的语言对上与人类排序相关性表现突出,因而被作为主要自动指标之一。
低资源语言翻译质量监控
阶段:线上质量监控
解决的问题:小语种翻译(如蒙古语、乌尔都语)没有成熟分词器,直接算 BLEU 会因为分词不当而失真。
具体案例:某出海公司的客服机器人同时支持十几种小语种,后端用 chrF 对线上翻译进行实时抽样打分,低于阈值时触发告警,避免劣质译文影响用户体验。
Python 演示
import mathimport refrom collections import Counter def tokenize(text): return re.findall(r"\w+", text.lower()) def ngrams(tokens, n): return [tuple(tokens[i:i + n]) for i in range(len(tokens) - n + 1)] def ngram_precision(cand_tokens, ref_tokens, n): cand_ngs = ngrams(cand_tokens, n) if not cand_ngs: return 0.0 ref_counter = Counter(ngrams(ref_tokens, n)) clip_sum = 0 for ng, cnt in Counter(cand_ngs).items(): clip_sum += min(cnt, ref_counter.get(ng, 0)) return clip_sum / len(cand_ngs) def brevity_penalty(cand_len, ref_len): if cand_len > ref_len: return 1.0 if cand_len == 0: return 0.0 return math.exp(1 - ref_len / cand_len) def bleu_score(cand, ref, max_n=4): cand_tokens = tokenize(cand) ref_tokens = tokenize(ref) log_sum = 0.0 for n in range(1, max_n + 1): pn = ngram_precision(cand_tokens, ref_tokens, n) log_sum += math.log(pn + 1e-10) bp = brevity_penalty(len(cand_tokens), len(ref_tokens)) return bp * math.exp(log_sum / max_n) def char_ngrams(text, n): text = re.sub(r"\s+", "", text.lower()) return [text[i:i + n] for i in range(len(text) - n + 1)] def chr_f_score(cand, ref, beta=3, max_n=6): sum_p, sum_r = 0.0, 0.0 for n in range(1, max_n + 1): cand_ngs = char_ngrams(cand, n) ref_ngs = char_ngrams(ref, n) if not cand_ngs or not ref_ngs: continue ref_counter = Counter(ref_ngs) common = sum(min(cnt, ref_counter.get(ng, 0)) for ng, cnt in Counter(cand_ngs).items()) sum_p += common / len(cand_ngs) sum_r += common / len(ref_ngs) p_avg = sum_p / max_n r_avg = sum_r / max_n b2 = beta * beta return (1 + b2) * p_avg * r_avg / (b2 * p_avg + r_avg) if __name__ == "__main__": ref = "the cat is on the mat" cand = "the cat sits on the mat" print("BLEU:", round(bleu_score(cand, ref), 4)) print("chrF3:", round(chr_f_score(cand, ref), 4))
return re.findall(r"\w+", text.lower())用正则把句子切成小写词块,这是最简版的词级分词。clip_sum += min(cnt, ref_counter.get(ng, 0))这句就是“截断计数”:候选里出现次数再多,也按参考里的最大次数封顶。return clip_sum / len(cand_ngs)算出带截断的 n-gram 精度,也就是 BLEU 的核心分子。return math.exp(1 - ref_len / cand_len)候选比参考短时,按指数函数打折扣,对应 BP 公式。return bp * math.exp(log_sum / max_n)精度对数平均后还原,再乘 BP,得到最终 BLEU 分。text = re.sub(r"\s+", "", text.lower())chrF 先把所有空格抹掉,让“字符颗粒”能跨词比较。return (1 + b2) * p_avg * r_avg / (b2 * p_avg + r_avg)用 β² 给召回率加权,算出 chrFβ 的调和平均。
常见误区
误区BLEU 分数越高,译文肯定越准确越好,分数低就说明翻译垃圾。
正解BLEU 只衡量表面 n-gram 重合,语义完全正确但用词不同的译文可能得低分;同一句参考译文不同,分数差异也很大。就像一盘炒青菜,你把“青菜”换成“时蔬”,食材块对不上,评分卡就不认账。它只是“表面相似度”的代理,不是语义裁判。
为何常见:BLEU 是自动分数,给人“客观精确”的错觉,而且论文里到处都在用,容易把它当成“标准答案”。
误区chrF 更精细、更新,所以全面优于 BLEU,以后只用 chrF 就行。
正解没有哪个指标全面占优。chrF 对形态丰富语言(如韩语、日语)表现好,但对某些语言对,BLEU 因词级 n-gram 与语义更接近而更受认可。选指标要看语境,就像米其林星级不能用来评路边摊的麻辣烫。
为何常见:新指标容易让人误以为“更精细等于更好”,忽略了指标和语言特性的匹配。
误区BLEU 是自动评估,直接把原始字符串交给工具函数就能算出分数。
正解BLEU 标准实现基于词级 token(空格分词或子词),中文、日文等没有空格的字符串直接跑英文工具,根本切不出有意义的词块,分数自然失真。chrF 才是字符级、免分词的指标。所以中文评估要么先分词,要么改用 chrF。
为何常见:很多人拿中文句子直接套英文开源工具,忘了 tokenization 这个前置步骤。
误区同一句话,模型 A 的 BLEU 比模型 B 高,A 就一定更好。
正解单句 BLEU 方差极大,一个词替换就可能让分数从 50 掉到 20。必须在测试集(几百到几千句)层面聚合后才可信,就像美食评分不能只凭一盘菜下结论,得多桌客人、多道菜综合判断。
为何常见:调参时迫不及待看单句分数,忽略了统计显著性,把“个例”当“规律”。
误区BP 的存在就是为了惩罚短句,所以惩罚越狠,指标越严格、越有价值。
正解BP 只在候选短于参考时惩罚;如果候选本身就比参考长,BP=1 不惩罚。它只是一个长度校正因子,目标是平衡“漏译”与“多余翻译”,不是越大越好。就像“上菜量不足扣分”只是防止偷工减料,不是鼓励厨师把每道菜都堆成山。
为何常见:把 BP 当超参或“惩罚项”理解,忽略了它的原始动机是修正短句带来的精度虚高。
面试题
Q1. BLEU 是以下哪个英文的缩写?
- A.Bilingual Evaluation Understudy← 正确答案
- B.Binary English Utility Score
- C.Byte-Level Evaluation Utility
- D.Better Language Understanding Engine
答案:A。BLEU 全称 Bilingual Evaluation Understudy,意为“双语评估替补”:它本人不参与翻译,只拿着参考译文当标准答案,替人类评审自动打分。B、C、D 都是干扰项,分别拼成了“二进制”“字节级”“更好的语言理解”等不存在的缩写。
Q2. BLEU 为了防止重复词刷高精度,采用的关键机制是?
- A.截断计数 Clipped Count← 正确答案
- B.归一化 Normalization
- C.随机降采样 Sampling
- D.梯度裁剪 Gradient Clip
答案:A。截断计数用 min(候选次数,参考次数) 封顶,候选里把"the"写十遍也只按参考里的真实出现次数计入。归一化是数据处理手段,随机采样是训练技巧,梯度裁剪是优化技巧,都与 BLEU 的防刷词无关。
Q3. 候选译文长度 c 不大于参考译文长度 r 时,BP 的计算方式是?
- A.当 c 大于 r 时取 1
- B.等于 e 的 1-r/c 次方← 正确答案
- C.等于候选长度 c/r
- D.等于参考长度 r/c
答案:B。BP 的规则是 c > r 时取 1,c ≤ r 时取 $e^{1-r/c}$。选项 A 描述的是 c>r 的情形,C 和 D 都是简单比值,缺少指数衰减。比如 r=10、c=5 时,$e^{1-2}\approx 0.37$,相当于打三折多。
Q4. BLEU 标准实现中,几何平均通常取 1-gram 到几-gram 的精度?
- A.2-gram
- B.3-gram
- C.4-gram← 正确答案
- D.5-gram
答案:C。标准 BLEU 取 1-gram 到 4-gram 共四档精度做几何平均。只取 1-gram 无法捕捉词序,取到 5-gram 以上数据会过于稀疏,所以 4-gram 是经典折中。
Q5. chrF 是在什么层级上计算 n-gram 的?
- A.字符级← 正确答案
- B.词语级
- C.句子级
- D.篇章级
答案:A。chrF 的 c 代表 character,它在字符级计算 n-gram(默认 n=6),因此不需要分词器。词语级是 BLEU 的做法,句子级、篇章级则是更高层的文本粒度。
Q6. 常用的 chrF3 中 β=3,意味着该指标更重视什么?
- A.精确率
- B.召回率← 正确答案
- C.压缩率
- D.随机性
答案:B。Fβ 公式中 β 越大,召回率权重越高。chrF3 把 β 设为 3,是为了更重视“参考里的内容是否被漏译”,因为漏译在翻译任务中危害比多译更大。
Q7. 与 chrF3 相比,chrF1(β=1)对精确率和召回率的态度是?
- A.更不偏重任何一方← 正确答案
- B.只计算精确率
- C.只计算召回率
- D.二者权重反向
答案:A。β=1 时 F1 是精确率和召回率的对称调和平均,不偏不倚;β=3 才明显偏向召回率。B、C 说“只算”是不对的,F 值始终同时使用两者,只是权重不同。
Q8. 下列哪些属于 BLEU 指标常见的局限性?
- A.只衡量表面 n-gram 重合← 正确答案
- B.完全不需要参考译文
- C.单句分数方差大且噪声高← 正确答案
- D.对词序完全不敏感
答案:AC。A 和 C 是 BLEU 公认的短板:不看语义、单句波动大。B 错误,BLEU 依赖参考译文才能计算;D 错误,1-gram 虽对词序不敏感,但 2-gram 及以上已经隐含词序信息,所以不能说“完全不敏感”。
Q9. 以下哪些场景更适合选择 chrF?
- A.韩语到英语的翻译评价← 正确答案
- B.中文短语翻译且无分词器← 正确答案
- C.需要严格语义等价的审查
- D.形态变化丰富的语言对← 正确答案
答案:ABD。chrF 免分词、擅长形态丰富语言,所以韩语、中文无分词器、形态变化多的语言对都适用。C 需要严格语义等价,chrF 只是表面相似度指标,无法判断语义,因此不适用。
Q10. 关于 BLEU 与 chrF 的对比,以下说法正确的有?
- A.chrF 用 F 值综合精确率和召回率← 正确答案
- B.BLEU 完全不需要截断计数
- C.BLEU 用 BP 压低漏译分← 正确答案
- D.chrF 对拼写差异完全免疫
答案:AC。A 正确,chrF 的本质就是 P/R 的 Fβ 调和平均;C 正确,BP 在候选短于参考时压分,间接惩罚漏译。B 错误,BLEU 恰恰依赖截断计数防刷词;D 错误,chrF 是字符级比对,对拼写差异非常敏感,而非免疫。