zoukankan      html  css  js  c++  java
  • 自然语言交流系统 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]",我们可以提取里面的内容,我们做的是直接将答案返回给主程序,因为我始终没能写出好的、比较满意的自然语言生成算法(这也是很多研究院和公司的目标)。自然语言生成算法涉及到很多问题,比如说话人说话的语境(我们所说的上下文),说话的心情,说话的语调等等都会影响到问题的真正意义,而作为机器人想要精确了解问题的真正意思并且生成一个既符合逻辑又令说话人满意的答案还有相当大的工作要做,不过我相信,只要我们不断地探索,不断地去努力去研究,我们就能设计出像科幻电影里的机器人一样智能、甚至有自己的思想的智能机器人。

  • 相关阅读:
    Java实现埃拉托色尼筛选法
    Java实现希尔排序
    Java实现希尔排序
    Java实现希尔排序
    Java实现希尔排序
    Java实现希尔排序
    Java实现插入排序
    Java实现插入排序
    Java实现插入排序
    使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序 good(从VS2012 update1开始支持xp和c++11)
  • 原文地址:https://www.cnblogs.com/qiaoyanlin/p/6874216.html
Copyright © 2011-2022 走看看