(七)图谱搜索——利用AIML进行图谱问答(下)
在上一篇文章中,我简单的叙述了下人机交互的基本内容以及人机交互中涉及到的NLP技术,接下来的文章中,我将侧重于实践部分,本篇文章将从一个简单的DEMO(其实也不是那么简单)——一个基于知识图谱和AIML模板的知识问答。实际上基于模板的知识库问答在工业中比较常见(经过一定调研),接下来,我将从知识图谱和问答架构这两方面的建立开始论述。这个框架见下图。
这个知识问答是我基于一个电影知识图谱做的,其实这个小Demo的实现时间是在金融图谱文章之前做的,所以用的是一个比较简单的图谱,而且这个图谱也是参照别人的例子做的,在这里先把数据贴出来,和上篇文章一样,把这个数据导入mysql,然后导入neo4j,就是下面这个样子:
这部分内容和上一篇一样,甚至更简单,这里就不详细说明了,这篇博客主要讲一下我使用AIML的使用过程。
啥是AIML?
AIML,全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由Richard Wallace和世界各地的自由软件社区在1995年至2002年发明的。
具体的AIML的语法就不详细讲了,具体的参见这篇博客https://blog.csdn.net/woowindice/article/details/302298,如果想了解更多这部分内容可以去网上搜,我的理解就是一个利用模板进行问答,对话的工具。
对于AIML的安装,这里建议不要安装中文版本,直接pip install aiml,然后将中文分词然后转换为Unicode编码格式。
2.接下来讲一下我们设置的实现功能
KGQA支持查询的问题(提问模式不唯一):
(1).单人电影查询:
章子怡演过什么电影?
(2).双人电影查询:
周星驰和巩俐合作过什么电影?
(3).电影评分查询:
夜宴这部电影多少分?
(4).电影介绍查询:
功夫讲的什么
(5).电影上映日期查询
(6).电影主要演员查询
先来展示一下最终的实验效果:
接下来讲一下AIML的使用过程:
1.启动AIML并调用模板库:
2.输入问题,AIML响应,搜索模板库做出回应
代码真就这么简单,实际上AIML的模板在这里一次性完成了意图识别和实体识别两个任务,我举个例子:
1.输入“甄子丹和周润发合作过什么电影”
2.分词结果:
3.接下来AIML就会去刚才加载的模板库里寻找这句话匹配的模板,就是下面这个:
这里返回的response就是这个
这里面0代表就是意图,%就是我自己在模板中设置的一些符号,用来提取实体。
4.根据意图识别结果查询图谱
对应的查询语句长这样:
最后就得到结果啦!!
这只是一个相对简单的Demo,用于入门AIML吧,实际上模板的方法挺实用的,毕竟生成式的问答在工程上的难度成本都挺大的,后面我会介绍sequence to sequence模型,就是一个经典的生成式模型!