本文根据智能一点联合创始人&CTO莫瑜老师在DataFunTalk人工智能技术沙龙“自然语言处理技术应用实践”中分享的《开源节流的智能导购对话机器人实践》编辑整理而成,在未改变原意的基础上稍做修改。
莫瑜老师
首先介绍一下“智能一点”,它是为电商客户提供智能导购服务,比较偏向于售前客服。上面是项目背景,今天主要从以下几个方面讲述,智能导购机器人建设情况,从节流(提升客服效率)和开源(提高客户转化率)两个角度来讲解。
上图是应用场景截图,有单轮交互,如闲聊,单轮推荐。还有多轮交互帮助用户完成一个任务,还有一个交互推荐等内容,后续会详细讲解。
接下来讲一下应用后台服务,中间是对话机器人核心部分,主要包含一个中控部分,在接收到客户端请求后调用自然语言理解服务对用户输入进行语义理解,然后分发到很多小的机器人,这些小机器人包括闲聊的、问答的、任务型机器人还有推荐型机器人。由于目前技术原因机器人无法完全取代人,因此采用一种人机协同方式。当机器人无法响应用户请求时,将任务分发,由人工客服去解决用户的问题。对话机器人通过不同的渠道去触达不同的用户,如阿里千牛、微信公众号、web或者app。
接下来从节流和开源两个方面介绍我们做了那些工作,首先节流方面,做的最多的是问答机器人。单轮问答,暂时不考虑上下文,或者说在多轮交互过程中通过一些处理后再回答用户问题。有三种形式:一种是基于问答库的形式,事先有了很多Q&A对,当用户提出一个问题后,如何找到一个答案回复用户。第二种是在文档库中找到一句话回答用户的问题,这个与阅读理解有差异,阅读理解是将文档中的实体回复给用户。第三种是基于知识图谱的形式,构建知识图谱,依据用户的问题在知识图谱中获取相关的信息回答用户。
大部分的智能问答都是基于上述类似框架,首先基于用户的问题进行语义理解,依据retrieval模块获取候选集,最后依据Ranking模块排序,架构模块与搜索引擎很相似。在retrieval和Ranking模块也可以用到在搜索引擎中提升matching和ranking的方法。
第一种方式基于问答库的智能问答,其核心是给定两个问题,其语义相似度是多少。除去预处理可以从两个维度考虑,首先是要从语义表达的方式来表示问题的含义,然后根据这两个语义表示计算相似度。比如可以将问题转化为词贷模型,也可以使用一些无监督语义表示方法或者有监督语义表示方式。基本上就是将问题转化为语义表示,然后求解语义表示的相似度。第二种是直接建模计算两个问题间的相似度,比如Jaccard距离、编辑距离、WMD (Word Mover Distance, 借鉴EMD概念),或者将其转化为图的形式。我们可以结合不同模型最后来解决这类问题,看这两个问题含义是否一样。
第二种就是从文档中找相应的句子来回答,首先我们会建模实现问题的表示和句子的表示,也会采用一些传统特征,比如考虑答案中是否包含地点,考虑问题是否是咨询地点等传统特征,然后结合深度学习的特征再去建立一个模型。
但是现实应用场景中,用户的提问是多种多样的,比如用户会问很多关于尺码的问题,如果参数展开会是指数级。还有明天有没有活动,今天问和明天问是不一样的。如果使用前面的基于问答库的问答方式无法支持,因此基于知识图谱的问答就显得比较重要。第三种方式一般涉及三类问题,第一个是知识图谱如何构建,怎么从结构化数据、非结构化数据还有半结构化数据中构建知识图谱;第二个是如何理解用户的问题输入;第三个是如何生成回复答案。对于后面两个问题,一般有两个常见解决方案:第一种解决方案是首先对句子进行理解然后将其转化为数据库查询,根据查询结果回复;第二种是IBM werson采用的模式,重点关注问题答案的类型是什么,然后通过检索和排序方法支持。
我们的解决方案是对前面三种方案进行了融合,比如在做智能问答时,最简单的方案是只考虑问题含义是否一样。其实我们可以首先判断问题含义是否一样,也可用第二种方式,这个答案是否回复了这个问题,因此可以考虑更多的信息。然后利用LR模型融合更多的特征。
其实很多情况下是多轮对话,如果要支持多伦对话核心是如何维护对话状态。需要结合上下文理解用户意图是什么,使用两大类方式,一种是非参数模型,基于近似数据进行标注;再一种就是使用模型的方式。前者可控性更强,后者泛化性更强。在应用出现的问题有很多,比如历史训练数据是系统还未上线前的交互数据,上线后用户对话情景会发生变化。实体抽取有两种方式,一种是基于规则方式,另一种是基于序列标注。
对话管理一般分为两大类,一种是预先自定义的图架构,通过事先自定义进行维护,对话的状态可以用id来定义,每个节点就是一个状态,每个节点的转移或者要回复的文本都是系统预先定义好的。这种方式系统难维护,尤其状态较多时。第二种是Frame based架构,将状态表示为槽的组合,策略状态优化、文本生成等都是通过相关配置完成,从而实现设计与现实的解耦。比如导购机器人,开发人员并不是一个好的对话机器人设计师,导购专家可以通过这个平台实现他们的想法。目的是让导购专家无需了解技术实现面向用户体验的平台设计,交互平台支持配置要实现哪些意图、如何交互以及交互方式是怎样。管理平台维护商品活动信息,所有的相关信息都会进入知识图谱形成图谱。设计统一的描述语言,要求表达能力强,对话交互系统依据描述语言和知识图谱进行最终交互。技术人员着重解决如何构建表达能力强的描述语言,设计人员着重于提升用户体验。电商存在潮汐现象,平常和活动差异很大,在平常对导购机器人有更高的需求,需要如何提升客户转化率。
提升客户转化率不单单帮用户省钱而且还帮其赚钱,如何将交互和推荐结合来提高转化率。在CUI之前,GUI比CUI有很多优点,比如:GUI信息展示更好,GUI操作精准度更高,基本100%,但是CUI很难做到百分之百。但是CUI比GUI更容易信息获取,GUI服务于头部信息,对于长尾信息很难获取,比如在在支付宝找免密支付是很困难的。从用户角度是要结合两者的优点。另外,对话交互场景的个性化需求很强。综合来看,将个性化推荐融入对话场景中显得非常重要。
在对话交互过程中做推荐有什么不同。传统推荐很多依赖隐式反馈,比如在看今日头条、抖音等,会根据你的浏览、点击、购买等信息来判断是否对某一产品感兴趣。但是在对话交互过程中可以结合更多丰富的信息,可以获得一个显式反馈,比如去餐馆吃饭,服务员问你要吃什么,这是一个获得显式反馈的。在导购过程中的推荐有:热门推荐、相关推荐,还有主动推荐,比如提醒/催单,还有最近相关活动推荐,还有优惠券推荐。比如客户买了90片S码纸尿裤,使用S码纸尿裤的小孩的纸尿裤每天用量大,那么,我们可以在第七天或第八天对他进行纸尿裤优惠券推荐;而对于L码时,就要在30-40天之后再发起相关推荐和优惠券推送。
在对话过程中其实信息是不对称的,因此通过对话交互方式实现信息交换。比如用户并不知道商家有什么信息,商家也不知道用户有什么偏好,因此需要如何通过信息交互弥补这种不对称,促成交易。主体上采用一种Q20方式,首先给用户一个推荐,然后进行交互再推荐。比如用户想买一个手机,User: 我想买个手机,有什么推荐?, Bot: 亲,你想看什么价位的?, User: 1000以下吧, Bot: 这个价位的手机,有华为,小米,魅族,你想看哪个品牌的?, User: 小米的吧,Bot: 推荐你看看红米(Url)和红米Pro(Url)。
基本流程是开始没有任何限制,然后在没有满足终止条件前,基于限制做一个推荐,第二步,选择下一次交互的参数,需要交互什么东西,然后生成用户回复,经过语义理解发现一个新的限制,然后依据新的限制进行结合不断进行迭代。在商品类型中可以有不同类型,最简单是确定型商品,但是有不同属性,也有可能是一个组装产品,包含不同部分。还有就是反馈部分,以前GUI就是通过点赞/评分、偏好等,CUI就是依据属性咨询。在这其中有一些问题是影响转化效率的,我们如何去和用户推荐,如果交互太多,用户会反感,你为什么问我这么多问题,选择信息量最大的做推荐,可以采用静态策略和动态策略,静态策略就是对所有人先问A属性再问B属性,动态策略比如对于A不同的反馈采取不同的行为。还可以考虑个性化,如一个人每次来都买某个品牌的产品,就不需要再沟通他的品牌偏好了。
如“User: 刚出生的宝宝,有没有什么纸尿裤推荐?, Bot: 咱们家纸尿裤有好几个系列,您是要超薄的,还是超柔的?, User: 超薄和超柔有什么不同?• Bot: 超薄…,超柔…,User: 看看超薄的?, Bot: 推荐…”对话会发生返回,这种情况很普遍,这其实是多个意图的交叉或偏移,解决方案就是上图三角形是交互平台如何去维护一个场景活动,可能有很多没有结束的产品,在用户输入时判断是否是新的意图,新意图就创建新的场景,将新场景加入堆栈中,如果是老场景,判断是哪一个老意图,然后去交互,完成交互之后将对应场景从栈里拿出,这种方式支持不同意图切换。还有情况是交互过程中无法回复,这种情况是在交互过程中避免说的太过于技术语言。这种涉及到评论挖掘,抽取用户对商品的标签或描述。
很多情况是用户发起,但是有时候是需要机器人发起,如“Bot: 最近咱们家上线了一款新产品,您要不要了解一下?• User: 你们家用什么快递?• Bot: 通过天猫商城菜鸟仓随机快递发货哦。• Bot: 新款产品,了解下?• User: 好啊• Bot: balabala• User: balabala”,这种解决方案就是分为策略层和意图层。机器人依据一定策略发起对话,发起主动意图,当用户回复在主动意图里面,按主动意图脚本执行,如果用户意图不在主动意图里面,依据被动意图去交互。被动意图交互完依据一定策略继续主动意图,通过这种方式实现机器人主动发起和被动对话的结合。
最后小结一下,我们将导购机器人分为三个机器人,最简单是问答机器人——单轮情况;在此基础上实现多轮对话,多轮对话会依据一定策略转化为单轮情况;在多轮基础上实现主动对话和交互推荐。依据这三个机器人不同的三个属性(单轮、多轮、主动)实现不单单帮用户节省人工还能提升转化率的目的。
(本文首发公众号ID:datafuntalk,欢迎关注!)