机器人是如何实现对话的
对话机器人作为近年来愈发普遍的产品,以各种各样的形态出现我们的生活中:电话客服、文本客服、超市里的导购机器人等;那这些机器人如何实现和我们人类的智能对话的呢?本文将用显浅易懂的文字讲述机器人的对话原理与产品设计要点。
一、你都见过什么样的对话机器人在正式开始接受设计原理前,我们一下来回顾下生活中,常见的对话机器人包括哪些类型:
1.文本型智能客服这种类型的对话机器人大多出现在app中或者网站上,以文字为主要的交互方式,旨在为顾客提供常见的问题解答与简单任务的处理(如退货,换货等);常见的有:
阿里小蜜京东JIMI唯品客服2.话务型智能客服这种类型的对话机器人常见于银行与大型企业(如家电)的话务咨询上,以语音为交互方式,同样也是为了解答顾客的常见问题与处理简单任务(如查询余额、充值等);常见的有:
工行工小智中行智能客服海尔智能客服3.个人助手这种的对话机器人现阶段基本已经渗透到了每一台智能手机,进入大多数人的日常生活,旨在为用户提供一种语音交互的手段来提高操作的效率(如闹钟设置,日程提醒);常见的有:
SiriGoogleAssistantAlexa小爱同学4.工作助手这种类型的对话机器人主要用于以文本或者语音对话的形式帮助员工进行假期申请,事务提醒等日常工作事项,起到办公事项的整合(各种办公事项都可以通过工作助手对话来实现)与效率的提高;常见的有:
slack钉钉二、对话机器人的价值1.售后接待在这个场景下,对话机器人最大的价值在于问题的拦截,即100个顾客来咨询,最终需要人工客服解答的顾客只有10个——大大降低客服成本。
2.售前接待这种场景下,对话机器人最大的价值在于接待的及时性;想象下,淘宝里询问掌柜问题,若是掌柜隔了五分钟再回复,那基本就不会在这家店买东西了。因此,这类机器人在顾客到来的第一时间由机器人接待,同时机器人也在通知掌柜的抓紧上线,接管会话。
对于企业服务来说,这类机器人还会判断顾客的意向程度,针对高意向的顾客会引导留下联系方式,方便后续客户经理的跟进。
3.个人助手这种场景下的机器人,最大的价值在于以语音交互的方式提高用户操作效率。例如在晚上在床上准备睡了,忘了设闹钟,而手机在桌子上,这时候一句话就能完成闹钟设置想必是一个很爽的体验。
三、问答型文本对话机器人这类型最典型的代表就是文本智能客服,这类客服常见于各种app中,以文本的形式为用户排忧解惑。
1.工作流程下面我们来看下一个文本型智能客服的完整工作流程:
1)用户发送消息:用户以文本的形式输入自己的问题。
2)NLU:NLU单元收到用户的文本消息后,进行自然语言理解,识别用户的问题,输出识别结果
3)对话管理:对话管理单元收到NLU的识别结果后,找到该识别结果对应的回复内容,进而以文本的形式输出回复内容给到用户
2.NLU到底做了什么在整个工作流程中,NLU作为核心环节之一,想必是许多朋友们希望能够了解的,那我们接下来就讲讲,在这一个环节里面,机器到底是如何理解人类的语言的。
如果用一句话来概括NLU的工作的话:根据用户的问题,在知识库中寻找对应的问题。
这里涉及了一个概念,知识库:所有用户常见问题的集合(包含同一个问题的多种问法与回答)。
这就好比一个行军打仗的将领,面临大敌的时候,拿出仙人给的锦囊,从锦囊里掏出一条退敌的妙计。知识库在这里就好比是锦囊,而挑选出锦囊中的妙计这一过程就好比NLU的工作。
2.1基于统计学的自然语言理解
实际应用中,NLU常用的技术是基于统计学的自然语言理解,即:通俗的说就是把用户的问题经过简单处理后,和知识库中的所有问题进行相似度计算,找到相似度最高的问题,然后把该问题的答案返还给用户。
用一句话来概括就是:找相似。
而在这个过程中,又可以详细的拆分为以下几个环节:
分词:顾名思义,把一句话,进行分词处理,这也是中文自然语言理解领域最痛的一点,一旦分错,后面的工作都白费了。而英文不一样,英文本就是每个词都用空格隔开的,不存在这个问题。去除停用词:把一些没有用的词去掉,例如【的】【呢】语气词、副词等,精简句子,输出最简表达。词性标注与命名实体识别(时间,货币):针对最简表达中的词性进行标注,同时针对一些专有名词名次进行识别,我们叫命名实体识别,如时间、货币、楼盘名称、人名等领域知识的识别。向量化(word2vec):想要计算机处理这些数据,向量化是一个不错的方法,利用word2vec等算法把文本向量化。计算相似度(BM25算法,TFIDF,分类与检索):完成了文本向量化之后,我们就需要计算用户的这个问题和知识库中每一个问题的相似度了,并从中找出相似度最高的一个知识库问题,并把该问题对应的答案返还给到用户。其实整个过程又可以分为两个过程:召回与排序;通过分类算法(如Bert)找出知识库中用户最有可能问的几个问题,进而通过检索算法(如BM25)计算这几个候选问题的相似度。2.2其他NLU技术
1)基于模版标注的语言理解
基于模版标注的自然语言理解也是常用一种技术,人工标注知识库每个问题的最简表达、关键实体、同义词标注。这样做的最大好处就是识别的准确率高,因为系统通过标注数据,已经知道了知识库问题的最简表达,以及每个问题的关键词,以及同义词;进而利用这部分数据去解析用户的问题,往往能够得到更加准确的识别结果。但是,缺点也是同样明显,需要针对每一个问题的每一个文法进行标注,典型的有多少人工,就有多少智能的做法。
2)基于知识图谱的问答(KBQA)
另外的话,基于知识图谱的知识问答也逐渐走上舞台。通过知识图谱来对问题进行语义解析。例如姚明的老婆的国籍这样一个问题,知识图谱先找到姚明,然后找到姚明的老婆叶莉,最后找到叶莉的国籍中国。这项技术的准确率一般很高,但是能够覆盖多少问题,就要看这个知识图谱建设的好不好,够不够广;而知识图谱的搭建,本身就是有多少人工,有多少智能的工作。
3.知识库的构建讲了NLU之后,不得不讲的就是知识库了,顾名思义,就是【知识的宝库】,里面收集了所有希望机器人能够回答的问题,对应问题的N种文法(如价格这个问题:多少钱?怎么卖?价格怎样?),以及问题的对应答案。
构建一个知识库的步骤也很简单(简单,但不代表很快,它需要多次调整和补充):
收集问题:收集我们希望机器人能够回答的所有问题,一般客服中心都有这种知识库,没有的话可通过相关部门人员结合日常工作内容进行总结整合。填写问法:即一个问题对应的多个文法,这个需要穷举(如价格这个问题,问法可能有:怎么卖?多少钱?等),可利用同义词和句式的改变来进行思考,一般这是传统客服知识库没有的内容,需要重新整理。补充答案:即该问题对应的答案,这块内容也是传统的客服知识库就会有的内容,但是一般建议对每一个问题最少填写两个答案,为的就是在用户提出同一个问题的时候,可以对同一个问题有不同的回答方式(但意思相同),让用户体验更好。知识库模型发布:每一个知识库就是一个NLU模型,因此每一次的知识库更新也就意味着NLU模型的更新:系统把知识库中的内容(问题与问法)输入到模型中进行训练,得到一个专门针对该知识库的NLU模型。四、闲聊机器人:做个有温度的机器人除却问答型的机器人外,市面上常见的还有闲聊机器人,最典型的代表就是微软小冰:无聊了,寂寞了,都可以找小冰说说话,而小冰一般也能给出不错的对话内容。
要满足机器人的闲聊场景,做法和问答型机器人大同小异,就是加入一个闲聊的语料库,这个语料库一般都可以从网上找到,但语料的覆盖范围和提供者所从事的服务有很大的关系,例如阿里云小蜜的闲聊就满满的都是淘宝味,毕竟那些训练的语料大都来自于淘宝体系内用户和掌柜的聊天内容。
而一般的智能客服厂商,为了更好的衔接对话,也为了让用户有一个更好的对话体验,一般也会加入一定量级的闲聊语料库,但这个库一般却是不允许编辑的,里面涉及一些敏感词的管理,以及运营成本的考虑。
而这个闲聊语料库,厂商必定也是在服务客户的过程中,根据对话记录去不断丰富和完善的。
五、任务型机器人:做一个能够解决问题的机器人图片中是一个物业报修机器人的对话截图,一个用户通过和机器人的多轮对话,完成了问题的描述并成功报修。
类似的场景逐渐得到了越来越多的应用,例如海尔的家电安装预约已经实现了全量的机器人接待和预约,一方面大大的节省了企业的人力成本,另一方面也解决了及时响应消费者的问题。
1.什么是任务型对话机器人在开始讲任务型对话机器人设计之前,我们先明确下任务型对话机器人的定义:
任务型机器人指特定条件下提供信息或服务的机器人场景案例:查天气,设闹钟,订餐,订票,播歌通常需分多轮互动,用户在对话过程中不断修改与完善需求,任务型机器人通过询问、澄清和确认来帮助用户明确目的结合以上定义,我们就不难理解,完成一个任务型对话,需要进行以下三个关键点的设置:
意图识别设置:即设置一个意图(一个意图一般对应一个任务与操作),以及用户如何发问才能触发该意图,如示例中的物业维修就是一个意图。词槽设置:即需要执行该意图任务所需收集的关键信息,如示例中的物业报修,需要知道用户具体是什么问题才能生成物业维修工单。回复设置:即当机器人完成了所有关键信息的收集且执行了意图任务之后,对用户的回复,可能是一句话,如示例中的【收到,回头会有物业维修的师傅联系您】;也可能是一个执行结果,如示例中的工单接受通知。2.意图设置意图,就是用户想要达到的目标。上图的示例讲的是一个早餐预定的例子。
对于机器人来说,我们得先告诉它,用户输入了哪些内容之后,即可认为用户想要达成的就是该意图。而这个设置,一般有以下几种常见的方法:
1)对话样本集
例如示例这里的意图是早餐预定,那么当用户输入:预定早餐、订一份早餐等语句的时候,即可认为用户想要达成的就是早餐预定这个意图。
而这个设置的基本原理和方法与知识库中的问题设置基本一样,就是把用户表达该意图时常用的对话样本进行收集和录入。后续用户只要表达了相近的输入后,系统就会按照该意图来执行对话。
2)关键词
这个很好理解,就是对用户表达某个意图时的关键词进行识别,只要用户的表达中含有这些关键词,系统就会按照该意图执行对话。例如订火车票这个意图,只要用户提及【订火车票】这个词时,即可让机器人进入订火车票这个意图的多轮对话。
3)句式模版
句式模版这种方法,其实就是把某个意图的语言表达进行规则化的抽象。例如订火车票这个意图,一般的表达就有:订一下从广州到长沙的火车票。像这种表达就可以抽象成这样的句式模版:【发起预定】+【出发城市】+【到大城市】+【票类】
3.词槽设置词槽是多轮对话过程中将初步用户意图转化为明确用户指令所需要补全的信息。例如说,示例中的早餐预定,我们识别到了这个意图之后,还需要知道顾客想要吃什么,什么时候来拿——这两个关键信息就是机器人在执行这个意图前需要完成收集的。
而词槽设置一般包含以下几个关键环节:
词槽设置词典设置澄清话术设置1)词槽设置
词槽设置的核心在于明确执行该意图过程中,需要明晰哪些关键信息。例如示例的早餐预定,那【时间】和【吃什么】则是两个必须明确的信息。
当然,除了必须要明晰的信息外,我们也可以让机器人去记录一些非必要因素(例如是否加辣),如果用户有表达这个信息,机器人则会记录相关信息;若用户没有表达该信息,机器人也不回去追问。
2)词典
词典,即告诉机器人,那些关键信息都有哪些枚举值。例如示例的早餐预定,【吃什么】这个词槽的词典,就包含了:饺子、牛肉丸、萝卜糕等词。
而机器人只要能够完成这些词的识别,即可完成【吃什么】这个词槽的填写。
至于词典的设置,一般分为两部分:
系统预置词典:对于像时间、货币、地点、城市这些信息,系统一般会提供预置词典,用户只需要自己选择即可。用户自定义词典:而对于一些特定领域的专有名词,则需要用户自己去定义,例如楼盘的名称,菜单的名称等;只有设置了这些词典,机器人在遇到这些特殊领域的专有名词时才能够更好的识别和完成关键信息的提取。3)澄清话术
既然一个意图中设置了若干的关键信息(词槽)需要用户填写,自然就会存在用户在表达意图过程中没有一次性表达清楚所有的关键信息,这时候机器人就需要针对一些必要的关键信息做追问,并根据用户的回答完成关键信息的识别和提取。
而这个追问的话术,正是这里的澄清话术,即我们告诉机器人关于某个具体的关键信息,机器人应该如何发问。且一般针对同一个关键信息,会设置多个澄清话术,为的是在追问用户同一个关键信息的时候,机器人能够用不同的化询问同一个信息,让用户能有更好的体验。
4、回复设置
当机器人完成用户意图的识别,且完成了关键信息的收集后,即可进行意图的执行。而意图的执行后,机器人需要给用户一个回复(总得告诉人家做得怎么样嘛),这个回复可以是一句话,也可以是一个操作的执行入口,又或者是意图执行之后的模版消息,也可是一个h5页面等等,这个要具体场景,具体而论,没有太多的限制。
六、综合型对话机器人当前市面上的机器人,更多的是综合型的对话机器人,即同一个机器人,挂载了问答知识库、闲聊语料库以及多个任务技能。只是每个机器人根据自身具体的服务场景,在知识问答、闲聊、任务对话三者上面有所倾向罢了。
也正是因为综合型对话机器人的出现,让我们现在的生活更加多彩,我们才可以在深夜十二点进行物业报修预约,才可以夜深人静的时候有个倾诉的对象,才可以在懒癌发作的时候通过一把声音控制家里的电器。
那是不是只要一个综合型对话机器人做到了以上的内容,就可以高枕无忧,和我们人类畅通对话了呢?显然不是的!上面这些内容如果形容为游戏中的核心装备的话,那要做好一个对话机器人,还需要针对不同的服务场景增加不同的辅助装备——这方面我们下回分解!
本文由@王掌柜原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议
聊天机器人图片
©汉华易美视觉科技有限公司AllRightsReserved 苏ICP备19044258号-25 苏B2-20191025 苏公网安备32041202001826号 出版物经营许可证 网络文化经营许可证
违法和不良信息举报电话:400-818-2525 举报邮箱:jubao@vcg.com 隐私问题反馈邮箱:privacy@vcg.com
江苏省常州市武进区西太湖科技产业园禾香路123号6号楼一楼102室
六、NLP聊天机器人原理(seq2seq模型)
一、seq2seq模型1.概念seq2seq是一个Encoder-Decoder结构的网络,它的输入是一个序列,输出也是一个序列。Encoder中将一个可变长度的信号序列变为固定长度的向量表达,Decoder将这个固定长度的向量变成可变长度的目标的信号序列。这个结构最重要的地方在于输入序列和输出序列的长度是可变的。可以用于翻译,聊天机器人、句法分析、文本摘要等。2.encoder过程encoder过程实际上就是编码的过程。看这张图,输入的howareyou三个英文单词,通过这个三个权重输入到LSTM。LSTM就是扮演一个在传统神经网络中隐藏层的部分,处理完了之后再输出,但是输出的是e。在从左到右翻译的过程中,第一个是上一个时间的输出,当前的输入,LSTM这里面还有上一个时刻的状态位,也是输入进去了,经过他的翻译,最后输出到这里。这个encoder过程,实际上是一个编码的过程,就是将一个文本序列进行一个编码。
(1)取得输入的文本,进行embedding,生成向量
(2)传入到LSTM中进行训练
(3)记录状态,并输出当前cell的结果
(4)依次循环,得到最终结果
3.decoder过程(1)在encoder最后一个时间步长的隐藏层之后输入到decoder的第一个cell里
(2)通过激活函数softmax得到候选的文本
(3)筛选出可能性最大的文本作为下一个时间步长的输入
(4)依次循环,得到目标
4.seq2seq模型这个图就是编码器和解码器的结构图。编码器和解码器分别对应着输入序列和输出序列的两个循环神经网络,是两个RNN。一般来讲,我们用seq2seq模型的时候,通常在输出序列和输入序列的头部和尾部一般会加一个go和一个eos,来表示开始和结束,但这个表达只是一个文本形式,或者说是在一般做模型形式上的一个表达。这个编码器的作用是什么,就是把一个不定长度输入序列转化成一个定量的背景向量。这个背景向量就包含了输入序列的信息,我们常用的编码器,就可以是一个循环神针网络,循环神针网络在做这个文本处理或者nlp领域中是一个非常常用的编码器结构。我们看这里面,假设这个编码器的输入就是这个x1,x2...xt,它会经过一定的变换之后变换成一个隐藏的变量,在经过这一点c进入c然后解码器通过这个c来获取编码器的内容,也就是x1,x2...xt,这些内容编码之后,会放到c里面。解码器从c里面去读所要的这个信息,再去获取编码器的内容,然后变成y1,y2...yt。那么在seq2seq模型中,解码器一般是通过c这个向量拿到编码器的信息,然后再通过RNN进行传递,然后再输出。
二、注意力机制这张图是这个这张图是这个seq2seq的一个翻译的例子,a,b,c是输入,w,x,y,z是输出,那么在这个模型中,使用了seq2seq的方法,通过预测字符序列,最后得到了这个结果。实际上,每一个里面我们可以看做是一个RNN,或者说一个LSTM。那么,在LSTM中,每一个单元获取到的是上一个单元的输出以及输入,以及加上上一个单元传过来的状态的信息。经过一层一层的预测,最后得到了一个w,x,y,z的结果。这个结构就是利用这种方式进行这个编码和解码的。刚刚我说的是预测,那换一种说法来说,就是把他作为一个编码器进行编码,还把后面这一块作为一个解码器进行解码。
这个sseq2seq模型还有一个缺点。我们还是来看这张图,比如说我们要去预测w,w他只能去拿上一个点的输出,以及当前点的输入,进行预测,那么这就会产生一个问题,如果说我们需要w,可能需要a点的信息或者b点的信息,那么他是拿不到的,那为了弥补这个缺点,可以引入一个注意力模型
(1)注意力机制是在序列到序列模型中用于注意编码器状态的最常用方法,它同时还可用于回顾序列模型的过去状态。
(2)注意力机制不仅能用来处理编码器或前面的隐藏层,它同样还能用来获得其他特征的分布,例如阅读理解任务中作为文本的词向量。
2.为什么需要注意力机制(1)减小处理高维输入数据的计算负担,通过结构化的选取输入的子集,降低数据维度。
(2)让任务处理系统更专注于找到输入数据中显著的与当前输出相关的有用信息,从而提高输出的质量。
(3)Attention模型的最终目的是帮助类似编解码器这样的框架,更好的学到多种内容模态之间的相互关系,从而更好的表示这些信息,客服其无法解释从而很难设计的缺陷。
三、seq2seq与注意力机制
首先第一步还是Encoder进行编码,把知识就是力量一直从e0到6然后最后加一个结束补位。补到这个6的编码,编码之后我们用注意力机制进行翻译,我们可以看到,在这个翻译的过程中,我们不仅把这个知识拿过来,还会把后面其他的相关的一些信息都放进来。
用注意力机制的话,他会紧密的去联系前后相关的信息。通过这个前后相关的信息,再来进行相关的操作,得到最后想要的这么一个结果。
来看这两个图,第一个图是使用seq2seq模型来进行操作。第二个是使用注意力机制进行操作,这两个图的区别在于如果用普通的seq2seq模型,他是先把所有的词加到encoder里面之后。在统一的进行decoder,那这样的话一个缺点就是只能通过这种序列化的形式去找前一个,或者说当前和前一个,他们两个相关的一个内容进行一个翻译。那么,针对于较长的文本的话,翻译起来肯定是不是特别准的。肯定会有一定的误差,那么我们使用这个注意力机制呢?它的优点就在于,每一个翻译,他都会去寻找这个前后各种各样的这个文本信息,他都会拿进来。也是说,当对一个文本的一块进行做翻译的时候,会把所有的注意力都集中在这一个单元里,从而使翻译的准确率更高,实际上,我们使用这个注意力机制,或者说attation机制,它的优点也就在于此
接下来我们看这两张图,这两张图也是一个是使用这个注意力机制,一个是没有使用注意力机制,在做这个编解码的过程中的一些差别。我们可以看到,如果使用注意力机制,在每一个序列中,它都有一个相应的这个状态位。我们根据这个相应的状态位可以把注意力集中到一起,进行翻译,编码之后,得到相应的结果。如果说没有使用这种注意力机制,他就会把所有的这个输入序列前的输入进来,之后最后再统一再做这个decoder。这样的话,那就会使得我们最后的结果准确度没有这么高。
四、聊天机器人根据对话的产生方式1.基于检索的模型有明确的问答对数据库使用语句匹配的形式查找答案答案相对固定,且很少出现语法错误不会出现新的语句2.生成式模型不依赖预先设定的问答库;通常基于机器翻译技术需要大量的语料进行训练Encoder-Decoder模式;机器翻译;输入的是问题,翻译的是回答;
这个图也是一个基于生制模型的一个案例。这就是一个对话的案例,他的输入是不好意思,刚有事好,回答是,亲。没事的
首先,他把这个。不好意思,刚刚有事 这几个字输入进来,然后当做输出的时候,是利用注意力模型,我可以看到。他把之前的一些的信息都收集过来。也就说在做这个亲这个词的时候,就是用到了之前的这些信息,没事的也是用到了之前的这些信息,通过这个信息的一个处理,或者用seq2seq加上attention机制的处理。最后告诉你,没事的。这个实际上也是用这个生成式模型来做的。
但是刚刚也说了基于生成式模型,他有一个最大的缺点是目前大家训练的要求非常高,对数据的要求也高,对这个训练的这个硬件或者对训练的轮次时间。要求也高,而且呢,目前来讲这个效果还并不是特别好。那如果使用传统的检索模型也有一个缺点,就是说,只能在特定的这个数据集中进行去查找。我不能告诉跳出我们这个特定的问答句之外,那么这也是一个麻烦的事。
3.混合模式兼具检索模式和生成模式;目前最常用的解决方案检索模式产生候选数据集生成模式产生最终答案虽然这这个图中左面这一个部分,我们实验就是用了这个检索模式。而右面这个部分,那实际上就是用了一个生成模式,我们把它两个结合是如何来去做的呢。比如说让我们输入了一个句子,输入了一个早上好,或者说输入了一个你叫什么名字。他首先就会在这个知识库里,这个数据库里搜索有没有这个问题,如果有这个问题,搜索到了,他可能会有好多种答案。那他再把这个被选的可能性的这些答案全都列出来。全都列出来之后呢,就生成了一个候选的答案。然后,再送到这个生成模型中,那生成模型中,再根据这个候选的这个答案进行seq2seq模型的匹配和可能性的判断。经过这个匹配和这个判断,得出一个分数,如果说当这个分数大于一定的分值的话,大于0.5或者大于0.6。那么,我们认为这个回答可能是用户想要的,再把它进行输出。如果说不是的话,那么我们再去做回答的匹配。这就混合模式,它的优势在于前期的处理量可能会小得多,因为他使用这种检索模式,已经帮我们过滤出一大部分这种数据集了。而我们只需要通过这个生成模式在这个检索模式得到的这个数据及的结果的前提下。来找到一个最可能想要这种的一个答案,最后进行输出。所以说一般来讲,在做这种聊天机器人的时候,一般都是使用这种混合的模式进行那种输出和这种开发。