摘要:综合使用微信公众平台的多客服接口和Lucene全文索引框架构建了基于微信平台的客服应答系统。首先利用Lucene的索引接口生成企业知识库的索引;然后使用语言云服务对微信客户的查询信息进行分词、词性标注、关键词提取及关键词扩展;最后,将关键词与知识库索引中的字段进行匹配,匹配成功则返回给微信客户,匹配不成功则转接到人工客服接口。
关键词:应答系统;微信客服;Lucene搜索
引言
传统的客服应答系统主要通过电话语音来实现,当用户来电接入时系统为用户提供各种操作的语音提示,并根据用户的操作来执行相应的命令。随着微信应用的普及,越来越多的企业开始利用微信与客户进行信息沟通。相对语音自动应答系统,企业利用微信公众平台不仅可以降低通信成本,而且可以向用户发送包括文字、图片、视频、语音等多种形式的信息。目前大多数企业利用微信公众平台所提供的关键词自动回复和人工回复两种方式为用户提供应答服务。人工回复很难保证客服人员24小时不间断的提供高效率服务。关键词自动回复功能虽然能够在一定程度上减轻客服人员的压力,但无法无法满足用户提出的复杂信息需求。
本文采用Lucene搜索引擎框架及微信公众平台多客服接口来构建客服应答系统,具体实现路线见图1所示。首先通过Lucene搜索引擎框架构建企业知识索引库;接收微信用户的文本和语音查询时,利用语义分析技术找出问句中的关键词并利用《同义词词林》对是关键词进行同义词扩展,然后再利用Lucene搜索技术在知识索引库中进行信息匹配,对于匹配成功的查询信息,利用微信消息接口封装,以文本或语音的形式反馈给用户;对于没有匹配成功的查询信息,调用微信多客服接口转接入人工客服界面。
1、知识库的构建
客服问答系统需要先建立企业自身的知识库,知识库中存放了问题、答案和类别信息。由于用户一般采用自然语言提问,同一种语义的问句可能会有多种形式,因此,本文将问题和答案分别存储在Question表和Answer表,其中
Question表的结构:Question(questionId,title,answer)
Answer表的结构为:Answer(answerId,content,postDate);
定义answerId为两个表的外键,构成一对多的关系模式,满足多个问句对应一个答案的情况。为了提高数据查询的效率,采用Lucene全文索引框架对Question表中的数据进行增量索引,索引库的结构如表1所示,其中Question表示问题描述、Answer表示答案内容,设置对Question字段和Answer字段进行分词并将词汇向量存储在在索引库中这将有利于在后续进行问题相似度计算和答案抽取的相关工作。
2、微信消息处理
在申请微信公众平台的开发者模式时将企业Web服务器的url地址注册到微信平台中,当微信用户向企业微信公众号发送一条查询信息后,微信服务器将该条信息封装成XML数据格式发送到企业Web服务器;企业Web服务器根据接收到的消息类型进行有响应,若是文本信息则调用Lucene全文检索接口去知识索引库中进行搜索,若接收到的是语音信息,则根据接收消息中的Recognition字段进行语音到文本信息的转换。微信公众平台中的消息处理流程见图2所示。
微信服务器起到连接微信客服端和企业服务器的中转和桥梁作用。微信服务器发送给企业服务器的XML消息格式如下,其中fromUserName字段表示消息发送者的openID,这里的openID是用户在关注微信公众号时的唯一标识;MsgType表明了用户发送的消息类型,微信服务器提供了六种类型的消息,分是:文本(text)、语音(voice)、视频(vedio)、位置(location)、图片(image)和链接(link)。
企业客服应答系统主要处理文本(text)和语音(voice)两种类型的消息;在微信公众平台中开启语音识别功能后,微信服务器在转发用户的语音信息时都会增加一个Recongnition字段,该字段中包含了语言识别的文本。企业客服应答系统根据xml消息包中的MsgType值是否为text或voice进行处理,将voice类型的语音信息转换为文本信息后,提交给答案搜索模块进行处理。
3、答案搜索处理
在接收到文本消息后首先要进行文本的分词和词性的标注,然后根据标注的词性提取出句子的实词作为该语句的特征关键词;这里的分词和词性标注均采用哈工大的语言云服务(LTP-Cloud),例如对于问句“你们公司有多少员工?”,采用Get请求调用分词和词性标注服务的URL地址为:http://api.ltp-cloud/analysis/?api_key=your_api_key&text=你们公司有多少员工?&pattern=pos&format=xml。
其中api_key是语言云分配给开发者的调用密钥,pattern表示访问类型,具体值包括:分词(ws)、词性标注(pos)、命名实体(ner)、句法分析(dp)、语义分析(sdp)和语义角色标注(srl);本文获取问句的词性标注,因此设置pattern=pos;format=xml表示返回的数据为xml格式;该语句的返回结果见图3所示。
鉴于用户提问的问句中主谓宾代表了句子的主要含义,利用Java的Dom4J开发包可以从返回数据中提取出核心的关键词。在
中文的同义词往往造成同一个问句的多种表示形式,例如(a)“你们公司总共有多少台电脑?”和(b)“你们公司共计多少台计算机?”这两个问句的含义完全相同,但是核心关键词却不完全一致,实质上a句中的关键词电脑和b句中的关键词计算机是同义词,可以相互替换。本文采用哈工大信息检索研究室的《同义词词林扩展版》词典对查询关键词进行扩展,该词典共包含77,343条词语,按照树状层次结构分为五层,每层设置编码。其中第一层用大写英文字母表示;第二层用小写英文字母表示;第三层用二位十进制整数表示;第四层用大写英文字母表示;第五层用二位十进制整数表示。符号“=”表示节点的词汇同义或相等,而符号“#”表示节点的词汇相关但不相同。例如:
Cb30A01=这里这边此地此间此处此;
Cb30A02#该地该镇该乡该站该区该市该村;
根据田久乐和赵蔚提出的义项相似度计算方法及词语相似度计算方法公式:若两个义项A和B,若两义项不在同一棵树上则,sim(A,B)=e,若在同一颗树的不同层次上时,相似度的计算公式为:
其中n代表分支层的节点数,k代表两个分支的距离;若义项在第二层分支上,则m=0.65,若在第三层分支上则m=0.8,若在第四层分支上m=0.9,若在第五层分支上m=0.96。利用该公式可以从同义词词林中获取查询关键词的同义词,构造基于Lucene的查询关键词组合,并利用该查询组合在知识库索引中查询Question。如果匹配到合适的Question字段则提取出Answer字段的值并微信平台规定的XML格式封装成并返回给微信客户端。如果匹配失败,没有找到合适的Question字段,则转而调用微信的人工客服接口。
4、人工客服调用
经过认证的微信公众平台支持多客服管理,在开通后需要事先手工添加企业客服人员的个人账户,见图4所示。
在使用Lucene框架没有匹配到合适的Question字段时,可以转接到人工客服模块进行处理。在此,企业服务器需要发送一个MsgType值为transfer_customer_service的消息给微信服务器,微信服务器在收到该消息时会将消息转发到人工客服系统,自动分配给某个空闲的客服。企业服务器发送的消息格式如下所示。
在客服关闭本次会话之前,用户发送的消息均会被直接转发至客服系统。当本次会话超过两个小时后或者客服主动关闭本次会话,那么用户发送的消息会再次发送至企业服务器中交由Lucene索引框架进行处理,如此将基于Lucene的全文搜索和人工客服管理有效结合在一次。
5、结束语
本文分析了如何利用Lucene全文索引框架构建基于微信公众平台的客户应答系统,综合运用了微信公众平台的消息处理接口和Lucene的索引和搜索接口。在抽取答案时,使用了哈工大语言云(LTP)的词性标注服务和同义词林进行核心关键词的提取和扩展,提高了答案抽取的正确性。
参考文献:
[1]石凯,谌志群.基于微信的自动问答系统研究[J].计算机时代.2014(09):10
[2]田久乐,赵蔚.基于同义词词林的词语相似度计算方法[J].吉林大学学报.2010(06):605
[3]宋万鹏.短文本相似度计算在用户交互式问答系统中的应用[D].中国科学技术大学.2010:21-26
[4]王恒.中文问答系统的研究与实现[D].哈尔滨工业大学.2008:23-25
作者简介:
唐勇,硕士,讲师,现就职于常州纺织服装职业技术学院,研究方向为电子商务、信息系统;