前言
对话机器人已经是市面上一款比较常见的产品,像淘宝中的淘小蜜,滴滴打车的客服机器人等等,他们最核心的价值在于:可以7*24小时不间断服务,以非常简单自然的交互方式,高效准确的回答用户的问题或者完成特定的任务,降低公司使用人工客服的成本。
目前网上的文章基本是从技术人员的视角去讲解如何搭建对话功能,那么到底什么是从产品的视角从0-1搭建对话机器人呢?笔者认为,一个完整的对话机器人应该分为以下几个部分:对话功能模块,人机交互模块和数据分析平台。尤其在最开始做对话项目的时候,应该先了解整个项目的架构,不能过多的把时间放入对话能力中而忽略了其他模块,相反可以在整个项目搭建完成后再逐渐提升整体功能。
从0到1,做深做透,做宽做杂。
1. 构建机器人前
需要通过需求调研,用户调研,明确机器人的类型、基本功能和应用场景,了解自己要做的是什么样的一个机器人。
用户调研:
需要了解用户的需求,分析用户和需要解决的问题
对话类型:
问答型机器人一般用户客服场景,可以快速回答用户问题。任务型机器人一般用于完成特定的任务,比如给机器人发送要买机票的消息,然后就可以选择航班和填写相关的信息进行下单。闲聊型机器人会模拟真人和用户进行对话。
交互方式:
问答、闲聊、和任务三种类型。
载体:
即承载对话机器人的物体,目前大多存在于手机APP和智能音箱中。
2. 对话模块搭建:
怎么去解决对话问题呢?
该模块主要通过NLP(自然语言处理)去解决对话功能,过程是通过机器学习的各种算法去构建语言模型,然后通过数据标注,模型训练,模型测试等过程去训练模型,在训练之后,模型可以在用户发送的语句中获取用户的意图和实体,然后返回相应的答案给用户,从而使模型可以实现对话效果。
目前市面上有好多公司都提供第三方机器人搭建服务,像百度UNIT,图灵机器人等等,即在网页上填写语料等数据即可构建。在此需要注意的 是,需要区分云端和本地的区别,第三方的机器人服务基本上都是在云端部署服务,需要连接网络,而本地的话则需要程序员自己搭建程序,不过好处是速度比较快。一般来说可以部署再本地部署一部分常见问题,其余的问题部署在云端,即维持效率,又保证成本。
本文以开源机器学习框架RASA进行讲解。先简单介绍一下该框架,该框架由2部分组成,分别是语义理解和对话管理, 在机器人接受到用户发送的语句后,会把用户的语句传递到语义理解部分去识别意图和实体,再去对话管理部分寻找对应答案。具体执行过程如下图所示:
该开源框架使用的是embedding算法,即把训练样本和意图编码到同一个向量空间,设计损失函数(是将随机事件变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数,分类正确的取0,错误的取1),使得样本与真实意图更相近,样本与其他意图更相反,意图之间编码更相反,达到意图分类的目的。
2.1 语言模型
语言模型的原理是计算句子或者单子序列的概率,或者序列中下一个单词概率的模型。主要应用场景包括:情感分析,问答,总结,机器翻译和语音识别。生成的方式有使用N-grams,神经网络,长短期记忆网络等方法。本文因使用开源框架RASA讲解,里面已经包含了模型。
2.2 模型训练
当程序员构建好模型后,模型需要通过标注好的数据进行训练,具体流程如下图所示:
1) 数据标注:
即标注意图,实体。 意图是指用户的目的,词槽是筛选的条件,实体是词槽的词典。实体和词槽一般用于多轮对话。
2) 训练语料库:
在项目初期,公司没有任何积累的情况下,答案库需要人工生成。需要配置意图与对应的训练语料,每个意图需要填写若干个训练的语料,按照框架的说明书“定义意图可能会出现的文本内容文件”,即尽可能多的填写该意图所对应的用户问法。下面举一个例子, "我该怎么登陆QQ邮箱呢" 是一个比较常见的问题,我填写的意图是 "登录邮箱", 并配置了5个训练语料,分别是 “登录邮箱” ,“我该怎么登陆QQ油箱呢” ,“打开QQ油箱” ,“QQ油箱如何登陆” ,“怎么进QQ邮箱” ,训练预料是填的越多,则效果越好。
3) 模型训练:
当配置好训练语料后,将训练语料放入模型进行训练。值得一提的是,模型训练操作在项目初期可能通过自己在文件中编写意图和语料,然后导成Json文件f发送给程序员进行训练,在数据平台搭建后,则可以在平台中加入训练功能直接操作。
4) 模型测试:
下图是笔者用Postman进行测试的图片。可以看到,在我输入像机器人发出”年假“语句后,会跟模型中的"年假"意图产生98%的匹配度,而排名第二的意图相似度是0.2%,几乎是不匹配。
2.3 阈值:
阈的意思是界限,故阈值又叫临界值。我们需要为机器人设定阈值也就是为意图匹配设定界限。比如根据测试结果,可以将阈值设定成0.7,也就是说在匹配度0.8以上都判断意图匹配为正确(具体可以按照机器人实际数据调整)。
2.4 答案库:
和训练语料库一下,答案库也需要人工生成,或者从特定的网站上通过PYTHON抓取。抓取下来的文件需要经过人工审核和处理,以保证文字、标点和图片的格式保持一致,这样在回复用户的时候能做到效果的统一。
当完成模型搭建,模型训练,阈值设定和答案库,聊天机器人的第一模块,也就是”对话模块“就已经搭建完成了。
3.数据平台搭建
该模块也是在很多构建机器人文章中所未提及的内容。在笔者最开始做对话机器人的时候,是通过开发人员给的测试地址,使用Postman发送不同的问题对一个意图进行测试的(上面模型测试中的图),然后记录测试问题的数量和意图匹配度等数据到EXCEL中进行统计与分析,过程相当复杂且费时。然而数据平台的搭建可以很好的解决这个问题。通过对用户问答的数据实行实时监控和分析,可以准确及时的提出相应的产品规划方案和调整策略,并持续优化。
数据平台设计应该从总览到细分,并且不断对比。总览需要简洁明了,让用户一眼就知道这是什么数据和对应的大概指标。细分应该提供足够丰富的维度,以便于分析。每次细分必须带着指标下去,并结合相关业务。数据本身没有意义,分析和对比后的结果才有意义。数据平台搭建的核心意义就是如此。
对话机器人数据平台搭建需要区分一下B端和C端2个方向,B端看重的是解决方案,更多的会侧重意图命中的准确率,而C端则需要通过埋点等功能,去分析用户的行为。以笔者所在的公司为例,主要是通过钉钉自动回复公司内部工作人员一些人事问题,所以这边就不太需要涉及到埋点需求。
3.1 面向的用户和场景:
对产品人员来说:用来评估模型的准确率等。
对运营人员来说:用来评估模型,展示对话机器人的各项使用数据:如用户问答次数,回答准确率和对话操作过程等等,并根据数据进行分析。
对运维人员来说:用来填写训练语料,维护各种意图。
3.2 设计各类数据指标:
如意图命中率,单日问答数量统计,单日意图命中数量统计等数据,具体根据公司的需求来制定。
3.3 设计数据平台页面:
1)单个页面同时展示指标不要太多,一般为4-5个比较合适
2)在指标的展现时候,要明确指标之间的主次关系
3)为合适的指标选择合适的可视化图形很重要。目前几种常见的图表应用:趋势用折线或者曲线图,分布用饼状图,占比趋势用堆积图,对比用柱状形图,多个指标交叉作用散点图,转化用漏斗图,综合能力比较用雷达图。
数据指标对于一些功能比较有意义,比如在界面上想加入常见问题推荐,那么哪些问题是可以被推荐的呢,这个时候就要根据后台的数据分析来定,看哪些问题被提问的频率是最高的。
4. 交互模块(界面+功能):
交互模块:交互界面
设计对话流程:
1)基于任务的会话:需要设定好任务的流程,以及所需求的数据,并引导用户进行相应的反馈或操作,可以用点触的方式。
2)单轮问答:设定好对应的答案,以及没有相应意图匹配时候的话术。
上下文:
一般多轮会话中需要设计上下文。需要设计好轮次,和对应的回答。
笔者因为公司资源有限,采用的是在界面上加入一个图标,在用户点击图标后,会自动帮用户转入有上下文的多轮对话查询任务中。
对话结果展示:
1)文字展示
以文字的形式展现答案,文字中重要的信息采用加粗显示以表示重点。字体,字号等格式需要统一。
2)图片或者表格展示
以图片或者表格的形式展现答案,如果图片(表格)比较大,可以采用左右滑动,或者折叠的方式去展示。
3)推荐问题
一般在机器人没有命中意图的时候,会采取推荐问题的形式。
4)进入人工
在客服机器人的场景中,当没有意图匹配也没有推荐问题的时候,可以将对话转入人工服务。