当前位置: 首页 > news >正文

Rouge | 自动文摘及机器翻译评价指标


tag:评价指标,摘要,nlp

Rouge(Recall-Oriented Understudy for Gisting Evaluation),是评估自动文摘以及机器翻译的一组指标。它通过将自动生成的摘要或翻译与一组参考摘要(通常是人工生成的)进行比较计算,得出相应的分值,以衡量自动生成的摘要或翻译与参考摘要之间的“相似度”。

rouge-N

指N-gram的个数

在中文中计算时,需要用空格将每个字分开(如同英文句子中每个单词之间的空格一样)

举个例子

from rouge import Rouge  
rouge = Rouge()  
title = '今天是星期四'  
pred_title = '今天是周四'  
pred_title2 = '周四是今天'  
print(rouge.get_scores(' '.join(list(pred_title)), ' '.join(list(title))))  # [{'rouge-1': {'r': 0.6666666666666666, 'p': 0.8, 'f': 0.7272727223140496}, 'rouge-2': {'r': 0.4, 'p': 0.5, 'f': 0.4444444395061729}, 'rouge-l': {'r': 0.6666666666666666, 'p': 0.8, 'f': 0.7272727223140496}}]print(rouge.get_scores(' '.join(list(pred_title2)), ' '.join(list(title))))
# [{'rouge-1': {'r': 0.6666666666666666, 'p': 0.8, 'f': 0.7272727223140496}, 'rouge-2': {'r': 0.2, 'p': 0.25, 'f': 0.22222221728395072}, 'rouge-l': {'r': 0.3333333333333333, 'p': 0.4, 'f': 0.36363635867768596}}]

rouge-1

指单个词的匹配度

  • 召回r=单个词重合数/len(title),即找到了多少个字,r=4(重合字为:今天是四)/6=0.67
  • 精准p=单个词重合数/len(pred_title),即找到的字里面有多少个是对的,p=4/5=0.8
  • f即为r和p的计算,f=(2PR)/(P+R)=0.737
  • 两个例子完全相同,不在乎顺序问题

rouge-2

指每两个字的匹配度

  • 召回r=每两个字的重合数/len(title),即找到了多少个字,r=2(今天、天是)/5(今天、天是、是星、星期、期四)=0.4;在title2时,r=1(今天)/5(今天、天是、是星、星期、期四)=0.2
  • 精准p=每两个字的重合数/len(pred_title),即找到的字里面有多少个是对的,p=2/4=0.5;在title2时,p=1(今天)/4(周四、四是、是今、今天)=0.25
  • f即为r和p的计算,f=(2PR)/(P+R)

rouge-L

LCS(longest common subsequence,最长公共子序列)的首字母,因为Rouge-L使用了最长公共子序列。但需要注意的是,这是考虑了顺序的最长公共子序列(因为这个顺序问题很多博客都没说困惑了好久)。

  • 召回r=3(今天是四)/len(title)=4/6;在title2时,r=2(今天)/6=1/3
  • 精准p=3(今天是四)/len(pred_title)=4/5;在title2时,r=2(今天)/5=0.4
  • f即为r和p的计算

优点:不要求词的连续匹配,只要求按词的出现顺序匹配即可,能够像n-gram一样反映句子级的词序。自动匹配最长公共子序列,不需要预先定义n-gram的长度。
缺点:只计算一个最长子序列,最终的值忽略了其他备选的最长子序列及较短子序列的影响。

看完这个例子就可以很清楚的了解到,如果预测出来的顺序一样,如title例子,此时rouge1=rouge-L;但到了title2时,由于考虑了顺序问题,此时最长公共子序列不再是“今天是四”而是“今天”,两个例子中rouge-1没有变化,但rouge2和rouge-L都发生了变化。

http://www.lryc.cn/news/17457.html

相关文章:

  • 【Python入门第十五天】Python字典
  • java学习思路
  • MySQL操作数据库-------创建数据库
  • 【十】深入理解redolog,undolog和binlog的底层原理
  • 高频js手写题之实现数组扁平化、深拷贝、总线模式
  • HTML介绍
  • 【C++】string的9道OJ题
  • Odoo丨Odoo框架源码研读三:异常处理与定制化开发
  • Python概述 基础语法 判断 循环
  • 什么是品牌营销?学会正确推广您的业务
  • Golang学习Day1
  • 《设计模式》工厂模式
  • JS - 原型对象、原型链是什么
  • STM32f103 CubeMX封装 led程序
  • 智慧教室系统--温湿度控制系统
  • 只要一直向前定能到达远方,社科院与杜兰大学金融管理硕士项目为你注入动力
  • Java性能-回收算法-Throughout回收算法
  • 立项近7年,索尼产品经理分享PS VR2开发背后的故事
  • Kubernetes 如何通过ingress-nginx实现应用灰度发布?
  • 华为OD机试 - 密室逃生游戏(Java) | 机试题+算法思路+考点+代码解析 【2023】
  • redis的主从复制细节
  • SparkSQL
  • Python|每日一练|栈|数组|字典树|数组|树|广度优先搜索|单选记录:逆波兰表达式求值|回文对|二叉树的层序遍历
  • 慧教室系统--远程控制系统
  • OSCP-课外1(http万能密码、hydra密码暴力破解http、代码审计、Win缓存区溢出)
  • ELK日志分析--Logstash
  • Mysql插入数据从指定选项中随机选择、插入时间从指定范围随机生成、Navicat使用存储过程模拟插入测试数据
  • 【基础算法】关于高精度计算的问题【很高位数数据的加减乘除(相关代码用C++实现)】
  • 事理知识图谱
  • 多綫程之python爬蟲構建