如何开发一个特定领域的自动问答机器人(Chat Bot)?

论坛 期权论坛 期权     
nonesuccess   2018-10-15 22:38   12876   5
想做个练手项目,顺便跟现在的业务方向结合一下。
比如想做一个教学类的自动问答AI,可以代替老师做80%的日常答疑。在一定的基础算法基础上,每位用户可以设定自己的问题集。
会编程,AI零基础,想问一下这个任务应该怎样分解,需要哪些方面的知识才能做出来
分享到 :
0 人收藏

5 个回复

正序浏览
5#
刘刚  4级常客 | 2018-10-15 22:38:48 发帖IP地址来自
和你有同样的想法,想做校园生活智能问答机器人。我觉得最难的是领域知识构建,重点是收集这些训练集,算法和开源工具选择的话,都不是难事。
4#
匿名用户   | 2018-10-15 22:38:46 发帖IP地址来自
提示: 作者被禁止或删除 内容自动屏蔽
3#
kevin  7级小牛 | 2018-10-15 22:38:45 发帖IP地址来自
[h1]客服系统机器人产品设计详解|智能回答[/h1]原创 2017-10-20 KEVIN Kevin改变世界的点滴


关于客服系统中的机器人
客服系统的兴起是基于满足降低公司人力成本、维护精力的需求,一套客服系统的产品设计,上次有分享过史上最详细的客服系统产品落地|后台产品经理的工作实例,有那么苦吗?,但除了工单管理、客户管理、以及客服系统的BI,其实最为困难的就是如何提升客服系统的使用效率。


就客服系统的使用效率,其根本就是是否能够为企业降低人工服务的次数、仍共服务的时间占比,甚至是提升公司的营业业绩。在这里面,我落地的客服系统其占比最终的还是机器人回答。





【机器人问答的产品设计】


但机器人回答的发展期间,机器人的回答方式也在如今也是基于关键词匹配与大数据结合的情况下发展的。





【APP端机器人客服】





【WEB端客服】


产品落地中,调研到目前国内的方法在中文分词中,现在有三大分词算法


第一类叫做基于字符串匹配的分词方法



第二类基于理解的分词方法


第三类基于统计的分词方法


相对于早起的纯关键字匹配,现在国内的机器人也是基于NLP(自然语言处理技术也逐渐在兴起),作为PM的我们,到底要如何去落地机器人问答系统?我谈谈我的案例分享




01知识库的建立


如果说从0-1做客服系统,那么机器人的模块从一开始规划中最为重要的就是建立知识库,这个知识库的重要性在于以后的模型建立。


那么问题来了,什么是模型?







【对话模型】


日常生活中,我们所知道的模型就相当于是一个模具,一个模具的可以作为一点,其制作更多产品,把模型做的越好、越精确,在量产中就会得到更准确的结果。


更加精准、更加快速


那么对话模型,就是我们这里提的一个模型。在不同行业中,我们可以知道起用户发文的内容范围、回答的范围是不同的。


那么如何训练模型,简单来说就是通过对话找到问题的答案,答案的问题





【问题与答案的训练】





【答案与问题的训练】


这里提一个关键词:语料




预料你可以理解问一些词库,不过这个词库不同的是他会包含更多测试词语、句子、符号等数据,而词库则是我们知识库中最为关键的一个匹配词库。


既然要考虑模型和语料,我们首先要考虑公司的业务是什么?这就是所谓的特定领域,再到全局领域


目前这些语料都有网上的一些公开的包,PM可以去下载了解下是否符合公司的业务。通过这些语料包,可以去知道语气词、标点符号、违规敏感等


这里从特地领域的语料,简单举个列子在金融证券行业,最为关键的语料就是:公司产品名称、股票名称、公司名称、常用服务名称


这些都算语料里面的词库,在一个公司建立知识库中,我是按下图进行分类组合









既然上面的逻辑关系清楚了,我们可以清楚知识库是起着机器人回答的一个重要部分







【网易7鱼】


从上面的图可以看到,其知识库时候为了分类管理,提供了一个分类管理的模块,并且将问题与知识库进行关联。





【知识点与FAQ】


将问题匹配进入相应的知识点,机器人也需要知道谐音、或包含问题以外的其他内容,如何去掉无效内容,匹配问题答案。





【相似词库】


建立相似词库的意义就是为了方便机器人把相似处看作同义词进行理解,把问题进行匹配。




在知识库中添加问题与答案,我们这里落地首先要考虑问题与答案的对应关系。


也就是在对话模型中,一个问题是否会对应2个答案,一个答案是否会对应2个以上的问题?









【知识库添加】




最好的方式是利用EXCEL文档的方式整理,将文档导入上传。这里我借鉴了一些客服系统的机器人中心文档,将他们的文档进行归类,整理了如下模版













这样的话,公司即使没有客服系统,但通过日常的文档归类,也可以快速的建立词库。



01基于字符串的匹配算法
在产品设计中,这套系统还是基于字符串匹配的算法。利用正相最大匹配、逆向最大匹配分、以及最小切分


那么什么是正向匹配算法?




正向最大匹配算法:从左到右将待分词文本中的几个连续字符与词表匹配,如果匹配上,则切分出一个词。


但这里有一个问题:要做到最大匹配,并不是第一次匹配到就可以切分的 。我们来举个例子:


待分词文本如下:   


content[]={"产","品","经","理","从","此","站","起","来","了","。"}


词表:   dict[]={"产品", "产品经理" , "从此","站起来"}


这里CONTENT[1]开始进行从左到右正向扫描,那么扫描到第一个content[1],这个时候扫描的为“产”字,扫描到第二个content[2],这个时候扫描到[产品];和dict[1]匹配上了,但是因为字数才2个字,需要为3个字,就继续这样向下扫描。


循环处理,最终将词语扫描出来。但这样扫描出来的结果可能为:产品/产品经理/从/此/站起/来,或产品/产品经理/从/此站起/来......


等结果,利用最小切词,切词的换算方式,但当然既然采用的是基于字符串匹配的分词方法,其劣势就在这里,切分为导致歧义问题。


因此我们会把逆向最大匹配、正向最大匹配、最少分词结果进行综合匹配。最少分词就是将针对正向、逆向的问题,将双向切分的结果进行比较,选择切分词语数量较少的结果。
01
机器人知识库初始化




机器人在设置中,建议一开始没有词库的时候,产品经理需要考虑一些基本词库,这些词库是公司名称、公司产品、微信公众号、网站地址等





【机器人初始化】





【机器人初始化】


这样设计的理由很简单,这是公司的基本问题或回答。在这套客服系统机器人是对外或甚至以后运营盈利情况下,方便客户首先设置好自己的基本机器人资料。


除了以上的机器人基本词库以外,还有机器人寒暄词库,并且产品设计中要对每一个类型的词库回答进行限制。


比如当问了3个问题,都无法匹配到机器人的答案,机器人应该以转换人工的提醒方式或回答方式,让用户去寻找人工解决办法。





【切换人工】




在当前的机器人系统中,在这个产品设计我一直定位该产品是辅助于人工客服去减少工作量,增加工作效率。机器人并不能完全替代人工,所以时刻保持机器人与人工的切换,让用户能够获得好的解决体验。


总结




在当下科技不断发展的时代,都说是AI的时代,从以前的大数据到如今的AI时代,智能机器客服系统就是典型的一个产品。


虽然对于PM来说,客服系统的难点在于如何去跑通公司客服业务流程,建立起一套好的服务流程。


1.分担客服工作量


2.积累客服经验,不断完善问题库


3.自定义机器人样式,模拟人工聊天。


但难点也在于如何通过人工客服去积累学习更多的知识,以及通过数据渠道获得客服以及所在客户行业的专业基础知识。
2#
微调  4级常客 | 2018-10-15 22:38:44 发帖IP地址来自
谢邀。趁着快下班(钟)随便说几句...
如果你不要求那种特别智能的问答机器人的话,其实这个项目不难做,而且严格意义上和人工智能的关系不是特别大。从易操作的角度上说,我推荐你使用微软平台(C#) + Python 来实现这个聊天机器人项目。
[h1]----------------------------------------------------------------------------[/h1][h1]1. 需求分析 & 架构[/h1]首先分析你的需求
  • 对AI零基础
  • 有编程经验和能力
  • 想做一个自动问答机器人(Chat Bot)来代替老师做日常答疑。
  • * 用户可以自定义问题集
直白的说,项目就两个核心需求:1. 提供和用户的交互 2. 提供准确的答案。
我简单画了一个模块图,不知道上传以后的分辨率如何。

这个方案中有4个主要模块,其中控制整个流程的是模块3:
  • 模块1:知识库,也就是一个预储存问题和答案的数据库。理所当然必不可少...不然从哪给用户答案。
  • 模块2:一个部署在线上的预测模型。这个模型可以是简单的 自然语言+机器学习模型,唯一功能就是根据用户输入的问题预测知识库中最接近的问题是哪一个,所以其实是一个简单的相似度匹配模型(Similarity Measurement)。如果有可能,最好还能根据用户反馈并记录预测是否准确,方便后期的再训练。
  • 模块3:一个用于和用户交互的前端界面流程控制中心。使用适当的平台可以将其部署在云上并通过主流通讯软体进行交互,比如微信或者Skype。
  • 模块4:一个线下的学习模型,可以不断进行重新训练并提高上面第2点中提到模型预测的准确度。
以Skype为例,成品聊天机器人使用起来就像和你的微信好友对话,双击就可以使用,如下图。

图片来源: Microsoft Bot Framework connector for Skype for Business! - Witivio - Blog
[h1]2. 流程介绍[/h1]当用户在前端UI,比如Skype(模块3),输入一个问题后。流程控制中心会将用户提出的问题传给我们部署在云上的预测模型(模块2)。预测模型会对用户的问题进行处理并找到现有知识库中最接近的问题(模块1),将该问题的答案通过Skype返回给用户。
同时,如果一个问题在知识库中没有匹配,或者用户认为我们的答案错误,应该记录在额外数据库中。利用这个“用户反馈数据库”,我们可以定期在线下(offline)进一步对我们部署在线上进行即时预测的模型进行更新和修正(模块4)。
[h1]3. 需要的平台&软件[/h1]实现上面所说的这一切,依靠微软的Azure和Bot Framework平台即可:
MS Azure Cloud:微软云服务用于提供数据库,训练模型和预测模型所需要的资源如虚拟机。
MS Bot Framework: 这个平台是微软2016年推出的对话机器人平台。主要编程语言是C#或者Node.js,熟悉C#的话可以用Visual Studio非常方便。这个平台的主要用途就是降低对话机器人的开发成本,使用这个平台后,我们可以很轻松的把Skype作为交互界面,而不需要再去开发其他的交互。更多关于这个平台的介绍可以看:
给大家看一张开发过程中的模拟器长的样子,找bug和测试都很方便:

图片来源:Bot Framework 405 Method Not Allowed, 401 Unauthorized and 500, Internal Server Error getting started
MS Visual Studio: 用于开发这个对话机器人。
自然语言和机器学习模型: 根据你的描述不太涉及复杂的NLP或者ML,建议用Python开发即可。对于语言处理中文的话用 “结巴分词”,衡量词语/句子之间的相似度可以用“word2vector”、“sentence2vec”。至于机器学习模型,更是挑一个简单的调包即可,比如SVM。这项目本质难度不在机器学习上,而是整合这个系统上。如果到时候大家有了别的模块,但缺这个模型的话,我可以帮你一起做:)
[h1]4. 模块整合[/h1]年初花了几个月做了一个类似的项目,侧重点在机器学习上因此用了复杂的预测模型。而对话机器人只是交互手段,方便我们在客户的平台上部署。
而题主的这个项目难点不在于单独每个模块,而是将这些模块整合起来成为一个产品。Skype和Bot Framework可以用微软提供的API进行整合,和数据库之间的互动可以用C#里面之间连接抓取。
整个项目中最麻烦的是如何将模块2(预测模型)与其他部分整合。我的建议是在云上部署一个虚拟机,在虚拟机上写一个最简单Flask Web App,并使用 Flask-Restful提供Restful API给其他模块使用。如果有条件的话,也可以直接在云上部署一个含有预测模型的Flask App,这下就不需要在劳什子的使用虚拟机了。
好了不多说了,我要去接客了(手动滑稽)  

1#
骆梁宸  2级吧友 | 2018-10-15 22:38:43 发帖IP地址来自
@阿萨姆 讲的这个,就是我们组在做的东西哎。
项目传送门:Enterprise Deep Intelligence (EDI) - Microsoft Research
这个 Prototype 现在还是在 Beijing Office 小范围试用中。可以订会议,设 reminder 等等这些基础功能;现在正在迭代的功能就包括 FAQ 问答系统。跟题主描述的应该是十分类似的。
题主还可以看一下前段时间微软办的比赛 Microsoft 编程之美 2017。这个比赛就是让学生们用微软的 LUIS.ai(Language Understanding Intelligent Service) 和 Bot Framework 来开发一个可以回答关于你们学校的各种问题的 Bot。比赛说明页面给到了很多开发资源和入门教程,题主可以多参考一下。
------
下面说点个人的理解。
问答系统可以实现的非常简单,也可以难度非常大。全看你对机器人的要求有多高。
问答系统有两个比较重要的性质,一个是 domain,一个是轮次。Domain 分 close-domain 和 open-domain,轮次分单轮和多轮。
目前学界对 close-domain 的单轮问答系统研究已经非常成熟了,拿「Single turn QA System」去 Google Scholar 上搜大把的 paper。Open-domain 的单轮问答系统也已经有了许多不错的研究成果,例如 Facebook 这份工作 [1704.00051] Reading Wikipedia to Answer Open-Domain Questions,就是利用 Wikipedia 的知识来回答 Open-domain 的问题。
而多轮问答系统目前在学界都还是一个成果寥寥的领域,也是我们组很多人目前在努力的方向。结合题主描述的情况,我觉得题主尝试一下单轮的就足够了。
实际上我们组有同学现在就在做 Single-turn FAQ Matching 的任务,我在做 Multi-turn 的,但是方法都是相通的。 @阿萨姆 描述的流程也较为详细,我做些补充。
首先你需要维护一个知识库,就像你问题中描述的那样
每位用户可以设定自己的问题集
就是简单的 QA pair 即可。
用户每输入一句话时,要识别用户意图并匹配到对应 QA,或者匹配失败告知用户 Bot 不知道这个问题。这一步我们通常称为 Intention Classifier,我最近刚好写了一篇文章讲我的处理:MSRA 搬砖小记 | 类 One-Hot 方法的 Sentence Level 文本相似度匹配。由于场景不完全一样,具体 Sentence Embedding 方法可能不一定适用,但是预处理和 Word Embedding 都是通用的。
@阿萨姆 提到这是「相似度匹配模型(Similarity Measurement)」,更加准确的说,best practice 是 Ranking 模型,即针对用户输入,给全部待选 QA 打分,并取出最好的(或前 N 好的)。有时人们会把这一步处理成 Classify 模型,但其实这样后续是有不少问题的,比如 Not-Found 如何匹配。这里面再继续还可以深入,题主说对 AI 零基础,就不多展开了。
关于 Sentence Embedding,不建议用某些库自带的 sentence2vec function,效果很差。Sentence 及以上级别的 Embedding 在学界仍然是有待研究的问题,现在并没有特别好用的工程轮子。这部分如果考虑简单实用的话,建议用 TF-IDF Word Embedding & Sum 来做,或者我专栏里写的 One-Hot。如果题主有需要可以评论我,待会可以给你找一个 Text Similarity 的综述过来。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP