ERIC(https://github.com/SnakeHacker/QA-Snake)是一个采用Python编写的基于多搜索引擎和AIML技术的问答机器人,英文名的意思是多才多艺的(这也是我想赋予他的)。目前支持的功能有:闲聊,通用问答等。本文主要讲述我在写Eric的过程中对于问答系统的一些思考与想法,在文末会介绍Eric的使用和展示。

最初接到导师给的研究题目(自动问答)是在2017年4月上旬,然后就在看大牛们写论文(文末给地址),找相关资料以及研究市场上各种现有的商业自动问答产品(中国版的聊天机器人地图 Chatbots Landscape - 知乎专栏)中度过了一个月,这个过程中少不了狂和机器人聊天,测试不同产品对同类问题的反应。

现代的自动问答是将自然语言处理、统计机器学习深度学习相结合的产物。自从1950年代图灵测试而诞生至今,自动问答系统的发展已经有几十年的历 史。但真正在产业界得到大家的广泛关注,则得益于2011年Siri和Watson的成功。这一方面归功于机器学习与自然语言处理技术的快速进步,另一方 面得益于维基百科等大规模知识库以及海量网络信息,也就是大数据的飞速发展。

然而,现有的自动问答系统还不够完美,部分还是基于关键字模版匹配(包括一些商业产品),无法真正做到语义理解的程度。在通用领域实现一个不被大多数人喷的问答系统更是难上加难。事实上,无论是业界应用还是学术研究,问句的真实意图分析、问句与答案之间的匹配关系判别仍然是制约自动问答系统性能的两个关键难题。

几乎所有的问答系统的流程可以归结为以下几部分:

目前的研究工作大多集中于上图的两个虚线框中的内容,有用传统的规则搞的,也有用统计方法搞的,也有用深度学习方法搞的。中文的问答系统,还需要进行分词 等工作。问答系统又不同于聊天机器人(小冰等),它是要解决实际问题的。比如客服问答机器人,阿里和京东的都做得非常不错,这不仅是基于他们强大的研发团 队,足够的数据支撑模型训练也是重要的因素之一。

然而,我就想做个简单的问答机器人,然后顺利毕业啊。没有那么多公开的中文数据,怎么破?学术界的大多方法还不能很好地运用到工业界。看完论文和大 多商业产品后,我开始思考Eric的定位,由于目前中文的问答训练集非常少,并且没有通用的问答训练集,这对于一开始想采用统计机器学习、深度学习训练一 个问答模型的我造成了非常大的困难,这个问题足足困扰了我一周。在不断查找资料的过程中我发现了AIML,非常棒的人工智能标记语言。Alice是一个基于AIML实现关键词匹配和简单的推理的聊天机器人,它的语料库非常之大,不过是英语的((╯﹏╰))。

但不管怎么样这是一种实现问答机器人的方式,于是我先跑通了基于AIML的问答机器人。但是他仅仅是基于关键词匹配和简单的推理,缺少语义理解的能力,虽然它的可扩展性非常强,但是如果只做到这步的话,我想我是没办法顺利毕业了。

在研究AIML的过程中,我发现了互联网上有许多半结构化数据。比如维基百科,百度百科等。我尝试使用AIML把问句转换成一种结构化的 Query,然后再百度百科中找到对应属性的属性值。比如“王思聪的父亲是谁?”这个问题,AIML根据规则会抽取出“王思聪”,“父亲”。抽取出来的实 体和属性是很容易在百度百科中搜索到的。但问题又来了,如果问“王思聪的老爹是?”这类问题,Eric就找不到答案了。为了解决这个问题,我引入了哈工大的同义词词林进行关键词扩展。

做到这步,基本上百度百科上有的答案我都能搜出来了。这还远远不够,对于百度百科没有的答案怎么办呢?有些问题的答案其实已经在搜索引擎的前几十条答案中有,人很容易找出这些答案,但机器怎么找答案呢?

知识图谱是我原本想模仿百度百科做的一个本地知识库,后来发现,要构建这样的通用知识库太麻烦了,工作量非常之大。那么既然百度有了知识图谱,我为 何不去尝试用它,而要重复造轮子呢?同样的道理,本地其实不需要太多的知识,所有的知识搜索引擎几乎都能找到,为何还要耗时费力的去构建本地的知识库呢, 我的知识库就是整个互联网啊。百度没有搜到的东西,Bing有吧,Google有吧?

做到这步Eric的定位就比较清晰了,自动问答的问题也就变成了根据问句从互联网中抽取答案。我还想做闲聊,但是也没训练集。我尝试让两个产品的机器人互聊,借此收集语料,结果他们聊死了。最后在网上找到一个质量一般的聊天对话语料库,暂时凑合着先用。后面有时间再来聊优化闲聊的部分。

我采用BeautifulSoup对百度知道、百度百科、百度搜索、Bing搜索这四个信息源进行了规则解析。这里要提一下百度知道(包括类似的问答社区),在线搜索解析的成本真的比写爬虫把数据抓取并存储成结构化知识要省力得多,现成的知识库要灵活运用起来。

下面是Eric的问句效果,我拿杨尚川老师的“测试人机问答系统智能性的3760个问题”以及自己收集的问题进行了测试,结果还凑合。下面是结果,用Django写了个站进行展示:

Github上放出来的代码提供了支持命令行的问答模块以及基于Socket通信的server端,代码很乱,后续会做进一步改进。

总结:

目前的Eric还很稚嫩,还存在包括但不仅限以下问题:

1.多轮对话能力为零
2.没有情感
3.对于搜索引擎都找不到的答案,没有自己的“思维”抽象能力。
4.问答的结果如何评估?目前都是人在看,对于中文的问答有没有比较好的评估标准和方式?
5.语义相同问法不同的问句返回的答案会不一致,还是没做到语义理解。
后期我将做以下工作:

1. 将CNN问句分类用于Eric,为后续对不同类别的问句做针对性回答策略做铺垫。(目前遇到的问题还是训练集不够,模型用Tensorflow已经搭好了。)
2. 尝试解决语义理解。
3. 问句收集模块的设计与实现。
4. 对于多个候选答案进行打分排序,提出一个打分策略并验证可行性。

原文发布时间为:2017-06-07
本文作者:Snake
本文来自云栖社区合作伙伴“Python中文社区”,了解相关信息可以关注“Python中文社区”微信公众号

Eric,基于多搜索引擎的自动问答机器人相关推荐

  1. 微信智能机器人助手,基于hook技术,自动聊天机器人

    微信智能助手说明文档 资料获取方式,关注公总号RaoRao1994,查看往期精彩-所有文章,即可获取资源下载链接 更多资源获取,请关注公总号RaoRao1994 简介 微信智能助手是一款基于PC微信研 ...

  2. 基于Python的冬奥会领域问答机器人设计

    1 项目简介 1.1 问题背景 2015 年 7 月 31 日,北京申办 2020 年奥运会成功,将与张家口市联合举办 2020 年冬奥会.因此,构造一个能够自动回答冬奥会相关领域问题的问答系统,以满 ...

  3. (Python,Hanlp,Neo4j)基于电影图谱搭建微信问答机器人(一)

    近期着手在构建毕业设计系统,由于早期时间偶然接触到一个公众号推送关于人工智能客服的信息,心血来潮也想自己搭建一个.在经历了不断的踩坑填坑,总算是达成目标.记录一下整体搭建. 话不多说先上效果图 具体流 ...

  4. 基于itchat的自动调查机器人

    基于itchat的自动调查机器人 最近需要做一个项目里的一个自动问答机器人的部分,需要对访谈对象做自动的访谈.需要按时进行提问,并且把采访到的数据以文本的形式进行记录.图片需要下载下来,语音也需要下载 ...

  5. 自动问答研究进展、现状及趋势

    (摘自<中文信息处理发展报告(2016)>) 1. 任务定义.目标和研究意义 自动问答(Question Answering, QA)是指利用计算机自动回答用户所提出的问题以满足用户知识需 ...

  6. 搜狗王小川说输入法的未来是自动问答,那么这个技术究竟发展得怎么样了?...

    雷锋网(公众号:雷锋网)按:本文作者,雷锋网独家首发文章. 科研界和工业界的关系往往是,科研界负责生产原材料,工业界负责把原材料进行加工料理,最终给用户端上一盘饕餮盛宴.正如20年前,谷歌利用Page ...

  7. 【Python】基于文本匹配的微信自动问答

    [Python]基于文本匹配的微信自动问答 摘要 一.引言 二.相关工作 三.方法描述 1.数据预处理 2.特征提取 3.文本匹配 四.代码部分 五.实验结果 六.总结 摘要   本文针对传统的基于规 ...

  8. 自动跟随机器人:一种简易的自动跟随方案,自动跟随小车、自动跟随平衡小车、STM32、基于超声波的自动跟随小车

    目的:一种廉价的跟随方案,让大家都能够参与进来,技术难度不大,一些人也能够DIY一些属于自己的"跟随"机器人!并不是要做工业应用什么的.只是做出来玩玩~ / 1 / 介绍 先看视频 ...

  9. 地平线机器人_地平线机器人CEO余凯:基于深度学习的自动驾驶之路

    请关注公众号"汽车创新港",获取后续更多论坛实录! 加工作人员微信号:tinydanio,备注"我要入群"直接进入直播群! 今天都是大牛,下面的也是技术大牛,是 ...

  10. 流水线自动分拣机器人仿真,vrep与matlab联合仿真,基于机器视觉技术进行自动分拣,采用scara型机械臂

    流水线自动分拣机器人仿真,vrep与matlab联合仿真,基于机器视觉技术进行自动分拣,采用scara型机械臂,按照不同的颜色与形状分拣,放入不同的盒子并统计数量. 仅供学习使用 基础太差的勿. ID ...

最新文章

  1. request.getparameter特殊字符变成?号问号_15 个不可不知的 Linux 特殊字符,你懂几个?...
  2. 第 6 章 Harddisk IO
  3. android singleInstance返回问题
  4. Android--Retrofit+RxJava(二)
  5. Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】
  6. 树莓派:挂载网络存储网络硬盘
  7. 前后落差大用什么词语_语文考题一共有五类:汉字类、词语类、句子类、阅读类、作文类,如果基础扎实,答题技巧弄懂了,哪一类都能拿高分!...
  8. mysql完整性约束命名_第5章--MySQL索引与完整性约束.ppt
  9. java界面字体大小设置_怎样更改电脑界面的字体大小?
  10. Hadoop 1.x和Hadoop 2.x,Hadoop 1.x局限性和Hadoop 2.x YARN优点之间的区别
  11. 阶段3 1.Mybatis_07.Mybatis的连接池及事务_3 mybatis连接池的分类
  12. 作业五:团队项目——项目启动及需求分析
  13. 各个蒙版的作用与区别
  14. c语言 教学目标,c语言选择结构程序设计教学目标
  15. java 创建二维码 并加载显示到窗口
  16. java导入Excel中数据查重的方法
  17. windows7、windows10 桌面快捷方式左下角有一个白色方块
  18. Java VisualVM安装Visual GC插件
  19. 开发人员常用的ID网站整理!
  20. 【CSS】在圆上设置文字

热门文章

  1. 英雄联盟服务器维修中启动游戏失败,电脑登录英雄联盟失败的八种解决方法
  2. NXP JN5169滴答定时器中断回调函数
  3. 单维度量表验证性因子分析_探索性因子分析(EFA)和验证性因子分析(CFA)
  4. 高并发大流量,大麦抢票的技术涅槃之路
  5. vb.net设置分辨率和缩放比例_配置高不一定性能强,Win 10做好这些设置才能“6到飞起”!...
  6. 什么相片可以两张弄成一张_PS怎么让两张图片合成一张?两张图片自然叠加的方法...
  7. 刘强东的漫漫情路:龚晓京、西红柿、奶茶...
  8. php查拼音,php 输入汉字,查出对应的拼音
  9. 三极管之——PNP与NPN
  10. 如何将HTML与win10桌面壁纸,Win10默认桌面背景怎么设置