38.0 知识图谱之知识存储与知识推理

Posted by 子颢 on October 6, 2018

知识存储

知识图谱的知识(数据)通常存储在图数据库中,图数据库的基本含义是以“图”这种数据结构存储和查询数据。它的数据模型主要是以节点和关系(边)来体现,也可以处理键值对。它的优点是能快速解决复杂的关系问题。

图数据库的种类很多,其中开源的如Apache Jena、RDF4j、gStore等,商业数据库如Virtuoso、AllegroGraph、Stardog等,原生图数据库如Neo4j、OrientDB、Titan等。

Jena

Apache Jena是一个免费开源的支持构建语义网络和数据连接应用(知识图谱)的Java框架,其架构如下: KG 其中,从下往上分别是知识存储层、知识推理层、知识表示层。最上方有一个Fuseki模块,它相当于Apache Jena的客户端,我们的很多操作都是在它提供的各种工具和接口上进行的。

Neo4j

Neo4j是一个高性能的NOSQL图形数据库,直接将数据存储在网络(图)中,并且是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎。 KG Neo4j具有以下特性:

Jena构建知识图谱实例

下面通过一个构建音乐知识图谱的示例,并结合Apache Jena来具体给大家讲解。 KG track是歌曲,歌曲与歌曲之间通过某种关系进行关联,进而将所有音乐实体组织成这种网状结构,虚线表示可以动态添加的内容,更加说明了知识图谱是一种schemaless的数据组织形式。 KG 数据以RDF三元组的形式进行导入和底层存储,属性和关系都通过三元组的形式组织(区别于Neo4j)。

  1. 数据导入:
    /jena-fuseki/tdbloader --loc=/jena-fuseki/data filename
    

    filename为上图中的三元组文件路径。

  2. 启动Fuseki服务:
    /jena-fuseki/fuseki-server --loc=/jena-fuseki/data --update /music
    

    music为图数据库name。启动后,服务会监听本地的3030端口。

  3. 数据CRUD操作:数据的增删改查有两种方式,一种是直接通过Fuseki界面执行(http://localhost:3030): KG 另一种是使用endpoint接口执行: KG query_url:http://localhost:3030/music/query,update_url:http://localhost:3030/music/update。(需要先通过pip安装SPARQLWrapper) 对于更多的SPARQL和Jena用法请参见官方文档。

知识推理

上一节讲到的知识查询,就是利用图结构进行语义查询,其核心是一个子图匹配的过程,可能还会用到图计算(PageRank、最短路径等)和图挖掘的技术(Apache Giraph、Spark GraphX),这些其实都是浅层次的知识推理。
所谓推理就是通过各种方法获取新的知识或者结论,这些知识和结论满足语义。知识推理就是在已有的知识库的基础上,进一步挖掘隐含的知识,从而丰富、扩展知识库。 知识推理的常用方法有基于Tableaux运算的方法、基于逻辑编程改写的方法、基于一阶查询重写的方法、基于产生式规则的方法等。

基于Tableaux运算适用于检查某一本体的可满足性(TRUE or FALSE),以及实例检测。 KG 可以得出Allen不在Woman的结论。

本体推理具有一定的局限性,如仅支持预定义的本体公理上的推理,无法针对自定义的词汇支持灵活推理,用户无法定义自己的推理过程等。因此引入规则推理,它可以根据特定的场景定制规则,以实现用户自定义的推理过程。 这里引入Datalog语言,它可以结合本体推理和规则推理。 基于逻辑编程改写的方法可以根据特定的场景定制规则,以实现用户自定义的推理过程。 KG

基于一阶查询重写的方法可以高效的结合不同数据格式的数据源,重写方法关联起了不同的查询语言,以Datalog语言为中间语言,首先重写SPARQL语言为Datalog,再将Datalog重写为SQL查询。上一节讲到的知识查询其实就是这种方式。

基于产生式规则的方法是一种前向推理系统,可以按照一定机制执行规则从而达到某些目标。通常被应用于自动规划、专家系统上。 产生式系统由事实集合(Working Memory)、产生式/规则集合、推理引擎组成。

社群


分享到: 微博 微信


返回顶部