去哪儿-智能在线客服聊天机器人-产品体验

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

体验对象:在哪儿APP-在线客服功能(聊天机器人)

体验时间:2019-09-08

体验环境:HUAWEI NXT-AL10、Android 8.0.0

机器人性质

基于业务进行引导和解答;属于业务回答性质的QA聊天机器人。

知识库分类

通过用户选择输入的方式确定分类;如下图:

去哪儿-智能在线客服聊天机器人-产品体验

酒店问题分类内查询机票问题无法给出答案。如下图:

去哪儿-智能在线客服聊天机器人-产品体验

说明不同知识库之间不能进行切换,只在当前知识库内匹配答案。分成了不同的封闭域。

我的小想法:

虽然用户一般不会这么干,这里假设可以在这里进行分类内容的切换的话,可以先预设问题询问用户是否切换;然后切换到机票知识库分类下进行回答。

这里可以使用分类算法,例如KNN近邻算法,计算用户问题距离各分类样本的欧氏距离,将5个最近样本点的最大占比的分类作为该问题的分类。存在小缺点是需要训练一个样本集,并且需要更新样本集以保证稳定准确。

注意优先级,优先在当前用户所处的知识库内检索语料;在用户的question匹配上低于设置的阈值时,再进行检测分类。

回答多样性

针对相同问题的回答,见下图:

去哪儿-智能在线客服聊天机器人-产品体验

可以发现相同问题的回答是一致的;说明回答不具有多样性。

我的小想法:

首先回答是否应该不一样呢?一样的话带来的风险是用户得不到想要的答案,又不知道正确提问的“姿势”。回答不一样的话,风险是用户找不到以前使用过的路径,必须在新回答里面进行新路径探索。我认为这里还是选择前者好一点,回答应该一样,业务机器人最重要的是稳定。

异常事件&开放性问题

我先在机票分类内提问,后再去了酒店分类内进行相同提问,下图是机票分类的聊天:

去哪儿-智能在线客服聊天机器人-产品体验

我在这里用的问题是“123”,这是一个比较开放的极端问题,后来我用一些正常问题做了相同的测试。不论在什么情况下,在机票分类内进行到第四轮对话后,自动转人工客服,而在酒店分类内则不会转人工客服。

我的小想法:

首先不同的分类下对于异常事件的处理也不一样,这里猜测机票是去哪儿的主要营收来源,配备了专门的客服;而酒店则没有这种需求。

这里我还进行了尝试了不同的问题(都是正常问题)搭配方案,只要超过三轮对话,在第四轮的时候都会转人工;但是如果直接输入“转人工”或者类似提问却不会转到人工。

这里应该是根据数据统计进行的粗暴划分,只要超过对话轮数就转人工,没有其他规则。也反映了真实情况中前三轮对话就可以满足用户的需求。

如果考虑设置转人工的对话,则需要对用户的问题正则匹配,程序直接转人工。缺点是可能用户不知道可以这么干。而且也会增加人工成本。并且还需要每次先去if这个模板,增加了一步流程。

对于开放性的问题,并没有太好的办法,因为本身就是一个目的性很强的场景,或者说封闭性的场景。

这里我们可以定时收集统计用户的开放性问题,如果同一类或同一个问题比较多的情况下,可以将这类或这个问题添加进语料库。

文本处理(NLP)

接下来分析一下机器人是如何处理问题的。

一般有两种方法,第一种是从语料库里面直接正则匹配关键词,如果返回True,则直接输出答案;虽然很粗暴,但是因为很稳定、准确,现在市面很多机器人开始时都会用这样一种方式。

第二种是用自然语言处理,就是我们说的NLP。处理后把问题变成一个向量,再去找语料库里的答案。

去哪儿-智能在线客服聊天机器人-产品体验

从上面图中我们可以看出,机器人识别出了“如何购买机票”这个问题,但是没有对问题进行文本预处理,虽然“机票如何购买”、“如何购买机票?”、“购买机票”三者的文本几乎一样,但是还是影响了判断。

我后来用了更多的组合方式,停止词比如“的”以及各种符号都会成为干扰项,说明这里的逻辑应该是和语料库完全匹配后才会直接输出答案。可能是考虑业务的稳定性,引导用户通过点击推荐问题来准确的完成解答。

我的小想法:

假设我们将其进行自然语言处理,将“购买”“机票”两个词提取为一个向量,将“如何”作为干扰项忽略;丢到语料库里面进行匹配,选出概率最大的相似问题;然后输出答案。

这里要先有一个分词库,用来提取关键词,可以用“jieba”中文分词库。成本会比单纯的正则匹配关键词多一点,但是随着业务扩展,这种方法对问题的含义理解会更好一些,还能做到匹配近义词(用nltk)。

在业务比较偏专业或者很简单,处于开始阶段的时候可以粗暴一点直接撸语料库;目前机票业务语料较少、不复杂、变化小,强调稳定和准确的情况下,人为直接设定答案这种方式确实会表现的更好、更高效。

回答类型

看一下下图:

去哪儿-智能在线客服聊天机器人-产品体验

我们可以看出有两种回答的形式,一种是直接输出答案;另一种是输出推荐的问题。

第一种不用讲,前面已经说过原理了,来看第二种。这里实际上是设置了一个决策树的优先级。用户输入问题后,机器人先去语料库里面匹配关键词;如果成功匹配则输出回答。如果未匹配关键词,则输出“您是遇到了以下问题吗”,后面带上推荐问题。

那么这些相关问题是怎么得到的呢?又是如何排序和显示的呢?

猜测一:固定答案。设置一个关键词库,专门存放这类含义模糊的关键词,比如我们就命名为”模糊含义关键词”。匹配到模糊含义关键词“机票”,则输出固定的答案并推荐固定的问题;并限制数量为≤4个推荐问题。

猜测二:半固定答案。仍然是设置一个模糊含义关键词的表,但是输出的答案是动态的。选择当前“机票”分类下相关的问题,对推荐问题进行热度排序,然后截取前4个。好处是答案是动态的,根据一定的统计规则动态展示相关联的其他问题。提高转化率。当然除了热度外还可以有其他动态的统计规则,比如协同过滤一下,哈哈。

猜测三:问题相似度。简单粗暴点,我们直接对用户问题进行相似度计算,比如用余弦相似度算法或者编辑距离比较。按照相似度进行排序,截取前4个问题。

我觉得用第三种好点,虽然前两者发挥比较稳定,但是比较浪费人力,需要不断更新关键词。让我们来验证一下吧,如下图:

去哪儿-智能在线客服聊天机器人-产品体验

可以看到虽然我的问题根本不是人类能看出来的意思,但是机器人完美输出了包含所有字的那个问题,而且还排到第一个,说明很可能用的是相似度计算。相似度计算也是NLP的主要使用场景。

模板匹配vs循环神经网络

上面我们看出来这款机器人主要是一款rule-based的机器人。基于模板匹配的好处就是带来了稳定的效果。

那么是否可以升级成可以进行深度学习的机器人呢?

我们来看一下这样的好处。首先目前机器人存在的问题是不够智能,表现在不能处理更复杂的业务,只能进行简单的QA。我们设想这样的场景,用户直接通过机器人完成定票。这就需要机器人能够保存用户的信息,并在此基础上引导用户输入订票所需的姓名、地点等等所有信息,最终接入业务系统完成订单。

为此我们需要用到RNN循环神经网络,RNN不同于传统神经网络,它是有记忆的,也就是说可以记下来用户说过什么。这里可以使用LSTM长序列循环神经网络解决对记忆长时间的依赖问题。

这里操作方法是先训练模型,使用BPTT算法,目的是使损失函数最小。

最终我们得到了一款可以记住用户信息并且进行交流的机器人。

这里只是试探性的讨论。因为第一点是业务本身要求的准确度比较高,需要更多的数据来决定是否可以用学习机器人。第二点是用户对这个是不是强需求,很可能最后做出来一款很强大的鸡肋机器人。我个人认为目前要在业务上大规模使用学习型机器人还需要很长的路要走。

随意打赏

智能聊天机器人陪聊机器人聊天机器人
提交建议
微信扫一扫,分享给好友吧。