首页 > 代码库 > 【开源】一个基于智能问答的聊天机器人实现
【开源】一个基于智能问答的聊天机器人实现
智能问答应当是未来智能化发展中人机交互的主要方式,目前无论是在开源社区或者企业应用中,都有广泛的应用。
项目名称是Iveely.Brain,本次源码可以在Github的这里下载,,是主要用于聊天服务的一个项目,本次开源版本的示例如下所示:
整个开源版本分为两种模式:本地模式和远程模式。本地模式是开发环境的调试模式,主要用于测试准确性问题;远程模式主要应用于正式线上环境,通过TCP(默认端口8001)的方式提供对外服务(也可改为restful API的形式)。智能问答的核心在于聊天语料和知识推理两个部分,由于知识推理涉及到数据分析以及知识图谱的构建,因此本次开源版本重点在于聊天语料库。当您下载源码之后,可以通过修改corpus中的example.aiml改进聊天语料,如下图所示:
AIML格式是一种人工智能标记语言,聊天语料主要包括如下几种类型:
(1) 直接匹配模式
<category> <pattern>你好</pattern> <template>你好!</template> </category>
此种模式将会在命中“你好”之后直接返回“你好!”。
(2) 随机匹配模式
<category> <pattern>今天天气真好</pattern> <template> <random> <li>是呀,天气不错。</li> <li>要不出去走走?</li> <li>希望每天天气都这么好!</li> </random> </template> </category>
随机模式在命中Pattern之后,将会从template中的li元素中随机选择一条返回。
(3) 记忆替代模式
<category> <pattern>你好,我是*</pattern> <template>你好,很高兴认识<star index="1"/>。 </template> </category>
记忆替代模式,将会在template中替换star,例如在问“你好,我是刘凡平”的时候,则“*”指向的内容是“刘凡平”,则返回结果为“你好,很高兴认识刘凡平“。<star index=”1”/>表示取用户模糊匹配的第一个*号的内容。
(4) 递归推理模式
<category> <pattern>您好,我是*</pattern> <template> <srai>你好,我是<star index="1"/>。 </srai> </template> </category>
递归模式采用”srai“标识,表示不直接返回答案,而是将问题替换为另外一个问题继续寻找。例如用户问”您好,我是刘凡平”的时候,template中将会替换为”你好,我是刘凡平“的问题,这个问题将会再次在AIML中进行匹配,直至直接返回结果”你好,很高兴认识刘凡平“。
(5) 约束匹配模式
<category> <pattern that="你好">你好啊</pattern> <template> <random> <li>你好,我们刚刚说过一遍了。</li> <li>你好,客气啥!</li> </random> </template> </category>
上述示例中,并不会直接命中”你好啊“,而是在上一次是匹配的”你好“,当又匹配了”你好啊“才会命中上述category,即上次和当前次的连续匹配。
扩展
上述过程是按照传统的方式进行模式匹配,聊天语料库的构建是一个复杂的过程,可以通过互联网的数据进行分析,借助分布式计算平台分析有效数据,形成新的语料库,将聊天机器人的后端服务扩展。在补充内容源以及加入知识图谱相关的分析之后,可以将该服务应用于移动客户端,改造后的结果如下图所示(对话图中,左边为聊天机器人,右边为用户的提问):
Iveely Brain是Iveely搜索引擎下基于上下文搜索服务的应用,交互式搜索以及精准性问答是搜索引擎在未来一段时间中的发展趋势,目前行业中出现了不少聊天机器人,但是真正能够把聊天机器人做好的要么是大型互联网公司(Facebook、百度等一类),要么是占据行业优势的企业(银行、政务等一类)。Iveely是“I void everything,except love you!”的简写,包括了Iveely.Computing\Iveely.Database\Iveely.Framework等,或者直接在Maven中搜索“iveely”获得对项目的直接使用。
最后,谢谢一直对Iveely搜索不断关注的同学!
【开源】一个基于智能问答的聊天机器人实现