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

简介-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的重排序,模型按照预测的点击概率进行重新排序。

原文链接:https://cloud.tencent.com/developer/article/1083908

基于Elasticsearch的智能客服机器人的更多相关文章

  1. 瓜子IM智能客服系统的数据架构设计(整理自现场演讲)

    本文由ITPub根据封宇在[第十届中国系统架构师大会(SACC2018)]现场演讲内容整理而成. 1.引言 瓜子业务重线下,用户网上看车.预约到店.成交等许多环节都发生在线下.瓜子IM智能客服系统的目 ...

  2. AI人工客服开发 小程序智能客服 智能客服微信小程序 智能客服系统怎么做 如何设计智能客服系统

    今天我们就来给大家分享下如何做 小程序的智能客服问答系统. 首先请确保你的小程序在线客服已经开通使用,并使用代码自己对接好了,将客户的提问自动做了拦截,拦截到了你自己开发的接口上. 做好了拦截以后,我 ...

  3. Python模拟简易版淘宝客服机器人

    对于用Python制作一个简易版的淘宝客服机器人,大概思路是:首先从数据库中用sql语句获取相关数据信息并将其封装成函数,然后定义机器问答的主体函数,对于问题的识别可以利用正则表达式来进行分析,结合现 ...

  4. 【Google Cloud技术咨询】「Contact Center AI」引领我们走向高度智能客服的时代

    前提背景 我们距离"不再智障"的智能客服还有多远?对于智能客服,用户一直都是"批评多于褒奖",究其原因是在于人们对于AI客服的期待很高,而AI客服在实际应用中的 ...

  5. 关于ajax在微信智能客服管理端的使用

    ajax的语法样例: $.ajax({ 'url':url, 'type':'GET', 'dataType':'json', 'data':data, success:function (data) ...

  6. 智能客服 对话实现--python aiml包

    利用了python的aiml包进行应答 什么是AIML? AIML是Richard Wallace开发的. 他开发了一个叫A.L.I.C.E(Artificial Linguistics Intern ...

  7. 智能客服 利用python运行java代码

    因为需要在linux中用python来进行分析,顾需要利用python来运行java中语音转文字和文字转语音代码 在python中运行java代码需要利用jpype

  8. iOS:移动端“用户反馈和客服”的几个平台SDK的介绍

    简单阐述: 用户反馈功能几乎是每个app都有的一个功能点,通过反馈功能实现与用户的连接.沟通,随时随地收集用户意见反馈和Bug报告,即时和用户保持沟通,在一定程度上提升了app的竞争力.而给app评分 ...

  9. 基于jquery打造的网页右侧自动收缩浮动在线客服代码

    基于jquery打造的网页右侧自动收缩浮动在线QQ客服代码, 当前比较流行的一款QQ在线jquery特效代码, 代码中还带有IE6下PNG图片透明的特效,如果想研究IE6下PNG透明的同学也可以下载研 ...

随机推荐

  1. 2019-03-18-day013-装饰器与内置函数

    上周回顾 函数: def 函数名(): 缩进 函数体 闭包: a = 50 def func(): a = 10 def avg(): print(a) 函数名的使用: 当做值被赋值给变量 当做返回值 ...

  2. 配置MAVEN环境变量

    在配置maven前一定要先配置java jdk 的环境变量 和java配置一样 先写一个MAVEN_HOME:F:\java\apache-maven-3.5.2 (就是你maven 的下载位置) 写 ...

  3. Java学习笔记9(面象对象9:多态)

    多态概述 多态是继封装.继承后,面对对象的第三大特性. 现实事物经常会出现多态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描述一 ...

  4. SQL语句报错,无法绑定由多个部分组成的标识符解决

    无法绑定由多个部分组成的标识符, 表示在查询的时候使用了别名,并且查询的多个表中存在相同的字段,如果在使用该字段时不明确该字段的来源就会报这个错误. 举例: 我们有两张表,B1,B2,他们有一个共同的 ...

  5. 对于java自定义的工具类的提炼 注意事项

    1.工具类的方法都用static修饰. 因为工具类一般不创建对象,直接类名.方法()使用 2.一些 定义的常亮需要 public static final 修饰. 3.一些与数据库的连接之类的设定 , ...

  6. 启动apache 找不到 mbstring.dll

    启动appserv时 提示 无法启动此程序 因为计算机中丢失php mbstring.dll   这种原因一般都是组件加载顺序引起的,在php.ini文件里确保 extension=php_mbstr ...

  7. 初识 数据库及Oracle数据库

    一.数据库基本概念二.数据库举例三.Oracle特点四.Oracle版本五.安装Oracle注意事项六.SQL简介七.Select语句 一.数据库基本概念 数据库(Database,DB)数据库管理系 ...

  8. 对ajax中数据的得到以及绑定的认识

    1.将后台得到的数据绑定到datagrid为例: 第一种是: 后台得到的数据直接绑定到datagrid上面,如下图: 这样操作的好处在于可以使界面比较简洁. 第二种是将得到的数据作为参数的形式绑定到d ...

  9. python使用traceback获取详细的异常信息

    原创来自:https://blog.csdn.net/mengtao0609/article/details/55049059 python使用traceback获取详细的异常信息 2017年02月1 ...

  10. ss server端配置

    关于ss server的配置,可以参考一个网址 关于服务器的购买可以上VIRMACH购买 和本地安装ss类似,首先安装ss,pip install shadowsocks 配置服务器参数,vim /e ...