教程关键词 - 加入收藏 - 网站地图 教程吧为你提供最全最好的教程!!!
当前位置:主页 > 软件教程 > 正文

“小黄鸡”中文聊天机器人的详细解释(补充)

 
一两周前写了篇文章,收到一些反馈,现说明一下。

1.我是“事后诸葛亮”?

如果做这个也称得上诸葛亮,那我只有呵呵了。当然我很欣赏“小黄鸡”创造者,工程界的创新比起学术界更务实,且不论能力如何。

2.理论部分不够具体。

文字已经够多了,只介绍大概的架构,不过已经写得很不“科普”了。具体的算法神马的可以邮件讨论。

3.我是什么方向的?

我是大二的。做过国家自然科学基金,没论文啊!!做算法,ACM没啥成绩啊!!!参加比赛,得个小奖啊!!所以很多东西我都不知道啊!!不用问了~

 

。。。。

 

写这篇文章无非希望对感兴趣的同学有些用处。

文章就不修改了。

下面是原文。

 

 

 

 


Part 1 ”小黄鸡” 人人公共主页是如何实现的?

该项目已在Github上开源,地址https://github.com/orangeruc/xiaohuangji,源代码也就100k左右,何以完成如此“神奇”的东西?

分析源代码,发现其实要做这个东西很简单。只要你有使用人人、腾讯或其他开放平台API的开发经验(XX俱乐部、XX团队人一般都有经验),只要你会一点编程语言(PHP,Python,Java等都可以),你就可以实现这么个“神奇”主页。这里只简单介绍一些,就不写成源代码分析类的文章了(一来源代码价值不大,二来本文核心不在此。。)

完成这个系统,有三个关键词: 人人API、Simsimi API、Python。

1、通过人人API,可以获取人人网上消息的通知,返回消息等

2、Simsimi,是韩国开发的智能聊天机器人。官方提供了开发API,地址http://developer.simsimi.com/。也就是说,这个应用的“灵魂”,人工智能部分,是官方做好了的,我们完全不需要涉及什么复杂的算法,只要简单调用就行了~

3、Python,是一种编程语言,在本系统中用于处理消息队列、简单解析消息内容等,因为Python有很多网络、文本、消息处理相关的库,所以使用它比较方便。当然如果Simsimi官方提供了其他语言如PHP,Ruby,Java,Perl等的开发接口的话,完全可以不用学Python语言。

 

由此可见,不需要动多少脑子,你也可以做这么个公共主页,或者Android、IOS应用,尤其是软件、CS专业的。不怕不会,就怕不去了解。

Part 2 它的“灵魂”——人工智能部分是如何实现的?

昨天我想:“小黄鸡”公共主页用的是simsimi的开放API,之前让两个人打电话的callbot也是一个研究所的API漏洞,做出一个应用的,我们称之为“大神”,但是真正支撑起它们的,是高校实验室,公司研发部的硕士生,博士生(也许还有本科生):小而言之,读研挺好的,即便做不了科学家,也可做个更靠谱的开发者;大而言之,中国要有Google,oracle这样的伟大企业,需要的不是“黑客”,是。。。。。

“感慨”到此为止,下面我们来分析。

一、系统架构

参见我之前的一篇文章:http://blog.renren.com/blog/437013229/891845349?bfrom=011201092

 

聊天机器人是指通过理解聊天对象的句子自动做出相应应答的一种软件,它可以代替真人进行聊天。准确地理解自然语言,目前在理论上仍然无法实现。语义分析和上下文相关文法,一直是自然语言理解中需要解决的难题。

聊天机器人原型系统的设计,主要基于语料库和规则学习的人工智能方法,属于自然语言处理(Natural Language Processing)的研究领域。

其主要原理如下图所示: 小黄鸡聊天机器人简单原理

 

它主要有三个部分:处理用户查询、检索相关文本、抽取答案。

下面的图更详细

小黄鸡聊天机器人主要原理

 

 

一个强大的问答系统所涉及的技术有信息检索技术、信息抽取技术、文本挖掘、聚类、文本摘要、模式推理,和几乎所有自然语言处理技术(词法分析、句法分析、语义分析、指代解析、消歧等),当然我们不要求“小黄鸡”有复杂的知识理解等功能,聊聊天而已,系统会相对简单些。

我们再分别简单看看这三个步骤:

1.问题处理

问题处理的工作主要有:问句预处理、问题类型及答案需要满足要求的确定、提取出问题的关键词,以及依据问题的类型等因素对关键词进行适当的扩展。 问句预处理阶段要进行的工作是:对于用户以自然语言形式提交的问题,我们需要提取出对后而的检索有用的信息,但并不是问题中所有的词都是有助于信息检索的,例如,问句中的一些前缀(如“请问”)和一些常用的“吧、了、吗”等助词对段落的检索起不到什么作用,在处理中应将其滤去。

接着要确定问题的类型以及答案需要满足的要求

2.信息检索

问答系统中的信息检索模块将利用问题处理模块输出的关键词及其扩展来搜索相关的段落。信息检索模块分为两个部分一一信息索引以及段落选取。对系统己经读入的文档,首先进行预处理,即进行分词、词性标注以及特征项的提取等工作,并对文档建立相应的信息索引,其目的是为了根据用户提问中的关键词迅速找到包
含特定关键词的段落。

信息检索技术的基础是对原始文档预处理后,将基本元素的位置信息记录在索引表中。通常以词表为基础建立索引库。信息索引就是创建文档的特征记录,通常以倒排表的方式建立。对文档进行预处理并建立信息索引是由系统预处理模块事先进行的。用户提问时,将依据系统抽取的关键词从索引表中找出满足条件的所有段落取交集返回。由于索引结构常驻内存,因而检索速度快,而且一旦定位到段落,就可以作进一步的语义分析和处理。

 

信息索引建立完后,检索的过程就是对相关段落按权重大小排序后依次输出,段落权重的计算方法为:首先,由词性为问题处理模块输出的关键词(包括其扩展)设置权重;其次,根据类似工DF的定义为各关键词分配权重;最后,依据权重的大小对检索出来的段落进行排序,依次送给答案抽取模块。

3.答案抽取

前两部分文字够多了,就不写了

 

Part 3 我们如何从底层开始做一个问答系统?

Part1的方式不涉及什么算法,Part2说得太复杂,那么我们能不能自己写一个简单的系统呢?

一个简单的系统的核心是规则树的建立和对规则的匹配

规则库是聊天机器人系统中的核心数据库,在设计中,我们从日常的句子中抽取出一定的结构,形
成规则库,如下:

规则: *今天*天气*好

答案: 嗯,我心情也不错

在上面的规则中,*代表了若干字符。如果用户录入了类似如下的句子:


今天天气很好。今天天气真好。今天的天气格外好。

机器人就会说:嗯,我心情也不错


为了提高匹配的准确度与速度,我们构建了一个规则树来存储规则。 系统就能通过模糊模式匹配规则匹配到规则库中的这条记录,并将相应的答案返回出来。

 

匹配过程采用深度优先搜索算法,当规则库中没有找到相应的根节点时,系统会自动创建一个新的
根节点规则树;若找到了相应的根节点,系统会记录其ID号,然后继续,直至结束。


例如,在规则库中有上而描述的规则存在,用户输入以下句子:
上海今天的天气格外好。


经过中文分词(中文分词算法比较复杂,可以使用开源的实现,也就是直接调用某个函数)后,分成:
上海l今天一的l天气l格外l好。
对句子按照词序开始进行模糊规则匹配。系统首先在规则库中寻找有没有以“上海”为根节点的规则树,如果失败,则去掉“上海”这个词,再开始找以“今天”为根节点的规则树,并根据深度优先原则进行遍历搜索,直至找到“水今天水天气水好水”这个路径,然后根据建立的规则树,得到“恩,我感
觉心情也不错”的答案,作为回答进行输出。

算法貌似说不清,直接上图

小黄鸡聊天机器人算法

 

规则学习的任务就是建立规则库,其基本功能主要有:增加基本规则,查询规则和删除规则。
在建立规则的时候,要注意通配符*的合理使用,它在句子中主要代表了一些虚词、助词、连词等非
关键词。关键词的选择包含了句子的结构和语义方而权重较大的词汇,另外,还要注意避免规则与规则
之间的协调。下图是规则库编辑界面

小黄鸡聊天机器人规则库

 

规则库的构建,目前 采用人工选择的方式惊恐,这样的好处是比较准确,缺点则是要构建一个实用的比较大型的规则库需要一定的时间。。。。

 

完。



本文转自人人网姚培森的日志