2021SC@SDUSC

我们继续分析evaluate()函数的剩余的关键代码。

 final_scores = self.score(ref, hypo)

这里的final_scores保存的是最终的评价得分,根据上篇博客提到的三种评价方法。这里调用了score函数,它是Evaluate的类函数,代码如下:

    def score(self, ref, hypo):final_scores = {}for scorer, method in self.scorers:score, scores = scorer.compute_score(ref, hypo)if type(score) == list:for m, s in zip(method, score):final_scores[m] = selse:final_scores[method] = scorereturn final_scores

参数ref和hypo是两个集合,循环进行评价打分,调用compute_score函数,在三个评价方法里都有compute_score,让我们先看BLEU:

    def compute_score(self, gts, res):bleu_scorer = BleuScorer(n=self._n)for id in sorted(gts.keys()):hypo = res[id]ref = gts[id]assert(type(hypo) is list)assert(len(hypo) == 1)assert(type(ref) is list)assert(len(ref) >= 1)bleu_scorer += (hypo[0], ref)score, scores = bleu_scorer.compute_score(option='closest', verbose=0)return score, scores

BleuScorer是一个类,里面的参数和函数都很复杂,大体理解了下,就是对BLEU这个评价方法的实现,最终得到BLEUn。

对于一个待翻译句子,候选译文(也即机翻译文) 可以表示为Ci,对应的参考译文可以表示为Si={Si1, Si2, Si3, ……}(多组参考答案)。BLEU的计算方法如下:

参考博文:

机器翻译评价标准小总结 - 知乎

Rouge的compute_score函数代码如下:

    def compute_score(self, gts, res):score = []for id in sorted(gts.keys()):hypo = res[id]ref  = gts[id]score.append(self.calc_score(hypo, ref))assert(type(hypo) is list)assert(len(hypo) == 1)assert(type(ref) is list)assert(len(ref) > 0)average_score = np.mean(np.array(score))return 100*average_score, np.array(score)

最后返回的是百分比的。简单地来说,ROUGE-L主要计算的是最长公共子序列(LCS)的F-measure,下图就是ROUGE-L的计算方法。X,Y表示的是模型生成句子和参考译文。m,n分别表示它们的长度。当有多个参考译文时,挑选最高分数作为最终的评判分数。

参考论文:[1]ROUGE: A Package for Automatic Evaluation of Summaries Chin-Yew Lin Information Sciences Institute University of Southern California 4676 Admiralty Way Marina del Rey, CA 90292 cyl@isi.eduhttps://aclanthology.org/W04-1013.pdfhttps://aclanthology.org/W04-1013.pdf

Meteor的compute_score代码如下:

    def compute_score(self, gts, res):imgIds = sorted(list(gts.keys()))scores = []eval_line = 'EVAL'self.lock.acquire()for i in imgIds:assert(len(res[i]) == 1)hypothesis_str = res[i][0].replace('|||', '').replace('  ', ' ')score_line = ' ||| '.join(('SCORE', ' ||| '.join(gts[i]), hypothesis_str))self.meteor_p.stdin.write(score_line + '\n')stat = self.meteor_p.stdout.readline().strip()eval_line += ' ||| {}'.format(stat)self.meteor_p.stdin.write(eval_line + '\n')for i in range(len(imgIds)):score = float(self.meteor_p.stdout.readline().strip())scores.append(score)final_score = 100*float(self.meteor_p.stdout.readline().strip())self.lock.release()return final_score, scores

这里主要是用meteor方法进行评分,涉及了很多Meteor类中的类函数,并非evaluate本身的关键代码,主要就是根据meteor方法完成的代码。我们在模型生成句子和参考答案句子中作出word-to-word的映射,映射准则有以下3种: 相同词映射、词干映射、同义词映射。

我们采取任意一个准则进行映射,但是要列出所有映射结果。如果“computer”这个词在模型生成的句子中出现1次,而在参考句子中出现两次,那么我们要连出2条线。在获得了所有的映射结果后,我们要挑选一组合法的映射结果,也即我们只允许一个词语最多有一根线相连(这个有一点像算法里的二分图匹配,求出最大匹配)。当有好几种方案最大匹配数都一样时,我们选取这个二分图中连线交叉数量最小的方案。METEOR是分阶段来建立映射关系的。默认的来说,分作3个阶段:第一阶段采用相同词映射(exact)来连线,第二阶段采用词干映射(porter stem),第三阶段采用同义词映射(WN synonymy)。后一阶段只针对前一阶段来进行映射补充,并不会修改前一阶段的映射决策。从这里的默认阶段顺序也可以看出,后一阶段的映射建立条件总是比前一阶段更加宽松。

参考论文:[2]METEOR: An Automatic Metric for MT Evaluation with Improved Correlation with Human Judgments Satanjeev Banerjee Alon Lavie Language Technologies Institute Language Technologies Institute Carnegie Mellon University Carnegie Mellon University Pittsburgh, PA 15213 Pittsburgh, PA 15213 banerjee+@cs.cmu.edu alavie@cs.cmu.edu

三类方法评价完之后,得到最终得分final_scores,就完成了对生成文本的评估。

知识图到文本的生成——拾贰相关推荐

  1. 知识图到文本的生成——叁

    2021SC@SDUSC 上篇博客我们提到了RawField类除了__init__函数外,还内含了两个函数,分别为preprocess(self, x)和process(self, batch, *a ...

  2. 知识图到文本的生成(六)

    2021SC@SDUSC 本文将就数据迭代部分和数据集产生部分的代码进行详细分析 首先我们对mkiters函数进行分析,详细分析如下 args = self.args     train = data ...

  3. 从知识图谱到文本:结合局部和全局图信息生成更高质量的文本

    论文标题: Modeling Global and Local Node Contexts for Text Generation from Knowledge Graphs 论文作者: Leonar ...

  4. 图形化文本编辑器_使用图形转换器从知识图生成文本

    图形化文本编辑器 A summary of the structure 结构总结 This 2019 paper is a bit of an anachronism, given the speed ...

  5. 强烈推荐十大NLP主流经典项目:预训练BERT、知识图谱、智能问答、机器翻译、文本自动生成等...

    自然语言处理技术近几年发展非常快,像BERT.GPT-3.图神经网络.知识图谱等技术被大量应用于项目实践中. 今年大厂的NLP面试中对项目方面的考察深度也随之提升了很多,经常会被面试官揪着细节一步一步 ...

  6. 根据文本自动生成UML时序图(draw.io格式)

    1. 前言 已有一些工具可以根据文本自动生成UML时序图,如PlantUML(https://plantuml.com/zh/).Mermaid(https://mermaid-js.github.i ...

  7. 《预训练周刊》第11期:全球最大智能模型“悟道2.0”重磅发布、谷歌KELM:将知识图与语言模型预训练语料库集成...

    No.11 智源社区 预训练组 预 训 练 研究 观点 资源 活动 关于周刊 超大规模预训练模型是当前人工智能领域研究的热点,为了帮助研究与工程人员了解这一领域的进展和资讯,智源社区整理了第11期&l ...

  8. 智能车竞赛技术报告 | 双车接力组 - 大连海事大学 - 同舟拾贰队

    学 校:大连海事大学 队伍名称:同舟拾贰队  参赛队员:王彤     刘原驰    卓可越    朱宇飞    带队教师:薛征宇    朱景伟    第一章 方案设计   本章将简要地介绍智能车系统总 ...

  9. 论文浅尝 - ACL2020 | 利用常识知识图对会话流进行显式建模

    笔记整理 | 韩振峰,天津大学硕士 链接:https://arxiv.org/pdf/1911.02707.pdf 动机 人类对话自然地围绕相关概念发展,并分散到多跳概念.本文提出了一种新的会话生成模 ...

  10. 生物医学文献知识图创建的关系提取

    生物医学文献知识图创建的关系提取 Paper: https://arxiv.org/pdf/2201.01647 摘要 生物医学研究正以如此指数级的速度增长,以致于科学家.研究人员和从业人员不再能够处 ...

最新文章

  1. python数据挖掘入门与实战代码
  2. spark用scala读取hive表数据(不同版本区别)
  3. Servlet请求和响应总结
  4. aws使用技巧_AWS:避免那些“神圣的法案”时刻的一些技巧
  5. 最全的BAT大厂面试题整理,系列篇
  6. Vue.directive自定义指令
  7. Oracle 常用命令举例
  8. nagios整合cacti2011版(五)
  9. 【C++ STL学习之四】容器list深入学习
  10. RTT的线程同步篇——信号量
  11. OAuth:每次授权暗中保护你的那个“MAN”
  12. of介词短语作定语_介词短语作定语时的译法
  13. 11.history命令历史
  14. Ubuntu中网络编程的环境配置
  15. 永洪科技CEO何春涛:PASO模型构建企业大数据能力
  16. Arcgis中topolopy(摘自网络)
  17. Spark2.1.0之初体验
  18. 坚持#第369天~知道了惠普打印机和佳能打印机打印不清晰了怎么解决
  19. 软件测试密码修改教程,软件测试之用户注册和密码修改测试用例设计
  20. 网易云音乐 ios android 通用,网易云游戏苹果和安卓不通用吗 | 手游网游页游攻略大全...

热门文章

  1. 基于Struts的网上书店设计毕业论文(含源文件)
  2. 马未都说收藏:陶瓷篇-常见瓷器器形分类
  3. C++期末项目设计------制作一个游戏盒
  4. 俄勒冈州立大学计算机科学专业,俄勒冈州立大学电气工程与计算机科学专业介绍在这里哦!...
  5. 七夕送你最特别的礼物 限时竞拍咯~
  6. python生成树状图_使用python的分层聚类树状图
  7. 大端模式和小端模式之“终极记忆”
  8. window10安装kubectl工具及配置config信息
  9. PHP电商网站高并发的秘诀之电商秒杀活动
  10. LOB浅析(CLOB/BCLOB/NCLOB)