BLEU 摘要评价工具

BLEU(Bilingual Evaluation Understudy)是用于评价机器翻译、文本摘要结果的评价指标,其得分值在 [0, 1],越接近 1 生成的文本的质量越高。

Paper:https://aclanthology.org/P02-1040.pdf

BLEU 计算公式:

BP 叫做惩罚项,c 表示模型生成文本长度,r 表示参考文本长度。如果生成的文本长度大于参考文本长度,则不进行惩罚,从这里也可以看出 BLEU 希望避免生成的文本较短。

公式中的 N 表示 1-gram、2-gram … N-gram,N 的值默认是 4。w 的值默认为 1/4。

我们通过一个例子理解 BLEU 公式,假设:我们有下面的文本内容:

参考文本:我是一个中国人
生成文本:我是一个人

切分成单个字,当然也可以 jieba 分词:

参考文本:['我', '是', '一', '个', '中', '国', '人']
生成文本:['我', '是', '一', '个', '人']

计算 n-gram 的结果:

1-gram:5/5
2-gram:3/4
3-gram:2/3
4-gram:1/2

ngram = np.e ** ((np.log(5/5) + np.log(3/4) + np.log(2/3) + np.log(1/2)) * 1/4) = 0.707

计算 BP 惩罚项:

生成文本长度 c:5
参考文本长度 r:7
BP = np.e**(1-7/5) = 0.67

计算 BLEU 评分:

BP * ngran = 0.47398785

示例代码:

from nltk.translate.bleu_score import sentence_bleu


if __name__ == '__main__':

    references = '我是一个中国人'
    hypothesis = '我是一个人'

    references = list(references)
    hypothesis = list(hypothesis)

    print('references:', references)
    print('hypothesis:', hypothesis)

    # references: 列表,多个人工翻译结果
    # hypothesis: 机器翻译结果
    score = sentence_bleu(references=[references], hypothesis=hypothesis)
    print(score)

程序执行结果:

references: ['我', '是', '一', '个', '中', '国', '人']
hypothesis: ['我', '是', '一', '个', '人']
0.47398785011707933

在使用 nltk 时,默认我们累加计算 1-gram、2-gram、3-gram、4-gram。我们也可以指定只使用 1-gram,或者同时只使用 1-gram 和 2-gram 等,这些可通过 sentence_bleu 的 weights 参数来指定:

[0.25, 0.25, 0.25, 0.25] 表示使用 1-gram、2-gram、3-gram、4-gram
[1, 0, 0, 0] 表示只使用 1-gram
[1/2, 1/2, 0, 0] 表示只使用 1-gram、2-gram
...

到这里的话,BLEU 的计算过程基本就清楚了,我们可以看到 BLEU 是基于精确率来计算生成文本得分。其计算过程是依据 n-gram, 1-gram 能够使得评估结果包含生成内容和参考内容的匹配程度,2-gram、3-gram、4-gram 则考虑到生成文本相对于参考文本的顺序信息。

未经允许不得转载:一亩三分地 » BLEU 摘要评价工具
评论 (0)

1 + 8 =