美文网首页知识图谱
知识图谱学习笔记(九)——知识图谱的存储与检索

知识图谱学习笔记(九)——知识图谱的存储与检索

作者: aidanmomo | 来源:发表于2020-01-03 10:36 被阅读0次

    知识图谱的存储与检索

    1. 概述

    • 知识图谱中的知识表示:知识图谱中的知识是通过RDF的结构进行表示的,其基本构成单元是事实,每个事实被表示为一个形如<subject, predicate, object>(<主体, 谓词, 客体>)的三元组。其中:
      • subject:其取值通常是实体、事实或者概念中的任何一个。
      • predicate:取值通常是关系或者属性。
      • object:取值既可以是实体、事件、概念,也可以是普通的值。
    • 知识图谱的目标是构建一个能够刻画现实世界的知识库,为自动问答、信息检索等应用提供支撑。因此,对知识的持久化存储并提供对目标知识的高效检索是合格的知识图谱必须具备的基本功能。

    2. 知识图谱的存储

    • 按照存储方式的不同,知识图谱的存储可以分为基于表结构的存储和基于图结构的存储。
      • 基于表结构的存储:利用二维的数据表对知识图谱中的数据进行存储:三元组表、类型表、关系数据库。
      • 基于图结构的存储:利用图的方式对知识图谱中的数据进行存储:图数据库

    2.1 基于表结构的存储

    • 三元组表:知识图谱中的事实是一个个的三元组,一种最简单直接的存储方式是设计一张三元组表用于存储知识图谱中所有的事实。

      • 优缺点:
        • 优点:简单直接,易于理解。
        • 缺点:
          1. 整个知识图谱都存储在一张表中,导致单表的规模太大。对大表进行查询、插入、删除、修改等操作的开销很大,这将导致知识图谱的实用性受限。
          2. 复杂查询在这种存储结构上的开销巨大。由于数据表只包括三个字段,因此复杂的查询智能拆分成若干简单查询的复合操作,大大降低了查询的效率。


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


      在这里插入图片描述
      • 类型表的不足:
        1. 大量数据字段的冗余存储。假设知识图谱中既有“演员”也有“歌手”,那么同属于这两个类别的实例将会同时被存储在这两个表中,其中它们共有的属性会被重复存储


          在这里插入图片描述
        2. 大量的数据列为空值。通常知识图谱中并非每个实体在所有属性或关系上都有值,这种存储方式会导致表中存在大量的空值。
    • 考虑层级关系的类型表

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


        在这里插入图片描述
      • 不足之处:
        1. 由于数据表是和具体类型对应的,不同的数据表具有不同的结构,因此在查询之前必须知道目标对象的类型才能确定查找的数据表。
        2. 当查询涉及到不同类型的实体时,需要进行多表的连接,这一操作开销巨大,限制了知识图谱对复杂查询的处理能力。
        3. 知识图谱通常包含丰富的实体类型,因此需要创建大量的数据表,并且这些数据表之间又具有复杂的关系,这为数据的管理增加了很大的难度。
    • 关系数据库
      • 基本概念:关系数据库以二维表结构对数据进行组织和存储。
        • 属性(attribute):表中的每一列称为一个属性(字段),用来描述实体集的某个特征。每个属性都有自己的取值范围,称为域。
        • 元组(tuple):表中的每一行由一个实体的相关属性取值构成,称为元组(记录),它相对完整地描述了一个实体。元组中的一个属性值称为分量。


          在这里插入图片描述
        • 上述二维表格有以下限制:
          1. 每一属性必须是基本的、不能再拆分的数据类型,如整型、实型、字符型等。结构或数组不能作为属性的类型。
          2. 属性的所有值必须是同类型、同语义的。如果某一列包含学生的学号,则该表中所有行的此列都必须是学生的学号。
          3. 属性的值只能是域中的值。
          4. 属性必须有唯一的名字,但不同的属性可以出自相同的域。列在表中的顺序可以任意交换。
          5. 任意两个元组的值不能完全相同,即不允许有重复的行。行在表中的顺序可以任意交换。
      • 关系数据库属性分类
        • 候选码:能够唯一标识元组的最小的属性集合。
          1. 唯一性:候选码在整个表的范围内必须具有唯一的值,不同元组不能具有相同的候选码值。
          2. 最小性:候选码所包括的属性必须都是必不可少的,缺少其中的任何一个都不具备唯一性。
        • 主码:一个数据表可以包含多个候选码,从中任意选取一个作为主码。虽然理论上所有的候选码都可以作为主码,但是实际操作中一般选择单属性组成的候选码作为主码。
        • 外码:如果数据表中的某个属性或属性组是其它表的候选码,那么称该属性或属性组是当前表的外码。外码能够保证不同数据表之间数据的一致性。
        • 主属性与非主属性:包含在任何候选码中的属性称为主属性;相反地,不包含在任何候选码中的属性称为非主属性。
      • 关系数据库完整性约束
        • 关系数据库通过关系完整性约束条件来保证数据的正确性和一致性。主要是指在表和属性上定义的规则,数据库管理系统会依据这些约束条件维护数据完整性。
        • 域完整性:在关系数据模型定义时,由用户对属性值的数据类型、长度、单位、精度、格式、值域范围、是否允许为空值等进行限定,规定属性取值必须在其值域中。
        • 实体完整性:元组在构成主码的属性上不能有空值且主码的值不能相同。实体完整性主要是为了确保主码能唯一标识元组。
        • 参照完整性:一个外表的外码取值必须是其主表主码的存在值或空值。


          在这里插入图片描述
      • 关系数据库操作语言
        • 关系数据库的基本操作语言是SQL(Structured Query Language)
        • SQL语言以简洁的语法支持关系数据库的各种操作
        • SQL语言独立于关系数据库本身,独立于使用的机器、网络和操作系统。

    2.2 基于图结构的存储

    • 将实体看做节点,关系看做带有标签的边,那么知识图谱的数据很自然地满足图模型结构。

    • 图数据库基于有向图,其理论基础是图论。节点、边和属性是图数据库的核心概念。

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

    常见的图数据存储系统

    • Neo4j: Neo4j是一个开源的图数据库系统,它将结构化的数据存储在图上而不是表中。Neo4j基于Java实现,是一个具备完全事务特性的高性能数据库,具有成熟数据库的所有特性。Neo4j是一个本地数据库,不需要启动数据库服务器,应用程序不用通过网络访问数据库服务,访问速度快。https://neo4j.com/

    • OrientDB:是一个开源的文档-图混合数据库,兼具图数据库对数据强大的表示及组织能力和文档数据库的灵活性及很好的可扩展性。该数据库同样是本地的,支持许多数据库的高级特性,如事务、快速索引、SQL查询等。http://orientdb.com/

    • HyperGraphDB:同样是开源的存储系统,并依托于BerkeleyDB数据库,最大的特点是超图,从数学角度讲,有向图的一条边只能指向一个节点,而超图则可以指向多个节点,HyperGraphDB还允许一条边指向其它边,因此有更强大的表示能力。http://www.hypergraphdb.org/

    • InfiniteGraph:一个基于Java语言开发的分布式图数据库系统。http://www.objectivity.com/ products/infinitegraph/

    3. 知识图谱的检索

    3.1 关系数据库查询:SQL语言

    SQL语言从功能上可以分为四个部分:数据查询、数据操纵、数据定义和数据控制

    3.2 图数据库查询:SPARQL语言

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

    3.2.1 数据操纵

    • 数据插入
    INSERT DATA 三元组数据
    

    三元组数据可以是多条三元组,不同的三元组通过";"分隔。

    • 数据删除
    DELETE DATA 三元组数据
    
    • 数据更新
      通过DELETE和INSERT命令来实现,无法直接更新已有的数据

    • 数据查询

      • SELECT:从知识图谱中获取满足条件的数据。
      • ASK:用于测试知识图谱中是否存在满足给定条件的数据,如果存在寸返回yes,否则返回no
      • DESCRIBE:用于查询和指定资源相关的RDF数据,这些数据形成了对给定资源的详细描述。
      • CONSTRUCT:根据查询图的结果生成RDF。

    相关文章

      网友评论

        本文标题:知识图谱学习笔记(九)——知识图谱的存储与检索

        本文链接:https://www.haomeiwen.com/subject/mmczoctx.html