14

智能客服新三网场景问答模型优化实践

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzI1NDc5MzIxMw%3D%3D&%3Bmid=2247491223&%3Bidx=1&%3Bsn=efb3851f4fecae892d00d976ee78b791
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

导读

帮帮智能客服是58同城自主研发的智能客服系统,新三网场景是58智能客服在房产领域垂直深耕的一个典型场景。该场景面向的是赶集网、安居客、58同城的房产经纪人用户。随着新三网使用量的增加我们对新三网场景的问答模型进行了迭代优化,为用户提供更加准确、快速、高效的服务,以节省人工客服成本,提高人效。

整体架构

帮帮智能客服整体技术架构如图-1所示,包括主体服务、ABTest服务、标注系统、知识发现系统及意图识别等模块。主体服务与接入管理模块支持配置化,快速接入场景;ABTest服务能够使我们快速对比实验模型;知识发现系统及标注系统可以丰富我们的知识库同时为模型迭代提供数据支持。

7zQR7vu.png!mobile 

图-1

核心能力

在智能客服场景,用户输入一个问题,意图识别模块会根据用户问题的真实意图给出具体的回答,当用户提问与现有知识匹配程度较高时系统会直接回复用户答案(唯一回答),若命中某些特定问题则会进入TaskBot服务。当用户提问与现有知识匹配程度不是很高时则系统会回复用户一个问题列表,让用户选择他最想问的问题(列表回答)。当用户提问与业务咨询无关时系统会判用户为闲聊,若不是闲聊则拒识回答。

QABot需要正确识别用户的真实意图,根据用户的真实意图提供相应回答,新三网线上唯一回答、列表回答、闲聊、拒识问答如-2所示:

Q73mE3q.png!mobile       zIVNRn7.png!mobile

YVbAZrn.png!mobileUFrEn27.png!mobile

图-2

自助服务:新三网场景为用户提供自助服务,可以快速处理业务问题。我们对高频问且需要人工介入的问题提供自助服务,当用户触发某些高频问时会以自助的形式为用户提供快捷服务。比如:若QABot识别为“房源违规原因”意图时会触发自助服务将用户近1周的违规帖子进行展示,用户可点击具体帖子进一步咨询。当QABot识别为“违规申诉”意图时会触发创建工单,用户填写需要申诉的信息,自动提交至人工客服审核。自助服务如下图-3所示:

InQJvyn.png!mobile bqyuYjb.png!mobile

图-3

模型迭代

QABot是基于问答知识库来实现的,问答知识库是由一系列的问题-答案对组成的数据集。我们将问题划分为标准问题和扩展问题,标准问题是对同一个语义的所有扩展问的抽象。如:"如何发布帖子","怎么样发布帖子","个人中心里是怎么发布帖子的呢?"等这些问题都表达的是同一个意思,这样我们就可以将"如何发布帖子"抽象为一个标准问,其他相似问题作为该问题的扩展问。

由于我们的问答引擎是基于知识库来实现的,所以知识库的构建就显得非常重要,那么我们是怎么构建知识库的呢?

1,首先我们会对场景历史积累的问题进行整理,经过抽象、标注形成标准问和扩展问,同时对于扩展问较少的问题使用相关技术做问题扩展。

2,然后当系统上线以后,我们会不断的对场景进行问题挖掘,再经过标注整理来不断的扩充知识库。

有了问答知识库以后我们就可以来构建我们的问答引擎。我们的QABot是使用知识库匹配+模型预测的方式来实现的。知识库匹配是对用户输入的问题做关键词匹配,如:包含所有关键词、包含某一部分关键词等;模型预测是将问答过程抽象为一个多分类问题,每一个知识库问题作为一个类别,当用户输入问题以后使用机器学习模型来对用户输入的问题做分类预测。流程如图-4所示。

r2aeQr6.png!mobile 

图-4

为了提升智能客服的问答效果,我们需要对QABot分类模型进行优化迭代。

4.1 FastText

为了快速实验问答效果,我们首先选择了使用FastText上线一个baseline模型。

FastText是Facebook在2016年推出的一款轻量级的文本分类与向量化工具。FastText包含以下几个部分:模型结构、层次softmax、N-gram特征

层次softmax:FastText使用哈夫曼树对label和频次编码,频次越高越靠近根节点,从而能够快速的检索到高频label,提高效率。

N-gram特征:由于传统的词袋模型没有考虑词与词之间的关系且对于低频词及未登录词处理不好所以FastText引入了基于字符级的N-gram特征。如:“如何发布帖子”当使用3-gram特征时(为了表示文本边界,在原始文本前后分别添加<和>字符)可表示为以下词的集合 {<如何 如何发 何发布 发布信 布信息 信息>},原始文本的句向量由以上集合的和来表示,从而达到区分与顺序相关的文本。模型结构如图-5:

r2UrIzF.png!mobile

图-5

FastText参数:dim=256,wordNgrams=3,bucket=300000,lr=1e-3,minCount=1,

minCountLabel=1,epoch=200。经过以上的迭代,新三网场景的准确率达到 81.45%,召回率为95.34%,F1值为0.8785。

由于FastText属于浅层神经网路模型,模型的描述能力有限,不具备较好的问题拟合能力,FastText模型效果不太理想,为了使模型的拟合能力更强,我们引入了TextCNN模型。

4.2 TextCNN

TextCNN是Yoom Kim在2014年针对CNN做了一些变形之后提出的文本分类模型。TextCNN在网络结构上与CNN相同,网络架构如图-6所示:

quiaYvV.png!mobile 

图-6

从它的架构图可以看出TextCNN 由卷积层接池化层最后再接softmax层来做分类。

与图像当中的CNN网络相比,TextCNN的输入数据有所不同:图像是二维数据,卷积操作是从左到右、从上到下进行特征提取 ,而在文本处理中需要捕捉的是词与词之间的关系所以卷积操作只能上下滑动来提取特征,左右滑动没有意义。

TextCNN模型结构由以下几个部分组成:输入层、卷积层、池化层、全连接层。

输入层:我们使用word2vec训练256维的词向量,然后将该词向量输入到TextCNN。

卷积层:我们使用[2,3,3,4,3]各64个filter对embedding做卷积操作

池化层:对卷积层的输出做一次ReLU激活,然后使用 max pooling做池化操作

全连接层:全连接层是一个正常的softmax,将池化后的向量输入到softmax层,最终输出意图分类。

TextCNN参数:embedding维度=256,batch=128,epoch=80,学习率=1e-4,filter=[2,3,3,4,3],滤波器个数=64,文本长度=80。使用TextCNN后我们的准确率提升到了 90.13%,召回率降到了 92.89%,F1值提升到了0.9149。

TextCNN由于filter大小的限制,所以只能提取固定长度的文本信息,无法捕捉更长的序列信息,而文本处理中往往需要处理长依赖关系才能够更加准确的理解文本的真实意思。而RNN模型天生就是用来处理长序列依赖的问题,它能够更好的拟合文本信息,从而我们在新三网场景引入了RNN序列模型。

4.3 LSTM

RNN是一个循环循环神经网络,它的特点是在每个时序的迭代中都会将前一个时序的信息链接到当前时序,RNN展开图-7如下所示:

zyuQFvQ.png!mobile

图-7

RNN由于反馈环路的原因当序列较长时,在训练过程中模型梯度会很快发散到无穷大或者减少到0(梯度爆炸和梯度消失),在这两种情况下模型将停止学习任何有用的东西。LSTM正是为了解决RNN的这些不足而被设计出的,LSTM使用门控单元来控制在长期依赖的过程中哪些信息需要往后传递而哪些信息需要被丢弃。LSTM详细结构如下图-8:

ri2yaie.png!mobile

图-8

LSTM主要由 遗忘门、记忆门、输出门以及细胞状态构成。

细胞状态:细胞状态就像一个传送带一样在整个时序之间传递,各门控单元控制着与细胞状态的信息交互,上图中的C即为细胞状态。

遗忘门:遗忘门是用来决定哪些信息是需要被丢弃的。遗忘门首先获取到t-1时刻传递的信息和t时刻的输入信息,然后经过一个sigmoid函数输出0到1之间的数值来决定t-1时序的隐藏状态哪些需要被丢弃,哪些需要继续传递。0代表完全丢弃,1代表完全保留。如图-9红色框部分所示:

jUnqmeE.png!mobile

图-9

记忆门:记忆门是用来决定哪些信息需要被继续往后传递的。记忆门首先同样需要读取t-1时刻的信息和t时刻的输入信息,然后有两步操作:1,通过一个sigmoid函数来决定哪些信息需要被保留,2,将t-1时刻的信息和t时刻的输入信息做tanh转换。然后将这两部分的输出相乘作为需要保留的信息,增加到C向量中,继续往后传递。如图-10红色部分所示:

nEbuqe3.png!mobile

图-10

输出门:输出门是用来决定需要输出的信息。同样首先需要一个sigmoid函数来决定哪些信息需要被输出,然后将细胞状态C经过tanh转换然后与sigmoid结果相乘及为输出。同时C作为在整个序列中的状态继续往后传递,如图-11红色部分所示:

Inuu2ye.png!mobile

图-11

我们使用了堆叠两层的双向LSTM,即将第一层Bi-LSTM的输出作为第二层Bi-LSTM的输入来对新三网问题建模,模型架构如下图-12所示,h’和h’’为第一层Bi-LSTM正向及反向隐状态向量,h为将h’和h‘’进行拼接后的隐向量;s’和s\'\'为第二层Bi-LSTM的正向及反向隐状态向量,s为将s’和s’’进行拼接后的隐向量。

32YbYbV.png!mobile

图-12

Bi-LSTM模型参数:hidden_layers为64,rnn_dim为128,文本最大长度为80,learning_rate设置为1e-4,batch_size为128,经过60次迭代模型收敛。准确率达到93.94%,召回率92.51%,F1值为0.9322。

以上我们均使用单一模型来对问题建模,使用阈值来控制回答类型(唯一回答、模糊回答、拒识),但是想要同时提高唯一回答、列表回答、拒识指标单纯通过调整阈值是比较难的,因为当我们的阈值倾向于提高某一类回答的准确率时势必会造成相邻回答的召回率的提高从而影响相邻回答的准确率,我们希望有一个模型来指导我们对于用户提出的问题可以直接给出回答类型,所以我们使用了模型融合的策略。

4.4 模型融合

我们使用Bi-LSTM对回答类型建模,假设为A模型,同时使用另一个Bi-LSTM对用户意图建模,假设为B模型,最终融合两个模型的结果来达到对用户真实意图的理解。

那么是如何进行A模型和B模型的融合的呢?我们将A模型对于回答类型的预测按照阈值划分为强、中、弱三挡,同样B模型也按照阈值划分为强、中、弱三挡。若A模型对于某个问题给出的是强拒识的话,除非B模型的预测分值特别高否则我们就认为这个问题应该是给拒识回答。同理唯一回答、列表回答也是同样的处理逻辑,模型架构图 -13如下:

jqeIVbR.png!mobile 

图-13

使用融合模型后我们的准确率提升至 94.89%,召回率提升至 93.33%,F1值提升至0.9410。

经过以上模型迭代,问答指标变化如图-14所示:

NZfUFvZ.png!mobile 

图-14

总结及展望

本文主要介绍并总结了新三网场景QABot的模型迭代历程,目前新三网场景的准确率、召回率均平稳保持在95%左右,后续我们将持续优化问答模型,引入预训练模型如bert等拟合能力更强的模型同时也会优化我们的知识库以继续提高我们的问答能力。对于自助服务我们也会接入更多的高频问题为用户提供更加便捷、快速的服务。

参考资料:

1. Armand Joulin Edouard Grave Piotr Bojanowski Tomas Mikolov .  Bag of Tricks for Efficient Text Classification.2016

2.  https://github.com/facebookresearch/fastText

3. Y oon Kim. Convolutional Neural Networks for Sentence Classification.2014

4.  http://colah.github.io/posts/2015-08-Understanding-LSTMs/

部门简介:

58同城TEG技术工程平台群AI Lab,旨在推动AI技术在58同城的落地,打造AI中台能力,以提高前台业务人效和用户体验。AI Lab目前负责的产品包括:智能客服、语音机器人、智能写稿、智能语音分析平台、智能营销系统、AI算法平台、语音识别等,未来将持续加速创新,拓展AI应用。

部门详细介绍可点击: ailab.58.com。

作者简介:

作者:张新朋 ,58同城AI Lab资深算法工程师,2018年8月加入58同城,目前负责智能客服算法相关工作。

推荐阅读:

分布式一致性在58招聘的实践

深度学习在58租房搜索排序的应用

58安居客二手房 API Gateway Sidecar 实践

福利环节

为了鼓励优质内容传播,【58技术】公众号近期会持续推出不定期活动奖励。

  1. 评论区发表话题#你希望的智能客服#

  2. 将抽取三个优质评论,可获得定制版新年代码台历

  3. 活动时间:截至2021年1月31日

Fbie2eu.jpg!mobile

Nb2iMvQ.jpg!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK