[转]浅谈聊天机器人设计思路 - [思路]

果你是我以前的博友,那你一定知道小D是谁了,小D是我设计的第一个WEB聊天机器人,虽然只花了两天的时间完成他,但也花了我不少的心思,今天我就给大家谈谈我做小D时的设计思路以供交流,如果你对智能聊天感兴趣,或许能帮你节省大量查找资料的时间。

        1   知识库

        机器人要想回答出你所提出的问题,那么首先它就要具备自己的知识库,就和人一样,逻辑分析的前提,需要你具备对这个问题所储备的知识以供参考,所以知识库的重要性就不可避免的成了很重要的成分,那么我们怎么描述聊天机器人的知识库呢,由于当初只是做来玩玩,所以我只是很简单的做出了一一对应关系的数据库。

        例如:我们生活在哪个星球上? 对应回答就是:地球!

        由此很多问题和相对应的答案便组成了我们的知识库(也就是数据库,我用的是MySql)!知识库的大小直接关系到你的机器人是不是聪明。

         2  语句分析

        当然,仅有知识库是不能进行对问题分析并做出答案的,所以我们必须要赋予程序能够自我分析的能力。程序要想更加聪明,那不得不依靠强大的智能算法,因为我不是专业人士,所以开始也没使用到很多智能算法,只是简单的把句子中的分词提炼出来。

        我是这样设计我的小D的,先是进行完全匹配,然后是语句分析,最后是模糊匹配。

        完全匹配就是把问题的整个字符串拿到数据库中去查寻答案,如果能查到记录便把对应的答案返回给提问者!如果不能查到,就进行模糊匹配,所谓模糊匹配就是最大限度的把整句话的意思放到知识库去查询(我的方案是先进行语句分析,再模糊匹配)。

         例如:地球的半径是多少?

         如果完全匹配并没从知识库中检索到信息,那么下个过程就是语句分析了,我们先把整个句子的各个词语分开!

         例如:地球/的/半径/是/多少?

         在这里不得不提到分词算法,分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。而我们要做的就是要将这一个又一个的分词从句子中提炼出来。

         这里有个分词算法的PPT,点击下载

         感兴趣的朋友可以仔细研究下他们是做分词系统出了名了,我们可以借鉴其中的方法,如图:

         当我们把分词提炼出来了,我们就可以进行最大的匹配了---也就是模糊查询,我把它分为了两步,一就是进行整句模糊查询,因为可以尽可能的保留全句的意思:

         例如:select * from QY where question like "*地球*的*半径*是*多少*"

         这样就能从知识库中查到更多关联的问题了,也有更多的答案选择!

         如我们可以查到:你知道地球的半径是多少吗? 等很多包含整句的问题!

         当然如果数据库中完全没有完全匹配的问题,那么可以提出关键词,我的方法是分词最长原则!

         如:地球/的/半径/是/多少?

         其中[地球] [半径] [多少]就是里面的最长关键词,我们可以设计算法,通过组合来匹配!

         例如:可以把[地球][半径]组合在一起

         select * from QY where question like "*地球*半径*"

         这样即使全句模糊匹配找不到也能找到,当然这样的组合就要看你的程序是怎么写的,当然组合的要求要符合程序的特点,如果组合次数过于大多会影响程序的反应速度!所以最合理的组合能提高程序的使用性!当然如果经过这三个步骤没有相关匹配问题,我的小D就不能回答你所提出的问题了!它会很老实的回答:“我不知道?”等意思!

         这里要强调个技巧,比如在匹配问题的时候很可能会检索到很多的答案,这时候我们可以设计个随机选择函数,任意性的选择答案,那样程序就比较人性化了?比如你问到:“你吃饭没?” 那么它可以回答“吃了” “没有” “我不吃饭”    

        而不是单一的回答。。。

        我只是简要的谈到了聊天程序设计的方法,当然这和那些真正专业的程序比较起来还是有很大的差距,如果你只是做来玩玩,以上这些就足够了,比如现在我在小D的程序里应用了缩句的方法,这也只是想提高它分析问题的能力,如果朋友你真想在智能聊天方面继续深究,那么就要下更大的工夫了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值