2019.02.22 丨 58架构师
58智能客服QABot问答机器人算法实践
2019.02.22 丨 58架构师
背景
58同城作为中国领先的生活服务平台,B端用户可以在平台上发布招聘、房产、二手车、黄页等信息,C端用户可以通过平台找工作、买房、租房、买车,寻求本地服务等。每天都会有大量用户找客服帮忙解决问题。58传统客服系统过度依赖人力模式,存在用户操作繁琐、问题解决周期长、企业成本开销大等缺点,由此我们构建了一套结合机器自动问答和人工在线客服系统的智能客服系统,大大提高了客服人效和用户体验。58智能客服包括QABot业务咨询问答、TaskBot任务多轮对话、ChatBot闲聊三种能力,本文主要介绍QABot问答机器人的算法演变。
QABot问答流程
在智能客服场景,当用户提问一个业务相关问题,系统会用问答知识库中的知识进行匹配,当用户提问问题很明确并与知识库某条知识匹配程度很高时,系统会直接回复用户答案(唯一回答),若唯一回答的类别属于服务寻求类会直接进入TaskBot服务。当用户提问问题比较模糊时(与知识库某几条知识相匹配且匹配程度接近),系统会回复用户一个问题列表,让用户选择他最想问的问题(列表回答)。当用户提问问题与业务咨询无关时,系统判断用户是否闲聊,若不是闲聊则拒绝回答,问答流程如下图所示:
问答知识库构建
要实现基于QABot的问答,首要任务是构建知识库,目前业界构建知识库的方法主要有三种:直接利用编辑知识、利用大众智慧、自动或半自动知识抽取。58智能客服QABot问答主要面向业务咨询问题,构建知识库分为三步:
第一步在构建知识库初期我们主要利用编辑知识来构建知识库。客服团队归纳总结58现有的业务问题和用户常问业务问题形成标准问题后,开发人员开发程序对About数据库(存放用户在58旧客服系统中历史提问问题)中数据进行清洗、过滤出与标准问题相关的问题并让编辑团队标注作为标准问题的扩展问题。当积累了一定数据量后,开发人员会训练一些粗糙的分类、聚类模型不断清洗过滤About数据库,从中提取有意义的数据让编辑团队标注,不断积累数据作为候选数据集,编辑团队后续会对候选数据集进行审核去掉二义性、联想性问题,最终入知识库,整个流程如下图所示:
第二步QABot服务上线后为了不断扩充知识库,我们会从用户与智能客服的历史问答日志中随机抽取出一部分问答数据交给编辑团队,人工标注上已有的标准问题或新标准问题等标签,对于用户大量提问且不属于已有标准问题的问题,编辑团队会进行归纳总结成新的标准问题入知识库,对于属于已有的标准问题的不同问法,会把它作为对应标准问题的扩展问题入知识库和运营。
第三步我们实现了一个半自动化挖掘新问题扩展知识库的流程,如下图所示:
首先利用第一二步已有的标准问题、扩展问题、新标准问题等编辑标注数据,经过分词、去停用词,训练一个TextCNN新标准问题分类器和Word2Vec浅层神经网络。其次从线上问答日志中抽取出用户提问问题经过TextCNN新问题分类模型筛选出新标准问题,经过提前训练好的Word2Vec获取句向量,并用Kmeans聚类的方法对新标准问题进行聚类,将语义相同新标准问题聚为一类。最后将聚类结果交给编辑团队去审核,最终由编辑团队归纳总结出新的标准问题和对应的扩展问题并入知识库。
特征构建
构建完问答知识库后我们需要构建模型来识别用户提问问题属于知识库中哪类标准问题,而在训练模型时需要构建训练数据和测试数据,我们选取知识库中的标准问题、扩展问题和编辑历史上标注的问题划分训练数据、验证数据、测试数据。目前58智能客服场景以纯文本问答为主,因此只对样本提取了文本特征,我们在构建文本特征时进行了四次迭代。如下图所示:
第一次迭代:项目早期,为了支持模型快速上线直接对用户提问问题分字生成问题的字特征。
第二次迭代:在汉语中词能比字表达更多的含义,并且如助词(是,的等)、代词(我,你等)之类在58智能客服业务咨询场景表达意义不大,由此对用户提问问题进行分词、停用词过滤、词性过滤(去掉代词、助词、语气词等)生成问题的分词特征。
第三次迭代:考虑到用户提问的业务问题中有些词是用户重点突出的,有些词无关紧要,如用户提问“我用58APP时怎么查看精准推广消费明细啊?”,此句中用户重点强调“查看”、“精准推广”、“消费明细”。由此我们让编辑对标准问题、扩展问题进行关键词标注,同时对用户提问问题进行非关键词分字,关键词直接带入,最终生成关键词+字特征。
第四次迭代:虽然由第三次迭代对比第二次迭代模型效果有一定提升,但用关键词+字特征存在一个问题,训练模型时可以用关键词特征,但线上预测时由于取不到关键词,只能用字特征,线上线下特征处理不一致,另外关键词的标注也加重了编辑的工作量,由此结合考虑第二、三次特征迭代的优缺点我们对用户提问问题进行分词、停用词过滤、特定词性符号替换(地名、助词等),这样能够尽量减少信息的丢失同时降低意义不大的词带来的冗余和负面影响。
模型迭代
特征构建完成后为了赋予智能客服QABot问答能力,目前为止我们主要进行了三版模型迭代。首先回顾下智能客服QABot问答流程: 用户在智能客服提问问题后,系统需要匹配问答知识库,从中找出一个在语义上最相近的标准问题并回复用户对应答案(唯一回答),若唯一回答的类别属于服务寻求类会进入TaskBot服务流程,若同时找出几个跟用户所问问题匹配度都很高的标准问题时会把这几个问题按照匹配度拼成列表回复给用户,由用户点击选择他想问的问题(列表回答)。若用户所问问题与任何标准问题语义匹配度都不高时系统会判断用户是否闲聊,若不闲聊则拒绝回答。
根据上述QABot回答流程可以把它抽象成一个多分类问题,每个标准问题作为一个类别,当用户提问问题后,对这个问题直接进行分类。在项目早期为了快速支持上线,我们进行了第一次模型迭代,通过抽取标注为唯一回答的数据训练FastText模型对用户提问问题进行多分类,FastText是Facebook 2016年开源的一个词向量与文本分类工具,提供简单而高效的文本分类和表征学习的方法,目前被广泛用在带监督的文本分类问题,它有很多优点,比如使用词袋和N-Gram表征语句、使用子字信息(Subword)丰富词汇量、通过隐藏表征在类别间共享信息、可以采用Softmax层级加速运算等。下图给出了第一版基于赫夫曼softmax的层级FastText分类的QABot问答:
当用户提问问题后,经过FastText分类器分类,选取得分最高的3个类别,并设最高得分为s,设置两个阈值a,b(a > b),约定当s>=a时系统会进行唯一回答,当b<=s<a时系统会进行列表回答,将得分最高的3个类别对应的标准问题回复给用户,当s<b时系统会拒绝回答。
第一版模型迭代时,只用了FastText直接进行多分类,根据阈值问答,这种问答模式结构存在许多问题。一是FastText没有隐藏层属于浅层神经网络深层,不如深层神经网络的表达能力强。二是训练数据仅用编辑标注为唯一回答数据训练,缺乏标注为拒识、新分类、列表回答等数据,训练数据分布跟线上真实数据分布不符,训练出来的模型泛化能力不强。三是单模型的拟合能力不如多模型融合拟合能力强。基于以上三点我们进行第二版模型迭代。具体模型结构如下图所示:
我们采用两级模型结构,首先分别训练一个Bi-LSTM二分类模型,用来识别是否应该回答用户,一个FastText多分类模型用来识别用户提问问题属于哪个标准问题。上图左右两边的FastText属于同一个模型。当用户提问问题后,会根据Bi-LSTM拒识模型去判断是否应该拒绝回答用户,若是会进入上图右边的倾向拒识问答模块,当FastText模型Top1类别打分特别高时才会唯一回答,打分很高时会进行列表回答,否则直接拒绝回答。同理当Bi-LSTM拒识模型判断不应该拒绝回答用户时会进入上图左边不倾向拒识模块,当FastText模型Top1类别打分比较高时会唯一回答,打分不算低时会进行列表回答,否则直接拒绝回答。上图中的各种分值参数都是经过评价指标指导得出的。上图模型结构没有直接用Bi-LSTM拒识模型直接做拒识回答(不进入上图右边的FastText分支而是直接拒绝回答)的原因是线上问答数据中,真实应该拒绝回答的数据约占20%,远远大于各个分类的数据,由此训练出来的Bi-LSTM会倾向拒绝回答,若Bi-LSTM判断为拒绝回答系统直接拒绝回答的话,会造成一定量的不应拒绝回答的问题被直接拒绝回答,最终导致系统有结果率偏低。
第二版模型迭代中虽然用上了Bi-LSTM拒识模型与FastText问答模型的融合,但仍存在许多问题。一是还没从根本解决FastText浅层神经网络表达能力不强的问题,二是随着58智能客服系统能力的扩展,需要给用户提供诸如找房子/车之类的服务和闲聊类问答服务。由此我们进行了第三版模型迭代,针对第一个问题,训练了Bi-LSTM+DSSM深度语义匹配模型替换FastText来增加问答模型的表达能力。针对第二个问题,训练了Bi-LSTM意图识别模型用来识别用户问答的真实意图,用以判断用户是来进行具体某大类下的业务咨询或寻求服务或闲聊。模型结构如下图所示。
当用户提问问题后,意图识别模块会识别用户的真实意图并对其打上分值:用户是想询问某一大类问题(如信息类)、寻求服务(如租房)、列表回答(用户有多个业务咨询意图)、拒识(用户可能闲聊或用户在问目前知识库不包含问题)。之后深度语义匹配模型会对用户问题进行多分类,这里同样取出Top3标准问题分类。当Top1意图分值>=阈值a直接按照该意图进行回答(拒绝回答/唯一回答/列表回答),答案由深度匹配语义模型给出。当阈值a<Top1意图分值<=阈值b时系统倾向于回答该意图,在深度匹配语义模型中设置阈值进行回答时会偏向该意图。当top1意图分值>阈值b时系统会不倾向回答该意图,在深度匹配语义模型中设置阈值进行回答时会尽量不按照该意图回答。深度匹配语义模型中设置阈值进行回答逻辑类似第一版模型迭代逻辑。
评价方法
58智能客服系统QABot问答评价指标主要有两个:回答准确率和机器智能解决率(节省客服人力)。回答准确率为智能客服回答正确问题数与智能客服回答问题数的比值,机器智能解决率为智能客服回答且没有转人工的用户中,24小时内未再使用智能客服的用户占比。QABot问答机器人优化原则是不断提高回答准确率和机器智能解决率。
总结及展望
本文主要从问答知识库构建、特征构建、模型迭代、评价方法四个方面介绍58智能客服基于QABot的业务咨询问答服务背后的算法原理及实现。目前智能客服QABot问答机器人回答准确率达92%,机器智能解决率达86%,折合节省客服人力 300~500人。我们将持续优化问答算法,如引入上下文特征、构建知识图谱、实践Bert等新模型,从而不断提高效果。
作者:王勇
文章来源:58架构师微信公众号
文章原址:58智能客服QABot问答机器人算法实践