从BLEU到BERTScore:NLG评测指标演进与工业实践指南 📅 2026/8/10 5:45:53 1. 从“跑通”到“看懂”NLG评测指标的现实困境最近在复盘几个对话系统和文本生成的项目发现一个挺有意思的现象团队里新来的同学还有不少合作方在评估模型生成的文本质量时张口闭口就是“BLEU多少”、“ROUGE多少”。你问他为什么用这个指标他大概率会回你一句“论文里都这么用啊”或者“大家都这么用肯定没错”。这让我想起自己刚入行那会儿也是拿着一堆指标跑脚本看到分数高了就开心低了就沮丧但对分数背后到底意味着什么其实是一知半解的。NLG自然语言生成的评测远不是跑个脚本、输出个分数那么简单。它本质上是在回答一个核心问题我们如何量化一段机器生成的文本的“好坏”这个“好坏”的定义本身就极其复杂可能包括流畅度、相关性、事实准确性、多样性、甚至风格和情感。没有一个单一的指标能包打天下。更麻烦的是很多经典指标像BLEU、ROUGE它们的设计初衷和计算逻辑与我们现在面临的许多实际需求比如长文本连贯性、事实一致性存在天然的错位。如果你只知其然分数而不知其所以然计算逻辑、优缺点、适用场景就很容易被指标“欺骗”做出错误的优化决策甚至引导模型走向奇怪的方向。所以这篇笔记不打算罗列所有指标的定义公式那太像教科书了而是想结合我这些年踩过的坑聊聊几个最核心的指标家族——基于N-gram重叠的、基于嵌入的、基于学习的——它们到底在量什么为什么会有这样那样的局限以及在真实的项目里我们到底该怎么组合使用它们才能对模型能力有一个相对靠谱的评估。毕竟看懂指标是做好NLG的第一步。2. 基石与局限基于N-gram重叠的经典指标族当我们谈论NLG评测尤其是机器翻译和文本摘要时BLEU和ROUGE是绕不开的起点。它们统治了这个领域近二十年不是没有道理的。它们的核心思想非常直观将机器生成的文本候选文本与一个或多个人类编写的参考文本进行比较计算它们之间在词或词组N-gram层面上的重叠程度。重叠度越高就认为生成质量越好。2.1 BLEU机器翻译的“黄金标准”及其暗伤BLEUBilingual Evaluation Understudy可以说是机器翻译领域的“元老级”指标。它的设计非常精巧主要看两个东西精度Precision和短句惩罚Brevity Penalty, BP。精度不是简单的词匹配。它计算的是候选文本中出现的N-gramN1,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是翻译的“精度”大师那么ROUGERecall-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评估这门手艺的核心要义了。