本文介绍几种生成任务常用的指标之一:BLEU
机器翻译和生成任务中,常用 BLEU (bilingual evaluation understudy) 评价机器翻译模型生成的句子的质量。
BLEU 计算方法
BLEU 是一种基于统计的评价指标,主要是衡量参考译 文和生成的句子中,不同的 n 元组共同出现的比例。其核心思想是评测模型预 测出来 N 元文法 (ngram) 的有多少命中参考译文中的 ngram。BLEU 是一种基于精准度的度量指标。对于给定的一个句子,参考的翻译句可以表示为 R,模型预测的翻译句可以表示为 G,那么 BLEU 的计算方式如下:
其中,k 表示可能存在的 ngram 序号,如果用 wk 表示第 k 组在句子中可能 的 ngram,Ck(G) 表示 wk 在生成的句子中出现的次数,Ck(R) 表示 wk 在参考句中出现的次数。
例如参考译文为“I have a pig as my pat”,模型给出的结果为“my pat is a pig”,那么对于一元文法 (1-gram) 来说,模型预测的一元单词个数为 5,其中 “my”,“pat”,“a”,“pig”都在参考译文中出现过,那么参考译文和模 型输出的匹配度就是五分之四,而对于二元文法 (2-gram) 来说,模型预测出句子总共有 4 个 2-gram,其中只有“my pat”,“a pig”命中参考译文,因此匹配度就是四分之二。
这样的计算方法,有一个很明显的漏洞,即由于是计算模型生成的句子命中参考句子的精确度,那么当模型生成的句子是参考句子的子集的时候,BLEU 值会很高,但生成的句子质量并不好,比如参考句子是“my
pat is cute”,生成的句子是“my pat”,BLEU 算出来是 1,但生成的句子并不是完整的,因此需要加入一个长度惩罚因子 (Brevity Penalty,BP),其中 lg 和 lr 分别表示生成句子和参考句子的长度,加入惩罚因子能更好的评估 生成句子的完整性、充分性。BLEU最终的计算如下:
N 可取的值为在 1 到 4 之间的整数范围内,而 Wn 表示权重,实际计算中,对所有的 n,Wn 取值都是 N1 。使用指数函数的作用是让各阶 n-gram 的权重取值是 服从均分分布的,无论是 1-gram、2-gram、3-gram 还是 N-gram,它们的作用都是同等重要的,如果 N 的取值过大,一般匹配到的精度就会下降,因此 N 一般最多取到4。
利用 BLEU 作为评价指标的优点是快速方便,比较接近人类的评分,但这个指标也存在很多问题,比如无法考虑同义词和近似表达等。
BLEU 计算脚本
计算 BLEU 这一块使用的是GitHub上的一个计算BLEU的工具:sacrebleu。
具体计算两个文件BLEU相似度的命令如下:
sacrebleu --tok none reference < generation_file
使用说明: 需要加上–tok 命令,表示是否使用分词对句子重新分词,设置为none,表示是已经分好词的文件计算BLEU。
本文正在参加 人工智能创作者扶持计划