写在前面
在LLM横行的时代用如此古老的评价指标评价显然是不合适的,但是从学习的角度还是十分有意义,本文旨在总结网上的资料、论文和自己的理解,在此记录。
太长不看:总结
BLEU(Bilingual Evaluation Understudy)最早应用于统计语言模型的机器翻译效果评估,该方法快速、廉价且独立于语言,与人类评估高度相关。Bleu实现的主要任务是将生成翻译的n-gram与参考翻译的n-gram进行比较并计算匹配的数量 。这些匹配与位置无关。匹配越多,候选翻译越好。
ROUGE(Recall Oriented Understudy for Gisting Evaluation)可以理解为BLEU指标的改进版,它们均可用来衡量生成结果和标准结果的匹配程度,不同的是ROUGE基于召回率,BLEU更看重准确率。Rouge其实是一组评价指标的统称,包含Rouge-N, Rouge-L, Rouge-W, Rouge-S四个指标。
准备知识:N-gram语言模型
生成式语言模型其实在做的是文字接龙的任务 ------《生成式导论2024》李宏毅
试想一下在你在说出一句话/一段话/一篇文章的时候,不可能在说出第一字的时候就想到了最后一个字/词,我们在说出下一句时都会思考前文部分或全部词句。N-gram语言模型(早期NLP语言模型,是一种统计语言模型,与现在的GPT、Bert等神经网络语言模型相对)也是如此,它的本质是一个概率预测模型,下一个词的出现依赖于前文若干个词,N-gram中的N即考虑的前文单词数。N-gram语言模型有两大应用:
- 机器翻译:基于一定的语料,对任意的词序列计算出该序列是一句话的概率。
- 文本生成:基于一定的语料,给定部分词序列,语言模型生成/预测接下来的词序列。
可以看到两个任务都需要基于语料训练,这也带来了N-gram语言模型的致命问题:如果词序列没有在训练集出现过,模型输出该词序列的概率为0。 这意味着训练N-gram语言模型需要海量的语料,且无法预测未知,即现在的生成能力。
上文提到N-gram中的N是考虑的前文单词数,在英文下一般按照空格分词,在中文下需要特定的分词工具。 N=1时又称unigram,N=2时又称bigram,N=3时又称trigram。
N-gram | result |
---|---|
1-gram | OpenAI, is, an, artificial, intelligence, company |
2-gram | OpenAI is, is an, an artificial, artificial intelligence, intelligence company |
3-gram | OpenAI is an, is an artificial, an artificial intelligence, artificial intelligence company |
N-gram | result |
---|---|
1-gram | OpenAI, 是, 一家, 人工智能, 公司 |
2-gram | OpenAIs/是, 是/一家, 一家/人工智能, 人工智能/公司 |
3-gram | OpenAI/是/一家, 是/一家/人工智能, 一家/人工智能/公司 |
BLEU(Bilingual Evaluation Understudy)
基本原理
The primary programming task for a BLEU implementor is to compare n-grams of the candidate with the n-grams of the reference translation and count the number of matches.
It appears that any single n-gram precision score can distinguish between a good translation and a bad translation.To be useful, however, the metric must also reliably distinguish between translations that do not differ so greatly in quality.
从论文原文可以看出,BLEU实现的主要任务是将生成翻译的n-gram与参考翻译的n-gram进行比较并计算匹配的数量 。而且作者认为在机器翻译质量评估任务中,区分非常好和非常差的翻译质量是很容易的,难点是如何区分没那么好和没那么差的翻译质量,这也是BLEU-score被提出以及拓展的目的。对于优化,作者主要做了三件事:
- 引入截断因子对模型产生大量重复单词做出惩罚。
- 从最初的unigram单独计算分数,扩展到1-gram~4-gram加权计算得分。
- 引入短句惩罚因子:候选翻译如果比最短参考翻译还要短,得分会很低。
下面是BLEU的主要公式:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> B L E U = B P ⋅ e x p ( ∑ n = 1 N w n l o g p n ) B P = { 1 , c > r e x p ( 1 − r / c ) , c < = r BLEU=BP·exp(\sum_{n=1}^Nw_nlogp_n) \\ BP=\left\{ \begin{matrix} 1 \quad \quad \quad \quad \ \ \ \ \ , \ c>r\\ exp(1-r/c) \quad , \ c<=r\\ \end{matrix} \right. </math>BLEU=BP⋅exp(n=1∑Nwnlogpn)BP={1 , c>rexp(1−r/c), c<=r
其中
BP:短句惩罚因子
c:候选翻译长度
r:最短参考翻译长度
w_n:n-gram权重
p_n:n-gram匹配度
对于为什么要选择N=4,作者给出上图实验结果。图中深蓝色代表人工翻译(高质量)得分,浅蓝色代表候选翻译(低质量)得分。随着N变大,两者的差距逐渐变大,当N>4时,二者差距变大的程度不明显。当然N=4不是必须的,可以根据实际情况自行调整N值及其对应的权重。1−gram能够反映候选译文中有多少单词被单独翻译出来,代表翻译的充分性;2−gram、3−gram、4−gram值越高说明可读性越好,代表翻译的流畅性。
上图阐述了为什么公式中会有exp(随着N的增加,BLEU-score呈指数下降)。
小结
优点:
- 极致的简单粗暴,虽然BLEU公式看起来复杂,但其中蕴含的思想无非是单词/词组级的匹配,通过代码(python调用nltk包)可以实现"不假思索"的给出分数。
- 在机器翻译的任务中的评估结果比较接近人类评分。
缺点:
- BLEU不考虑语义(近义词),句子结构(倒装句、双重否定句)。
- BLEU需要大量高质量的参考翻译,作者建议每条给出4条参考翻译。
- BP惩罚因子没有想象中那么强(此条源于网络总结)。
- 对于目前评估chat模型结果拉跨。
从BLEU的原理出发,笔者的感受是BLEU并没有真正的评估翻译质量,仅仅是进行语句分割+字符串匹配,对于中文翻译一直奉行的"信达雅"更是不存在。而且BLEU依赖高质量的参考翻译数据集,对于构建这样的数据集是十分昂贵且难以复刻的。
即使BLEU的漏洞如此明显,至今仍为机器翻译任务中的主流指标。自从2002年提出以来,BLEU在机器翻译领域得到了广泛的应用和认可。其广泛使用形成了一个庞大的基准数据集和实验结果,使得研究者能够在一个共同的框架内进行比较和评估。在许多情况下,BLEU与人工评价的相关性仍然较高。特别是在衡量模型的整体改进时,BLEU分数依旧能够反映翻译质量的变化趋势。
Rouge(Recall Oriented Understudy for Gisting Evaluation)
基本原理
在 SMT(统计机器翻译)时代,机器翻译效果稀烂,因此需要同时评价翻译的准确度和流畅度;到 NMT (神经网络机器翻译)时代后,神经网络模型的脑补能力极强,翻译出的结果都是通顺的,但是有时候容易瞎翻译。ROUGE的出现很大程度上是为了解决NMT的漏翻问题(低召回率)。所以 ROUGE 只适合评价 NMT,而不适用于 SMT ,因为它不管候选译文流不流畅。ROUGE指标可以理解为BLEU指标的改进版,它们均可用来衡量生成结果和标准结果的匹配程度,不同的是ROUGE基于召回率,BLEU更看重准确率。ROUGE其实是一组评价指标的统称,包含ROUGE-N, ROUGE-L, ROUGE-W, ROUGE-S四个指标:
- ROUGE-N :将BLEU的精确率优化为召回率,在 N-gram 上计算召回率)
- ROUGE-L:将BLEU的n-gram优化为公共子序列,考虑了机器译文和参考译文之间的最长公共子序列
- ROUGE-W:将ROUGE-L的连续匹配给予更高的奖励,改进了ROUGE-L,用加权的方法计算最长公共子序列
- ROUGE-S:Rouge-N的一种扩展,允许n-gram出现跳词(skip)
ROUGE-N没什么可说的,仅仅是把BLEU中的精确率改为召回率(更关注参考翻译被召回的情况)。ROUGE-L则提出一种新的匹配机制------公共子序列LCS(X, Y):
- 参考翻译(X):OpenAI is an artificial intelligence company.
- 候选翻译(Y):OpenAI is an great AI company.
- 最长公共子序列(LCS):OpenAI is an company.
ROUGE-L舍弃了严格的连续序列匹配,允许出现跳词现象。
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> R l c s = L C S ( X , Y ) m P l c s = L C S ( X , Y ) n R o u g e L = F l c s = ( 1 + β 2 ) R l c s P l c s R l c s + β 2 P l c s \begin{aligned} &R_{lcs}={LCS(X,Y) \over m} \\ &P_{lcs}={LCS(X,Y) \over n} \\ &Rouge_L=F_{lcs}={(1+\beta^2)R_{lcs}P_{lcs} \over R_{lcs}+\beta^2P_{lcs}} \end{aligned} </math>Rlcs=mLCS(X,Y)Plcs=nLCS(X,Y)RougeL=Flcs=Rlcs+β2Plcs(1+β2)RlcsPlcs
其中
m:参考翻译长度
n:候选翻译长度
β:超参数,值很大(因此Rouge-L受召回率的影响更大)
ROUGE-W就是所做的工作就是给连续的匹配给到更多的权重,让连续匹配的比非连续匹配的有更高的分数。
ROUGE-S的S表示:Skip-Bigram,允许跳过中间的某些词,同时结合了ROUGE-L的计算方式。
小结
本节着重介绍ROUGE-L,和BLEU一样,ROUGE同样简单粗暴,但BLEU存在的问题ROUGE并没有加以改善。由于更加关注召回率,ROUGE往往被用于评估文本摘要生成任务。
总结
笔者在应用这两个评价指标评估工作中的任务时,最大的感受是生成答案得分普遍较低,得分高的case问题较少,可能表明生成结果的质量相对较好,可以作为大量数据集测试结果的初步筛选方法(至少得分高的问题不大)。指标难以区分不同模型&不同版本生成结果的优劣。分析原因可能是因为:
- 参考回答多样性较少:每条问题仅配1条参考回答,且质量不高。
- 评估任务较复杂,段落级文本。
- 中文分词原因(此条不确定)。
因此,在使用BLEU和ROUGE指标时,参考答案的清洗和扩展至关重要。通过提高参考答案的质量、结合多种评价方法和设计任务定制化指标,可能会更全面、准确地评估生成文本的质量,指导模型优化和任务改进。
论文链接
- BLEU | Proceedings of the 40th Annual Meeting on Association for Computational Linguistics (acm.org)
- ROUGE: A Package for Automatic Evaluation of Summaries - ACL Anthology
参考文章
- 一文带你理解|NLP评价指标 BLEU 和 ROUGE(无公式) - 知乎 (zhihu.com)
- 【论文笔记】BLEU: a Method for Automatic Evaluation of Machine Translation-CSDN博客
- 评价度量指标之BLEU,METEOR,ROUGE,CIDEr_bleu度量-CSDN博客
- BLEU指标及评测脚本使用的一些误解 - 知乎 (zhihu.com)
- Understanding MT Quality: BLEU Scores (modernmt.com)
- BLEU - a Hugging Face Space by evaluate-metric