1,概述

  机器翻译中常用的自动评价指标是 $BLEU$ 算法,除了在机器翻译中的应用,在其他的 $seq2seq$ 任务中也会使用,例如对话系统。

2 $BLEU$算法详解

  假定人工给出的译文为$reference$,机器翻译的译文为$candidate$。

  1)最早的$BLEU$算法

    最早的$BLEU$算法是直接统计$cadinate$中的单词有多少个出现在$reference$中,具体的式子是:

    $BLEU = \frac {出现在reference中的candinate的单词的个数} {cadinate中单词的总数}$

    以下面例子为例:

    $ candinate:$ the the the the the the the

    $ reference:$ the cat is on the mat

    $cadinate$中所有的单词都在$reference$中出现过,因此:

    $BLEU = \frac {7} {7} = 1$

    对上面的结果显然是不合理的,而且主要是分子的统计不合理,因此对上面式子中的分子进行了改进。

  2)改进的$BLEU$算法 — 分子截断计数

    针对上面不合理的结果,对分子的计算进行了改进,具体的做法如下:

    $Count_{w_i}^{clip} = min(Count_{w_i},Ref\_Count_{w_i})$

    上面式子中:

    $Count_{w_i}$ 表示单词$w_i$在$candinate$中出现的次数;

    $Ref\_Count_{w_i}$ 表示单词$w_i$在$reference$中出现的次数;

    但一般情况下$reference$可能会有多个,因此有:

    $Count^{clip} = max(Count_{w_i,j}^{clip}), j=1,2,3......$

    上面式子中:$j$表示第$j$个$reference$。

    仍然以上面的例子为例,在$candinate$中只有一个单词$the$,因此只要计算一个$Count^{clip}$,$the$在$reference$中只出现了两次,因此:

    $BLEU = \frac {2} {7}$

  3)引入$n-gram$

    在上面我们一直谈的都是对于单个单词进行计算,单个单词可以看作时$1-gram$,$1-gram$可以描述翻译的充分性,即逐字翻译的能力,但不能关注翻译的流畅性,因此引入了$n-gram$,在这里一般$n$不大于4。引入$n-gram$后的表达式如下:

    $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^{'})}$

    很多时候在评价一个系统时会用多条$candinate$来评价,因此上面式子中引入了一个候选集合$candinates$。$p_{n}$ 中的$n$表示$n-gram$,$p_{n}$表示$n_gram$的精度,即$1-gram$时,$n = 1$。

    接下来简单的理解下上面的式子,首先来看分子:

    1)第一个$\sum$ 描述的是各个$candinate$的总和;

    2)第二个$\sum$ 描述的是一条$candinate$中所有的$n-gram$的总和;

    3)$Count_{clip}(n-gram)$ 表示某一个$n-gram$词的截断计数;

    再来看分母,前两个$\sum$和分子中的含义一样,$Count(n-gram^{'})$表示$n-gram^{'}$在$candinate$中的计数。

    再进一步来看,实际上分母就是$candinate$中$n-gram$的个数,分子是出现在$reference$中的$candinate$中$n-gram$的个数。

    举一个例子来看看实际的计算:

    $candinate:$ the cat sat on the mat

    $reference:$ the cat is on the mat

    计算$n-gram$的精度:

    $p_1 = \frac {5} {6} = 0.83333$

    $p_2 = \frac {3} {5} = 0.6$

    $p_3 = \frac {1} {4} = 0.25$

    $p_4 = \frac {0} {3} = 0$

  4)添加对句子长度的乘法因子

    在翻译时,若出现译文很短的句子时往往会有较高的$BLEU$值,因此引入对句子长度的乘法因子,其表达式如下:

    

    在这里$c$表示$cadinate$的长度,$r$表示$reference$的长度。

  将上面的整合在一起,得到最终的表达式:

    $BLEU = BP exp(\sum_{n=1}^N w_n \log p_n)$

  其中$exp(\sum_{n=1}^N w_n \log p_n)$ 表示不同的$n-gram$的精度的对数的加权和。

3,$NLTK$实现

  可以直接用工具包实现

from nltk.translate.bleu_score import sentence_bleu, corpus_bleu
from nltk.translate.bleu_score import SmoothingFunction
reference = [['The', 'cat', 'is', 'on', 'the', 'mat']]
candidate = ['The', 'cat', 'sat', 'on', 'the', 'mat']
smooth = SmoothingFunction() # 定义平滑函数对象
score = sentence_bleu(reference, candidate, weight=(0.25,0.25, 0.25, 0.25), smoothing_function=smooth.method1)
corpus_score = corpus_bleu([reference], [candidate], smoothing_function=smooth.method1)

  $NLTK$中提供了两种计算$BLEU$的方法,实际上在sentence_bleu中是调用了corpus_bleu方法,另外要注意$reference$和$candinate$连个参数的列表嵌套不要错了,weight参数是设置不同的$n-gram$的权重,另外weight元祖中的数量决定了计算$BLEU$时,会用几个$n-gram$,以上面为例,会用$1-gram, 2-gram, 3-gram, 4-gram$。SmoothingFunction是用来平滑log函数的结果的,防止$f_n = 0$时,取对数为负无穷。

       

机器翻译评价指标 — BLEU算法的更多相关文章

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

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

  2. 关于机器翻译评价指标BLEU(bilingual evaluation understudy)的直觉以及个人理解

    最近我在做Natural Language Generating的项目,接触到了BLEU这个指标,虽然知道它衡量的是机器翻译的效果,也在一些文献的experiment的部分看到过该指标,但我实际上经常 ...

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

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

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

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

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

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

  6. BLEU (Bilingual Evaluation Understudy)

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

  7. 对于文本生成类4种评价指标的的计算BLEU METEOR ROUGE CIDEr

    github下载链接:https://github.com/Maluuba/nlg-eval 将下载的文件放到工程目录,而后使用如下代码计算结果 具体的写作格式如下: from nlgeval imp ...

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

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

  9. 理解bleu

    bleu全称为Bilingual Evaluation Understudy(双语评估替换),是2002年提出的用于评估机器翻译效果的一种方法,这种方法简单朴素.短平快.易于理解.因为其效果还算说得过 ...

随机推荐

  1. MIP开发教程(三) 使用MIP-CLI工具调试组件

    一 . 在 mip-extensions 仓库中创建新的组件 二 . 预览调试组件 三 . 在 MIP 页中引用自己编写的 MIP 组件 四 . 组件提交到 GitHub 仓库时需要进行校验 站长开发 ...

  2. ASP.NET Aries 高级开发教程:使用存储过程(番外篇)

    前言: 发现这个问题,有不少人提起过,所以就简单写成文章吧. 接下来看如何在Aries 框架中使用存储过程,整体步骤和绑定普通视图差不多. 步骤一:新建一个空视图. 可以在SqlCode管理中,创建一 ...

  3. 4. VIM 系列 - 认识VIM的缓冲区、窗口、标签页

    目录 1. 缓冲区 2. 窗口 3. 标签页 4. 设置一下热键 1. 缓冲区 文件和缓冲区的区别 vim 打开一个文件时,其实是从磁盘中读取文件到内存中,vim的一些操作其实是在操作缓冲区, 当使用 ...

  4. 与其争论java和.net的差别,还不如多想点用编程技术挣钱的方式

    年前和最近,我发现在博客园和其它地方,有不少争论java和.net哪个好的文章,其实这是种好现象.虽然到了架构层面,技术是通用的,但兼听则明,而且技多不压身,多种挣钱的方式总不会错. 本人最近主攻Ja ...

  5. 【朝花夕拾】Android安全之(一)权限篇

    前言        从Android6.0开始,Android系统对权限的处理产生了很大的变化.如果APP运行的设备系统版本为Android6.0或更高,并且target在23或更高,那么danger ...

  6. RecyclerViewSelectableAdapterDemo【封装BaseSelectableAdapter用于多选、单选,以及切换选中状态等功能】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录封装单选.多选.切换选中状态的BaseSelectableAdapter基类,配合Recyclerview使用. 注意:此Dem ...

  7. Java基础系列-Comparable和Comparator

    原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述         Java中的排序是由Comparable和Comparator这两个接 ...

  8. java基础(十)-----Java 序列化的高级认识

    将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ...

  9. NFS服务和DHCP服务讲解(week3_day2)--技术流ken

    NFS服务端概述 NFS,是Network File System的简写,即网络文件系统.网络文件系统是FreeBSD支持的文件系统中的一种,也被称为NFS: NFS允许一个系统在网络上与他人共享目录 ...

  10. Easyui 合并单元格

    onMyLoadSuccessText: function () { $(".datagrid-row").mouseover(function () { var titlestr ...