从BLEU到BERTScore:NLG评测指标演进与工业实践指南
1. 从“跑通”到“看懂”:NLG评测指标的现实困境
最近在复盘几个对话系统和文本生成的项目,发现一个挺有意思的现象:团队里新来的同学,还有不少合作方,在评估模型生成的文本质量时,张口闭口就是“BLEU多少”、“ROUGE多少”。你问他为什么用这个指标,他大概率会回你一句:“论文里都这么用啊”或者“大家都这么用,肯定没错”。这让我想起自己刚入行那会儿,也是拿着一堆指标跑脚本,看到分数高了就开心,低了就沮丧,但对分数背后到底意味着什么,其实是一知半解的。
NLG(自然语言生成)的评测,远不是跑个脚本、输出个分数那么简单。它本质上是在回答一个核心问题:我们如何量化一段机器生成的文本的“好坏”?这个“好坏”的定义本身就极其复杂,可能包括流畅度、相关性、事实准确性、多样性、甚至风格和情感。没有一个单一的指标能包打天下。更麻烦的是,很多经典指标,像BLEU、ROUGE,它们的设计初衷和计算逻辑,与我们现在面临的许多实际需求(比如长文本连贯性、事实一致性)存在天然的错位。如果你只知其然(分数),而不知其所以然(计算逻辑、优缺点、适用场景),就很容易被指标“欺骗”,做出错误的优化决策,甚至引导模型走向奇怪的方向。
所以,这篇笔记不打算罗列所有指标的定义公式(那太像教科书了),而是想结合我这些年踩过的坑,聊聊几个最核心的指标家族——基于N-gram重叠的、基于嵌入的、基于学习的——它们到底在量什么,为什么会有这样那样的局限,以及在真实的项目里,我们到底该怎么组合使用它们,才能对模型能力有一个相对靠谱的评估。毕竟,看懂指标,是做好NLG的第一步。
2. 基石与局限:基于N-gram重叠的经典指标族
当我们谈论NLG评测,尤其是机器翻译和文本摘要时,BLEU和ROUGE是绕不开的起点。它们统治了这个领域近二十年,不是没有道理的。它们的核心思想非常直观:将机器生成的文本(候选文本)与一个或多个人类编写的参考文本进行比较,计算它们之间在词或词组(N-gram)层面上的重叠程度。重叠度越高,就认为生成质量越好。
2.1 BLEU:机器翻译的“黄金标准”及其暗伤
BLEU(Bilingual Evaluation Understudy)可以说是机器翻译领域的“元老级”指标。它的设计非常精巧,主要看两个东西:精度(Precision)和短句惩罚(Brevity Penalty, BP)。
精度不是简单的词匹配。它计算的是候选文本中出现的N-gram(N=1,2,3,4),有多少在参考文本中也出现了。但这里有个关键修正:修正的N-gram精度(Modified N-gram Precision)。举个例子,如果候选句是“the the the the”,参考句是“The cat is on the mat”。那么一元组(unigram)“the”在候选句中出现了4次,但在参考句中最多只出现了2次(不考虑大小写)。那么“the”的匹配计数就不是4,而是会被“裁剪(clipped)”到2。这个设计就是为了惩罚那些通过简单重复高频词来刷分的模型。
最终的BLEU分数是1到4元组修正精度的几何平均,再乘以短句惩罚因子。短句惩罚是为了惩罚生成文本过短的行为,因为更长的文本天然有更高的匹配概率。
那么,BLEU好用吗?在机器翻译的早期和中期,它非常好用。它的分数与人类评价的相关性很高,计算速度快,无需训练,给领域发展提供了统一的标尺。但是,它的“暗伤”也非常明显:
- 语义盲区:BLEU只关心表面词的重叠。句子“我吃了苹果”和“苹果被我吃了”,BLEU分数可能很低,但语义完全一样。反之,两句用词相似但意思相反的句子,BLEU分数却可能很高。
- 多样性惩罚:这是一个在实践中非常头疼的问题。如果参考译文是“这是一个很棒的产品”,而模型生成了两个同义但用词不同的句子:“这是一个出色的产品”和“这是一个卓越的产品”。在人类看来,这两句都很好。但BLEU只认“很棒”这个词,所以这两个好句子得分都会很低。这会导致模型在训练时倾向于生成保守、平庸、和参考文本高度相似的句子,扼杀了创造性。
- 对词序不敏感:虽然高阶N-gram(如bigram, trigram)能捕捉一部分词序信息,但对于长距离的语序调换,BLEU依然无力。例如,“狗追猫”和“猫追狗”,二元组完全不同,BLEU能区分;但更复杂的句法结构变化就可能失效。
- 依赖多参考译文:单个参考译文无法覆盖语言表达的多样性。因此,权威评测(如WMT)会提供多个参考译文。但在实际工业场景中,为每一句生成多个高质量参考文本成本极高,通常我们只有一个参考(比如标准问答对里的答案),这会让BLEU分数的可靠度大打折扣。
实操心得:在今天的项目里,我几乎不会单独看BLEU分数来做最终判断。它更像是一个“卫生指标”——用来快速排除那些连基本词法都错得离谱的模型。如果BLEU分数极低(比如低于10),那模型肯定有大问题。但如果两个模型BLEU分数相差几分,我绝不会据此断定谁优谁劣,一定会结合其他指标和人工评测来看。
2.2 ROUGE:为摘要任务而生的“召回率”视角
如果说BLEU是翻译的“精度”大师,那么ROUGE(Recall-Oriented Understudy for Gisting Evaluation)就是摘要任务的“召回率”拥趸。它的核心思想是:看参考摘要(人工写的精华)中的词或单元,有多少被系统生成的摘要覆盖了。这非常符合摘要的任务特性——你不能漏掉关键信息。
最常用的几个变体是:
- ROUGE-N: 计算参考摘要和候选摘要之间N-gram的召回率。
ROUGE-1和ROUGE-2最常用,分别衡量单词和二元词组的覆盖情况。 - ROUGE-L: 基于最长公共子序列(LCS)。LCS不要求连续匹配,能更好地捕捉句子的主干结构。比如参考句“警察逮捕了示威者”,候选句“示威者被警察逮捕了”,它们的LCS是“警察逮捕了示威者”,ROUGE-L分数就会不错。
- ROUGE-SU: 考虑跳跃二元组(Skip-bigram),即允许两个词中间跳过其他词构成配对,能捕捉更灵活的语义单元。
ROUGE解决了BLEU的一些问题吗?部分解决了。因为它关注召回,所以对参考文本中关键信息的覆盖度更敏感。但它依然和BLEU共享着基于表面重叠的核心局限:无法理解同义替换、无法评估连贯性和事实性。一个能堆砌关键词但语句不通的摘要,ROUGE分数可能很高。更危险的是,模型可能学会“抄袭”原文中的长句来刷高ROUGE分数,而这并不是真正的摘要。
踩坑记录:我们曾有一个新闻摘要项目,初期只优化ROUGE-L。模型很快学会了一种“作弊”策略:从原文中找出一个包含多个关键实体的长句,几乎原封不动地输出。从ROUGE-L看,这个句子和参考摘要的LCS很长,分数很高。但从人工阅读看,这根本不是摘要,只是摘录,且句子之间毫无逻辑关联。这个教训让我们明白,必须引入基于语义的指标或人工评估来制衡。
3. 走向语义:基于嵌入与神经网络的指标演进
既然词形匹配问题多多,很自然的想法就是:我们能不能直接比较文本的“语义”?随着词嵌入(Word2Vec, GloVe)和上下文嵌入(BERT, GPT)的兴起,这类指标成为了研究热点。
3.1 向量工厂:从静态词嵌入到上下文嵌入的度量
最早的尝试是基于静态词嵌入(如Word2Vec)的。比如,计算候选句和参考句中所有词向量的平均值,然后计算这两个“句向量”的余弦相似度。这种方法比BLEU进步了,能捕捉“很棒”和“出色”的相似性。但缺点也很明显:词义消歧能力差(“苹果”公司还是水果?),且词袋模型(求平均)完全丢失了词序信息。
真正的突破来自于像BERT这样的上下文嵌入模型。它们生成的词向量会根据句子上下文动态变化,能更好地表示词汇在特定语境下的含义。
基于BERT的典型指标是BERTScore。它的计算过程非常直观:
- 分别用BERT模型提取候选句和参考句中每个词的上下文嵌入向量。
- 计算精度:对于候选句中的每个词,在参考句的所有词中寻找余弦相似度最高的那个,将这些最高相似度求平均。这衡量了“候选句的每个词在参考句中是否有语义相近的对应”。
- 计算召回率:反过来,对于参考句中的每个词,在候选句中寻找最相似的词,再求平均。这衡量了“参考句的每个关键信息是否在候选句中被表达了”。
- 最后得到一个F1值,综合精度和召回率。
BERTScore的优势很明显:它直接建模语义相似度,对同义替换友好,并且由于BERT的强大能力,它对语法和语义的感知远强于N-gram方法。在我们的内部评测中,BERTScore与人工评价的相关性通常显著高于BLEU和ROUGE。
但是,BERTScore就是银弹吗?远非如此。
- 计算成本:需要运行前向传播计算每个词的嵌入,比BLEU/ROUGE慢几个数量级。对于大规模离线评测尚可,但对于训练过程中的快速验证或在线服务,成本太高。
- 参考依赖:和前辈们一样,它严重依赖参考文本的质量和唯一性。如果参考文本本身表达不佳,或者只是众多合理表述中的一种,分数就会有偏差。
- 事实性无力:这是所有基于参考文本比较的指标的共同死穴。如果模型生成了一句流畅、语义通顺但事实错误的文本,而参考文本中没有提及这个事实,那么这些指标完全无法检测。例如,参考摘要说“公司股价上涨了10%”,模型生成“公司股价上涨了15%”,句子结构语义极其相似,基于嵌入的相似度会很高,但这却是一个严重的事实错误。
3.2 学习式评估:让模型学会打分
既然预定义的规则(重叠度、余弦相似度)有局限,那能不能训练一个神经网络模型,让它像人一样学会给生成文本打分?这就是学习式评估(Learned Evaluation Metrics)的思路。
最著名的代表是BLEURT和COMET。它们通常基于BERT等大模型进行微调,但训练目标不是完成NLU任务,而是学习一个回归或排序模型,输入是(源文本、参考文本、候选文本),输出是一个质量分数。
它们的训练数据来自于大规模的人工标注,标注者会对(候选文本,参考文本)对进行打分。模型通过学习这些人类判断,试图内化人类评价的标准,包括流畅度、相关性、忠实度等。
这类指标的表现往往是最好的,在WMT等权威评测中,它们与人工评价的相关性常年位居前列。因为它们能融合多种信号,甚至能一定程度上感知事实错误(如果训练数据中包含此类标注)。
然而,它们的“黑盒”特性带来了新的挑战:
- 可解释性差:模型为什么打这个分?很难说清。当指标出现反直觉的分数时(比如人类觉得A好,模型给B高分),调试和归因非常困难。
- 领域依赖:在通用领域数据上训练的评估模型,在特定垂直领域(如医疗、法律)可能表现不佳,因为这些领域的语言规范和事实标准很特殊。
- 数据与偏差:模型的好坏完全取决于训练数据。如果标注数据存在偏差(例如,对某种写作风格有偏好),模型就会继承这种偏差。
- 循环风险:如果用模型A生成的文本去训练评估模型B,再用B去评估和优化A,有可能陷入一种“自娱自乐”的循环,偏离真实的人类标准。
工具选型建议:对于严肃的项目,我目前的策略是分层使用:
- 快速筛选层:用ROUGE/BLEU进行初筛,淘汰明显不合格的基线模型。速度快,成本低。
- 核心评估层:使用BERTScore作为主要的自动指标。它比学习式指标更轻量、更稳定,且与人工评价相关性提升明显。
- 关键验证层:在重要节点(如模型上线前、发布论文时),必须引入学习式指标(如COMET)和小规模、高质量的人工评估。人工评估可以设计得更细致,比如分别对“流畅度”、“信息完整性”、“事实准确性”打分。
4. 超越参考文本:面向事实性与一致性的新挑战
现代NLG的应用,如开放域对话、长文本生成、知识问答,对评测提出了前所未有的新要求。很多时候,我们甚至没有唯一的“参考文本”。生成一段关于“量子计算最新进展”的综述,哪一段人类写的文字是标准答案呢?这时,评测的重点从“像不像参考文本”转向了文本自身的固有质量:事实正确吗?逻辑自洽吗?前后一致吗?
4.1 事实性评估:当模型开始“一本正经地胡说八道”
大语言模型(LLM)的“幻觉”(Hallucination)问题是当前最头疼的问题之一。评估事实性,核心是检查生成文本中的陈述(Claims)是否与可信的知识源(如知识图谱、维基百科、特定数据库)相一致。
一种常见的方法是“基于检索的验证”:
- 信息抽取:首先,从生成文本中提取出所有事实性陈述(实体、关系、属性)。例如,从句子“爱因斯坦于1879年出生在德国乌尔姆。”中抽取出(爱因斯坦,出生年份,1879)、(爱因斯坦,出生地,德国乌尔姆)。
- 知识检索:将这些抽取出的三元组或实体,到可信的知识库中进行查询。
- 一致性判断:判断生成文本中的关系或属性,是否与知识库中记录的一致。这可以是一个简单的二进制判断(对/错),也可以是一个置信度分数。
更前沿的方法利用LLM自身作为评判员,例如,提示GPT-4这样的模型:“请判断以下陈述是否基于给定的上下文。陈述:[生成文本]。上下文:[提供来源文本]”。LLM凭借其强大的推理能力,可以做出相当准确的判断。这种方法灵活,但成本高,且LLM自身也可能存在偏见或错误。
实操难点:事实性评估的瓶颈往往在第一步——信息抽取。复杂句、隐含事实的抽取非常困难。比如,“公司的营收增长超过了市场预期。”这句话隐含了“公司营收增长了”和“市场对该公司营收有预期”两个事实,但后者很难被结构化抽取。因此,事实性评估目前更多用于关键事实(日期、地点、人物关系、数值)的核查,尚不能完全解决所有“幻觉”问题。
4.2 一致性评估:对话与长文生成的“连续剧”考验
在对话或多轮交互、长文档生成中,“一致性”至关重要。它分为几个层面:
- 内部一致性:生成的文本自身在事实、逻辑、风格上是否前后一致?不能前面说“主角是医生”,后面又说“他从未学过医”。
- 上下文一致性:在对话中,本轮回复是否与历史对话内容一致?是否记住了之前提到的用户信息?
- 外部一致性:生成内容是否与给定的源信息(如检索到的文档、用户画像)一致?
评估一致性同样非常困难。自动化方法包括:
- 基于问答(QA)的方法:从生成文本的前半部分提出问题,看能否从后半部分找到正确答案。或者,从给定的上下文中提出问题,看能否从生成文本中找到答案。
- 基于自然语言推理(NLI)的方法:将文本的前后部分,或者上下文与回复,构造成NLI任务的前提和假设,使用NLI模型判断它们之间是“蕴含”、“矛盾”还是“中立”。
- 基于LLM的评判:同样,可以设计提示词让LLM判断一致性。
这些方法都还不成熟,计算复杂,且评估模型本身的准确性就是一道坎。因此,对于一致性要求高的场景,人工评测仍然是黄金标准,通常需要评测者通读整个生成长文本或对话历史,才能做出可靠判断。
5. 工业级实践:如何搭建一个靠谱的NLG评估体系
讲了这么多指标,那在实际项目中到底该怎么用呢?我的经验是:放弃寻找“唯一真理指标”的幻想,建立一个多层次、多视角的评估矩阵,并且永远给“人工判断”留一席之地。
5.1 指标组合拳:针对场景的定制化方案
没有放之四海而皆准的配方,但可以根据任务类型给出一些起手式:
机器翻译:
- 核心指标:BLEU(依然是行业默认标准,便于横向比较), BERTScore / COMET(用于内部深度评估)。
- 必做补充:人工流畅度与充分度评测。招募双语者,从“流畅度”(读起来是否像人写的)和“充分度”(是否传达了原文所有信息)两个维度打分。
- 警惕:不要过分优化BLEU导致译文生硬、多样性丧失。
文本摘要:
- 核心指标:ROUGE-1/2/L(快速衡量信息覆盖), BERTScore(衡量语义相似度)。
- 关键补充:事实一致性评估。使用基于NER和关系抽取的工具,或直接用LLM(如GPT-4)提示,检查摘要中的事实是否与原文冲突。
- 人工维度:除了信息完整性,还需评估连贯性(句子之间是否逻辑通顺)和简洁性(是否冗余)。
开放域对话/故事生成:
- 弱化:BLEU/ROUGE在这里价值很低,因为不存在标准回复。
- 强化:
- 多样性:计算生成文本的Distinct-1/2(唯一1/2-gram的比例),避免总是生成“我不知道”、“你好”这类安全但无用的回复。
- 相关性:使用Sentence-BERT等模型计算当前回复与对话历史的语义相关性。
- 一致性:如上节所述,采用基于NLI或LLM的方法进行自动化检查,并定期进行人工长对话审查。
- 语言质量:使用语法检查工具或训练一个分类器判断句子是否通顺。
事实性问答/知识生成:
- 核心生命线:事实准确性评估。必须建立基于知识库的自动化核查流程,哪怕只能覆盖部分关键实体和关系。
- 辅助指标:BERTScore(与标准答案比较,如果存在的话)。
- 人工评估:重点检查模型是否“捏造”了不存在的信息或来源。
5.2 人工评估:不可替代的“黄金标准”及其科学化
无论自动指标多先进,人工评估在可预见的未来都是不可替代的。但“人工评估”不等于“随便找几个人看看”。它需要科学的设计:
定义清晰的评估维度:不要笼统地问“这个回答好不好?”。要拆解,例如:
- 流畅度:文本是否语法正确、读起来自然?
- 相关性:是否回应了问题或上下文?
- 信息量/有用性:是否提供了有价值的信息?
- 事实准确性:陈述的内容是否真实无误?(需提供可验证的来源)
- 安全性/无害性:内容是否安全、无偏见、无冒犯性?
设计具体的打分标准:最好使用利克特量表(如1-5分),并为每个分数提供清晰的描述范例,减少主观性。例如,“3分:基本流畅,有个别拗口之处;4分:像母语者写的,非常流畅”。
确保评估者质量与一致性:评估者需要理解任务背景。对于专业领域(如医疗、法律),评估者最好具备相关知识。要通过预测试和定期校准会议,确保不同评估者之间的打分标准一致。
统计显著性:每个模型/版本需要足够数量的样本(通常至少数百条)进行评估,并使用统计检验(如t-test)来判断分数差异是否显著,而不是凭感觉说“好像好一点”。
5.3 持续追踪与可视化:让评估驱动迭代
评估不是一次性的考试,而是一个持续的过程。我们需要建立评估仪表盘,持续追踪核心指标的变化。
- 版本对比:每次模型迭代,都将新版本(A)和旧版本(B)在相同的测试集上运行,并排对比所有指标。使用柱状图、折线图清晰展示差异。
- 错误分析:指标下降时,光看分数没用。必须进行人工错误分析。随机采样一批分数低的生成样例,由工程师或产品经理亲自查看,归纳出共同的错误模式。是事实错误?是答非所问?还是语言啰嗦?这些定性分析是指导模型改进的最宝贵输入。
- A/B测试:线上环境的终极检验。将新模型以较小流量上线,与旧模型对比核心业务指标(如对话任务的用户停留时长、满意率;翻译任务的下游业务转化率等)。线上A/B测试的结果是评估模型价值的最终标尺。
在我经历的项目中,那些最成功的NLG系统,背后都有一套严谨、多维、持续运行的评估体系。它可能不那么“性感”,但它是确保模型在正确轨道上迭代、最终产生真实业务价值的压舱石。指标是工具,是路标,但永远不要忘记,我们最终要服务的是人的理解和体验。看懂指标,善用指标,但不要被指标奴役,这大概就是NLG评估这门手艺的核心要义了。
