NLP度量指标BELU真的完美么?

  摘要: NLP重要评价准则之一——BLEU,真的完美无缺么?
  
  刚接触自然语言处理的朋友通常会问我:当系统的输出是文本,而非对输入文本进行某种分类,如何对该系统进行评估。当模型的输入是文本信息,输出也是文本信息时,我们称之为序列到序列问题,也可称为字符串转换问题。
  
  序列到序列建模是解决NLP中较难任务的核心,它包括:
  
  1、 自动文摘(Text Summarization);
  
  2、 文本简化(Text simplification);
  
  3、 问答(Question answering);
  
  4、 聊天机器人(Chatbots);
  
  5、 机器翻译(Machine translation);
  
  理解序列到序列建模问题相对容易,如何对其进行评价才是难点。
  
  对于刚入门NLP的人来说,选取衡量标准较为困难。目前最流行的评价指标之一BLEU虽然常用,但也存在较大的缺陷。
  
  本文将介绍BELU的工作原理,指出其存在的问题,并探索如何结合自己的工作最大程度规避这些问题。
  
  一个难题
  
  BELU最初是评价机器翻译的指标,所以我们会以翻译(法语—英语)为例进行讲解。
  
  J’ai mangé trois filberts.
  
  下面两句为英语参考译文:
  
  I have eaten three hazelnuts.
  
  I ate three filberts.
  
  假设下面的翻译是由我们训练的神经网络产生。
  
  I ate three hazelnuts.
  
  问题来了:如何给上述翻译结果打分。
  
  要想利用机器学习来建立一个翻译系统,就需要一个实值分数来对其性能进行衡量。如果我们能够获取潜在的最佳得分,便能够计算它与实际值之间的误差。这能够在训练时为系统提供反馈,通过最小实际分数与潜在分数之间的差值来改进翻译模型,并通过查看同一任务上训练过的系统得分比较不同的模型。
  
  假设:如果输出句子中的单词在任何一个参考句出现,就给它打1分,如果没有出现,打0分。为了使计数标准化,使分数始终介于0和1之间。我们可以将某个参考译文中出现的单词总数除以输出句子中的单词总数。我们称该方法为unigram precision。
  
  在上面的翻译示例中,“I ate three hazelnuts”,我们能够在输出句子中看到至少一个参考句中的单词,再除以单词数4,该翻译的最终得分为1。但如果换成了下面的句子,该如何打分呢?
  
  Three three three three.
  
  按照刚才的衡量标准,得分依旧为1。但很明显,“I ate three hazelnuts”比“Three three three three”翻译得好。但如何将这一点告知我们正在训练的系统呢?
  
  你可以通过限定单词出现在翻译句子中的最大次数来调整分数。经过调整,“I ate three hazelnuts”计算出的得分仍然为1,而“Three three three three”为0.25。
  
  这解决了单词简单重复的问题,但新问题来了,如果单词的排列是无序的呢?就像下面:
  
  Ate hazelnuts I three
  
  如果继续用刚才的方法,这个句子得分为1。通过计数可以解决这个问题,但此时并非统计单个单词,而是相邻的单词。该方法称为n-grams,n是每组单词的数量,unigrams,bigrams,trigrams以及4-grams分别由一个、两个、三个、四个单词组成。
  
  在这个例子中,我们使用bigrams。通常来讲,BLEU的分数是unigram,bigram,trigram,4-grams的加权平均。为了简便,我们选择bigram,并忽略句子开头和结尾定义边界的单词。基于上述规则,句子排序如下:
  
  [Ate hazelnuts]
  
  [hazelnuts I]
  
  [I three]
  
  如果我们利用bigrams计算句子得分,“I ate three hazelnuts”是0分,“Three three three three”是0分,“I eat three hazelnuts”为1分,而下面这个例子也是0分:
  
  I ate.
  
  很明显这不是我们想要的。解决这个问题的方法是将目前的分数乘以一个简短惩罚因子。通过这个因子,得分高的候选翻译结果,能够同时在长度、词语选择、词语顺序等方面与参考句子匹配。
  
  如果翻译结果比参考句子更长或者一样长,惩罚因子为1。
  
  如果翻译译文长度比参考译文要短,就需要一个惩罚的机制去控制。在示例“I ate”中,句子长度为2个单词,与其最接近的参考句长度为4个单词。其简洁惩罚为0.36,乘以bigram的精度分数1,最终得分降至0.36。
  
  该指标旨在探测输出翻译与参考语句中有多少个n-grams重叠,并乘以简洁惩罚值后输出得分。BLEU由Kishore Papineni, Salim Roukos, Todd Ward, and Wei-Jing Zhu于2002年提出,是NLP中非常流行的度量指标,特别是对于系统输出是文本信息而不是分类的任务,其中包括机器翻译和自然语言生成。它解决了我们在文章开头提出的问题:找到一种方法,告诉我们翻译结果有多“好”,并为其打分。
  
  BLEU存在的问题
  
  在此之前,先概括一下BLEU的优势:
  
  1、它方便,快速,容易计算,结果比较接近人类评分;
  
  2、在相同的任务中,能够很容易地将模型与基准进行比较;
  
  但这些便利使得人们过度的使用它,即使在它不是最佳度量标准的任务中也作为了首选。
  
  尽管我们只以一句话为例进行了介绍,但BLEU是一种语料库级别的度量标准。计算语料库中的每个句子的BLEU分数,然后求它们的平均值会使得分数过大。
  
  BLEU的问题主要有以下四点:
  
  1、 不考虑意义;
  
  2、 不直接考虑句子结构
  
  3、 不能很好地处理形态丰富的语言
  
  4、 不能很好的映射到人类判断
  
  BLEU不考虑意义
  
  由于BLEU不考虑意义,我们便不能只使用它对机器翻译进行评估。作为一名机器翻译软件的用户,我更希望准确理解原文的含义,即使翻译的句子中在语法或句法上有所欠缺,只要清楚的表达了原文的意义也能接受。
  
  但BLEU并不考虑意义,它只奖励精确匹配的n-grams。这意味着一个虚词(如“an”或“on”)的差异和一个更重要的与内容相关的词语受到的惩罚是一样的。如果一个译文中有一个完全有效的同义词,只是没有出现在参考译文中,也会受到惩罚,但这并不合理。
  
  以下列句子为例对这个问题进行分析:
  
  Original (French): J’ai mangé la pomme.
  
  Reference translation: I ate the apple.
  
  下列的句子都是BLEU评出的 “糟糕的翻译”:
  
  I consumed the apple.
  
  I ate an apple.
  
  I ate the potato.
  
  但作为机器翻译的使用者,我觉得前面两句也表达清楚了原文的意思,即使它们和参考译文有所出入。第三句话让人不能接受,它完全改变了原文的意思。
  
  NIST方法是在BLEU方法上的一种改进。最主要的是引入了每个n-gram的信息量(information)的概念。BLEU算法只是单纯的将n-gram的数目加起来,而NIST是在得到信息量累加起来再除以整个译文的n-gram片段数目。这样相当于对于一些出现少的重点的词权重就给的大了。因此,在更常见的n-gram(如“of”)上的不匹配将受到更小的惩罚,而在更罕见的n-gram(如“buffalo buffalo”)上的不匹配将受到更大的惩罚。虽然这解决了赋予虚词过多权重的问题,但实际上却使惩罚同义词(如“ambled”代替“walked”)的问题变得更糟,因为这些同义词只出现在更少见的n-gram中,因此惩罚因子会更大。
  
  BLEU不直接考虑句子结构
  
  即使你通过调整词序改变句子的结构,仍然可以获得很高的BLEU分数。
  
  句法是对句子结构的研究,以词作为基本单位,并且各单词按照一定顺序排列。“I saw the dog with the telescope”一句,即能表示“I was using the telescope to look at the dog”,也可以说“the dog had the telescope”。二者的区别通过句子中各单词的排列顺序体现。
  
  在自然语言中,句子的内部结构特别重要,将句子各单词顺序打乱,既破坏了其完整含义,又让人难以理解。
  
  通过parsing可解决该问题。但parsing的计算相当密集,每次求值时必须解析所有输出,增加了开销。
  
  但不考虑句法结构,词序混乱的翻译与意思连贯的翻译获得相同的分数显得极其不合理。
  
  Callison-Burch等人在2006年对此进行了说明:
  
  Orejuela appeared calm as he was led to the American www.fengshen157.com/ plane which will take him to Miami, Florida.
  
  Orejuela appeared calm while being escorted to the plane that would take him to Miami, Florida.
  
  Orejuela appeared calm as he was being led to the American plane that was to carry him to Miami in Florida.
  
  Orejuela seemed quite calm as he was being led to the American plane that would take him to Miami in Florida.
  
  翻译如下:
  
  Appeared calm when he was taken to the American plane, which will to Miami, Florida.
  
  这个翻译并不完美,它删除了人名,且句子后半段“will”后面没有动词,但它并非一点意义没有,毕竟比下面的翻译好,虽然两句话获得的BLEU分数相同:
  
  which will he was, when taken appeared calm to the American plane to Miami, Florida.
  
  BELU不能很好地处理形态丰富的语言
  
  BELU基于单词级别进行匹配,对于形态丰富的语言,显得并不适用。
  
  语素是语言中最小的音义结合体,它们组合在一起构成单词。以英语单词“cats”中的“s”为例,它告诉我们不止一只猫。有些语言,如土耳其语,在一个单词中有很多的语素,而英语,通常每个单词中的语素很少。
  
  以秘鲁语句为例:
  
  Jawen jemara ani iki.
  
  Jawen jemaronki ani iki.
  
  两句话都是可接受的英语“her village is large”的翻译。其中,以“jemar-”开头的单词在两个句子中有不同的结尾。不同的结尾代表不同的词素,这句话表明说话人很确定这个村子很大。上面那句话是他们去过那里见到了很大的村子,而下面那句话则表示他们是从别人那听说村子很大。
  
  这种特殊类型的语素被称为“证据标记(evidentiality marker)”,这在英语中不存在,而在秘鲁语中,一个句子的语法需要二者中的一个,所以我们的参考译文也应该有其中的一个。但是,如果我们没有在参考句中准确地找到该单词,就会对它进行惩罚,即使这两个句子都很好的表达了英语原句的意思。
  
  public class Topic
  
  {
  
  public int Id { get; set; }
  
  public string Title { get; set; }
  
  public string Content { get; set; }
  
  public DateTime CreateTime { get; set; }
  
  public ICollection<Post> Posts { get; set; }
  
  }
  
  public class Post
  
  {
  
  public int Id { get; set; }
  
  public int TopicId { get; set; }
  
  public string Content { get; set; }
  
  public DateTime CreateTime { get; set; }
  
  public Topic Topic { get; set; }
  
  }
  
  1.4 编写上下文对象
  
  public class MySqlForumContext : DbContext
  
  {
  
  public MySqlForumContext(DbContextOptions<MySqlForumContext> options) www.078881.cn: base(options) { }
  
  public DbSet<Topic>www.gcyL157.com Topics { get; set; }
  
  public DbSet<Post>www.mingheyl178.com/ Posts { get; set; }
  
  }
  
  该上下文对象非常简单,只是声明了一个 MySqlForumContext 对象,然后继承自 DbContext ,并将 Topic 和 Post 实体对象映射到该上下文中,这个使用方式和之前的文章中连接 MSSQL 数据库的使用方式是完全一致的,这点非常难得,通过 EFCore,无论你连接到的是哪种类型的数据库,其 API 的使用方式几乎是没有什么不同的,可以让开发人员平滑的过渡。
  
  1.5 在 appsetting.json 中配置数据库连接字符串
  
  {
  
  "Logging": {
  
  "LogLevel": {
  
  "Default": "Warning"
  
  }
  
  },
  
  "AllowedHosts": "*",
  
  "ConnectionStrings": {
  
  "Mysql.Forum": "server=127.0.0.1;port=3406;uid=root;pwd=root;database=Forum;"
  
  }
  
  BELU不能很好的映射到人类判断
  
  构建机器翻译,聊天机器人以及问答系统最终的目的是希望人们能够使用它们。如果一个系统不能提供有效的输出,就没有意义。所以优化目的是使更多的人喜欢并尽可能多的使用所开发的系统。
  
  BELU首次提出时,作者进行了相关的行为测试,以确保与人类的判断相关。但当研究人员进行更多的实验时,发现BELU分数并不能很好的映射到人类判断。在一些任务中,甚至其它的评价方法更接近人类判断。
  
  Turian在2003年发现,BLEU在机器翻译中与人类判断的相关性最差,F1与人类判断最为相关,NIST次之。Sun在2010年比较了BLEU,GTM以及TER,发现BELU与人类判断的相关性最小。

原文地址:https://www.cnblogs.com/qwangxiao/p/10298093.html

时间: 2024-10-07 05:28:34

NLP度量指标BELU真的完美么?的相关文章

必知-网站常用度量指标(2/2)

有好友对我说,你的文章太书面了,定义太多了,理解门槛太高了,会导致很多读者只是点开看看,哎,有这么一个东西,挺好挺好,但不会细读.我当时这么回复他:"有些书是给看懂的人阅读的,有些书是给最广泛的群体阅读的."西蒙认为,知识体系是有门槛的,比如相对论的学术体系,看懂的人真的不多.产品经理的职业目前鱼目混杂,耐不住寂寞,经不住诱惑,浮躁的心太多.这个职业的种种乱象是因为产品经理这个职业并没有一个标准的知识体系手册.西蒙没有大才,只希望在这个博客中写一些东西,为这个标准的知识体系做一些微薄的

超融合架构真的完美吗?

最早大概是由NUTANIX知道"超融合"概念,原本以为这又是厂商的噱头和炒作,谁知不然,超融合这两年发展如火如荼.2015年被公认为超融合元年,在软件定义存储SDS的推动下,超融合架构正在引领一场巨大的变革,成为软件定义数据中心SDDC的未来技术发展趋势. 超融合架构的优势和客户价值这个已经勿容置疑,各个厂商和媒体已经成功地帮客户洗脑了,和客户交流不提超融合都俨然被认为落伍,这里不用也不想再赘述.从辩证角度看,任何事物都不可能是完美的,超融合是不是也存在一些问题或局限性呢?超融合有适用

探秘手淘高可用平台(一)——度量指标及数据平台

系列文章根据手机淘宝客户端基础架构高级开发工程师非台在安卓绿色联盟开发者大会上的分享,共分三篇,介绍手淘技术团队性能和稳定性系统化提升方案EMAS-MOTU的设计原理以及实现思路. 本文重点介绍手淘高可用平台的定义及指标.自动化测试框架和性能稳定性数据平台. 非台 手机淘宝客户端基础架构高级开发工程师 主要负责手机淘宝性能和稳定性的提升 高可用的定义及度量指标 移动端高可用定义 移动端高可?旨在通过设计关键的度量指标,以期望能够客观反映和量化用户在使?过程的真实感受,同时通过指标,建?一系列的工

机器学习实战笔记(Python实现)-07-分类性能度量指标

1.混淆矩阵 下图是一个二类问题的混淆矩阵,其中的输出采用了不同的类别标签 常用的衡量分类性能的指标有: 正确率(Precision),它等于 TP/(TP+FP) ,给出的是预测为正例的样本中的真正正例的比例. 召回率(Recall),他等于 TP/(TP+FN),给出的是预测为正例的真实正例占所有真实正例的比例. 2.ROC曲线 图中的横轴是伪正例的比例(假阳率=FP/(FP+TN)),而纵轴是真正例的比例(真阳率=TP/(TP+FN)).ROC曲线给出的是当阈值变化时假阳率和真阳率的变化情

计算机视觉领域常见的度量指标

一:Precision, Recall, F-score 信息检索.分类.识别.翻译等领域两个最基本指标是召回率(Recall Rate)和准确率(Precision Rate------注意统计学习方法中precesion称为精确率,而准确率为accuracy 是分类正确的样本除以总样本的个数.),召回率也叫查全率,准确率也叫查准率,概念公式: 召回率(Recall)=  系统检索到的相关文件 / 系统所有相关的文件总数:::亦即预测为真实正例除以所有真实正例样本的个数           

07-01 推荐系统常用度量指标

目录 推荐系统常用评估指标 一.RMSE 二.MAE 三.Precision(准确率)&Recall(召回率) 四.覆盖率 五.信息熵 六.基尼系数 七.多样性 八.获取各种评测指标的途径 九.长尾分布 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/ 推荐系统常用评估指标 一.RMSE 加大了对预测不准的用户物品评分的惩罚. \[ \text{RMSE}=\s

概率分布之间的距离度量以及python实现

1. 欧氏距离(Euclidean Distance)       欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式.(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离:(2)三维空间两点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:(3)两个n维向量a(x11,x12,-,x1n)与 b(x21,x22,-,x2n)间的欧氏距离:(4)也可以用表示成向量运算的形式: python中的实现: 方法一: import numpy as np x=

衡量机器学习模型的三大指标:准确率、精度和召回率。

连接来源:http://mp.weixin.qq.com/s/rXX0Edo8jU3kjUUfJhnyGw 倾向于使用准确率,是因为熟悉它的定义,而不是因为它是评估模型的最佳工具!  精度(查准率)和召回率(查全率)等指标对衡量机器学习的模型性能是非常基本的,特别是在不平衡分布数据集的案例中,在周志华教授的「西瓜书」中就特别详细地介绍了这些概念. 什么是分布不平衡的数据集? 倘若某人声称创建了一个能够识别登上飞机的恐怖分子的模型,并且准确率(accuracy)高达 99%.你相信吗?好了,有这么

面向对象度量简介

http://blog.csdn.net/horkychen/article/details/7640335 原文地址:http://agile.csc.ncsu.edu/SEMaterials/OOMetrics.htm <略去第一部分说明> 2 度量分析 以面向对象度量来分析代码时,经常使用CK(Chidamber Kemerer)度量集[8] 和MOOD [1,2]度量集. 在本节中,我们将列举和解释度量指标的具体运用. 2.1  耦合 1974年,史蒂文等人在结构化编程的背景下首先定义