生成任务怎么评估?

生成任务怎么评估?BLEU、ROUGE、BERTScore 靠谱吗?
上篇我们聊了分类任务的评估。Accuracy、Precision、Recall、F1,这些指标对付"非此即彼"的判断题挺好使。
但问题是:如果你让AI写一篇文章、翻译一句话、生成一段文案——输出变成了一段文字,该怎么打分?
这可就不是"对或错"能解决的了。
为什么评估生成任务这么难?
分类任务为什么好评估?因为输出是固定的。
图片要么是猫,要么是狗。邮件要么是垃圾邮件,要么不是。对错分明,机器和人类的判断标准高度一致。
但生成任务不一样。
你说"今天天气真好",我写"今日阳光明媚",意思完全一样,但你让机器比对原文——一个字都对不上。
这才是生成任务的真正困境:同一个意思,表达方式可能有无数种。而参考答案,只是其中一种。

传统评测的逻辑是"参考答案比对"。但参考答案本身就是人写的,带有主观性。
你见过语文作文的评分标准吧?标准答案只有一篇范文,但学生写了一篇同样精彩但措辞不同的作文——机器打分可能直接给0分。
这就是生成任务评估的核心矛盾:机器眼里只有"对不对",但人类真正关心的是"好不好"。
人类判断一句话好不好,要看意思对不对、表达通不通顺、语言地不地道。这三个维度,BLEU分数可能一个都抓不住。
所以你会看到一个诡异的现象:BLEU从20飙升到40,感觉效果翻倍。但你把译文拿给人看,意思跑偏了三分之一。
这不是你的模型有问题。这是评估指标本身就有盲区。
BLEU——老牌标准也有硬伤
先说说BLEU。这是个2002年就诞生的老前辈了,至今还在机器翻译评测里占据统治地位。
它的核心逻辑很简单:看你的输出和参考答案有多少词重合。
具体怎么算?BLEU用了一个叫n-gram的技术。把句子切成一块一块的词组,然后看有多少块在参考答案里出现了。
"今天天气真好"切成n-gram就是:
- 1-gram:今天、天、气、真、好
- 2-gram:今天天气、天气真好
然后算精确率——生成的内容里,有多少比例的词组出现在参考答案里。

问题来了。
参考答案写的是"今天天气很好",你写的是"今日天气真不错"。意思一模一样,但BLEU会怎么判?
"今日"和"今日"对上了,"天气"对上了。但"很好"和"真不错"——对不起,在BLEU眼里,这是两个完全不同的词组。
同义词,BLEU认不出来。
语序调整一下呢?"天气今天真好"——意思没变,但BLEU分数可能直接腰斩。
还有一个更离谱的问题:短句惩罚。
假设标准译文是"今天天气很好",你生成"天气好",BLEU分数可能反而更高。因为词少了,命中的比例反而高。
所以BLEU本质上就是个"关键词匹配老师"。它只看你用了多少参考作文的词,不看意思对不对。
你写"今天天气很好,谢谢",多了一个"谢谢",分就掉了。你写"今天天气不错",意思一样,但"不错"不在参考答案里,分又掉了。
BLEU不是不能用在翻译评估,但它只适合评估"翻译得有多像",而不是"翻译得好不好"。
ROUGE——专注召回的"逆向思维"
说完BLEU,再来看它的"好搭档"ROUGE。
ROUGE和BLEU是互补关系。BLEU看的是"你生成的内容,有多少被参考答案覆盖了",追求的是精确率。ROUGE反过来了,看的是"参考答案的内容,有多少被你覆盖了",追求的是召回率。
ROUGE有多个版本,最常用的是ROUGE-L。L代表Longest Common Subsequence,最长公共子序列。
什么意思?找两个句子里最长的相同序列,不管中间隔着多少词。
参考答案:"今天天气很好,适合出门"
你的输出:"今天天气不错,出去玩"
"今天天气"这四个词在两个句子里按顺序出现了,这就是一个公共子序列。ROUGE-L就是用这个序列的长度来打分。

把ROUGE想象成一个"抄作业检查器"。老师检查的不是你用了什么高级词汇,而是参考答案的关键点你有没有都写进去。
"适合出门"你用"出去玩"表达了——OK,这个关键点算你覆盖了。
但ROUGE也有同样的问题:它看的是字面覆盖,不是语义理解。
你写"今天天气很好,但不适合出门",后半句意思完全相反,ROUGE-L可能还是给你高分,因为公共子序列在那儿摆着呢。
所以BLEU和ROUGE,一个管"你说得准不准",一个管"你有没有漏掉",两者组合比单独用效果好。但两个都是基于字面匹配,无法真正理解语义。
BERTScore——语义理解的新一代方案
2018年,BERTScore来了。
它解决的核心问题就是:能不能让机器理解"同义词"和"语序调整"?
怎么做到的?
BERTScore用了预训练语言模型BERT。把每个词映射到一个高维向量空间。这个空间有个特点:意思相近的词,向量也相近。
"很好"和"不错",在BERT的向量空间里,距离很近。"今日"和"今天",距离也很近。
所以计算BERTScore的时候,不是看词对不对得上,而是看向量之间的相似度。
具体流程是这样的:生成文本和参考文本都扔进BERT,各自输出一串向量。然后两两计算余弦相似度,最后汇总成一个分数。

把BERTScore想象成一个"语义理解老师"。它不仅看字面,还看"这句话在说什么意思"。
你说"天气很好",我说"阳光明媚"——BERTScore能识别出这两个说法是同一个意思。
语序调整呢?"天气很好"和"很好的天气",BERT能识别出语义基本一致。
还有一个BLEU和ROUGE都做不到的事:长距离依赖。
"小明和小红是青梅竹马,她从小就认识他。"这个句子,"她"指的是谁?BLEU和ROUGE只看局部词组,看不出这种指代关系。但BERT能看到上下文,能理解这个"她"和"小红"的关联。
BERTScore确实更聪明了,但它也不是银弹。
它能识别同义词,却识别不了事实性错误。你写"太阳从西边升起",语法正确,语义"流畅",BERTScore可能还给高分。
因为在BERT的向量空间里,这句话和"太阳从东边升起"的相似度其实差不多——都是描述太阳升起的正常句子。
三个指标怎么选——实战选型指南
说了这么多,到底该用哪个?
我之前做翻译项目的时候,被BLEU坑过好几次。有一次模型翻译质量明显提升了,但BLEU分数反而降了,因为用词更地道了反而和参考答案对不上。所以选指标这事儿,真的得结合实际场景来。
选指标就像选尺子——量衣服用软尺,量身高用卷尺,量房间用测距仪。没有"万能尺",只有"适合的尺子"。

机器翻译:优先BLEU,兼顾METEOR。
BLEU在翻译领域用了几十年,积累了大量实验数据,业界认可度高。但建议搭配其他指标一起看。
文本摘要:优先ROUGE,搭配BERTScore验证语义一致性。
摘要任务的核心是"有没有把原文的关键信息囊括进来",这正是ROUGE的强项。但要小心的是,ROUGE高不代表摘要读起来流畅,所以要加一个BERTScore来验证语义。
文案生成、润色、对话:BERTScore为主。
这类任务追求的是"表达的自然度和流畅度",而不是"和参考答案有多像"。BERTScore的语义理解能力在这里最有用武之地。
组合使用是常态。
实际项目中,很少只用一个指标。常见做法是:主指标看趋势,比如看模型迭代后分数涨了还是跌了;辅指标看细节,比如BERTScore低了,是语义出了问题还是流畅度出了问题。
指标组合拳,才能让你不被任何一个指标的盲区带偏。
这些指标的局限与未来方向
冷静一下,上面这些指标都有同一个问题:它们只能评估"像不像",不能评估"对不对"。
你说"今天天气很好",BLEU、ROUGE、BERTScore都给你高分。但如果这句话用在天气预报里,而今天其实是阴天呢?
事实性错误,这些指标一个都抓不住。
这就是所谓的"幻觉问题"。生成模型有时候会一本正经地胡说八道,输出流畅但内容虚假。传统指标只看表面,看不出问题。
学术界也在尝试解决这个问题。FEQA、QuestEval这些方法,尝试引入问答机制来验证生成内容的"可回答性",从而间接评估事实性。
但这些方法还没成为主流。
真正搅局的是大模型本身。GPT-4出来之后,很多人开始用"大模型打分"——让GPT来评价生成的文本好不好。
效果确实更好。GPT能理解语义,能识别事实错误,甚至能给出修改建议。
但新问题来了:成本高、不标准化、有偏见。
每次评估都要调API,一句话还好,一篇长文评估下来成本吓人。而且GPT的打分标准不透明,你不知道它为什么给了这个分数。不同版本的GPT打分标准还可能不一样。
未来可能是这样的:传统指标负责快速迭代,大模型评估负责最终把关。
先用BLEU、ROUGE快速筛选模型版本,淘汰掉明显不行的。留下来的几个版本,再用大模型做人类偏好评估,最终决定上线哪个。
写在最后
聊到这里,你应该对三大评估指标有了清晰认识。
BLEU看字面匹配,简单粗暴但有天花板。ROUGE看内容覆盖,和BLEU互补但同样无法理解语义。BERTScore引入深度学习,能识别同义词和语序变化,但仍然无法保证事实准确性。
没有完美的指标,只有适合场景的指标组合。
理解每个指标的"眼睛"能看到什么、看不到什么,你才能在调优模型时不被分数迷惑。
分数高了不代表真的好,分数低了也不代表真的差。真正的好内容,永远需要人类来把关。
那问题来了:人类怎么把关?有没有一套标准化的"人类评估"方法?
这就是下一篇要聊的了——大模型时代,评测任务本身也在被重新定义。
对了,还有个常见困惑:分类任务评估指标和生成任务评估指标,能不能一起用?
当然能。但具体怎么组合,什么场景用谁,这里面的门道还挺多的,得多琢磨琢磨。
你怎么看?遇到过哪些评估指标的坑?
