知识图谱赵军学习笔记(八)--知识存储和检索

知识存储和检索

知识图谱是一种有向图结构,描述了现实世界中存在的实体、事件或者概念以及他们之间的关系。图中的节点表示实体、事件或者概念,图中的边表示相邻节点的关系。

知识图谱的存储

  1. 基于表结构的存储
    利用二维的数据表对知识图谱中的数据进行存储。根据不同的设计原则,可以具有不同的表结构,比如
  • 三元组表
    如jena等,优点是简单直接,易于理解,
    缺点是:
    • 整个知识图谱都存储在一张表中,导致单表的规模太大。
      相应的插入,删除,查询,修改的操作开销也大。对实用性大打折扣。
    • 复杂查询在这种存储结构上的开销巨大
      复杂查询拆分成若干个简单查询的操作,降低了查询的效率。
  • 类型表
    为每个类型构建一张表,同一类型的实例放在相同的表中。每一行存实例,每一列代表实体的一个属性。
    缺点:
    • 大量数据字段的冗余存储
      假如实例又是物理学家又是数学学家,那么同属于这两个类别的实例会同时存储在这两个表中,共有属性会重复存储。
    • 大量的数据列为空值
      解决的方法可以是特有属性拿出来,保存在上一级类型对应的数据表中,下级表继承上级表的所有属性。
      缺点:
    • 查询时必须指明属性或者关系,无法做到不确定属性或关系查询
    • 表和具体类型对应,不同类型的数据具有不同的结构,查询时也要知道目标对象的类型才能确定查找的数据表。
    • 查询不同类型的实体,需要多表的链接,开销巨大
    • 丰富实体类型的,要建大量的数据表。
  • 关系数据库
    关系数据库通过属性对现实世界中的事物进行描述。一行一个记录,一列表示一个属性。
    • 候选集
      能够唯一标识一条记录的最少的属性集合
    • 主键
      一个数据库包含多个候选集,从中任意选取一个为主键。
    • 外键
      数据表中的某个属性或属性组是其他表的候选集,那么为该表的外键。
    • 主属性与非主属性
      包含在任何候选键中的属性为主属性,不包含在任何候选键中的属性为非主属性。
      对知识图谱的操作要转为SQL语句执行。
  1. 基于图结构的存储
    基于图的能直接反应图谱的内部结构,有利于知识的查询。也可以借鉴图的算法,有利于知识的深度挖掘与推理。
  • 基于图结构的存储模型
    从实体出发
    优点
    • 利用有向图对知识图谱的数据进行建模
    • 不仅可以为节点定义属性,还可以为边定义属性
  • 常用图数据库
    neo4j:开源、高性能,轻量
    orientDB
    infogrid
    hypergraphdb
    infiniteGraph

知识图谱的检索

常见形式化查询语言

关系库:SQL
图数据库:SPARQL

  • SQL语言
    • 数据插入
      insert into 表名 values (值1,值2,…)[,(值1,值2,…),…]
      值可以为多个
      如:
      insert into Triples Values (‘费米’,‘老师’,‘伯恩’),(‘伯恩’,‘类型’,‘数学家’)
    • 数据修改
      update 表名 set 列1=值1,列2=值2,…where 条件
      where指定需要修改的记录,不然所有的都被修改
      update triples set O=‘1901’ where s=‘费米’ and P=‘出生日期’
    • 数据删除
      delete from 表名 where 条件
      delete from triples where s=‘奥本’ or o=‘奥本’
    • 数据查询
      查询结果存在一个临时的表中
      select 列1 ,列2 … from 表名 where 条件
      select S from P =‘类型’ and O =‘数学家’
  • SPARQL语言
    为RDF数据开发的一种查询语言和数据获取协议
    • 数据插入
      insert data 三元组数据
      多条三元组用.分隔,已存在则忽略
      头实体相同的可用;分隔
      insert data {
      ns:伯恩 ns:类型 ns:数学家;
      ns:类型 ns:物理学家.
      }
    • 数据删除
      delete data 三元组数据
      删除三元组:
      delete data {
      ns:奥本 ns:类型 ns:物理学家.
      }
      删除奥本节点:
      delete where {
      ns:奥本 ?p ?o.
      ?s ?p ns:奥本.
      }
    • 数据更新
      更新RDF三元组中的值,只能删除在插入
    • 数据查询
      丰富的数据查询功能
      包括select、ask、describe、construct
      select:查询
      ask:测试是否存在
      describe:详尽资源的描述
      construct:生成RDF
      • select
        select 变量1 变量2 where 图模式 select ?s
        where {
        ?s ns:类型 ns:数学家.
        }
      • ask:
        ask 图模式
        ask {ns:伯恩 ns:类型 ?o.}
      • describe
        describe 资源或变量[where 图模式]
        describe ?s where {?s ns:类型 ns:数学家.}
      • construct
        针对每个变量取值,替换RDF图模板中的变量,生成三元组
        construct {
        ?s ns:搭档 ns:奥本.
        }
        where {
        ?s ns:老师 ns:伯恩 .
        }

图检索技术

1.子图筛选
图索引技术是实现子图筛选的有效方法。

  • 基于路径索引
    基于路径索引是把图上所有长度小于某特定值的路径收集起来,并根据这些路径建立倒排索引.
  • 基于子图的索引方法
    频繁项集
    频繁度是子图出现的次数

2.子图同构判定
枚举所有的同构子图

你可能感兴趣的:(NLP)