第八章 知识图谱和检索
知识图谱是一种 有向图结构,描述了现实世界中存在的实体、事件或者概念以及它们之间的关系。其中图的节点表示实体、事件或者概念,图的边表示相邻节点间的关系
知识图谱的存储
知识图谱中的知识是通过RDF结构进行表示的,其基本构成单元是事实。每个事实是一个三元组 (S,P,O) ,其中S是主语,其取值可以是实体、事件或者概念中的任何一个;P是谓语,其取值可以是关系或者属性;O是宾语,其取值可以是实体、事件、概念或者普通的值(e.g:数字、字符串等)
按存储策略的不同,可分为 基于表结构的存储 和 基于图结构的存储
基于表结构的存储
三元组表
优点:简单直接,易于理解
缺点:
- 整个知识图谱都存储在一张表中,导致单表的规模太大 ⇒ \Rightarrow ⇒ 实用性太差
- 复杂查询在这种存储结构上开销巨大
类型表
为每种类型构建一张表,同一类型的实例存放在相同的表中,虽然可以克服了三元组表的不足,但有新的问题:① 大量数据字段的冗余存储 ; ② 大量的数据列为空值(这是由于并非每个实体在所有属性或关系上都有值)
解决办法: 在构建数据表时,将知识图谱的类别体系考虑进来,即 每个类型的数据表只记录属于该类型的特有属性,不同类别的公共属性保存上一级类型对应的数据表中,下级表继承上级表的所有属性
不足:
- 由于类型表的不同字段表示了不同的属性或者关系,导致在查询时必须指明属性或关系,无法做不确定属性或关系的查询
- 由于数据表示和具体类型对应的,不同类型的数据表具有不同的结构,因此在查询之前必须知道目标对象的类型才能确定查找的数据表
- 当查询涉及不同类型的实体时,需要进行多表的链接,这一操作开销巨大,限制了知识图谱对复杂查询的处理能力
- 知识图谱通常包含丰富的实体类型,因此需要创建大量的数据表,并且这些数据表之间又具有复杂的关系 ⇒ \Rightarrow ⇒ 为数据的管理加大了难度
关系数据库
关系数据库以二维表对数据进行组织和存储,表的每一列表示一个属性,每一行表示一条记录。
每张表可以由任意数量的属性组成,这些属性按照各自的特点可以分为以下几类:
- 候选键
- 主键
- 外键
- 主属性和非主属性
常见的关系数据库:
- DB2
- Oracle
- Microsoft SQL Server
- PostgreSQL
- MySQL
基于图结构的存储
能够准确地反映知识图谱的内部结构,有利于对知识的查询
基于图结构的存储模型
节点表示实体,边表示实体之间的关系,其中节点可以定义属性,用于描述实体的特征,也可以为边定义属性
常用的图数据库:
- Neo4j
- OrientDB
- InfoGrid
- HyperGraphDB
- Infi