专栏首页Pytorch实践人机对话系统回复质量的自动化评估

人机对话系统回复质量的自动化评估

对话系统

人机对话系统分为任务型对话和非任务型对话系统。对于任务型对话系统的评价,一般采用任务完成的程度来进行评估,例如“导购”机器人,主要看用户是否点击“推荐商品”等来评估。非任务型对话系统,一般是闲聊系统,若是多轮对话,一般使用用户与机器之间进行对话的轮数来评估系统优劣。但是若是单轮对话呢,如何评价机器给出回复的好坏?对于给定一句话的回复,不同的人可以给出不同的答案,只要自圆其说即可,如此开放的回复空间,评价回复的好坏实属困难。

而目前并没有什么公认的评价指标可以更好地对对话系统的回复进行评价。很多论文给出的评价都包含一轮“人工评价”。

下面将介绍几种虽然不是很好的指标,但却是用的最多的评价指标。

PPL

PPL指的是语言模型中的perplexity,这个值表示的物理含义是“给定一句话,这句话是通顺的概率”。若给定一句话为:(wi表示第i)

perplexity定义为:

其中RNNLM表示RNN神经网络语言模型,输出wi的条件概率。RNNLM需要使用大量语料提前训练好。模型输入为w1,w2,...,wi-1,模型输出为w2,w3,...,wi,即使用上文词语预测下一个词。

PPL值越小,说明机器生成的回复越自然、语句越通顺。通过PPL来评价回复质量,可以避免机器生成的回复有乱序、前后颠倒的情形。

BLEU

BLEU值是大家听说的比较多的评价指标,主要用于机器翻译任务中,用于评价机器得到的翻译答案与正确答案之间的差距。这里也可以用于评价人机对话回复的评价。BLEU值的计算公式如下:

其中pn表示n-gram的准确度。具体计算公式如下:

C 表示对话生成的回复,R表示已标记的正确回复,ngram in C&R表示,生成回复中的ngram词语也在正确回复R中出现,Count表示这样的ngram的个数; ngram in C表示C中nram的个数。

BLEU值越大越好,越大表示生成的回复离正确的回复越接近。

但是,聊天回复一般是没有正确回复可言的,对于同一句话很多回复都可以认为是正确的。所以单纯的BLEU值会不太靠谱。

Distinct

Distinct评价指标之所以会出现,原因主要在于seq2seq生成式问答模型,是一个MLE的概率模型,容易产生一些通用的、简短的回复。这些回复没有什么意义。例如机器会一直向用户回复“是啊”、“对啊”这样的回复。为判断机器回复的多样性,Distinct指标判断是否出现大量的通用性、重复性回复。

Distinct的定义如下:

Count(unique ngram)表示回复中不重复的ngram数量,Count(word)表示回复中ngram词语的总数量。

Distinct-n越大表示生成回复的多样性越高。

总结

对于人机对话的回复评价,目前没有公认的、很好的自动化评价指标。毕竟回复的分布空间太广泛。要做到好的回复评价,不仅要考虑回复语义的相关性、回复的多样性,还要考虑回复是否符合语法规则、语义相关等。现在做对话,大家一般使用PPL、BLEU、Distinct做自动化评价,外加一些人工评价。

本文分享自微信公众号 - CodeInHand(CodeInHand),作者:小左

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RUBER:一种无监督对话系统回复质量的评价方法

    CodeInHand
  • 微软小冰的设计与实现

    小冰设计相关的论文多年来一直没有对外公布,得益于近几年小冰的快速发展,在对话领域形成技术壁垒。与此同时拥有大量的用户和数据,我们才有幸看到如下的...

    CodeInHand
  • 迁移学习在自然语言处理领域的应用

    迁移学习近年来在图形领域中得到了快速的发展,主要在于某些特定的领域不具备足够的数据,不能让深度模型学习的很好,需要从其它领域训练好的模型迁移过来,...

    CodeInHand
  • 谷歌邮件智能回复系统:基于RNN/LSTM构建

    用户1737318
  • 谷歌邮件智能回复系统:基于循环神经网络构建

    【编者按】Google将为其Gmail应用推出一项称为智能回复(Smart Reply)的新功能,这篇博文解析了Smart Reply的技术原理:建立在一对循环...

    CSDN技术头条
  • 首份数字时代沟通指南发布:现代人聊天,真的好难

    “我的消息是不是太长了?我什么时候可以回复?如果我退出这个没完没了的群聊,会不会很让人讨厌?” 随着电子信息的增加,这类问题正在变得越来越普遍。 为此,Fac...

    腾讯大讲堂
  • Python 常用模块学习

    Python中的模块是可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块。Python允许“导入”...

    py3study
  • 常用技巧之JS判断数组中某元素出现次数

    现在前端开发经常需要从api中获取返回的数组, 也许是array,也许是json, 不管是什么,都需要对返回的数据进行再处理, 其中一个重要且经常用到的操作, ...

    web前端教室
  • 公号运营中的一些认知

    Python技术与生活认知的分享
  • SSH框架之旅-spring(3)

    Spring 框架是一站式的框架,针对 JavaEE 的三层结构,每一层都有解决的技术,在 DAO(数据操作层)使用 jdbcTempalte。并且 Sprin...

    Wizey

扫码关注云+社区

领取腾讯云代金券