• 【NLP-00-3】BLEU计算


    目录

    1. 定义
    2. BLEU算法详解
    3. NLTK实现

    一、定义

    BLEU (其全称为Bilingual Evaluation Understudy), 其意思是双语评估替补。所谓Understudy (替补),意思是代替人进行翻译结果的评估。尽管这项指标是为翻译而发明的,但它可以用于评估一组自然语言处理任务生成的文本。

    它是用于评估候选句子(candidate)和参考句子(reference)的差异的指标.它的取值范围在0.0到1.0之间, 如果两个句子完美匹配(perfect match), 那么BLEU是1.0, 反之, 如果两个句子完美不匹配(perfect mismatch), 那么BLEU为0.0.原论文可见【1】,IBM出品。

    二、BLEU算法详解

    2.1 主要公式

    其中:BP(Brevity Penalty),翻译过来就是"过短惩罚"。由BP的公式可知取值范围是(0,1],候选句子越短,越接近0。c 表示候选句子长度,r 表示参考句子长度。

    2.2 n-gram precision

    candinate: the cat sat on the mat

    reference: the cat is on the mat

    三、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连个参数的列表嵌套不要错了(我的理解: 比Sentence的都多加了一个维度)

    weight参数是设置不同的ngram的权重,weight中的数量决定了计算BLEU时,会用几个ngram,以上面为例,会用1gram,2gram,3gram,4gram(默认是4-gram,并且是均值,也就是不写参数也会是本例一样的效果)。SmoothingFunction是用来平滑log函数的结果的,防止fn=0时,取对数为负无穷。

    参考文献

    1】来源  BLEU: a Method for Automatic Evaluation of Machine Translation

    2】机器翻译评价指标 — BLEU算法:https://www.cnblogs.com/jiangxinyang/p/10523585.html

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

  • 相关阅读:
    面向对象二 — — static、final、常量的初始化、this和super
    面向对象二 — — 继承、抽象类、接口
    面向对象一基础知识
    JDBC简介及其用Java连接数据库
    Java I/O 几个重要流的应用
    GUI Panel 容器以及布局管理器
    Oracle 数据库一
    Java I/O文件拷贝
    Java I/O文件的过滤 、读取、写入
    简单理解io与nio
  • 原文地址:https://www.cnblogs.com/yifanrensheng/p/12968913.html
Copyright © 2020-2023  润新知