写点什么

达摩院基于元学习的对话系统

  • 2021-01-04
  • 本文字数:4821 字

    阅读完需:约 16 分钟

达摩院基于元学习的对话系统

导读:随着科技的不断进步发展,智能对话系统因其巨大的潜力和商业价值将会成为下一代人机交互的风口,不少公司都纷纷开始研究人机对话系统,希望人与机器之间能够通过自然对话进行交互。笔者所在的达摩院 Conversational AI 团队(即云小蜜团队),早在三年前就研发打造了面向开发者的智能对话开发平台 Dialog Studio,并将我们的技术通过阿里云智能客服的产品矩阵,赋能各行各业和政府机构进行智能服务的全方位升级。目前 Dialog Studio 平台已经在阿里云智能客服(政务 12345 热线、中移动 10086、金融、医疗等)、钉钉(通过钉钉官方智能工作助理服务几百万企业)、集团内(淘宝优酷等十几个 BU)、淘宝天猫商家以及 Lazada 东南亚 6 国得到了大规模应用。


背景

1. 任务型对话系统


常见的智能对话系统有:问答型、聊天型、任务型等。其中任务型对话在实际应用中,尤其是在我们的 ToB 场景最为普遍。因为该系统不仅可以回答用户问题,同时还能主动发问,引导会话的有效进行,通过多轮对话完成某个特定的任务。例如在一个浙江省信访的外呼场景中,一个典型的对话如下:



可以看到,在该对话中,机器人需要先表明自己的来意,根据用户的不同的回答情况进行多轮的对话,收集好自己需要的满意度信息并结束对话。


目前常见的任务型对话系统的架构有两种,一种是模块化的,另一种是端到端式的(如下图所示):



尽管模块化的对话系统由于每个部分独立优化,具有更强的可控性,但是端到端的对话系统可以直接利用对话日志进行训练,不需要人工设计特定的语义标签,因此更具备可扩展性,在一些复杂度中低的对话场景中能够快速训练部署使用。有关模块化和端到端对话模型的详细介绍和前沿进展可参考《小蜜团队万字长文:对话管理模型最新研究进展》一文。


2. 端到端对话模型及其挑战


一般来说,端到端对话模型可分为检索式和生成式,检索式模型就是给定对话历史从预定义回复候选集合中选出最佳回复作为当前系统输出,生成式模型则是给定对话历史直接生成回复。两种方式都可以通过和用户多轮交互完成最终的对话任务。


由于回复更加可控,目前我们在 Dialog Studio 上实现的是检索式端到端的对话模型,并且在政务、疫情等业务中都落地应用。上述的浙江省信访的例子就是我们实现的对话模型所产生的对话,因为没有复杂的知识推理、语义解析等,此类场景是端到端对话系统特别适用的场景。


然而,尽管端到端对话模型简单易用,但是在实际应用中仍然面临着两大常见问题:


① 数据量少:端到端模型一般需要大量的训练数据,且场景越复杂,需求越大。在 Dialog Studio 中的 ToB 的业务,不少新场景一开始是没有可用的高质量对话日志,比如我们在政务 12345 场景 和 114 移车场景上积累了大量的对话,可当我们做省信访外呼场景时,一开始只有极少的对话可以使用。因此如何利用已有场景的丰富数据训练好一个端到端模型,使其可以快速迁移到缺少数据的新场景上是一个很大的挑战。



② 鲁棒性差:有限的离线训练数据和真实的在线测试数据之间存在数据分布的差异性,会导致系统在线表现不佳和离线测试效果不匹配的情况。这种差异性主要来自于未见的用户行为(例如:新槽值、新意图、复杂句等),这类问题统称为 out-of-script 问题,可以用来验证对话模型的鲁棒性。例如下图中,训练数据中从未出现过“喂,内容是什么?我忘了反馈什么了” 类似的用户语句,一旦真实上线,模型很容易预测出错误的结果,从而影响用户体验。尤其是当数据量少的时候,模型对于在线数据的鲁棒预测会进一步下降。因此如何解决线上线下数据不匹配,提高端到端对话模型的鲁棒性是另一大挑战。



在阿里云智能客服的诸多业务中,不少场景都存在训练数据稀少的问题,而客户又需要我们的对话系统能够达到可直接上线的标准。因此综合来看,我们希望提出一种新的端到端对话系统以及对应的优化方法,能够兼具备面对新场景的快速适应性(fast adaptability)和稳健的在线表现 (reliable performance),能够在低训练资源下依旧能够保证较好的线上效果。


技术方案


通过前期调研我们发现,应对数据少的问题的常用方法有元学习、数据增强等,而应对训练和测试对话数据不一致的问题的常用方法有人机协同[1]、在线学习[2]等。最终我们选择将元学习(meta-learning)方法和人机协同(human-machine collaboration)方法结合,提出了元对话系统(Meta-Dialog System, MDS):利用元学习,系统能够在少量训练数据上进行快速学习,解决数据少的难题;利用人机协作,模型可以在对话中请求人工客服帮助,以保证系统达到可接受的线上水平,提高系统的鲁棒性。相关成果已经发表至 ACL2020 [3]。


1. 模型结构


我们采用检索式端到端对话模型[4],该对话任务是一个分类任务,即给定预定义的回复候选集,基于对话历史选择正确回复。如下图所示,一般该模型一共包含三个部分:


  • 历史编码器(History encoder),对整个对话历史进行编码提取对话状态向量,常见模型可以使用 MemN2N,Hierarical RNN,BERT 等 ;

  • 回复编码器 (Response encoder),对每个回复进行编码提取句向量;

  • 预测器,根据对话状态向量和回复句向量判断出正确的回复,通常就是计算余弦相似度给出。



而在人机协同的框架下[1],为了能够做到智能高效地转人工,端到端对话模型还会多出一个判决器模块,专门用于判定当前对话是否转人工,如果转人工则交给人工客服解答,否则模型自己给出答案。如下图所示:


2. 优化方案


在上述的模型结构基础上,笔者在优化训练上进行了创新,利用经典的 MAML 算法[5] 来进行优化,提出了元学习对话系统(meta-dialog system, MDS)。整个 MDS 的框架如下:



在 ACL2020 论文中,为了和文献 [1, 4] 一致,对于历史编码器我们仍然采用经典的 MemN2N 模型,对于回复编码器我们使用了一个简单的词向量相加的句向量。模型预测器的部分,我们选择了能够学习出更有鉴别性的特征的 large margin cosine loss [7] 作为损失函数 L**lmc 。针对请求人工的判决器,我们提出通过计算判决器预测的正负样本的 F1 score 作为 reward 函数,使用增强学习来进行优化 L**rl 。最终,我们利用 MAML 对 L**lmc+L**rl 进行联合优化。


MAML 是元学习中的一类方法,它具备模型普适性,通过在 meta tasks 上进行预训练,能够帮助模型找到一组最合适的参数,使其快速适应新任务。例如下图[9]给出了一个 MAML 和 MLE 训练对比示意图,每个圆圈都是看做一个场景,实心的是训练用的源场景,空心的是测试用的目标场景,使用 MLE 预训练会导致模型的参数过拟合到源场景上,而 MAML 预训练则能够找到更好的参数初始化,使得快速迁移到新场景上去:



正是因为这样的特性,我们选择 MAML 来进行联合优化,帮助预测器和判决器一起快速适应新场景。


在 MAML 训练中,首先需要构造元任务 (meta-task),步骤如下:


  • 采样 K 个对话场景 (每个场景对应一个对话任务)

  • 每个对话任务,采样 N 个对话数据作为支撑集(support set),N 个数据作为问询集(query set)


然后根据以下算法流程进行优化:


模型结果


为了验证模型在新场景的迁移能力,我们需要多场景的端到端对话数据集,在评价时,依次选取一个场景作为目标场景,剩余的作为训练场景。利用 MAML 预训练模型完毕之后,再在目标场景上进行小样本的迁移实验。最终结果是每个场景取平均得到。我们既需要在学术数据集上实验,也需要在实际业务中落地,以此验证算法的可行性。


1. Extended-bAbI 数据集结果


学术数据集我们选择了 extended-bAbI,它是 bAbI 数据集的扩展版,包含了场景有餐馆、机票、酒店、电影、音乐、旅游、天气等 7 个场景,每个场景的训练集/开发集/测试集为 1500/500/1000 个完整对话,评价指标是回复选择的准确率。我们将 MDS、MDSmle(将 MAML 优化改成 MLE 优化)、Mem+C [1] 这三个模型进行对比如下:



平均在新场景中,使用 0, 1, 5, 10 组完整对话 session 数据上,MDS 模型的表现都是最好的。证明了我们小样本下端到端模型的效果。同时我们也做了一下 ablation study,发现去掉判决器 (MDS-switch) 和随机转人工 (MDSrand) 的模型都很差,证明了我们的转人工判决器真的能够在联合优化中学出识别 out-of-script 的对话数据的能力,提升模型的鲁棒性。


2. 业务落地


我们的端到端对话模型 MDS 目前已经在 Dialog Studio 平台上政务 12345 的多个场景中落地,对话的完成率平均能有 5-10% 的提升。通常我们遇到的实际业务的流程 schema 是一个较为复杂的图状结构,下图是一个简化的示意图:



这种图结构流程(我们称为 TaskFLow)在 Dialog Studio 里能够通过图形化拖拽的方式非常方便地进行配置使用。详见《一个中心+三大原则 -- 小蜜这样做智能对话开发平台》。


实际场景往往一开始时是零对话数据,尽管 MDS 模型能够进行冷启动,有比一般模型更好的效果,但是并不一定能够百分百达到上线准入要求。为了更好地利用我们模型的迁移能力,我们通过以下两步来预训练对话模型:


  • 我们设计了一个基于 TaskFLow 的对话模拟器,能够低成本快速地模拟出大量模拟对话数据。该对话模拟器利用生成模型生成对话数据,并能够通过线上回流的无标日志进行模拟器的自增强优化。

  • 当一个新场景的模拟数据模拟完毕后,我们把新场景的模拟数据和各个已有相似场景的真实数据一起作为源场景进行 MAML 优化,然后迁移到新场景的真实数据中去。



下图是我们模型在某地市 12345 热线场景的一个实验结果:



横轴是 adaptation 时使用的标注对话数据量,纵轴是回复准确率。可以看到,如果直接使用 TaskFlow,整个对话系统的准确率仅在 79% 左右。但是用上 MDS 模型进行数据迁移和 MAML 优化之后,我们可以得到最上面那条曲线,冷启动效果从 79% 提升至 88% 左右,并在不同 adaptation 对话数据下都能有着持续最好的表现。


总结展望


本文主要介绍了如何结合元学习方法提高对话模型在新场景上的快速适应能力和预测效果,解决小样本下的端到端对话模型训练问题。我们的元学习对话系统(Meta-Dialog system,MDS),不仅在学术数据集上进行了实验,还在阿里云智能客服的多个真实场景中落地。结果表明,利用 MAML 可以很好地帮助模型的判决器和预测器一起找到合适的初始化参数,以更快地迁移到新场景中。


最后感谢所有耐心看完这篇文章的读者。智能对话系统是个极具前景和挑战性的方法。达摩院 Conversational AI 团队将不断地探索推进在这个领域的技术进步和落地,敬请期待我们后续的工作!


参考文献

[1] Rajendran J, Ganhotra J, Polymenakos L C. Learning End-to-End Goal-Oriented Dialog with Maximal User Task Success and Minimal Human Agent Use. ACL, 2019.
[2] Liu B, Tur G, Hakkani-Tur D, et al. Dialogue learning with human teaching and feedback in end-to-end trainable task-oriented dialogue systems. NAACL, 2018.
[3] Dai Y, Li H, et al. Learning Low-Resource End-To-End Goal-Oriented Dialog for Fast and Reliable System Deployment. ACL, 2020. (to be appeared)
[4] Bordes A, Boureau Y L, Weston J. Learning end-to-end goal-oriented dialog. ICLR, 2016.
[5] Finn C, Abbeel P, Levine S. Model-agnostic meta-learning for fast adaptation of deep networks. ICML, 2017.
[6] Eric M, Goel R, Paul S, et al. Multiwoz 2.1: Multi-domain dialogue state corrections and state tracking baselines[J]. arXiv preprint arXiv:1907.01669, 2019.
[7] Lin T E, Xu H. Deep unknown intent detection with margin loss[J]. ACL, 2019.
[8] Wang W, Zhang J, Li Q, et al. Incremental learning from scratch for task-oriented dialogue systems. ACL, 2019.
[9] Lin Z, Madotto A, Wu C S, et al. Personalizing dialogue agents via meta-learning[J]. ACL 2019.
[10] Wang W, Bi B, Yan M, et al. Structbert: Incorporating language structures into pre-training for deep language understanding[J]. ICLR 2020.
复制代码


文章转载自:DataFunTalk(ID:datafuntalk)

原文链接:达摩院基于元学习的对话系统

2021-01-04 08:002274

评论 1 条评论

发布
用户头像
自负盈亏的部门不容易啊
2021-01-04 08:23
回复
没有更多了
发现更多内容

CDF全球调查:软件交付性能停滞不前

SoFlu软件机器人

历经4轮2小时,终于斩下美团offer!

爱好编程进阶

Java 面试 后端开发

洞见科技首批通过央行国家金融科技测评中心「联邦学习」产品评测,实现「MPC+FL」金融应用双认证

洞见科技

联邦学习 隐私计算 多方安全计算

LAXCUS分布式操作系统冗余容错之节点篇

LAXCUS分布式操作系统

分布式系统 冗余 集群容灾

不同研发协作模式在云效中的应用

阿里云云效

云计算 阿里云 云原生 研发 研发协作

你知道Java是如何解决可见性和有序性问题的吗?

爱好编程进阶

Java 面试 后端开发

终于有人讲明白了!原来这才是全球低时延一张网技术

华为云开发者联盟

音视频 华为云 实时音视频 低时延

Oceanbase 和 TiDB 粗浅对比之 - 执行计划

TiDB 社区干货传送门

刚拿的字节跳动offer“打水漂”

爱好编程进阶

Java 面试 后端开发

单例模式你不得不知道的底层原理

爱好编程进阶

Java 面试 后端开发

为拿几家大厂Offer,“闭关修炼

爱好编程进阶

Java 面试 后端开发

你必须懂也可以懂的微服务系列三:服务调用

爱好编程进阶

Java 面试 后端开发

别找了,这是迄今为止把微服务讲的最清楚的一篇!没有之一

爱好编程进阶

Java 面试 后端开发

观测云登陆阿里云计算巢,共建ISV新生态

观测云

可观测性 可观测

如何在面试中机智的展现架构能力?

非凸科技

rust 编程语言 量化 构架师 互联网大厂

18张图,详解SpringBoot解析yml全流程

码农参上

springboot 配置文件 4月月更

如何优化前端页面的LCP?

BUG侦探

前端 性能 网页指标

为什么switch里的case没有break不行

爱好编程进阶

Java 面试 后端开发

哪路神仙写的421页MySQL高级笔记,涵盖MySQL所有技术!太香了

爱好编程进阶

Java 面试 后端开发

移动平台WorkPlus集成化办公,打造企业全场景业务生态

WorkPlus

华为18级大牛整理总结:微服务设计和分布式服务框架原理实践文档

爱好编程进阶

Java 面试 后端开发

达摩院基于元学习的对话系统_AI_DataFunTalk_InfoQ精选文章