CAS-KG——知识图谱数据的存储与检索

说明:CAS是国科大的简称,KG是知识图谱的缩写,这个栏目之下是我整理的国科大学习到的知识图谱的相关笔记。

课程目标

  • 了解以知识图谱为代表的大数据知识工程的基本问题和方法
  • 掌握基于知识图谱的语义计算关键技术
  • 具备建立小型知识图谱并据此进行数据分析应用的能力

教学安排
详情请见博客:CAS-KG——课程安排



1. 知识图谱大数据

知识图谱相关概念

语言与图谱:知识载体
知识图谱是完全形式化的,方便机器进行处理。
在这里插入图片描述
知识图谱
知识图谱是一种有向图结构,描述了现实世界中存在的实体、事件或者概念以及它们之间的相关关系。
在这里插入图片描述

  • 实体:Cristiano Ronaldo, Jos Dinis Aveiro, Real Madrid CF、马赛约等
  • 实体类型:人物、国家、城市、组织机构等
  • 属性:人物有姓名、性别、出生日期、兴趣爱好、职业等属性;
    国家有国庆日、国家代码、货币、时区、等属性
  • 关系:人物和人物间的同事关系、人物和国家间的国籍关系、城市和国家间的属于关系等

知识图谱中的知识表示
知识图谱中的知识是通过RDF的结构进行表示的,其基本构成单元是事实三元组,每个事实被表示为一个形如<subject, predicate, object>的三元组。

  • subject: 主体(也称主语),其取值通常是实体、事件或者概念中的任何一个
  • predicate:谓词(也称谓语),其取值通常是关系或者属性
  • object:客体(也称宾语),其取值既可以是实体、事件、概念,也可以是普通的值(如数字、字符串等)

知识图谱中的知识表示(示例)

知识图谱中的知识是通过RDF的结构进行表示的,其基本构成单元是事实,每个事实被表示为一个形如<subject, predicate, object>的三元组。
在这里插入图片描述

  • 实体:Pepe, Real Madrid CF、Maceio
  • 属性:gender, height, date of birth, capacity, short name, creation date, area, elevation, postal code
  • 属性值:male, 1.88m, 1983/02/26, 81,044, RM, 1902/03/06, 511km², 7m, 57000-000
  • 关系:team, place of birth
    在这里插入图片描述

知识图谱:图数据

  • 属性(自身性质)
  • 拓扑结构(相互关系)
    在这里插入图片描述

应用方向

广泛应用的大规模图结构数据
在这里插入图片描述
应用方向:社交网络
在这里插入图片描述
应用方向:路径规划
求取首都机场到中科院自动化所乘地铁的最短距离或最快交通线路
在这里插入图片描述
应用方向:生物学
图结构在生物学上已经得到广泛应用
在这里插入图片描述
应用方向:有机化学
化合物的性质与复杂化学反应的分析
在这里插入图片描述
应用方向:软件剽窃检测
目前软件剽窃检测的新方法是基于图模式匹配,将代码先转化为程序依赖图,然后再通过图匹配方法进行检测
在这里插入图片描述
应用方向:健康医疗大数据
运用健康医疗大数据构建知识图谱
在这里插入图片描述

大规模图数据特点

大规模图数据特点

  • “4V”特点
    ➢ 规模浩大(Volume)
    ➢ 生成快速(Velocity)
    ➢ 种类繁多(Variety)
    ➢ 可靠性(Veracity)
    在这里插入图片描述
  • 倾斜的度分布
    在这里插入图片描述
  • 小世界现象
    在这里插入图片描述
  • 不清晰的社区结构
    在这里插入图片描述
    总的来说
  • 局部特征多样性
  • 关联数据复杂性
  • 拓扑结构时变性

知识图谱:大规模图数据

在这里插入图片描述

知识图谱数据管理

知识图谱的目标是构建一个能够刻画现实世界的知识库,为自动问答、信息检索等应用提供支撑。因此,对知识的持久化存储并提供对目标知识的高效检索是合格的知识图谱(系统)必须具备的基本功能。

  • 知识图谱数据模型
    ➢ RDF图模型
    ➢ 属性图模型
  • 知识图谱数据的存储
    ➢ 基于表结构的存储
    ➢ 基于图结构的存储
  • 知识图谱数据的检索
    ➢ 声明式查询语言
    ➢ 过程式查询语言

2. 知识图谱数据模型

在这里插入图片描述

RDF图模型

在这里插入图片描述
G={(屠呦呦,type,药学),
(屠呦呦,Birth_date,1930-12-30),
(屠呦呦,Citizenship,中国),
(屠呦呦,Name,”屠呦呦”),
(诺贝尔医学奖,Awarded,屠呦呦),
(诺贝尔医学奖,type, Nobel Prizes),
(诺贝尔医学奖,Name, Nobel Prize in Physiology or Medicine),
(诺贝尔医学奖,Location, Stockholm, Sweden),
(诺贝尔医学奖,Reward(s), 9 million SEK (2017)} 9个三元组


上述描述有以下问题:

  • 没有对顶点和边上属性的内置支持
  • 如何表示边上的属性?“具体化”(reification,CVT)
  • 顶点与边交集非空:3-uniform hyper-graph(3均匀超图)

定义一个虚拟节点,如下图红色节点描述一个原本不可描述的事件。
在这里插入图片描述

属性图模型

属性图G是5元组:𝑮 = (𝑽, 𝑬, 𝝆, 𝝀,𝝈)

  • V:顶点的有限集合
  • E:边的有限集合
  • 𝝆:𝑬 → (𝑽 ×𝑽):将边关联到顶点对
  • 𝝀:(𝑽 ∪ 𝑬) → 𝑳𝒂𝒃:为顶点或边赋予标签
  • 𝝈: (𝑽 ∪ 𝑬) ×𝑷𝒓𝒐𝒑 → 𝑽𝒂𝒍:为顶点或边关联属性

在这里插入图片描述

比较

在这里插入图片描述
知识图谱数据模型典型示例

  • 更类似RDF图模型的图谱:Freebase
    在这里插入图片描述
  • 更类似属性图模型的图谱:WikiData
    在这里插入图片描述

3. 知识图谱数据的存储

知识存储方式

  • 类别为中心:基于表的存储
    ➢ 关系数据库
    在这里插入图片描述
  • 实体为中心:基于图的存储
    ➢ RDF为基础的Semantic Web
    在这里插入图片描述
  • 可相互转换

基于表结构的存储

三元组表

三元组表

知识图谱中的事实是一个个的三元组,一种最简单直接的存储方式是设计一张三元组表用于存储知识图谱中所有的事实。
在这里插入图片描述

三元组表特性

基于三元组表的存储方式的优点是简单直接,易于理解;然而缺点也非常明显,主要有以下几点:

  • 每个字段包含不同类型、不同结构的数据。
  • 整个知识图谱都存储在一张表中,导致单表的规模太大。对大表进行查询、插入、删除、修改等操作的开销很大,这将导致知识图谱的实用性大打折扣。
  • 复杂查询在这种存储结构上的开销巨大。由于数据表只包括三个字段,因此复杂的查询只能拆分成若干简单查询的复合操作,大大降低了查询的效率。例如,查询“佩佩的身高和性别是什么?”需要拆分为“佩佩的身高是多少?”和“佩佩的性别是什么?”

三元组表的六重索引

  • 六重索引

    • SPO、SOP、PSO、POS、OSP、OPS
    • Hexastore [Weiss08, VLDB], RDF-3X [Neumann08, VLDB]
  • 优点:
    ➢ 三元组模式查询(triple pattern)的高效执行
    ➢ 任意两个三元组模式的高效归并连接(merge-join)

  • 问题:
    ➢ 6倍空间开销?
    ➢ 更新维护代价

类型表

为每种类型构建一张表,同一类型的实例存放在相同的表中。表的每一列表示该类实体的一个属性,每一行存储该类实体的一个实例。
在这里插入图片描述
类型表的不足

  • 大量数据字段的冗余存储。假设知识图谱中既有“演员”也有“歌手”,那么同属于这两个类别的实例将会同时被存储在这两个表中,其中它们共有的属性会被重复存储。
    在这里插入图片描述
  • 大量的数据列为空值。通常知识图谱中并非每个实体在所有属性或关系上都有值,这种存储方式会导致表中存在大量的空值。
  • 多值属性不便于存储

考虑层级关系的类型表

构建数据表时,将知识图谱的类别体系考虑进来。具体来说,每个类型的数据表只记录属于该类型的特有属性,不同类别的公共属性保存在上一级类型对应的数据表中,下级表继承上级表的所有属性。
在这里插入图片描述
类型表特性

类型表克服了三元组表面临的单表过大和结构简单的问题,但是也有明显的不足之处:

  • 由于数据表是和具体类型对应的,不同的数据表具有不同的结构,因此在查询之前必须知道目标对象的类型才能确定查找的数据表。
  • 当查询涉及到不同类型的实体时,需要进行多表的连接,这一操作开销巨大,限制了知识图谱对复杂查询的处理能力。
  • 知识图谱通常包含丰富的实体类型,因此需要创建大量的数据表,并且这些数据表之间又具有复杂的关系,这为数据的管理增加了很大的难度

关系数据库

基本概念

关系数据库以二维表结构对数据进行组织和存储。

  • 属性 (attribute):表中的每一列称为一个属性(也称字段),用来描述实体集的某个特征。每个属性都有自己的取值范围,称为域。
  • 元组 (tuple):表中的每一行由一个实体的相关属性取值构成,称为元组(也称记录),它相对完整地描述了一个实体。元组中的一个属性值称为分量。
    在这里插入图片描述

上述二维表格有以下限制:

  • 每一属性必须是基本的、不能再拆分的数据类型,如整型、实型、字符型等。结构或数组不能作为属性的类型。
    在这里插入图片描述
  • 属性的所有值必须是同类型、同语义的。如果某一列包含学生的学号,则该表中所有行的此列都必须是学生的学号。
  • 属性的值只能是域中的值。例如学生的性别只能在“男”或“女”中取值。
  • 属性必须有唯一的名字,但不同的属性可以出自相同的域。列在表中的顺序可以任意交换。
    在这里插入图片描述
  • 任意两个元组的值不能完全相同,即不允许有重复的行。行在表中的顺序可以任意交换。

关系数据库属性分类

候选码:能够唯一标识元组的最小的属性集合。

  • 唯一性:候选码在整个表的范围内必须具有唯一的值,不同元组不能具有相同的候选码值。
  • 最小性:候选码所包括的属性必须都是必不可少的,缺少其中的任何一个都不再具备唯一性。
    在这里插入图片描述
  • 例如,在上表中学生的学号、身份证号分别都可以作为候选码;但是(学号, 身份证号)这一属性组不能作为候选码,因为去掉其中任何一个剩下的属性仍然可以作为候选码,因此不满足最小性。

主码:一个数据表可以包含多个候选码,从中任意选取一个作为主码。虽然理论上所有的候选码都可以作为主码,但是实际操作中一般选择单属性组成的候选码作为主码
在这里插入图片描述

  • 在该表中有三个候选码:学号、身份证号、姓名(不重名)。
  • 姓名作主码还是有些限制(不能重名);
  • 身份证号太长,使用不方便;
  • 学号简洁,使用方便,在实际生活中也被用来唯一区分学生,所以选学号作主码最合适。

外码:如果数据表中的某个属性或属性组是其它表的候选码,那么称该属性或属性组是当前表的外码。外码能够保证不同数据表之间数据的一致性。
在这里插入图片描述

  • 班号是班级表的候选码,所以班号是学生表的外码。

主属性与非主属性:包含在任何候选码中的属性称为主属性;相反地,不包含在任何候选码中的属性称为非主属性。

关系数据库完整性约束

关系数据库通过关系完整性约束条件来保证数据的正确性和一致性。所谓关系完整性约束条件主要是指在表和属性(列)上定义的规则,数据库管理系统会依据这些约束条
件维护数据完整性。

  • 域完整性规则
  • 实体完整性规则
  • 参照完整性规则

域完整性规则
在关系数据模型定义时,由用户对属性值的数据类型、长度、单位、精度、格式、值域范围、是否允许为空值等进行限定,规定属性取值必须在其值域中。
在这里插入图片描述
实体完整性
元组(记录)在构成主码的属性上不能有空值且主码的值不能相同。实体完整性主要是为了确保主码能唯一标识元组。
在这里插入图片描述
参照完整性
一个外表的外码取值必须是其主表主码的存在值或空值。
在这里插入图片描述

  • 学生表中班号的取值必须是空值(当事人不知道,所以设为空)或在班级表中班号属性中出现过的值。如果学生表的班号字段允许为空,它取空值表示该学生还没有确定班级;否则只能取班级表出现过的班号值。

关系数据库操作语言

  • 关系数据库的基本操作语言是SQL 。
  • SQL语言以简洁的语法支持关系数据库的各类操作(插入/修改/删除/查询)。
  • SQL语言独立于关系数据库本身,独立于使用的机器、网络和操作系统。

如果选择关系数据库作为知识图谱的存储引擎,那么对知识图谱的所有操作都需要转换为SQL语句才能执行。


关系数据库通过SQL语言为用户提一系列的操作接口,其核心功能包括插入、修改、删除、查询四种操作。

  • 插入 (INSERT):在一个表中插入一条或多条新记录。
  • 修改 (UPDATE):在一个表中修改满足条件的记录的某些字段的值。
  • 删除 (DELETE):从一个表中删除一条或多条满足条件的记录。
  • 查询 (SELECT):从一个或多个表中提取满足条件的数据、生成计算列或汇总数据。

常见的关系数据库存储系统
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基于图结构的存储

将实体看做节点,关系看做带有标签的边,那么知识图谱的数据很自然地满足图模型结构。
在这里插入图片描述
图数据库基于有向图,其理论基础是图论。节点、边和属性是图数据库的核心概念。

  • 节点:节点用于表示实体、事件等对象,可以类比于关系数据库中的记录或数据表中的行数据。例如人物、地点、电影等都可以作为图中的节点。
  • :边是指图中连接节点的有向线条,用于表示不同节点之间的关系。例如人物节点之间的夫妻关系、同事关系等都可以作为图中的边。
  • 属性:属性用于描述节点或者边的特性。例如人物的姓名、夫妻关系的起止时间等都是属性。

图数据模型:节点、边、节点属性、边属性

  • 节点存储(node store)
  • 关系存储(relationship store)
  • 属性存储(property store)

问题:单机系统可扩展性不足,图查询复杂度高

常见的图数据库存储系统
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 知识图谱数据的检索

知识图谱查询语言
在这里插入图片描述

声明式查询语言

语义网回顾

本质:以Web数据的内容(即语义)为核心,用机器能够理解和处理的方式链接起来的海量分布式数据库。
在这里插入图片描述
RDF回顾

RDF(Resource Description Framework,资源描述框架)是一种资源描述语言,其核心思想是利用Web标识符(URI)来标识事物,通过指定的属性和相应的值描述资源的性质或资源之间的关系。
在这里插入图片描述

SPARQL语言

SPARQL是Simple Protocol and RDF Query Language的缩写,是由W3C为RDF数据开发的一种查询语言和数据获取协议,是被图数据库广泛支持的查询语言。和SQL类似,SPARQL也是一种结构化的查询语言,用于对数据的获取与管理.

  • 数据操纵(插入、删除、更新)
  • 数据查询

数据操纵

数据插入:将新的三元组插入到已有的RDF图中。SPARQL通过INSERT DATA语句完成该功能,其基本语法为:
INSERT DATA 三元组数据

  • 三元组数据可以是多条三元组,不同的三元组通过“;” 分隔。如果待插入的三元组在RDF图中已经存在,那么系统会忽略该三元组。

例 将以下两条三元组插入到图1所示的RDF图中。

<http://example/movie1> ns:producer <http://example/person2> 
<http://example/movie1> ns:writer <http://example/person3>

在这里插入图片描述
数据删除:从RDF图中删除一些三元组。SPARQL通过DELETE DATA语句完成该功能,其基本语法为:
DELETE DATA 三元组数据

  • 其中三元组数据可以是多条三元组,不同的三元组通过“;” 分隔。对于给定的每个三元组,如果其在RDF图中,则将其从图中删除,否则忽略该三元组。

例 将以下三元组从图2所示的RDF图中删除。

<http://example/movie1> ns:producer <http://example/person2>

在这里插入图片描述
数据更新:更新RDF图中指定三元组的值。和SQL不同,SPARQL没有定义UPDATE操作,也就是说SPARQL语言没
有直接更新已有数据的方法。但是,可以通过组合INSERT DATA语句和DELETE DATA语句来实现该功能。

  • DELETE DATA:删除待修改的三元组;
  • INSERT DATA:插入修改后的三元组。

例 将图3中三元组 (http://example/movie1 ns:director http://example/person1) 的客体http://example/person1 修改为http://example/person4
在这里插入图片描述

数据查询

SPARQL提供了丰富的数据查询功能,包括四种形式:

  • SELECT:最为常用的查询语句,其功能和SQL中的SELECT语句类似,从知识图谱中获取满足条件的数据。
  • ASK:用于测试知识图谱中是否存在满足给定条件的数据,如果存在则返回“yes”,否则返回“no”,该查询不会返回具体的匹配数据。
  • DESCRIBE:用于查询和指定资源相关的RDF数据,这些数据形成了对给定资源的详细描述。
  • CONSTRUCT:则根据查询图的结果生成RDF。

SELECT语句
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ASK语句
在这里插入图片描述
DESCRIBE语句
在这里插入图片描述
在这里插入图片描述
CONSTRUCT语句
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RDF图查询语言:SPARQL
W3C RDF 标准查询语言

  • 三元组模式(triple pattern)
  • 基本图模式(basic graph pattern)
  • 复杂图模式(complex graph pattern)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Cypher

  • 标准化工作:openCypher
  • https://www.opencypher.org

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PGQL

Oracle在2016年提出:Oracle PGX

  • 与Cypher相比,PGQL完整地支持正则路径查询语义
  • 与SPARQL属性路径仅支持边标签构成的正则路径不同,
  • PGQL通过路径模式(path pattern)表达式定义,还支持正则路径中含有顶点标签条件以及顶点(或边)属性值比较
  • 在提高了属性图上正则路径查询表达力(expressiveness)的同时保持求值复杂度(complexity)不变
    在这里插入图片描述

G-CORE

LDBC图查询语言工作组设计

  • 充分借鉴和融合各种已有图查询语言的优点,在查询表达力和求值复杂度之间寻求最佳平衡

G-CORE与已有图查询语言相比

  • 查询的输入输出均是图,彻底实现了图查询语言的可组合性(composability)
  • 将路径作为与顶点和边同等重要的图查询处理基本元素

过程式查询语言

Gremlin

  • Apache TinkerPop图计算框架
  • 过程式语言:图遍历、导航式游走
  • 更像一种函数式的编程语言接口
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

5. Neo4j使用简介

Neo4j的特点

  • 查询语言Neo4j CQL(与Cyper类似)
  • 遵循属性图数据模型
  • 支持UNIQUE约束
  • 包含一个用于执行CQL命令的UI
  • 支持完整的ACID规则
  • 支持查询数据导出到JSON与XLS格式
  • 提供了REST API,可以被任何编程语言访问
  • 支持两种Java API:Cypher API 和Native Java API 来开发Java应用程序

Neo4j的优点与缺点
一、优点

  • 易于学习
  • 易于表示半结构化数据
  • 性能出众,加载数据快,内存占用低,只需选择需要导入的数据,无需考虑数据大小
  • 简单而强大的数据模型
    二、缺点
  • 支持节点数、关系和属性有限制
  • 不支持SPARQL查询(朴素得讲)
    ➢ 但是可以插件支持: https://github.com/neo4j-contrib/sparql-plugin
  • 不支持Sharding

Neo4j的获取与启动
一、从网址 https://neo4j.com/download/ 下载Neo4j Server
在这里插入图片描述
二、社区版免费,根据自己系统需要选择合适版本(以Linux/Mac 为例)
在这里插入图片描述
三、将下载文件解压,修改名称(例如:NEO4J_HOME ),并在终端NEO4J_HOME的bin目录下输入命令:./neo4j console(注: 该步骤需要确保安装JDK1.8及以上版本)
在这里插入图片描述
四、打开浏览器访问 http://localhost:7474/ ,默认密码neo4j

五、登录完成后的Launcher提供了一部分CQL示例,点击Movie Graph,运行示例代码,创建该图数据库
在这里插入图片描述
在这里插入图片描述
CQL语言
在这里插入图片描述
Neo4j CQL——节点&关系
在这里插入图片描述
在这里插入图片描述
Neo4j CQL——CREATE
在这里插入图片描述
Neo4j CQL——MATCH
在这里插入图片描述
Neo4j CQL——RETURN
在这里插入图片描述
Neo4j CQL——DELETE&REMOVE&SET
在这里插入图片描述
Neo4j CQL——WHERE
在这里插入图片描述
Neo4j CQL——ORDER BY&UNION
在这里插入图片描述
Neo4j CQL——LIMIT&SKIP&IN

在这里插入图片描述
CQL语言
在这里插入图片描述
Neo4j CQL——字符串函数
在这里插入图片描述
Neo4j CQL——聚合函数
在这里插入图片描述
Neo4j CQL——关系函数
在这里插入图片描述

Neo4j——知识图谱的构建

1.打开IDEA,新建Java Project
在这里插入图片描述
2.打开Project Structure对话框,导入jar文件
在这里插入图片描述
3.创建Neo4j数据库
在这里插入图片描述
4.启动数据库
在这里插入图片描述
5.定义节点类型player,team
在这里插入图片描述
6.定义关系类型play_in
在这里插入图片描述
7.创建新节点 playerNode, teamNode,并设置它们的属性
在这里插入图片描述
8.创建新关系relationship,并设置其属性
在这里插入图片描述
9.运行代码,创建数据库
10.代码运行成功后,打开Neo4j数据库目录下的conf中的配置文件,
将第九行内容改为下图所示:
在这里插入图片描述
11.启动数据库,浏览器访问 http://localhost:7474 查看结果
在这里插入图片描述

6. 总结

知识图谱
知识图谱中的知识表示
知识图谱数据模型
知识存储方式
基于图结构的存储模型
知识图谱查询语言
常见图数据库平台


知识图谱数据管理

  • 查询语言的统一
  • 分布式存储方案
  • 分布式查询处理
  • 知识推理的支持
  • 大规模知识图谱的更新维护
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值