Metric评价指标-机器翻译指标之BLEU(转载)

一. 原理介绍

BLEU(Bilingual Evaluation Understudy),即双语评估替补。所谓替补就是代替人类来评估机器翻译的每一个输出结果。Bleu score 所做的,给定一个机器生成的翻译,自动计算一个分数,衡量机器翻译的好坏。取值范围是[0, 1],越接近1,表明翻译质量越好。

机器翻译的一大难题是,一句法语句子,可以有多种英文翻译,这些翻译都是非常好的那怎么去评估一个机器翻译系统的质量是不是好呢?这不像图像识别,只有一个正确答案。通常我们有 BLEU score 来解决。

原论文为  BLEU: a Method for Automatic Evaluation of Machine Translation

话不多说,先上公式:

  • 计算公式

 

 

也可以写成:

 

(BLEU的原型系统采用的是均匀加权,即Wn=1/N 。N的上限取值为4,即最多只统计4-gram的精度。)

其中,BP是简短惩罚因子,惩罚一句话的长度过短,防止训练结果倾向短句的现象,其表达式为:

还有Pn,是基于n-gram的精确度,其表达公式为:

公式的解释及使用都在以下例子中体现。

  • 举个例子(在什么情况下时候BLEU):

Reference 1 和 Reference 2这两句都是很不错的人工进行的翻译,那么如何利用这两句话对其他机器翻译得出的结果进行评估呢?

一般衡量机器翻译输出质量的方法之一是观察输出结果的每一个词,看其是否出现在参考(也就是人工翻译结果)中,这被称为是机器翻译的精确度。而这样计算得出的精确度很快就能被一个反例打破,那就是:the the the the the the the.

首先 我们要做的是,看机器翻译 MT 的结果中,有多少词在人类的翻译参考中出现:

  1. 一种方法叫做 Precision(精确度):看机器翻译的每一个词,有没有在翻译参考中出现。在上面的案例中,虽然全是 the 是一个非常糟糕的翻译结果,但是 Precision = 7/7 = 1(感觉这种衡量方法不靠谱)
  2. 改良后叫做 Modified precision:我们会设定最高权重上限,比如第一句翻译参考中,the 出现了 2 次;第二句中, the 出现了 1 次,那权重上限就是 2。这样 Modified precision = 2/7.

对于1中的计算方式的不足之处进行改良,于是把每一个单词的计分上限定为它在参考句子中出现最多的次数。在reference1中,the出现了两次,在reference2中,the只出现了一次。所以会说单词the的得分上限是2。

有了这个改良后的精确度,我们就说,这个输出句子的得分为2/7,因为在7个词中,我们最多只能给它2分。所以这里分母就是7个词中单词the总共出现的次数,而分子就是单词the出现的计数。我们在达到上限时截断计数,这就是改良后的精确度评估(modified precision measure)。

其次 在 Bleu score 中,我们不仅关注 单词,还关注词组(其实就是相邻的词对 bigrams)

  1. 这个例子中,一共有 5 种 bigrams 的组合
  2. 分别数一下出现的次数
  3. 分别数一下在翻译参考中出现的次数
  4. 最终 modified bigram precision = 4/6

可以将其公式化,这里的 P1 下标 1 表示的是 一元词组,推广到 n 元词组。

如果机器翻译的结果和参考翻译中的某一句完全相同,那么 P1 = P2 = … = Pn = 1
也有可能通过某种组合各个参考翻译得到结果为 1。

最终,我们把以上结合起来,获得最后的 Bleu score
即求所有 P 值的平均,然后取个 e 指数
然后在前面加上一个 BP 参数(brevity penalty 简短惩罚)

  • BP 的作用在于,如果输出一个非常短的句子,那很容易得到 Bleu score 的高分,所以我们要防止这个情况的出现
  • BP 在机器翻译长度大于人类翻译长度的时候取值为 1,否则产生惩罚

二. 使用场景

在NLP机器翻译任务中,我们如果想对一个语句进行翻译,然后对翻译结果进行评价打分,则需要使用到BLEU score。在使用时需要有候选语句和语句库进行对比,从而根据两者的差异来计算得分。

三. MindSpore代码实现

(同时简单介绍一下MindSpore,MindSpore,新一代AI开源计算框架。创新编程范式,AI科学家和工程师更易使用,便于开放式创新;该计算框架可满足终端、边缘计算、云全场景需求,能更好保护数据隐私;可开源,形成广阔应用生态。

2020年3月28日, 华为在开发者大会2020上宣布,全场景 AI计算框架MindSpore在码云正式开源。MindSpore着重提升易用性并降低AI开发者的开发门槛,MindSpore原生适应每个场景包括端、边缘和云,并能够在按需协同的基础上,通过实现AI算法即代码,使开发态变得更加友好,显著减少模型开发时间,降低模型开发门槛。

通过MindSpore自身的技术创新及MindSpore与华为昇腾AI处理器的协同优化,实现了运行态的高效,大大提高了计算性能;MindSpore也支持GPU、CPU等其它处理器。 )

  • BLEU score的MindSpore代码实现
"""BleuScore."""
from collections import Counter
import numpy as np
from mindspore._checkparam import Validator as validator
from .metric import Metric


class BleuScore(Metric):
   
    def __init__(self, n_gram=4, smooth=False):
        super().__init__()
        # validator.check_value_type为参数的校验
        self.n_gram = validator.check_value_type("n_gram", n_gram, [int])
        if self.n_gram > 4 or self.n_gram < 1:
            raise ValueError('The n_gram value ranged from 1 to 4, but got {}'.format(n_gram))

        self.smooth = validator.check_value_type("smooth", smooth, [bool])
        self.clear()

    def clear(self):
        """清除历史数据"""
        self._numerator = np.zeros(self.n_gram)
        self._denominator = np.zeros(self.n_gram)
        self._precision_scores = np.zeros(self.n_gram)
        self._c = 0.0
        self._r = 0.0
        self._trans_len = 0
        self._ref_len = 0
        self._is_update = False
    
    # 用ngram计算每个单词在给定文本中出现的次数。
    def _count_ngram(self, ngram_input_list, n_gram):
        # 先构造一个计数器。
        ngram_counter = Counter()

        for i in range(1, n_gram + 1):
            # 遍历翻译文本或参考文本的列表。
            for j in range(len(ngram_input_list) - i + 1):
                # 构造ngram-key字典
                ngram_key = tuple(ngram_input_list[j:(i + j)])
                ngram_counter[ngram_key] += 1

        return ngram_counter
 
    def update(self, *inputs):
        # 先进行输入个数的判断
        if len(inputs) != 2:
            raise ValueError('The bleu_score need 2 inputs (candidate_corpus, reference_corpus), '
                             'but got {}'.format(len(inputs)))
        # 更新输入,一个为候选句子,一个为参考句子或参考列表
        candidate_corpus = inputs[0]
        reference_corpus = inputs[1]
        # 进行输入的校验
        if len(candidate_corpus) != len(reference_corpus):
            raise ValueError('translate_corpus and reference_corpus should be equal in length, '
                             'but got {} {}'.format(len(candidate_corpus), len(reference_corpus)))
        # 遍历两个输入的每一个单词,使用计数器进行统计
        for (candidate, references) in zip(candidate_corpus, reference_corpus):
            self._c += len(candidate)
            ref_len_list = [len(ref) for ref in references]
            ref_len_diff = [abs(len(candidate) - x) for x in ref_len_list]
            self._r += ref_len_list[ref_len_diff.index(min(ref_len_diff))]
            translation_counter = self._count_ngram(candidate, self.n_gram)
            reference_counter = Counter()

            for ref in references:
                reference_counter |= self._count_ngram(ref, self.n_gram)

            ngram_counter_clip = translation_counter & reference_counter

            for counter_clip in ngram_counter_clip:
                self._numerator[len(counter_clip) - 1] += ngram_counter_clip[counter_clip]

            for counter in translation_counter:
                self._denominator[len(counter) - 1] += translation_counter[counter]

        self._trans_len = np.array(self._c)
        self._ref_len = np.array(self._r)
        self._is_update = True

    def eval(self):
        # 如果_is_update是False,则说明使用方法错误。
        if self._is_update is False:
            raise RuntimeError('Call the update method before calling eval.')

        # 分母不能为0
        if min(self._numerator) == 0.0:
            return np.array(0.0)

        # 计算准确度
        if self.smooth:
            precision_scores = np.add(self._numerator, np.ones(self.n_gram)) / np.add(self._denominator,
                                                                                      np.ones(self.n_gram))
        else:
            precision_scores = self._numerator / self._denominator

        # 使用公式进行计算BLEU
        log_precision_scores = np.array([1.0 / self.n_gram] * self.n_gram) * np.log(precision_scores)
        # 几何平均形式求平均值然后加权
        geometric_mean = np.exp(np.sum(log_precision_scores))
        brevity_penalty = np.array(1.0) if self._c > self._r else np.exp(1 - (self._ref_len / self._trans_len))
        bleu = brevity_penalty * geometric_mean

        return bleu

使用方法如下:

import numpy as np
import mindspore.common.dtype as mstype
import mindspore.nn as nn
from mindspore import Tensor

candidate_corpus = [['i', 'have', 'a', 'pen', 'on', 'my', 'desk']]
reference_corpus = [[['i', 'have', 'a', 'pen', 'in', 'my', 'desk'],
                    ['there', 'is', 'a', 'pen', 'on', 'the', 'desk']]]
metric = BleuScore()
metric.clear()
metric.update(candidate_corpus, reference_corpus)
bleu_score = metric.eval()
print(bleu_score)

0.5946035575013605

需要说明的问题

BLEU采用的是clipping策略,即:在参考译文中被匹配过的单元(n-gram)应该被剪切掉,不应该再被匹配。BLEU在语料库层级上具有很好的匹配效果,但是随着n的增加,在句子层级上的匹配表现越来越差,因此BLEU在个别语句上可能表现不佳。

琥珀彩
关注 关注
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BLEU:一种应用于机器翻译Metric
gowithme11123123的博客
12-03 854
该文章着重介绍了BLEU的背景和理论知识,剖析了BLEU的数学公式,以及对于关键代码部分做出了解释
语言模型常用评价方法:perplexity、bleu
满腹的小不甘
12-10 1万+
1. perplexity(困惑度、复杂度) 语言模型效果好坏的常用评价指标是perplexity,简单说,perplexity值刻画的是语言模型预测一个语言样本的能力。在一个测试集上得到的perplexity值越低,说明建模效果越好。计算公式如下: 其中,为word数量 在语言模型的训练中,通常使用perplexity的对数形式:将每个位置上的概率取对数再平均 对数使用加法的形式,可以加速...
机器翻译常用指标BLEU
最新发布
诸神缄默不语的博客
05-02 1078
本文介绍机器翻译常用指标BLEU
机器翻译, 文本生成等任务评价指标 BLEU, ROUGE, PPL(困惑度)
shawroad的博客
04-20 1万+
一:BLEU 1.1 BLEU 的全称是 Bilingual evaluation understudy,BLEU 的分数取值范围是 0~1,分数越接近1,说明翻译的质量越高。BLEU 主要是基于精确率(Precision)的,下面是 BLEU 的整体公式。 BLEU 需要计算译文 1-gram,2-gram,...,N-gram 的精确率,一般 N 设置为 4 即可,公式...
NLP 的 Task 和 Metric (Perplexity,BLEU,METOR,ROUGH,CIDEr)
ZhengrongYue的博客
09-19 1026
NLP任务评价指标(BLEU,METOR,ROUGH,CIDEr)
Paddle——常见的评估指标
樱缘之梦
06-08 2900
在模型评估过程中,分类、回归、标注问题往往使用不同的指标进行评估。 2 2.1.Paddle 2.2.Paddlenlp
datasource-metric-modcluster:Modcluster 的数据源指标 (AS7EAP6)
06-25
数据源-度量-modcluster Modcluster 的数据源指标 (AS7/EAP6)
metricbeat-6.3.0-windows-x86_64.zip
08-17
metricbeat-6.3.0-windows-x86_64.zip
metricbeat-5.6.8-linux-x86_64.tar
03-19
Metricbeat是elastic下的项目,在5.1及之后的版本中支持对Docker的监控,需与EK配合使用能在界面上显示,也可直接将数据导入kafka中。
Deep-Metric-Learning-Baselines-master.zip
04-14
Deep-Metric-Learning-Baselines-master.zip
metricbeat-7.9.3
11-09
metricbeat-7.9.3-linux-x86_64.tar.gz 官网压缩包 免安装版 为了节省时间 上传服务器解压即可使用
机器翻译+对话系统中的评价指标
12-02
bleu 评价指标 ,在这里有详细介绍。大家可以作为参考看一下,有关论文中的计算公式,以及一些别的概念,如T-5 ,T-1
机器翻译BLEU学习
凉水的博客
09-21 1179
BLEU学习 简介 BLEU(bilingual evaluation understudy),是一种翻译结果的评估方法,主要概念来自于这篇Bleu: a method for automatic evaluation of matchin translatrion论文,本文主要学习和总结该论文及相关材料。 1. 评估标准 BLEU的思想基于一个前提:机器翻译的结果越接近专业人士的翻译,结果越好。...
Deep Learning基础--机器翻译BLEU与Perplexity详解
weixin_30834019的博客
11-07 496
前言   近年来,在自然语言研究领域中,评测问题越来越受到广泛的重视,可以说,评测是整个自然语言领域最核心和关键的部分。而机器翻译评价对于机器翻译的研究和发展具有重要意义:机器翻译系统的开发者可以通过评测得知系统存在的问题而不断改进,用户也可以根据评测报告选择满足自己需求的产品,而对于机器翻译的研究人员来说,评测能够给他们的技术发展方向提供最可靠的依据。 ——摘自北京邮电大学信息工程系张剑博士...
评价指标BLEU 原理+例子+代码
百载文枢江左的博客
04-23 3217
评价指标BLEU简介背景标准的N-gram精确度和修正的N-gram精确度标准的N-gram精确度(standard N-gram precision)参考资料 简介 BLEU全称:BiLingual Evaluation Understudy(双语评价替补,代替人对机器翻译的质量进行评价) 用于评估哪些模型的性能?2002年论文用户评价机器翻译的质量,即用来计算模型生成的语句(candidate...
NLP机器翻译常用评价标准 (BLEU & METEOR)
热门推荐
Panonsense
10-18 2万+
在评价一个机器翻译系统时,译文的质量好坏无法通过文本形式的输出直观地体现,所以我们需要采用一些适当的量化标准对机器翻译的译文结果进行评价,而这些标准同样可适用于图像/视频描述等领域。 本文对两个常用的评价方法BLEU和METEOR进行了介绍。
BLEU机器翻译评价指标学习笔记
kuaizi_sophia的博客
11-09 2305
BLEU机器翻译评价指标学习笔记 BLEU(bilingual evaluation understudy),双语互译质量评估辅助工具,主要用来评估机器翻译质量的工具。 评判思想:机器翻译结果越接近专业人工翻译的结果,则越好。 实际工作:判断两个句子的相似程度。 计算公式: BLEU−N=BP⋅exp(∑n=1Nwnlogpn) BLEU-N=BP \cdot exp\Big(\sum_{n=1}...
一种机器翻译的评价准则——Bleu
迷川浩浩的博客
11-10 1万+
1. 引言在牵涉到语句生成尤其是机器翻译的应用领域,如何衡量生成语句与参考语句之间的相似性是一个很重要的问题,而在2002年Kishore Papineni et al.就提出了一个经典的衡量标准Bleu,如今这篇文献已经引用量过万,因此是NLP领域必读文章之一。2. 论文中使用的例子论文中给出了四个例子来辅助解释算法,每个例子都有待评价(Candidate)语句和标准参考(Reference)语句
BLEU算法——机器翻译自动评估
仲夏
12-19 2612
BLEU:bilingual evaluation understudy , 即双语互译质量评估辅助工具,用来评估机器翻译的质量。BLEU的设计思想:机器翻译结果越接近人工翻译的结果,则越好。BLEU算法的设计:判断两个句子的相似程度,将句子的标准人工翻译和机器翻译的结果做比较,如果很相似,则说明翻译很成功。BLEU判断方法:一句机器翻译的话与其相对应的几个参考翻译作比较,算出一个综合分数。分数越高
分类模型的性能评价指标(Classification Model Performance Evaluation Metric
06-12
分类模型的性能评价指标有很多,以下是常用的几个: 1. 准确率(Accuracy):分类正确的样本数除以总样本数。 2. 精确率(Precision):真正例(TP)占所有预测为正例(P)的比例,即 TP/P。 3. 召回率(Recall):真正例(TP)占所有实际为正例(T)的比例,即 TP/T。 4. F1值(F1-Score):综合考虑了精确率和召回率,F1值是精确率和召回率的调和平均数,即 2*(Precision * Recall) / (Precision + Recall)。 5. ROC曲线和AUC值(ROC Curve and AUC):ROC曲线是真正例率(TPR)和假正例率(FPR)之间的曲线,AUC值是ROC曲线下的面积。 6. 混淆矩阵(Confusion Matrix):描述分类模型的真实分类和预测分类之间的关系,包括真正例(TP)、假正例(FP)、真反例(TN)和假反例(FN)四种情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
64
原创
300
点赞
875
收藏
88
粉丝
关注
私信
写文章

热门文章

  • 箱形图box plot 和 小提琴图violin plot 75361
  • 两个字符串的编辑距离-动态规划方法 30564
  • matlab rand(‘seed’,key)函数,是用来做什么的呀 29913
  • 关于anaconda 找包,安装包的一些总结(关于Anaconda中PackageNotFoundError: '' Package missing in current win-64 channe) 24550
  • LayerNorm 24005

分类专栏

  • matplotlib 2篇
  • 机器学习与数据挖掘算法 19篇
  • 常用编程算法 2篇
  • anaconda 6篇
  • Python 19篇
  • 强化学习 4篇
  • leetcode 37篇
  • 华为机试 3篇
  • c++ 4篇
  • tensorflow 10篇

最新评论

  • Anaconda使用mpl_toolkits的方法

    小段大人: 2024,我也遇到这个问题

  • LSTMCell中num_units参数解释

    圣巢狗哥: f ( t ) . ∗ C ( t − 1 ) = 128 ∗ 1. ∗ 128 ∗ 1 = 128 ∗ 1 这句怎么理解

  • 机器学习中L1 L2正则化项(范式,惩罚项)

    qwa7: L2的lambda到底是应该取一个很大的正数还是一个很小的正数呢

  • 两个字符串的编辑距离-动态规划方法

    m0_65642342: 改了运行的结果也不对

  • LayerNorm

    落花微雨702: 谢谢解决了我的问题

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 转载 Skip-Gram python 实现
  • GAN的训练入门- from Deep-Learning-with-TensorFlow-book-master
  • VAE 变分自编码器
2022年3篇
2021年15篇
2020年5篇
2019年3篇
2018年6篇
2017年5篇
2016年52篇
2015年19篇
2014年3篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源上海海洋大学绩点姓邓起名字大全男孩吗姑娘起名字再生资源回收公司起名郝万春海南舰新生儿起名来自阴间的新娘私生女伊朗发射导弹经典a片qq空间主人寄语代码给通讯公司起名大全集用火字旁的字起名字各得其所的意思起名 诗词 典故程又青易方达科翔嗨嗨影视注册商标起名假日暖洋洋剧情介绍客服起名宝典服装公司起名大全创意大排档起名h版埃及艳后霹雳赛车游戏下载姓潘的女孩起名字吗外出电影俄罗斯卫星通讯社党员民主生活会材料淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化