Let's Chatbot一波。
今年七月本鸡翅再三纠结之后加入了平安寿险总部的智能平台团队,现主要负责人鸡,哦不,人机交互类项目的产品设计与规划。今天主要跟各位分享一下近期就Chatbot进行的research抛砖引玉,十分欢迎各位在评论区提问、讨论以及拍砖!
先上图。
想必视力好的朋友们已经看出了这是ELIZA的交互界面。聊到Chatbot的鼻祖就不得不提到ELIZA, 这个由系统工程师约瑟夫·魏泽堡和精神病学家肯尼斯·科尔比在20 世纪60 年代共同赋予生命的“心理医师”。截图中是我调戏ELIZA的聊天记录,基本第二轮就进入了尬聊环节,但这无法撼动ELIZA作为世界上第一个真正意义上的聊天机器人的地位。在ELIZA的启发下,又逐渐涌现了PARRY, ALICE和Mitsuku。1972年出世的PARRY是ELIZA的第一个虚拟“精神分裂患者”,并骗过了超过半数(52%)的图灵测试者。而获得了2017年Loebner Prize (罗布纳奖,每年度颁发给最human-like的机器人程序)的Mitsuku,更是被戴上了“迄今最强大人机对话平台”的桂冠。
毋庸置疑,随着技术的成熟今天的Chatbot已经“不那么容易”进入尬聊状态了。想必持续关注人机对话领域的朋友们通过跟踪小冰、小爱同学、Alexa和Google的成长也可以感受出来。那么就人机对话领域而言,这几十年来的技术发生了哪些重要变化呢?
人机对话系统的技术发展大致可以分为三个阶段:
1. 基于符号规则、模板;
2. 数据驱动的浅层学习;
3. 数据驱动的深度学习。
ELIZA时代的尬聊主要是因为它的大脑是依赖于专家录入的语料决定的,这就注定了它只能听懂专家“教”它说过的话。一旦检测到有没有“教”过的内容就只能来一句默认回复,装个傻卖个萌,然后赌一把你说的下一句话它是否可以理解。而到了第二阶段,则涌现出了数据驱动的自然语言理解机制。这个阶段诞生了包括基于强化学习的Dialogue policy,同时也包括了隐马尔科夫(HMM)、条件随机场(CRF)等经典模型。
第三阶段被称为“数据驱动深度学习”阶段。从2014至今人机对话技术的热点研究方向都围绕着神经网络算法与深度学习。这个阶段的代表模型包括sequence-to-sequence模型,一种通过将大量语料编码、解码从而在语义向量空间中完成学习过程的算法框架。第二和第三阶段虽然减少了对专家的依赖,使得整个框架在面对多领域的对话任务时更灵活,但也有“可解释性差”,“难以针对性优化”等弱点。其中第三阶段基于神经网络的对话技术至今尚无成功商业化案例。
了解了我们当下处在哪个阶段之后,我们来聊聊Chatbot这个应用方向在技术领域中处于怎样的一个位置。
这一点上,业界尚无统一的定义规范。有人通过Chatbot是否能进行开放领域的聊天来定义,也有人通过其使用的技术是“检索式”还是“生成式”来定义,也有人通过其可以处理的任务类型来分类。
如上图就是第三种分类方式——以其可以处理的任务类型来分类,其中包括闲聊型机器人(chitchat bot)、信息获取类(IR bot)机器人,任务型机器人(task-oriented)以及问答类机器人(QA bot)。由于应用场景的不同,这些机器人在设计与搭建的过程中,从产品设计、到使用技术再到制定评估标准的方法都各自有别。
然鹅,用户在于Chatbot交谈时脑子里并不会浮现“哦,我现在是在跟某某类Bot对话”这样的念头。一个Chatbot智能与否,不止在于其能否分别将以上四类任务处理好,更在于识别用户的意图,而这也恰好是Chatbot应用落地的一大难点。比如你的女票跟你说“我没事,我一个人待一会儿就好了”的时候,你该启动哪个Bot呐(#此处附赠一个邪魅的微笑)?
我们接着上一个“哄女票”的问题来说。
很多男人抱怨“女人心,海底针”“一言不合就闹脾气”的时候,女票们心里也在画圈圈埋怨着对方“会不会聊天儿”。
那么,一个体验好的男票(ChatBot)究竟要做到哪几点才算是“会聊天儿”呢?
随着Alexa,Google Home和小爱同学等智能语音助手逐渐走入千家万户,国内外的大厂也纷纷开始建立自己的DUI(dialogue UI)平台以降低开发者们接入语音助手的成本。其中,谷歌更是在2017年的I/O大会上分享了其在CUI(conversation UI)与VUI(Voice UI)方面的实践真知。
Google提出,在设计CUI之前首先要了解“对话”的本质。格莱斯提出的“合作原则”强调了一个好的对话体验需要做到“Quality”(质)、“Quantity”(量)、“Relation”(相关性)和“Manner”(礼节性)四个维度的平衡。除此之外,基于上下文理解的作答才是保障对话流畅度的关键。而在对话过程中,要注意回复的丰富变化性,不致使听者无聊。最后,对话过程中的轮流机制也是保证用户体验的关键点,没有用户会喜欢跟一个“高冷”的、有“直男癌”的机器人对话,而是期待它跟你互动,尊重你的表达意愿并给出专业的建议。
在确认了CUI确实有价值后,便可以开始收集需求了。上图是谷歌给出的CUI设计分步骤指引。总的来说,设计CUI与往常基于GUI的产品并无太大区别,都是以用户期望与体验为中心的设计过程。与GUI中的原型一样,CUI设计时也可以通过撰写对话脚本来进行低成本试错与迭代。但需要注意的是,CUI不等于text-UI。在某些场景下,pictures speak louder than words. 比如你告诉Google你要买一双布洛克风格的黑色皮鞋,这时Google该做的是给你看一些符合条件商品的照片,而不是用更多的文字去描述选项。因此CUI是一个可能融合了VUI, GUI和text-UI等多模态交互的交互方式。
除了给出设计CUI的基本原则与步骤之外,Google也给出了如下图的一个checklist,供CUI产品设计师参考自己撰写的对话是否囊括了核心的对话元素。
聊到这里,大家应该对CUI设计有个大致的概念了。下一个问题就很自然了:如何实现?
1. 将用户query(不是question)处理成计算机可理解的形式;
2. 在理解该query意思的同时,对该query底层的意图进行判别(意图分类器);
3. 确认意图后,将该query交给一个Botlet去处理并产生回复集;
4. 通过策略中心来对回复集进行融合与重排序,最后输出一个最合理的答案。
该流程听得虽清晰,但实际上困难重重(#叹)。从ELIZA诞生至今几十年,虽然自然语言处理技术日新月异,仍难以做到与人类自由交流(尤其是开放领域的Chatbot)。个中原因其实不难猜到:语言百万年来与人类共同进化并演变,其博大精深程度令人敬畏。
今天,我们只对近几年来一些常用NLP技术做个简单的介绍,由于技术并不是我个人所长,故不宜多言。若各位有兴趣深入技术理论,可以在评论区表明心迹,我之后会刷脸邀请圈内有实操经验的大神来做分享~
(左侧Encoder编码将输入序列转化成一个固定长度的向量编码,右侧Decoder解码将之前生成的固定向量再转化成输出序列,摘自https://blog.csdn.net/dcrmg/article/details/80327069)
Sequence to sequence模型是2014年起盛行的一种End-to-End算法框架,也就是从序列到序列的转换模型框架,多用于机器翻译,自动应答等场景。Seq2Seq一般是通过Encoder-Decoder(编码-解码)框架实现,Encoder和Decoder部分可以是任意的文字,语音,图像,视频数据,模型可以采用CNN、RNN、LSTM、GRU、BLSTM等等。
Encoder-Decoder模型可以预测任意的序列对应关系,但同时也存在问题:1. 编码到解码的准确率很大程度上依赖于一个固定长度的语义向量c,输入序列到语义向量c的压缩过程中存在信息的丢失;2. 对于较长序列,优先输入的信息很容易被之后输入的信息覆盖;3. 在解码的时候,每个时刻的输出在解码过程中用到的上下文向量是相同的,没有做区分。
为了解决这样的问题,在Seq2Seq模型加入了注意力机制(如上图右侧为左侧加了attention之后的结构),在预测每个时刻的输出时用到的上下文是跟当前输出有关系的上下文,而不是统一只用相同的一个。这样在预测结果中的每个词汇的时候,每个语义向量c中的元素具有不同的权重,可以更有针对性的预测结果。
上图是摘自于雷锋网2017年7月19日发布的一篇来自于三角兽科技AI Lab的论文(https://www.leiphone.com/news/201707/uv3wNCq0MB1HSR56.html)。论文中提出了一种新的对话文本对抗生成学习框架,目的是解决文本生成过程中的采样操作带来的误差无法反向传导的实际问题,从而实现基于对抗学习的聊天回复生成模型。
该框架使用 GRU 构建回复生成模型 G 的主体,用 CNN 构建判别器 D 用以判断 query 与(真实存在的或模型生成的)response 之间的语义是否相关。在给定一个 query 的情况下,模型 G 通过 encoding-decoding 过程生成一个 fake response,这个 fake response 将与 query 构成一个负样本,同时,query 在与训练数据里的真正的 response 构成一个正样本,判别器 D 的训练目标即是尽可能的区分上述正负样本。
上为该paper中分享的部分结果展示。表格中的 Seq2Seq、MMI-anti 和 Adver-REGS 分别代表经典 encoder-decoder、引入 anti-language model 机制的 S2S 和一种基于强化学习的 GAN 模型架构。从生成结果的语义相关性(Relevance)和多样性(Diversity)两个方面对比几个模型,可以看到该论文中提出的 GAN-AEL 在保证语义相关性的情况下,明显提高了生成 response 的多样性。下面是该模型基于百度贴吧数据集训练之后生成的结果样例。
不难看出,近年来端到端的自动聊天系统研究已经进入白热化阶段,各大公司竞相成立实验室试图突破聊天机器人的技术瓶颈,评估维度也从原先的“理解用户在说什么”逐渐升华到“如何使答案更具多样性”,更“有趣”。
除了“有趣的回复”之外,学术界也在尝试引入新的技术来提高Chatbot的“智力”,使其具有更强的推理能力。上面这幅图是由Cui et al.在2017年提出的KBQA(Knowledge-based Question Answering) system的系统架构。其底层是由多余一个知识库构成,而知识库内部的知识通过知识图谱技术完成了实体与关系的抽取,最终形成了一个模板库。当用户问道一个如“哈奴鲁鲁有多少人”的问题时,该问题将被抽象化为“城市--人口--?”的格式并从知识库中搜索以得到答案如下图。
而如果我们有一副更复杂的实体与关系网如下,则可以基于推理来回答更高阶的问题,比如“奥巴马的夫人是谁”这一问题就需要通过“name-marriage-person-name"多条边来表示,最终得到“Michelle Obama”这个答案。
由此可见,为了使“Chatbot”更智能,学术界可谓百家争鸣。就像人类的大脑存在多个分区去执行不同种类的任务一样,一个智能的Bot也是由多个Botlets组成。那么每个Botlets在完成各自的任务时,和对用户来说Bot的整体体验,应该如何来评估呢?
在搭建NLU/NLP模型时,已经有很多经典且得到业界公认的指标来评估模型的表现。其中包括量化word-overlapping(词重)的指标如BLEU, METEOR还有ROUGE;以及embedding-based(基于向量化计算)的指标如Greedy matching,Vector Extrema等。
然而,我们需要的不只是基于单句或单回合表现的评估方法,而是一个更能量化“用户体验”的评估标准。PARADISE(PARAdigm for DIalogue System Evaluation) 就是上世纪九十年代末由Walker et al. 提出的评估任务型Bot的方式。其核心理念是评估Chatbot在帮助用户完成一个任务的过程中,是如何通过节省成本和增大收益来使用户满意度最大化的。比如说,对话过程中的超时退出、拒绝、求助次数都可以被算作“成本”,而收益则是“N个用户在一段时间内完成任务的成功率”。
那如果我的Chatbot不止能处理Task,也可以处理咨询类,还可以和用户闲聊呢?这个时候就需要有一个更全面、更抽象的评估方法,根据Chatbot的侧重点来进行每类任务的加权评分。下图是由Radziwill & Benton提出的,从Performance(表现力)、Humanity(人性化)、Affect(亲和力)和Accessibility(理解力)四个维度来评估一个对话机器人的模型。其主要理念是通过A|B Test的方法,将每次迭代后的Bot与其前任进行交叉对比,从而得出该Bot的整体表现力是否提高。
P.S. 这里每个维度的指标我有做过梳理,如果亲们有感兴趣的可以在公众号留言,我发excel给你萌~
本次的分享就到这里啦(长舒一口气)~
意犹未尽的朋友们可以期待一下我就以下这本书整理的读书笔记(两周前刚收到,下周开始啃~)。
结语:最近在“得到”上听吴伯凡老师的“认知方法论”课,课上反复提到认知的三层境界是从“不知道自己不知道”到“知道自己不知道”到“不知道自己知道”。刚入行AI一年的我如今还在一层和二层之间徘徊,难免有理解有误(需要大牛指点)的地方。先分享出来给大家,因为你萌的“吐槽”是我萌共同的成长欧耶。
以下是表白区,大家表害羞