littleRound 小园香径 - lxy的个人博客

端到端任务型对话系统

2019-05-28
littleRound

学习端到端任务型对话

论文原文链接:Learning End-to-End Goal-Oriented Dialog

ICLR2017 - Facebook

摘要

相比于传统的任务型对话系统,提出端到端任务型对话主要有2点原因

  1. 传统系统需要对每个对话领域进行领域相关的手动构造,扩充领域时会很麻烦;而端到端任务型对话通过直接学习对话本身,解除了这一限制。
  2. 闲聊型对话(chit-chat)中,端到端闲聊对话系统有着不错的表现。

本文主要的亮点是:

  1. 提出一个测试框架:如何利用对话数据、如何设置子目标进行评估等等。
  2. 提出一种参考解决方案——Memory Network。文中宣称该网络可以学习非平凡的修改句子符号的能力。

引言

  • 传统任务型对话系统
    • 市面上的数字个人助手
    • 方法:定义对话槽并填槽(slot filling)。
  • 闲聊型(chit-chat)端到端对话系统
    • 通过直接学习对话数据不假定对话领域从而自动适应对话中出现的领域。
    • 数据来源:社交媒体、论坛讨论、电影对白。
    • 直接套用到任务型对话时出现的问题
      • 目的不明确,几乎无法明确做事(无法确定订餐馆等实际目的)
      • 性能定义很模糊(评估方式本身有争议,较主观)
  • 本文工作:
    • 提出一个轻量、易用、开放、可比较、可复现的端到端对话系统测试方法。
    • 具体方法:将完成任务型对话的过程划分为几个阶段——几个子任务,每个阶段显示系统的一些能力指标,即管理对话查询知识库(数据库)、解释知识库返回的结果,处理训练中未见过的新的实体。
    • 评估准则:单句准确率(单句返回是否与原始数据相同)或对话准确率(该阶段的全部涉及单句是否全部正确)。
    • 数据来源:
      • Task1 - Task5:模拟数据(通过数据库生成)
      • Task6:DSTC(对话状态追踪挑战,数据有改动)
      • Task7:Concierge(收集来的真实数据)
    • 结果:
      • 超越slot-filling和rule-based基线系统
      • 单句准确率还好,对话准确率很低

相关工作

  1. POMDP
    • 存在问题:要手造对话状态特征和对话动作。
    • 本文对比:本文通过数据集训练端到端,类似于用用户模拟器训练分模块。
  2. 数据与数据集
    • 存在问题:之前的基本都是用于训练对话状态追踪(DST)的,没有适合端到端的。
    • 本文对比:改了DSTC的数据集格式,通过数据集评测使其有可复现性。
  3. 智能问答系统

本文中的任务型对话

Task1 - Task5:通过知识库生成

t1-t5

  • 通过数据库中的餐馆实例(风味、价格、评级、人数等等),模拟订餐过程
  • 数据库通过API询问,输入条件输出餐馆列表
  • 采样生成请求,模版生成话语(43个用户模版,20个机器人模版)
  • 阶段定义(本文核心内容)
    • 阶段1-2学对话状态追踪(DST);
    • 阶段3-4学数据库使用(其中阶段3还要学排序);
    • 阶段5是完整对话结合起来。
阶段 内容
1- 提出API调用 机器人按照特定顺序询问缺少的域
2 - 更新API调用 根据用户的问题调整调用参数,直到用户满意并进行调用
3 - 展示选项 按特定打分顺序向用户展示查询结果,如果用户不满意就换一个。
4 - 提供额外信息 如果用户决定预定(该餐馆),则提供电话号、地址等信息。
5 - 整合整个对话 前4个任务全完成一遍构成对话。
  • 阶段划分细节上:
    • 阶段3中:查询结果会加入当前对话状态,只保留返回多于2个查询结果的模拟且设定上用户最后总会满意,
    • 阶段4中:所预定的餐馆的相应信息会加入当前对话状态。
    • 阶段5中:一点小区别是任务3上的只保留大于2个查询结果变成只保留大于0。
  • 数据集划分(实现处理训练中未见过的新的实体的能力评估)
    • 关于如何划分训练、开发、测试集:为了测试出现在知识库中但没出现在训练中的实体(即餐馆),划分了2个知识库
      • 一个用来生成训练集(train)、开发集(dev)、测试集(test)。
      • 另一个只生成测试集(test),称为OOV(out-of-vocabulary)测试集。
    • 划分的时候共享了一部分评分、价格这种非餐馆相关的知识库数据。
    • 训练时用合并的知识库响应API调用。
    • 五个阶段各生成一个数据集,分别为Task1到Task5。
    • 注意任务并不要求神经网络生成API调用,而是给所有数据集中可能出现的API进行排序(,生成问题转换为排序问题)

Task6:改造后的DSTC

  • 文章用了这个数据集作为第六类任务。
  • 由于修改了一部分,本文无法和别的使用相同数据集的工作比较。
  • 转化出来的任务比Task1-Task5的模拟稍难一点(规则稍有不同)。

Task7:线上礼宾服务 Concierge

  • 上述六类任务均为人工构造,缺乏真实性
  • 引进在线订餐产生的4k次真实数据(其中扮演机器人的人类进行API调用),作为第七类任务。
  • 数据经过清洗脱敏,并且不包含API调用的结果,但记录了API调用行为本身。
  • 数据特点
    • 对话更短
    • 词汇更丰富
    • 询问不规则
    • 可能询问数据库外数据
    • 存在语法、拼写错误等噪声

模型

  1. 规则系统模型

    • 对于构造的数据确实很强100%成功(辩解:不是为了确认人能不能做出rule-based,而是用来分析神经网络能多聪明)
    • 对于第六类任务Task6(DSTC数据)因为太复杂了所以我们搭建了28条规则,分析21种模式,让回复正确率达到了40.7%。而Concierge上搭都没搭(因为限制更少,太复杂)。
  2. 经典信息提取(IR)模型

    • 不使用机器学习方法(和闲聊系统常规做法对比)
    • TF-IDF匹配:通过TF-IDF加权的词袋cos相似度来比较上一个对话/整个对话历史(试了一下后者更好用,所以就用了后者)
    • 最近邻匹配:找到训练集里最相近的(字重叠率作为打分),使用找到的训练中的回复。
  3. 监督学习的嵌入模型

    • 使用词嵌入向量,监督学习给排序做打分。
    • 使用Margin ranking loss(采样负例,正例比负例大一个margin)。
  4. 记忆网络(Memory Network)模型

    • NLP常见方法(问答、语言模型,闲聊系统)
    • 有时比基于RNN的方法厉害
    • MemN2N架构(直观上是模拟指针,有空单独写一篇),对精确匹配做了改进
  5. 引入新特征:对待实体时类型匹配特征- match type feature

    • 由词定义的实体(餐馆)的两个特点:精确匹配比模糊匹配更容易应对;经常出现OOV。这两个特点对基于词嵌入的方法是个挑战。
    • 挑战:精确匹配和极相似语义不好区分;对OOV无力。
    • match type feature:将7种类型的具体词根据规则用tag代替

实验

  • 实验结果见表
  • 解释TF-IDF在闲聊型好用,而任务型不好:
    • 因为对话流程进行更快(话说的更有方向性和目的性),更少的相似词
  • 基于监督学习的嵌入模型表现还好但不够好,不能成功完成对话。
  • MemoryNetwork性能好不少,提出的原因是其可以进行连续访问与归因
  • 类型匹配特征(match type feature)很好用,可以解决部分匹配问题(精确匹配问题),但不是万全法。
  • 本文使用的方法有改进,但还未完全解决问题。对于真实数据能有一定直接提升,但效果依然不好,只能算有借鉴意义。

总结

  • 本文提出端到端任务型对话。
  • 本文创建了新的任务(阶段分解)和数据集。
  • 本文用Memory Network跑了一下,并和搭建的baseline进行了对比。

相关文章

评论区(DISQUS)