当Elasticsearch碰见智能客服机器人


摘要

本次分享主要会介绍一下ES是如何帮咱们完成NLP的任务的。在作NLP相关任务的时候,ES的类似度算法并不足以支撑用户的搜索,须要使用一些与语义相关的方法进行改进。可是ES的不少特性对咱们优化搜索体验是很是有帮助的。算法

内容来源:2017年6月10日,趋势科技我的消费者部机器学习工程师杨文俊在“Elastic Meetup 南京”进行《Elasticsearch辅助的智能客服机器人》演讲分享。IT 大咖说做为独家视频合做方,经主办方和讲者审阅受权发布。
数据库

阅读字数:1605 | 4分钟阅读app

嘉宾演讲视频回放: t.cn/RQAEw96

简介-Dr.cleaner/Dr.X系列产品

咱们主要服务的项目是MAC上的APP——Dr.cleaner以及Dr.X系列产品。机器学习

Dr.cleaner在多个国家、地区的清理类MAC APP中排名第一,日活接近百万。
性能

幸福的烦恼:客服

多语言、跨时区:咱们的APP在国内可能还不是很是出名,它的目前的客户基本都在海外,其中美国是主要客户,同时也有其它国家跟地区的用户。学习

数量跟不上:随着用户数的急剧增长,客服的数量跟不上用户数的增加。
优化

解决方案:客服机器人

客服机器人首要能解决产品相关的问题,其次要能解决MAC/IOS相关的技术问题,多语言的问题须要经过翻译API翻译成英语再尝试给出解决方案。
网站

知识库的构成

任何智能客服若是没有足够的知识库支撑,即便它的算法再强大也不行。因此咱们把不少MAC相关的网站抓下来塞进咱们的数据库中。插件

各类爬虫

StackExcangeApple分论坛(公开数据源)、Apple Discussion、Mac world、WikiHow…
翻译

文档搜索

当用户问题出现的时候,咱们如何从文档知识库中找出咱们须要的东西?咱们以前尝试过直接使用ES,可是距离语义仍是太远了,效果并很差。



WMD也有明显缺点,它的算法复杂度很是高,计算速度很慢。WMD不是银弹,即便WMD以后也可能会获得一些不太好的结果。


咱们的知识库会先通过ES过滤一层。原始的知识库大概是几十万级别,若是直接用WMD计算的话速度会很是慢。ES在必定程度上保证了它的字面差得不会那么离谱,当字面比较相近的时候它仍是能匹配出一些东西。



ES具体操做


这个是最原始的mapping,咱们基于这个mapping一步步去作优化。

优化:BM25 or TFIDF

采用BM25以后,当一个词的出现频率越高,到必定的阈值以后,它的影响是很是小的。

咱们作了一个实验,修改了mapping,分别使用BM25 or TFIDF。从知识库中随机选取100个问题和10个回答,让ES进行查询,而后对比两边的结果。


咱们一共进行了10轮,每轮会有100个回答。如上图可见,两个算法的重复度大概是91%。

根据实验得出,BM25的做用仍是比较明显的,最终咱们采用了BM25去作类似度的算法。


优化:拼写检查与纠错


咱们的方案:Term Suggester + Custom Analyzer


使用Term Suggester

支持直接输入一句话:How to replace macbookk SSD?


Term Suggester自身调整

设定最小出现次数为3,修改了”string_distance”,把它改成”jarowinkler”。它默认的类似度是基于编辑距离的一些定制化,编辑距离默认会输出整数。


改进方法

增长用户行为数据的支撑。Google的算法很大一部分就是有用户行为数据支撑。

“瞻前顾后”,从咱们的角度来讲,要考虑先后两个词的关系。

优化:输入标准化


解决方案

首先使用Gensim生成备选词组,而后使用规则过滤出比较精确的候选词组。当咱们得到一个正确的词组后,能够根据候选词组生成常见的错误写法。最后再实时处理用户输入和批量处理ES存储的知识库。

规则

规则就是纯英文字符,去掉数字。主要是品牌名和版本号。

POS Tagging + 词性过滤


WHY?

WMD的计算强度比较大,若是咱们在输入词中能把一些不重要的词去掉,就能够下降WMD的计算强度。

在咱们的一些知识库中,它的表达方式不同。但重要的词换一个表达方式,可以提升准确率。

解决方案

当前咱们的解决方案用Python NLTK进行分析过滤,输出每一个词的词性,ES存储结果。

咱们更为推荐的是使用ES分析、过滤、存储一条龙解决方案,可是这种解决方案须要本身写一个ES的Pos插件。

推荐方案的优势

性能:Java实现的东西通常来讲要比纯Python的快,特别是在比较消耗CPU资源的时候。

简单:逻辑不须要在ES和Python两边同时维护。

节省空间:NLTK的模型文件也比较大,多个Docker镜像就意味着占用多个内存、磁盘。


优化:同义词

基于Word2vec的同义词

人为地定义同义词很难,咱们是基于Word2vec生成“同义词”。


查询改写方案

咱们的同义词方案是经过同义词进行查询改写。


其它一些优化

LTR:Learning to Rank

基于Machine Learning的重排序,模型按照预测的点击几率进行从新排序。



我今天的分享就到这里,谢谢你们!

相关文章
相关标签/搜索