自然语言交流系统 phxnet团队 创新实训 项目博客 (四)
刚开始做时,一点头绪都没有,整天的上网找资料,各种谷歌百度,各种博客论坛,搜索的关键词也无非是智能自然语言交流、智能机器人、中文问答系统等等等等。而我们的思路也是些零散的,例如我们知道会用到分词,会用到语法分析、语义分析、关键词提取等自然语言处理策略,但我们还是不知道该如何下手。就这样查了一个多周的资料,也纠结了一个多周,最终决定了,先做分词。但做分词,怎么做?一个句子怎么能分出词来?想了半天,不会,上网查,看有什么好的算法,结果发现分词算法很复杂,都是中科院ictclas分词,ikanalyzer分词,还有什么庖丁解牛,先把源码下载下来看看,事实证明,看不太懂。不管了,调一下直接用吧,结果Java项目调的好好的,而一建立Android项目总是崩溃,看了logcat发现是OOM错误,也就是超内存,其实也是,分词的处理过程很耗资源,手机的内存与CPU根本受不了,那怎么办?自己搭建个服务器,把手机当客户端?算了,反正算法是人家的,自己搭服务器也不能把人家的变成自己的,查了一下,复旦NLP提供webservice方式调用,那问题不就解决了吗,把处理字符串提交给webservice接口,就可以得到分词结果了。
分词的问题解决了,那我们分词有什么用啊,怎么根据问题找答案?难道要一个问题对应一个答案?那也不智能啊。看了几篇国内和国外的关于智能自动问答系统研究的论文,主要涉及到对文法的分析处理、问题分析、常问问题集匹配、信息检索以及答案抽取等内容。
看了好几天的论文,虽然没能学到太多,但知道了接下来要做的就是常问问题集的匹配。
而要做常问问题集匹配,就需要建一个常问问题库(FAQ)。但我没学过数据库啊,怎么建啊,学,先把最基本的学会够用就行。写了几天终于把常问问题库建立起来了,库里一个问题对应一个答案。而匹配嘛,先找到问题的重点,也就是根据分词结果找到问题的一个或多个关键词,根据这些关键词来匹配答案。而这时你就要问了,那如果我问的问题没有关键词呢,比如“你好”、“谢谢”等,根本就提取不到关键词,怎么匹配?对于这些简单问题,或者说是一些短语,我们就全文模糊匹配,检索包含问题串的问题进行匹配。
做完了常问问题集匹配模块,发现自己面对一个更难的问题:对于用户的问题,常问问题库里没有怎么办?这时,我想如果我是这个机器人,我应该怎么办呢?记得去年,有一次我小侄女问我“西游记里的裙钗是谁啊?”,我一想,我连裙钗是什么都不知道更别说是谁了,便问宿舍同学,谁知道西游记里的裙钗是谁啊,结果没人知道,好吧,既然没人知道,我就把电脑打开,上网搜索西游记里的裙钗是谁,都说裙钗是牛魔王的老婆,红孩儿他妈铁扇公主是也,于是我就把这个答案发给了我小侄女。而对于这个机器人来说,对于它不知道的问题,肯定不可能去问其他手机你知不知道啊,你知不知道啊。那就直接上网搜吧,而搜索引擎又不会直接返回答案,而是给你很多与搜索关键词有关的网页,需要你自己去找一个你想进入的网页进入,然后获取到你想要的信息。
而这个问题的难点很多,机器人怎么把问题Post给搜索引擎,搜索引擎搜索完后机器人又怎么知道哪个网页更有可能存在我想要的信息,即使找到了包含我们想要信息的网页,网页中那么多信息,哪些是我们想要的,即使找到了我们想要的信息,机器人又该怎么去组织语言去描述答案。这些问题困扰了我很久。后来我想到用Jsoup网页解析包,对HTML网页进行解析,于是我想到将问题关键词或问题Post给百度知道网页,对百度知道的搜索结果页面进行解析,我看了一下搜索结果页面的源文件,发现每个链接都有一个“标题”,而这个标题也代表着该链接网页的主要信息,因此我们要做的就是比较一下问题与这个标题的相似度,找一个相似度比较高,也就是最有可能包含答案信息的链接(而实际设计中,因为手机解析HTML网页时很费时间与内存,处理过程大约要耗时3、4秒左右,而这3、4秒虽然很短,但在用户看来就像卡死一样,为了不影响性能这里没有采用相似度计算,而是采用模糊匹配进行匹配),然后进入这个链接。
而对于这个答案页面,可以看到对于所提问的问题有一个满意答案,其属性为"div [class=line content]",我们可以提取里面的内容,我们做的是直接将答案返回给主程序,因为我始终没能写出好的、比较满意的自然语言生成算法(这也是很多研究院和公司的目标)。自然语言生成算法涉及到很多问题,比如说话人说话的语境(我们所说的上下文),说话的心情,说话的语调等等都会影响到问题的真正意义,而作为机器人想要精确了解问题的真正意思并且生成一个既符合逻辑又令说话人满意的答案还有相当大的工作要做,不过我相信,只要我们不断地探索,不断地去努力去研究,我们就能设计出像科幻电影里的机器人一样智能、甚至有自己的思想的智能机器人。
自然语言交流系统 phxnet团队 创新实训 项目博客 (四)的更多相关文章
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (二)
基本要求 打开软件,即可进入2D文本交流界面, 软件此时已经连接到服务器,点击文本输入框输入你想说的话,点击发送按钮即可进行交流,点击CHAT和STUDY分别切换到聊天模式或是学习模式,聊天模式是机器 ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (十四)
项目技术借鉴报告: 一.服务器端(Server) 1.分词 分词使用的是庖丁分词.使用盘古分词词库和词素作为辅助.其中包括下载Jar包并且使用. 2.人工神经网络 以网上已有的初级网络为蓝图,结合机器 ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (十三)
对我们项目中的关键技术实现进行总结: 一.3DMax关键技术实现 1.一下的关于3DMax中对于人物的设计和操作均需要在对3DMax基础知识熟练掌握的情况下进行的. 2. 骨骼架设:首先对导入到3DM ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (十二)
关于情感词典的学习总结: 情感倾向可认为是主体对某一客体主观存在的内心喜恶,内在评价的一种倾向.它由两个方面来衡量:一个情感倾向方向,一个是情感倾向度. 情感倾向方向也称为情感极性.在微博中,可以理解 ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (五)
3DMax方面所涉及的专业知识: (1)一下的关于3DMax中对于人物的设计和操作均需要在对3DMax基础知识熟练掌握的情况下进行的. (2)骨骼架设:首先 ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (一)
2D文字聊天界面大致预期实现文字输入.发送消息.接收消息.你可以通过点击按钮让机器人开启聊天模式或者学习模式.又或是进入3D语音聊天界面或者退出. 目背景 (1) 开发动机的形态 随着科技的进步与生活 ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (十一)
神经网络的计算过程 神经网络结构如下图所示,最左边的是输入层,最右边的是输出层,中间是多个隐含层,隐含层和输出层的每个神经节点,都是由上一层节点乘以其权重累加得到,标上“+1”的圆圈为截距项b,对输入 ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (十)
关于本项目中使用到的庖丁分词的总结: Paoding 详细介绍 庖丁中文分词库是一个使用Java开发的,可结合到Lucene应用中的,为互联网.企业内部网使用的中文搜索引擎分词组件.Paodi ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (九)
项目技术总结: VoiceToText的具体使用方法: 语音转文本部分是调用的科大讯飞的在线语音,它的激发方式是按键,通过按钮触发开启安卓设备的录音,此部分需要在源码中写入关于安卓权限的要求,来调用安 ...
随机推荐
- zabbix server 与数据库不在同一台服务器上面
16312:20170527:095215.225 database is down: reconnecting in 10 seconds 16312:20170527:095225.225 [Z3 ...
- 在sublime text3中安装git插件
使用Package Control组件(推荐),打开install package控制台后,直接输入git就可以安装git插件. 这个时候Sublime Text只是安装了git插件,但还不能使用gi ...
- MonoBehaviour类Invoke, Coroutine
异步函数 在一个方法执行时调用另一个方法.而被调用的方法或者其中的某些语句不是立刻执行,而是过一段时间后才执行. MonoBehaviour提供了两种异步方法 调用(Invoke) 协程(Corout ...
- Effective Spark RDDs with Alluxio【转】
转自:http://kaimingwan.com/post/alluxio/effective-spark-rdds-with-alluxio 1. 介绍 2. 引言 3. Alluxio and S ...
- windows安装php和mysql
windows安装php和mysql 测试环境:windows2008-64位主机 1.下载护卫神php一件安装包 https://www.huweishen.com/soft/php/#phpdow ...
- Scroll的使用
1.给父元素限制宽高 2.给Scroll限制高度,并overflow:hidden; <div class="rank"> <scroll class=" ...
- MyBatis SqlSessionFactory的几种常见创建方式
原文链接:https://blog.csdn.net/jimolangge123/article/details/49228255 MyBatis框架主要是围绕着SqlSessionFactory这个 ...
- shell格式化字符串
假如你有以下代码: TEMP_SQL="SELECT count(uid) from ${TABLE_PREFIX}_%s;" SUM= for((i=${MIN};i<${ ...
- Web图形开发
Web项目开发过程中要找到完美的图形解决方案比较困难,只能根据自己的需要,选择自己最合适的画图方案. Web图表一般有以下几种做法: (1)使用客户端控件技术 (2)使用服务器端生成图片 (3)使用富 ...
- 【Unity笔记】根骨骼动画/运动(Root Motion)
根骨骼动画:当动画中角色发生位移后,动作坐标原点跟随角色移动.例如一个向前跳跃的动画,如果在场景中重复该动画,能够看到角色一路往前跳跃,位置一直在前进.适用于有位移的放技能动作等. 非根骨骼动画:当动 ...