最近我在做Natural Language Generating的项目,接触到了BLEU这个指标,虽然知道它衡量的是机器翻译的效果,也在一些文献的experiment的部分看到过该指标,但我实际上经常会略去阅读实验效果的部分(纯粹感觉不如理论部分激动人心哈哈哈),现在轮到自己做项目了,下定决心要搞懂这个指标到底在干嘛。不足之处还是希望大家能够指正。同时也欢迎大家转载我的这篇blog 原创不易还请注明出处~

首先是原始论文地址: https://www.aclweb.org/anthology/P02-1040.pdf

其次我在阅读原始论文的时候也参考了这篇博客:https://www.cnblogs.com/by-dream/p/7679284.html 对我的帮助也很大

接下来纯粹是按照我的个人理解对原论文进行的一个提炼 故未必代表论文的本意。

1 BLEU指标的提出和假设

BLEU用于衡量机器翻译结果(candidate)和参考译文(reference)之间的相似程度。 BLEU可以衡量任意语种之间的翻译效果。它的前提假设是:翻译效果的好坏可以由n-gram在candidate和reference中出现的频率来体现。直觉上来说,如果candidate中的每一个单词(或者bi-gram, tri-gram)出现的频率和reference中的每一个单词(或者bi-gram, tri-gram)的出现频率差不多,那么我们就可以认为机器翻译的效果很好。但是这种直觉理解存在一定的问题,需要正式化(formalization)。

2 BLEU指标的formalization

假定翻译效果的好坏可以n-gram的频率来体现,那么依然存在以下的问题:

  1. 如何正式化所谓的频率相近?

  2. 给定一句机器翻译结果,可以存在多句参考译文

  3. 如何衡量一篇文章(包含多个句子)的翻译效果好坏?

  4. 基于1,2,3给出的metric是否存在让某些低质量的candidate反而获得好评的可能性?

下面针对上述问题给出解答。

2.1 “频率相近”的正式化

直觉上,一句句子中包含多个单词(uni-gram), 如果大部分单词都出现在了reference中,则认为这是一句好的翻译句子。很自然的,会想到用

precision=number of unigram in candidate which appears in reference /number of unigram in candidate

但在正式化之前,这个直觉存在一个错误,考虑如下例子:

Candidate: the the the the the the the 

Reference : The cat is on the mat

Candidate一共有7个单词,每一个单词都出现在了Reference当中,所以precision=7/7,很野路子。

这个直觉的本质问题是reference中只有2个the(忽略大小写),而Candidate中有7个the,所以合理的度量应该是2/7,也就是相似度受到Reference中the的出现频率的制约。

下面结合问题2一起给出BLEU的初步正式化。

2.2 单个candidate+多个reference的BLEU初步正式化

声明:之后如果是reference则指代一句参考译文,references指代多句参考译文

Candidate: the the the the the the the cat cat
Reference1: There is a cat on the mat
Reference2: The cat is on the mat

计算BLEU的步骤以及直觉如下,先以unigram为例

1. 计算Candidate中所有单词的出现频率, 此处为 {the: 7, cat: 1}
2. 计算所有unigram在每一句referece中出现的频率, 此处应为:
{the in Ref1: 1, the in Ref2: 2, cat in Ref1: 1, cat in Ref2: 1}
3. 保留每一个unigram在references中最大的频数,得到:
{the in Ref2: 2, cat in Ref1: 1}
之所以保留最大频数,我认为体现了“宽容”的思想, 不同的reference由不同的翻译人员给出,体现了翻译人员不同的风格,在这种多风格中选取和candidate最相似的
即可,不必吹毛求疵
4. 'Clipped' Step
这一步就是抑制第一个例子中的“野路子”
the = min(the in Ref2, the) = (2,7) = 2
cat = min(the in Ref1, cat) = (1,1) = 1
5 计算precision
p = (2+1)/(7+1)=3/8

计算bigram, trigram的思路也和unigram一样,在原来的论文中,作者提到:

A translation using the same words (1-grams) as in the references tends to satisfy adequacy. The longer n-gram matches account for fluency.

unigram用来衡量adequacy, 有两种情况需要考虑:

  1. 如果candidate的翻译结果多出了许多不曾出现在references中的单词,则我们的p会很小,BLEU做出了惩罚。

  2. 如果candidate的翻译结果少了很多单词,我们的p可能会是1!考虑如下例子:

    Candidate: the
    Reference1: The cat is on the mat

    p = min(1,2)/1 = 1

    因此到目前为止的BLEU需要继续调整。

而bigram,trigram等等则是衡量文章的通顺性,并且unigram中存在的问题在multi gram的情况下依然存在

2.3 多个candidate+多个reference的BLEU初步正式化

论文中把多个candidate所组成的document成为corpus.尽管是多个candidate,但是每个candidate本身对应了多个reference,因此2.3只是2.2的简单扩充而已。

对于n-gram的BLEU的初步计算公式如下:

\[p_n = \frac{\sum_{C\in{Candidates}}\sum_{n-gram\in{C}}Count_{clip}(n-gram)}{\sum_{C'\in{Candidates}}\sum_{n-gram'\in{C'}}Count(n-gram')}
\]

其中:

\[Count_{clip}(n-gram) = min(freq_{C}(n-gram),max_{R\in references}freq_{R}(n-gram))
\]

$ freq_{C}(n-gram)$ 是给定n-gram在C中出现的频率

\(freq_{R}(n-gram)\)是给定n-gram在R中出现的频率

\(Count(n-gram')\)是指给定n-gram'在C'中出现的频率

结合多个n-gram:

如2.1中提到的,不同的n-gram具有不同的作用,因此需要综合考虑

\[exp(\sum_{n=1}^N\omega_{n}log(p_{n}))
\]

\(log(p_n)\)的原因是:在论文实证的过程中发现随着n-gram中n的增加,\(p_n\)的下降呈现指数型,因此简单的平均\(p_n\)会让指标过度倾向于1-gram,所以需要对数化的调整。

\(w_n\)在论文中为1/N。并且论文中的经验结果表明N=3-5已经足够反应句子的翻译质量了。

2.4 对翻译句子长度的调整

我们在2.2中提到了一个极端的例子,candidate长度极短却获得了\(p_1\)=1的效果,因此需要对翻译句子的长度做出惩罚。惩罚分为两种:过长和过短。过长的句子实际上已经通过\(p_n\)被惩罚了,过长的句子会导致\(p_n\)中的分母很大,从而使得BLEU整体较小。故仅考虑句子过短的情况,原文中对句子过短却依然取得很高\(p_n\)的情况成为The trouble with recall,实际上就是references(实际为正例)中仅有很小一部分出现在candidate(预测为正例)中。

依然假设我们的corpus中有多个candidate,每个candidate有多个reference, 论文中把references 中最接近candidate长度的那个reference的长度称为“best match length ”

直觉上,可以计算corpus中每一个candidate的对应惩罚,求和后取平均。但是论文认为这样做对短句子的惩罚过大。这里也体现了BLEU的宽容思想,我们可以容忍corpus中存在一些短句子,但是如果每一句句子都过短,则无法容忍。

首先计算effective referecne length(r), 即把每一个candidate对应的best match length相加求和

再次计算corpus中所有candidate的长度之和c

惩罚项:

\[BP=\left\{
\begin{array}{rcl}
1 & & {r<c}\\
\exp(1-\frac{r}{c}) & & {r\geq c}\\

\end{array} \right.
\]

综上,最终的BLEU为:

\[BLEU = BP*exp(\sum_{n=1}^N\omega_{n}log(p_{n}))
\]

3 BLEU指标总结

不难看出,BLEU指标实际上是对“n-gram频率相似”的一个科学化的表达。

其对两种不匹配做出了惩罚:

  1. n-gram频率不匹配
  2. 句子过长或者过短

BP对句子过短做出了惩罚,而exponential项对n-gram频率不匹配做出了惩罚,顺带解决了对过长句子的惩罚问题。

关于机器翻译评价指标BLEU(bilingual evaluation understudy)的直觉以及个人理解的更多相关文章

  1. BLEU (Bilingual Evaluation Understudy)

    什么是BLEU? BLEU (Bilingual Evaluation Understudy) is an algorithm for evaluating the quality of text w ...

  2. 机器翻译评价指标 — BLEU算法

    1,概述 机器翻译中常用的自动评价指标是 $BLEU$ 算法,除了在机器翻译中的应用,在其他的 $seq2seq$ 任务中也会使用,例如对话系统. 2 $BLEU$算法详解 假定人工给出的译文为$re ...

  3. bilingual evaluation understudy

    BLEU is designed to approximate human judgement at a corpus level, and performs badly if used to eva ...

  4. 机器翻译评测——BLEU算法详解

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/7679284.html 前言 近年来,在自然语言研究领域中, ...

  5. 机器翻译评价指标之BLEU详细计算过程

    原文连接 https://blog.csdn.net/guolindonggld/article/details/56966200 1. 简介 BLEU(Bilingual Evaluation Un ...

  6. 机器翻译评测——BLEU改进后的NIST算法

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/7765345.html 上一节介绍了BLEU算的缺陷.NIS ...

  7. 机器翻译质量评测算法-BLEU

    机器翻译领域常使用BLEU对翻译质量进行测试评测.我们可以先看wiki上对BLEU的定义. BLEU (Bilingual Evaluation Understudy) is an algorithm ...

  8. Deep Learning基础--机器翻译BLEU与Perplexity详解

    前言 近年来,在自然语言研究领域中,评测问题越来越受到广泛的重视,可以说,评测是整个自然语言领域最核心和关键的部分.而机器翻译评价对于机器翻译的研究和发展具有重要意义:机器翻译系统的开发者可以通过评测 ...

  9. 学习笔记TF067:TensorFlow Serving、Flod、计算加速,机器学习评测体系,公开数据集

    TensorFlow Serving https://tensorflow.github.io/serving/ . 生产环境灵活.高性能机器学习模型服务系统.适合基于实际数据大规模运行,产生多个模型 ...

随机推荐

  1. Python-迭代协议-__iter__ __next__ iter next yield

    iter 本质是for循环调用的实质,for循环通过调用这个函数返回可迭代对象生成器形式,开始迭代取值捕获StopIteration错误退出循环 for循环首先找__iter__方法,然后再找 __g ...

  2. 再解决不了前端加密我就吃shi

    参考文章 快速定位前端加密方法 渗透测试-前端加密测试 前言 最近学习挖洞以来,碰到数据做了加密基本上也就放弃了.但是发现越来越多的网站都开始做前端加密了,不论是金融行业还是其他.所以趁此机会来捣鼓一 ...

  3. Book of Shaders 00 - 使用 VS Code 编写 GLSL

    0x00 写在前面 最近在学习由 Patricio 编写的 The Book of Shaders,这是一本关于 Fragment Shaders(片段着色器)的入门指南.为了在一个相对熟悉的平台运行 ...

  4. Layman 对PHP源码进行加密保护

    加密软件(php_screw) >下载网站:http://sourceforge.net/projects/php-screw/ >描述:php文件通常以文本格式存贮在服务器端, 很容易被 ...

  5. JavaFX ImageView

    例子1:显示4个狗头.正常显示左上角.右下角的狗头:右上角的狗头旋转180°,并设置了透明度:左下角的狗头旋转90°,也设置了透明度. 1 import javafx.application.Appl ...

  6. Linux网卡命名规则

    网卡命名 一.为什么需要这个      服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的.Linux系统的命名原来是eth0,eth1这样的形式,但是这个编号往往不一定准确对应网卡接口的 ...

  7. docker-命令帮助

    1. 命令参考     http://www.runoob.com/docker/docker-command-manual.html2. docker-命令,可以使用docker --help查看或 ...

  8. vue打包之后在本地运行,express搭建服务器,nginx 本地服务器运行

    一.使用http-server 1.安装http-server npm install -g http-server 2.通过命令进入到dist文件夹 3.运行http-server 以上在浏览器输入 ...

  9. SQl编程存储过程

    过程化存储 存储过程,一组为完成特定功能.经过编译后存储在数据库中的SQL语序集 灵活性:存储过程中可以进行流程控制和循环操作来完成复杂的判断和运算 一致性:通过存储过程可以使一些关联的操作一起发生, ...

  10. Termux基础教程(二):软件包安装

    Termux基础教程(二):软件包安装 Termux是一个在安卓手机上模拟Linux系统的高级终端,这个终端十分强大,实用. Termux可以安装Liunx的各种软件包,这就是Termux的灵魂所在. ...