知识库与知识图谱

GitHub - npubird/KnowledgeGraphCourse: 东南大学《知识图谱》研究生课程

  1. 什么是知识库与知识图谱
    首先,在学习知识图谱的时候,尽管已经学习了很久,对于实体、关系以及属性的概念是比较了解的。但是一直被一个概念所困惑,什么是本体(Ontology)?本体和实体的区别是什么?
    1.1 本体、知识库与知识图谱
    知乎AI问答情况:zhida.zhihu.com
    首先引用知乎答主的一个回答:
    首先,本体是schema,是对特定领域概念和概念之间关系的形式化表达,本体是知识的抽象,文献中可能用Classes或Concept来表示。我个人的理解,本体在定义一个知识系统的世界观,告诉我们这个知识系统里面有人、有山、有水、水是液体、人需要喝水等等
    知识库和知识图谱经常被混用,在文献《Towards a Definition of Knowledge Graphs》中对这个问题进行了阐述。
    在《Knowledge-Based Systems》中定义:解决人工智能问题的知识系统由两个部分组成:知识库和推理引擎。其中知识库是一个结合形式语义信息的数据集,包含规则、事实、公理、定义和陈述等不同类型的知识。
    在许多知识图谱的文章中,认为知识图谱是一个经过清洗的知识库,知识库由本体约束下的实例组成。那么就可以认为 知识图谱=本体+知识库
    从两个知识库的定义上来看,知识图谱似乎包含知识库,然而,常见知识图谱中的知识库并不能完美的描述出诸如规则、公理等内容。
    因此我个人倾向于对知识库的定义应该遵从《Knowledge-Based Systems》,而将知识图谱从数据组成上定义为:本体+由本体约束的实例。当然知识图谱的定义尚未有公论,甚至有文献详细的对比过各个定义,也未得出较好的结论。
    综述,知识库是一个理想化的定义,和知识图谱、本体有关系,也有区别。而知识图谱是一种知识表示的方式,知识图谱包含本体。
    也就是说可以将知识图谱看做“模式层(Schema Layer)”和“数据层(Data Layer)”两个部分。
    [图片]
    1.2 本体与知识图谱
    本体(Ontology)和知识图谱(Knowledge Graph)在实际应用和表现形式上确实存在一定的关联和重叠。
    本体是对概念及其相互关系的一种形式化描述,它定义了某个领域内的概念、概念的属性以及概念之间的关系。本体的核心目标是提供一种共享的、明确的概念模型,用于支持知识的表示、共享和推理。例如,在一个关于食物的本体中,会定义 “水果”“蔬菜” 等概念,以及 “属于”“包含” 等概念之间的关系。
    知识图谱是一种以图的形式表示知识的方法,它由节点(实体)和边(关系)组成。知识图谱强调对实体和实体之间关系的表示,并且通常包含大量的实例数据。例如,在一个食物知识图谱中,不仅会有 “水果”“蔬菜” 等概念,还会有具体的水果实例(如 “苹果”“香蕉”)以及它们之间的具体关系(如 “苹果是水果的一种”)。
  2. 知识图谱的模式层和数据层
    [图片]
    2.1 模式层
    是知识图谱的“抽象框架”,通过本体(Ontology)定义知识的结构化规则,包括类(概念)、属性、关系及约束。通常使用关系数据库(如MySQL)或本体语言(RDF/OWL)管理,部分系统通过图节点存储类层次结构(如object_type节点)。主要功能包括:
  • 定义概念体系:如“音乐”域包含“歌手”“歌曲”“专辑”等类,类之间通过“演唱”“属于”等关系连接。
  • 约束属性范围:例如“歌曲”类必须有“时长”属性,类型为整数,取值范围大于0。
  • 通过逻辑规则(如“歌手→演唱→歌曲”的逆关系为“歌曲→被演唱→歌手”)支持语义推理。
  • 提供领域共识,便于跨系统复用(如医疗本体可被多家医院共享)。
    2.2 数据层
    数据层是模式层的具体实例化,存储真实数据(实体、属性值、关系三元组)。使用图数据库边(Edge)存储关系,节点(Node)存储实体及属性。例如,实体指向object_type节点标识其所属类。主要功能包括:
  • 承载实际知识:实体是类的实例,如“周杰伦”(歌手类实体)、“《七里香》”(歌曲类实体)。关系是实体间的连接,如“周杰伦→演唱→《七里香》”。
  • 动态扩展与查询:通过图数据库(如Neo4j)高效存储和查询关联数据,支持路径搜索(如“用户A→喜欢→歌手→同公司→歌手→歌曲”推荐)。
  1. 知识图谱的表示
    知识图谱通常使用图结构来表示,其中节点代表实体(如人、地点、事物、概念等),而边则表示实体之间的关系。每个节点和边可以包含更多的属性,构成一个多层次的语义网络。
    3.1 本体描述语言
  2. OWL (Web Ontology Language):W3C 推荐的标准语言,基于 RDF 和 RDFS,支持复杂的类、属性和个体关系建模,适用于语义网和数据集成。分为 OWL Lite、OWL DL 和 OWL Full 三种子语言,满足不同复杂度需求。
  3. RDF (Resource Description Framework):使用三元组(主体-谓词-对象)表示信息的基础框架,简单易用但表达能力有限,常作为其他语言的基础。
  4. RDFS (RDF Schema):RDF 的扩展,支持类和属性的定义,提供轻量级的层次结构建模能力,适合简单的知识表示。
  5. OWL 2:OWL 的升级版,增强了表达能力和推理功能,引入新特性(如键和数据范围),适用于复杂本体建模场景。
  6. SKOS (Simple Knowledge Organization System):轻量级语言,专注于概念及其关系的表示,适合分类法、词汇表等知识组织系统,强调易用性和互操作性。
  7. JSON-LD:结合 JSON 和 RDF 的轻量级格式,易于与现代 Web 应用程序集成,支持语义化数据交换和知识图谱构建,注重灵活性和可读性。
    3.2 图数据库
    知识图谱通常存储在图数据库中(如Neo4j),其中实体和关系通过图的节点和边表示。图数据库高效地支持图结构数据的查询、更新和分析。Neo4j 提供了一套强大的工具来管理和查询复杂的图数据。通过节点、关系、标签、属性、查询语言 Cypher、索引与约束以及遍历等功能,Neo4j 能够高效地处理高度互连的数据集。如果您正在构建一个需要处理复杂关系的应用程序,Neo4j 可能是一个值得考虑的选择。
    [图片]
    节点(Node)
    在Neo4j中,节点代表实体或对象,并且可以拥有标签(Label)来标识其类型。例如,在电影数据库中,Person 和 Movie 可以作为节点的标签。每个节点还可以拥有属性(Property),这些属性是以键值对的形式存在,用于描述节点的具体特征。例如,一个人的节点可能有 name 和 born 属性,表示这个人的名字和出生年份。
    标签是用来对节点进行分类的一种机制。通过为节点添加标签,可以有效地组织和查询数据。例如,您可以为所有表示“人”的节点添加 Person 标签,这样就可以轻松地查询所有的人节点。一个节点也可以有多个标签。
    关系(Relationship)
    关系在Neo4j中是连接两个节点的有向边,表示它们之间的关联。每种关系都有一个特定的类型,比如 ACTED_IN 或 DIRECTED,并且关系本身也可以拥有属性。例如,在电影数据库中,ACTED_IN 关系可能有一个 roles 属性,表示演员在电影中扮演的角色。
    属性(Property)
    无论是节点还是关系,都可以拥有属性,这些属性是以键值对的形式存在,用于提供额外的信息。例如,一个表示“人”的节点可能具有“name”、“age”、“gender”等属性;而一条表示“购买”行为的边可能具有“purchase_date”、“product_id”等属性。
    查询语言:Cypher
    Cypher 是 Neo4j 的查询语言,它允许用户以一种非常直观的方式查询和操作图数据。Cypher 语言的设计灵感来自于 SQL,但它更加专注于图数据的操作。例如,创建一个节点和关系可以通过以下 Cypher 语句实现:
    CREATE (:Person {name: ‘Alice’})-[:KNOWS]->(:Person {name: ‘Bob’});
    这条语句创建了两个 Person 节点,并通过 KNOWS 关系将它们连接起来。
  8. 总结
    由此得到一个综合关系图:
    知识库(容器)

    └─知识图谱(子类)
    ├─模式层(本体驱动)
    │ ├─类(学生、课程)
    │ ├─属性(学分、先修条件)
    │ └─规则(约束与推理)

    └─数据层(实例填充)
    ├─实体(学生A、课程X)
    └─关系(学生A→选修→课程X)
    [图片]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值