AI数据库 – Grakn.ai初识篇 – 利用工程师思维来操作图数据库

首先

我目前在公司负责聊天机器人,目前在考虑架构的同时,也在评估各个模块(解决方案等)。尝试了很多技术,但无论是哪种技术,哪个平台,方向都差不多,且对于让机器人变得“聪明”这一点并没有太多关注。最终智能是来自后端服务,这对于机器人来说并不是责任范畴,虽然这样说可能有些片面。

在谈到数据服务时,情况可能不如预期地顺利。虽然业务流程可能会成为规则引擎或流程,条件判断可能需要查询关系型数据存储,但对于那些逻辑上无法适应于以上两类的事物,我们该怎么办呢?这样的构建将变得非常复杂。特别是像机器人这样,用户的背景可能会频繁变化(”啊不,我还是想了解医疗产品”),可能涉及跨引擎的上下文(”说起来,我刚刚选的产品的年龄限制是多少?”),如果用控制器管理杂乱的上下文,会变得复杂且无法跟踪对话。我们确实需要一个灵活的、能够接纳各种情况的”智能盒子”。有没有什么东西可以满足这个需求呢…

在这种背景下,决定尝试使用图数据库,特别是Grakn.ai引擎。

Grakn.ai是什么

Grakn.ai是由Haikal Pribadi在2015年开发的图数据库,并以开源形式(GitHub)发布。其许可证为GPL-3.0。开发机构为Graken Labs。数据结构采用图模型,但与通常的图数据库略有不同。

希望你能宽容地看待,虽然它带有「Database for AI」这样的字样,但是现在只要带上AI这个词就能引起关注。

特徵

    1. 可以在数据层之上定义本体层。

 

    1. 实体可以进行继承。(例如,Customer继承于Person)

 

    1. 关系不仅仅限于一对一,还可以进行多对定义。(例如,Marriage:husband / wife / priest / ring)

 

    可以从现有关系中隐含地定义关联性。(例如,对于country-state-city,city属于country)

提到图形时,人们往往会想象成将集合知识(比如语义网络)以图形化的形式呈现,但是Grakn.ai与此不同。它仅仅是一个数据存储库,通过利用约束可以推导出未知的关联性,这是正确的。虽然这与其本来的目的,即能够统一管理各种类型的元数据有些偏离,但以非关系型且类似于面向对象的方式对元数据进行建模还是非常实用的。

这个1(指方法/技术)相当复杂,以前在为每个域名进行图形设计时需要一定的专业知识,但是通过面向对象的思维可以进行建模。实际上,传统的继承存在,但聚合/组合的概念并不存在,因此建模方法是不同的。行为概念也较为模糊,所以没有接口的定义。不过,这个想法是接近的,首先从继承的概念开始对实体进行定义,同时在这个阶段进行一定程度的推断(演绎)以进行建模。

如果能够巧妙地将2和4结合起来构建本体论,会得出没有明确定义的相关性。嗯,简而言之,这就是Grakn.ai所称之为”推理”(Inference)的优势。虽然在图论中也有概念称为”Inference Graph”,以此思想为主要基础,但Grakn.ai是不同的。它的卖点仅仅是”能够进行图工程化”。

系统配置

    • Jetty / Groovy / Akka / Antlr / Jackson / etc.

 

    • TinkerPop

 

    • Cassandra

 

    • Redis

 

    • Kafka (0.17でコアから削除)

 

    Zookeeper(0.17でコアから削除)

这个项目基本上是用Java编写的,访问原始数据依赖于TinkerPop。据说,即使底层数据层发生变化,很少会更换TinkerPop。但是,目前它仍处于0.x版本,并且经常会有超出重构的架构更改,所以未来的情况还不清楚。

环境

以一个包含所有库的ZIP文件形式公开(当然也可以自己构建)。基本上只需解压并运行shell命令即可使用,非常方便。支持的操作系统环境为Max OS和Linux。遗憾的是,在Windows上无法运行,但我们正在考虑解决办法。在启动时,先启动Cassandra和Redis,然后启动Grakn,但可以更改配置以将其部署到现有的Cassandra中(当然了)。

需要注意的是,必须设置JAVA_HOME。而且只支持Java 8。(因为Cassandra不支持Java 9,所以无法运行。)

下一次

因为只有Windows环境可用,所以首先在Azure上启动Linux虚拟机并进行设置,然后加载测试数据并浏览图形。

广告
将在 10 秒后关闭
bannerAds