知识图谱 ——知识存储与检索

前言

  • 知识的存储
    • 1.基于表结构的存储
      • (1)三元组
      • (2)类型表
      • (3)关系数据库
    • 基于图结构
  • 知识图谱的检索
    • 1、常见查询语言
      • (1)SQL(Structured Query Language,结构化查询语言)
      • (2)SPARQL语言
    • 2.图检索技术
      • (1)子图筛选
      • (2)子图同构判定

知识图谱是一种有向图结构,描述了现实世界存在的实体、事件或者概念以及它们之间的关系,为自动问答、信息检索等应用提供支撑。其中,图中的节点表示实体、事件或概念,图中的边表示相邻节点间的关系,如下图所示。

每一个节点表示一个实体,每个实体都是某一抽象概念的实例。这些抽象概念被称为实体类型,如:人物、城市等。
实体除了具有类型信息,还具有丰富的属性信息(蓝色部分),这些属性信息用于刻画实体的内在特性。

知识的存储

1.基于表结构的存储

(1)三元组

知识图谱中的知识是通过RDF进行表示的,其基本构成单元是事实。每个事实是一个三元组 (S, P, O)

S 是主语(Subject),其取值可以是实体、事件或概念中的任何一个;
P 是谓语(Predicate),其取值可以是关系或属性;
O 是宾语(Object),其取值可以是实体、事件、概念或普通的值(eg:数字、字符串等)

例如下图:

RDF数据
<S,			P,				O>
<费米,		主要成就,		93号元素>
<玻恩,		类型,			数学家>
...			...				...

优点: 简单直接、易于理解;
缺点:

1. 整个知识图谱都存储在一张表中,导致单表的规模太大。对大表进行查询、插入、删除、修改等操作的开销很大,这将导致KG的实用性大打折扣。
2. 复杂查询在这种存储结构上的开销巨大。由于数据表只包括三个字段,因此复杂的查询只能拆分称若干简单查询的符合操作,大大降低查询的效率。

(2)类型表

为每种类型构建一张表,同一类型的实例存放在相同的表中。表中的每一列表示该类实体的一个属性,每一行存储该类实体的一个实例。
示例:

  • 城市表
主体对象 邮编
南阳 473000

(3)关系数据库

关系数据库通过 属性 对现实世界中的事物进行描述。

  • 每个属性的取值范围所构成的集合,称为对应属性的 域
  • 属性的取值只能是原子数据。(原子数据:不能进步拆分的数据,eg:整数、字符串等)
  • 关系数据库以二维表对数据进行组织和存储,表的每一列表示一个属性,每一行表示一条记录。

基于图结构

基于图结构的存储,可直接准确地反映KG的内部结构,有利用对知识的查询,可借鉴图论算法,有利于对知识深度挖掘及推理。

  • 节点:表示实体,可以定义属性(用于描述实体特性)。
  • 边:表示实体之间的关系,可以定义边的属性。
  • 属性:描述节点或边的特性。eg:人物(节点)的姓名、夫妻关系(边)的起止时间等。

基于图结构的存储,从实体出发,不同实体对应的节点可定义不同的属性

常见图数据库: Neo4j、OrientDB、InfoGrid、HyperGraphDB、InfiniteGraph(分布式)等

  • Neo4j:开源、高性能、本地数据库(访问速度快)、轻量级;
  • OrientDB:开源文档-图数据库、多模式、本地数据库;

知识图谱的检索

1、常见查询语言

KG是通过数据库进行存储的,大部分数据库系统通过形式化的查询语言为用户提供访问数据的接口,关系型数据库的标准查询语言是SQL,图数据库的标准查询语言是SPARQL。

(1)SQL(Structured Query Language,结构化查询语言)

主要功能:对数据的插入、修改、删除、查询四种操作。
可以查看资料链接:sql常用操作

(2)SPARQL语言

SPARQL是由W3C为RDF数据开发的一种查询语言和数据获取协议,被广泛应用于图数据库。

数据插入——INSERT DATA
向表示的RDF中插入以下三元组:

ns:费米  ns:老师  ns:玻恩.
ns:玻恩  ns:类型  ns:数学家.
ns:玻恩  ns:类型  ns:物理学家.

==》对应的 SPARQL 语句

prefix ns: <http://example.org/ns#>
INSERT DATA {
ns:费米  ns:老师  ns:玻恩 .
ns:玻恩  ns:类型  ns:数学家 ;
         ns:类型  ns:物理学家 .
}

数据删除——DELETE DATA
基本语法:DELETE DATA 三元组数据,其中三元组数据可以是多个三元组。对于给定的每个三元组,若其在RDF图中,则删除,否则忽略该三元组。
向表示的RDF中删除三元组 (ns:奥本海默 ns:类型 ns:物理学家),注意删除单个三元组

prefix ns: <http://example.org/ns#>
DELETE DATA {
ns:奥本海默 ns:类型 ns:物理学家 .
}

数据更新
数据更新是指更新RDF图中三元组的值,SPARQL通过组合 INSERT DATA 语句和 DELETE DATA 语句来实现数据更新的功能。
修改三元组(ns:费米 ns:出生日期 “1902/09/29”)修改为(ns:费米 ns:出生日期 “1901/09/29”)

prefix ns: <http://example.org/ns#>
DELETE DATA {ns:费米 ns:出生日期 "1902/09/29" .};
INSERT DATA {ns:费米 ns:出生日期 "1901/09/29" .}

数据查询
四种形式:SELECT、ASK、DESCRIBE 和 CONSTRUCT。

  • SELECT:从KG中获取满足条件的数据;
  • ASK:用于测试KG中是hi否存在满足给定条件的数据,若存在则返回“YES”,否则为“NO”,该查询不返回具体的匹配数据;
  • DESCRIBE:用于查询和制定资源相关的RDF数据,这些数据形成了对给定资源的详细描述;
  • CONSTRUCT:根据查询图的结果生成RDF。
    具体参考下列资料:SPARQL查询语句

2.图检索技术

问题的提出: 基于图结构的存储方式能够直观灵活地对知识进行表示和存储,而标准的图查询算法复杂度较高,何如提高图查询的效率成为KG研究的重要问题。
定义(即子图匹配问题):NP完全问题(目前尚不存在多项式时间复杂度内可解决的算法)

  • 在给定查询图 Q 和目标图集 D = { G i } 的条件下,在 D 中找出所有与 Q 同构的子图。

(1)子图筛选

图索引技术是实现子图筛选的有效方法。在数据预处理阶段进行。
基本原理:首先根据图上的特征信息建立索引,在进行子图匹配时,根据查询图上的特征能够快速地从图数据库中检索得到满足条件的候选子图,避免在全部子图上进行匹配。

(2)子图同构判定

常用算法:

  • Ullmann算法(也称枚举算法)——能够枚举出所有的同构子图
  • VF2算法

你可能感兴趣的:(知识图谱,知识图谱,人工智能)