一、介绍
用于评估模型生成的句子和实际句子差异的指标,取值在[0,1],匹配度高就距离1近,反之距离0近。这个指标计算代价小,容易理解,与语言无关,与人类评价结果高度相关。
BLEU主要基于n-gram匹配(连续的n个词)的精确率,并结合**短句惩罚(Brevity Penalty, BP)**来调整长度差异的影响。
公式:BP为惩罚系数
二、计算步骤
对于每个n-gram(如1-gram到4-gram):
- 精确率:机器翻译中与参考翻译匹配的n-gram数量 / 机器翻译中总n-gram数量。
- 修正精确率:为避免重复n-gram的干扰,对每个n-gram的匹配次数取参考翻译中的最小上限。
例如:若机器翻译中某个词出现3次,而参考翻译中最多出现2次,则匹配次数计为2。
若机器翻译长度c没有参考翻译长度r长,那么就惩罚:
最后带入公式。
三、示例代码
from nltk.translate.bleu_score import sentence_bleu
# prefect match,reference是target,candidate是预测输出的
reference = [['the', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog']]
candidate = ['the', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog']
score = sentence_bleu(reference, candidate)
print(score)
输出1.0
如果是9个单词,4-gram,那么计算BLEU就是四分之一乘以一个词算的时候的准确率,然后两个词,三个词,四个词。就比如9个单词,有8个能对应上,那么公式就是:
从上到下分别是4gram,1-gram,2-gram: