对话管理的一些思考

开头...

写这个文章的目的让更多关注,想要搞,正在搞对话管理(dialogue manager,后面简称DM)的同学尽力少踩坑,至于已经在坑里,甚至从坑里爬起来的人那么来多拍拍砖,甚是欢迎!

基本概念

这个是经典的语音智能交互的图,可以看到DM的位置,在nlu之后,nlg之前,输入是context和语义表示,输出是当前context下需要执行的action

这里就已经牵扯到很多问题了,语义表示究竟是啥,context里面存什么东西,action是个枚举吗等等等等...这里就不展开了,后面的零零碎碎会有些回答

试着把满足一个用户的诉求(任务),当成是一个流程图流转的过程。图上有很多节点,甚至回路,从开始节点如果能流转到终结节点,那么这个任务就被完成了。

但是通过每个节点是有代价的,比如需要填上一些信息等,那么我们把这样的代价称为阻力。

用户的输入就是克服这个阻力的动力,用户说的话会转换成语义表示,里面包含的信息越多,那么动力就越强,一次对话流转的节点有可能就很多

比如:
我要去杭州 => 出发地? => 时间? => 坐席? => 确认支付?
vs
我要买一张明天上午10点从北京去杭州的高铁二等座的票 => 出发地OK => 时间OK => 坐席OK => 确认支付?

action在这里并不仅仅是个“字符串的枚举值”,可能还会附带一些参数或数据,用于展示等

举个栗子

看完所处的位置和输入输出,那么看个"简单"例子,有个直观的感受
例子里表述的就是一个语音导航的交互流程,用户提出诉求,然后筛选得到精确结果,最后启动导航

例子中不同的颜色代表了对话的一些“类型”(这些类型并不是什么标准的定义,仅仅是为了区别角色的变化)

  1. 蓝色,机器发起询问,向人收集信息,直到满足一个阶段的要求(比如满足了请求API的前提)
  2. 红色,主导权从机器转向了人,人可以在某个范围内自由发出指令(比如筛选/过滤结果)
  3. 紫色,人向机器发出了直接改变任务流程的“命令”
  4. 绿色,机器主导发起确认

这样的流程与颜色的前后顺序并不形成模式,列出不同的颜色是为了说明,a) 一个对话的流程往往很复杂,每个阶段都有很多分支可以走;b) 虽然复杂,但是也有一些明显的“模式”可以别捕捉,比如:收集用户信息,确认等

(如果看得仔细,可以发现,第一句话和最后一句话都是“导航”,但是处于完全不同的上下文,最终执行的action会不一样,这里究竟是“上下文无关的NLU”+“DM根据sematic控制action”,还是“上下文相关的NLU” + “DM做简单的sematic到action的映射”...见仁见智,个人推荐前者,欢迎拍砖)

实际上...

实际上,DM的职责会比想象中的多一些,杂一些

比如:多semantic信息的筛选,rank
这个问题挺现实的,想让一个NLU完成业务的所有语义理解,还是稍微勉强了一些,那么如果面对多个语义输入,总得有个地方做汇聚,那么DM有context,有客户端的info等,是个不错的聚合/筛选的地方

比如:请求第三方服务
第三方服务返回的结果可能会让整个对话朝不同的方向发展(请求成功往下走,请求失败又是另外一条路),如果请求第三方服务作为DM的职责之一,那么会带来很大便利

等等...

(负担更多的职责是有利有弊的,这个需要做权衡)

表示方式

DM的表示方式有那么几种,各有自己的优缺点。需要注意的是这里只是“表示方式”,无关如何实现(规则方法或者模型方法)

面临的挑战

讲到这里,其实也就是引出了一些DM的一些挑战(坑)

我就不一一展开了,重点就是场景的打断与恢复
我觉得这个能力是衡量一个对话管理系统好坏的很关键的点。
有些情况下用户的偏离是无意的,比如:ASR或者NLU的错误导致的偏离,使得系统感知到用户要跳出当前场景
有些情况下用户的偏离是有意的,比如:买火车票的时候,忽然想查个目的地的天气等
(如果把火车票中查天气作为场景的一个分支那么会带来更高复杂性)

场景的打断与恢复

篇幅有限我就不详细展开了,上图列出的是一个最简单的做法,实际上还有非常多的细节和优化点

实现方案

OK,那么来看看实现方式。

很多人包括我自己,想到DM的时候,第一时间联想到的就是MDP,POMDP,Reinforcement learning,甚至一些巨复杂的end2end的“高大上”算法...然后就随后带来一堆堆的问题。

模型化困难重重

1 . 训练数据在哪里?标注的成本巨高,连“生语料”的来源都是问题...,就算使用RL这样的无监督算法,那你总得有个agent让他学吧,但如果你把agent弄好了,你就已经有了个rule base对话逻辑了...

2 . PD大笔一挥把交互改了怎么办?痛不欲生,训练语料要么修正要么重新弄,agent也是一样一样的

3 . 如何将服务API及其返回状态融入模型?有些paper确实考虑到了DM的action调用API的事情,恶心的地方是,如果模型的输出的action才决定了,那么API返回请求失败或者没有数据这件事情模型不处理归谁处理呢?所以还要写一个模型的后处理程序?如果成功了怎么办,失败了怎么办?(当然可以让一轮对话调用多次模型,模型返回的是内部action,然后再转换为外部action,这个就不展开了)
...

回到起点

如果仔细想,要解决这个问题,需要想清楚挺多事情的
1 . 在DM这个任务上,为什么需要或者为什么不需要模型?模型的优势和劣势在哪里?
模型无非是想用数据驱动(代价)的方式得到泛化能力(收益)
那么需要弄清楚的是,很多paper并不是单纯的DM任务,其实夹杂了NLU甚至ASR容错等任务,所以他们才用模型,换句话说,其实很多paper标题是DM,其实解决的是NLU + DM的问题,这样的前提下,那么模型的泛化能力起了非常重要的作用。如果你面临是和paper上一样的问题,那么去试试,如果你的情况和paper里面不一样,NLU你已经做好了,仅仅想做DM,那么理清思路,重新出发

2 . 如何规避劣势,发挥优势
做新场景,冷启动,哪来数据,那么能否先获取数据,再逐步往模型进发?如果是这样的思路,能否先rule base,然后再模型化
有个圈子比较难绕出去的是,既然有了rule base DM,而且我们大PD的设计是确定性的,不是概率性的,为啥还要模型呢?这个模型所谓的泛化究竟泛化的是啥?其实就是DM模型化的收益是什么

DM模型化的收益

1 . 优化交互逻辑(主要)。是是是,我们的大PD是很资深,但是和用户的实际使用总是有差别的,模型化把所有的路径都概率化,以一个低概率把机会留给一些“意想不到”的路径(exploration),人走多了自然就是一条“正确”的路,特别是业务存在多场景自由切换的情况下

2 . 千人千面(比较虚)。如果能做到根据不同用户的习惯给出不同的流转方式,那简直太(niu)厉(bi)害(da)了(le)

最后收一下就是,冷启动阶段,先用规则方法打造一个DM,快速上线并满足业务需求,收集数据之后再转换成模型

说了挺多了,有点啰嗦,写得有点累...就匆匆收尾吧

时间: 2024-10-06 17:22:49

对话管理的一些思考的相关文章

从“连接”到“交互”—阿里巴巴智能对话交互实践及思考

(本文根据孙健/千诀 2017年5月18在中国云计算技术大会上的演讲整理) 从连接的时代到交互的时代 纵观传统互联网时代,如果用一个词来总结和概括的话,"连接"这词再合适不过了,传统互联网时代,我认为主要建立了三种连接:第一,人和信息的连接:第二,人和人的连接:第三,人与商品服务的连接.第一种连接成就了Google和百度这样的互联网巨头:人和人的连接成就了Facebook和腾讯这样的互联网公司,人和商品服务的连接,成就了Amazon.阿里巴巴.京东这样的巨头.所以,从这个意义上看,传统

[原创]如何侵入WinNT系统的对话管理器进程(smss.exe)

如何侵入WinNT系统的对话管理器进程(smss.exe)         我们知道在NT中smss.exe是唯一一个被内核信任的ring3级进程,其中只 包括一个原生态dll---ntdll.dll.我用常用的hook和远线程的方式都无法侵入其 "领空",如果哪位朋友有在ring3级入侵smss的方法请不吝赐教.         我的方法是在ring0切入其进程,然后调用未公开的原生态api LdrLoadDll, 然后做一个ring0 Trace Hook,从而达到目的,以下是成功

DockOne微信分享(七十四):传统金融 IT 对混合云管理的一些思考

本文讲的是DockOne微信分享(七十四):传统金融 IT 对混合云管理的一些思考[编者的话]在新常态经济背景下,金融脱媒加剧,跨界融合和互联网金融的发展加速传统金融企业变革转型.传统金融 IT 需要积极面对以互联网.云计算.大数据为代表的新技术带来的机遇与挑战,主动进行架构转型.本次交流分享在落实企业云计算规划工作中的一些思考. 一. 传统金融 IT 的行业特点 受行业特点所限,传统金融 IT 需要接受银监会的多项监管要求,重要的包括: 在<商业银行信息科技风险管理指引>的推动下,建设信息科

《中国人工智能学会通讯》——1.18 对话管理

1.18 对话管理 对话管理功能主要协调聊天机器人的各个部分,并维护对话的结构和状态[9] .对话管理功能中涉及到的关键技术主要有对话行为识别.对话状态识别.对话策略学习及对话奖励等. 1)对话行为识别:对话行为是指预先定义或者动态生成的对话意图的抽象表示形式.分为封闭式和开放式两种,所谓封闭式对话行为,即将对话意图映射到预先定义好的对话行为类别体系.常见于特定领域或特定任务的对话系统,如票务预订.酒店预订等.例如:"我想预订一个标准间",这句话被识别为Reservation(Stan

关于网站团队管理的一些思考

德鲁克的去世令人遗憾--但他在晚年做出了他人生最后也是最重要的一个决定:把自己最后的16个月交给埃德莎姆--那位因<麦肯锡传奇>而成为美国管理咨询界翘楚的传奇女子来协助整理自己的最后感言--这次授权是大师一生中最后的一项管理.其成果成为了德鲁克的"第40本书",也是唯一一本并非由他本人亲自执笔撰写的著作--这就是管理,借助别人的合作完成自己的意愿. 但不单单是大师注重团队管理,我们晓得--在美国,团队已经在各种各样的组织中得到认可.有人在不久前做过调查,80%的<财富

易经中战略管理的哲学思考

国学中,易经是最神秘最玄的哲学,连三十六计都是在易经基础上演绎的结果.易经的很多思想跟战略管理存在逻辑的一致性.易经被世人视为占卜算卦的迷信,但是"卜"本身就是"择"的意思,古代"卜"就是日月影,古代用标杆测日月影,测量那个日影就是测字,记录下来就是卦.而测日月影的目的是为了"择".是为了选择合适的时机.位置和天气来考虑农事.廖晓认为,这跟战略管理的本质是一致的:战略是根据企业环境来做"选择".与易经也是根

分布式对话服务器的管理

摘要: 通过使用JDK 1.3中引入的RMI和Proxy API,本篇文章讨论了一种允许一台或多台servlet服务器在一台或多台对话服务器上维护对话信息的技术,采用这种技术后,单一点故障就不会再出现了. 如果系统中有一台或多台servlet服务器,对话信息只存在于运行着JVM的一台servlet服务器上,而不会被传输给其他servlet服务器.如果该servlet服务器当机或因为维护而被关机,任何保存在对话中的信息都会丢失.如果一个系统中有多台servlet服务器,一个带有对话的用户需要访问对

一个工程师对流程管理的思考

我平时很少写博客,我是个技术人员,一般来说技术人员的博客应该以技术为主,但同时我又是一个懒人,对于技术我喜欢"亲身体验"而不喜欢"写出来",因为我觉得把技术对别人说清楚要比实现它更困难.实际上这段时间我都在看别人的博客,所以一直以来我只是个吃白食的:) 为什么现在我要跨界谈一个偏重管理类的话题呢?因为过去经历的一些事促使我对项目的流程管理进行一些思考,并形成了自己的一套看法和逻辑,而我也很愿意将我的看法发表成文,不喜欢憋在脑海里太久.至于能得到多少认同倒是并不在意,

流程管理并不是妥协

http://www.aliyun.com/zixun/aggregation/8504.html">流程管理很容易做成了和事佬.我在两家公司都做过流程管理职位,都不可避免的要处理跨部门的冲突与问题.屁股决定脑袋,不同部门都会从他的立场给你讲述不同版本的故事,虽然他给你讲了很多,甚至非常无私的给你提供很多闪光的点子与方法,但始终不要忘了他背后一定有一个部门导向的利益或者目的. 流程管理同事要解决跨部门冲突,通常大家会说:"你是中立部门,你是专业部门,我们听你的".这样一