图构建:领域本体设计原则与动态本体

article/2025/9/6 16:43:40

图构建:领域本体设计原则与动态本体

前文《思考总结:领域知识图谱平台构建与业务应用》中提到:“本体设计是图应用中的重中之重,一切的图展示、图计算、图分析、图挖掘、图模式匹配…的基础在图构建,而图构建的核心是本体设计。”,接着上文,本文就重点聊一下本体设计。

在聊本体之前,有必要先将对于本体的叫法对齐。在知识图谱层面(偏学术),一般将本体称为本体;在图数据库层面,一般将本体称为Schema;在业务领域层面,一般将本体称为场景图模型;本文将称之为本体

领域本体是什么

领域本体是指领域概念体系(包括领域概念定义和概念间关系)的形式化规范定义。 近几年,随着领域知识图谱项目和产品的发展,领域本体开发的工作逐步从AI专家转移到领域业务专家手中。

依据本体的层次和领域依赖度,Guarino等人将其分为四类:顶层本体、领域本体、任务本体和应用本体。

  1. 顶层本体:研究通用的概念以及概念之间的关系,如空间、时间、事件、行为等,与具体的应用无关,完全独立于限定的领域,因此可以在较大范围内进行共享。
  2. 领域本体:研究的是特定领域内概念及概念之间的关系。
  3. 任务本体:定义一些通用任务或者相关的推理活动,用来表达具体任务内的概念及概念之间关系。
  4. 应用本体:用来描述一些特定的应用,既可以引用领域本体中特定的概念,又可以引用任务本体中出现的概念。

本体是一个描述性的形式化概念体系,是知识图谱的模型层,本体中包括点类型(也叫实体分类或概念,本文统称为点类型),点类型属性(也可叫点类型特征,本文统称点类型属性)以及边类型,边类型连接点类型与点类型,边类型也包含边类型属性

以本体作为模型层,将数据与本体建立一一映射关系,然后将映射结果导入到图数据库中,便可形成知识图谱。因此,可以看出,本体其实是知识图谱的构建范式,是数据的组织模板。

设计本体的意义

通过以上内容可知,本体是构建图谱项目的核心,是图谱组织数据的范式和模板,除此之外,本体的意义可总结为如下5种:

  • 达成业务场景共识,当几个不同的数据源都存在某个业务场景所需的信息或数据时,如果定义好底层本体,脚本就可以从这些数据源中提取并以规范的形式融合数据,进而使用融合后的数据为业务分析决策提供支持,将散落的数据形成知识以提供应用价值,所谓:“无规矩不成方圆”。

  • 复用业务结构知识:许多不同领域的模型需要用到时间概念,包括时间区间、时间点、时间的相关度量等。如果有业务人员详细研究并定义了一个业务本体,那么就可以被其他人直接复用。如果需要构建一个大规模本体,则既可以综合若干相关业务的现有本体,也可以从通用本体出发有针对性地扩展领域本体。

  • 业务知识的显性表示:为便于专家有效应对领域知识的变化。领域知识不但包括事实,也包括规则,例如,“鹦鹉是鸟”为事实,“鸟会飞“为规则(知识),那么业务知识的应用就可以推导出”鹦鹉会飞“。如果只是简单地把业务知识用编程的方式表示出来,不但全程依赖开发者支持维护,而且这样的表示也不利于业务专家理解与更新。而业务知识的显性化表示也便于新用户透彻理解业务知识的完整意义。

  • 区别业务知识与操作知识:数据本身和数据处理流程可以分离,领域应用中不但需要领域知识,同时可以描述如何配置与处理这些领域知识。

  • 分析业务场景知识:可以利用描述性形式语言。通过对领域知识的形式化表示,可以有效支持本体的复用和扩展。

如何设计领域本体

设计本体的过程一般包括如下步骤:

  • 定义点类型(实体分类)
  • 定义点类型的分类关系(即子类 - 父类的分类树),本体中的点类型,可以有最高抽象点类型(如:人类、自然人),也可以有子点类型(如:男人、女人、欧洲人、亚洲人),甚至可以更细分(如:中国人、美国人、北京人)。
  • 定义边类型、边类型的有向型(是否有向,有向为出向还是入向)
  • 定义点、边类型属性以及属性值取值范围
  • 设定点、边类型属性取值的缺省值

领域本体设计原则

本体的应用期望直接影响本体的结构和本体的详细程度,本体的直观程度、可扩展性、可维护性都是本体设计时需要考虑的因素。同时,也要考虑本体模型与实际世界的逻辑联系。

笔者在过往的本体设计中总结了几点基本原则,这些原则可以帮助在许多情况下进行设计决策:

  1. 领域场景本体设计没有唯一的标准和正确的答案,只有更好没有最好,最好的设计方案取决于后续的应用期望和拓展期望。
  2. 本体设计方案是一个不断迭代的过程,在应用和拓展的过程中,总会发现更优的方案和优化点。
  3. 本体中的点类型、边类型以及点、边类型的属性设计,应该接近目标应用场景中的对象和关系。
  4. 业务满足度与性能兼容度皆需考虑,在业务与性能之间取得平衡,并且考虑可视化分析与图计算、图挖掘。Neo4j希望用户能够尊重业务领域实体的关系进行设计,Nebula Graph的共识是面向性能设计。

设计好本体的初始版本后,可以通过实际应用、解决问题、与领域业务专家讨论对本体进行评估和优化。一般情况下,初始版本设计的本体,都需要不断调优修改。迭代本体的动作需要在业务应用的整个生命周期中持续进行。
在这里插入图片描述

本体版本管理

本体初次设计好后,根据实际业务场景应用发展的需要,总是不断地发展和变化,因此需要对本体进行有效管理。本体管理环节包括:

  1. 本体演化:本体的发展过程中的变化规律及本体的维护管理。
  2. 本体融合:从多个本体中集成一个新的本体,从子业务场景融合成为新业务场景。
  3. 本体验证:验证本体的正确性与合理性,是否满足业务需求。
  4. 本体版本化:维护管理本体的演化过程中所生成的不同版本。

Palantir 动态本体

由于本体总是需要不断的演进和变化,业界领先的领域知识图谱公司Palantir提出了动态本体论。
在这里插入图片描述

Palantir的设计哲学与核心是动态本体。Palantir动态本体的灵活定义是基于对象的数据模型,动态本体是将众多来源的数据从原始存储格式转换、集成到数据对象和相关属性中的方式,这些属性代表了世界上的人物、地点、事件以及它们之间的联系。

不同的组织以不同的方式构思世界,并且这些数据模型随着时间的推移而变化,动态本体在每个案例(场景)的基础上进行定义,可以随着新的数据源被添加、更改、删除而更新。灵活、统一的数据模型大大简化了Palantir数据集成的过程,能够在几天或几天内完成,而不是大多数据集成项目需要几月甚至几年。

在Palantir中,一个本体主要包括三个部分:

  1. 对象:对象指的是任何被建模的事物,对象包含文档、实体和事件。文档是基于文本的,实体是概念和分类的实例,比如人、地点;事件是以时间出现的事物。
  2. 属性:属性指是对象的特征,如:人的性别、人的年龄、户籍地等。
  3. 关系:关系指的是概念之间的关联,如:人物之间的雇佣关系,人与人之间的朋友关系、夫妻关系。
    在这里插入图片描述

在Palantir中,可以基于对象、属性和关系设计各种灵活的本体和数据模型。而这里的对象又被分为文档、实体和事件。

对于情报分析来说,及其重要的就是对文档的检索以及分析对人物、组织等实体的画像和关联对事件的建模和分析

动态本体允许对不再使用的对象、属性和关系进行移除,同时也可以添加新的对象、属性和关系,本体时刻处于动态更新。还支持对已有对象、属性和关系的功能的修改,比如可以添加和修改标签、图标、解析器等
在这里插入图片描述

动态本体对于异构数据的集成很有帮助。现有关系数据库的数据管理系统一般采用表和关系的固定模式来组织数据,当模式变化时,需要对表进行修改,导致很多重复劳动

另外,基于一个固定的模式不利于对数据做集成,特别是对于数据模式经常要更新的场景

《动态本体 palantir》文章中介绍了Palanti动态本体的方案流程图,可作为参考:

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

目前大多数图数据库也是支持入图后的本体的二次修改,不过都有较大的限制,一般只支持新增和删除点类型、边类型、点边类型属性,但是不支持点、边类型的修改和属性修改。

动态本体的提出就是为了提供一个灵活可变的数据模型,方便数据管理和多源数据的集成。在一个应用中,可以构建一个数据库的动态本体,而该动态本体可以用来集成各种数据。具体思路如下:

  1. 对象类型编辑器用来设计数据类型和数据类型的属性特征。
  2. 属性类型编辑器用来设计属性类型并且定义该属性类型的特征。
  3. 每个属性类型都有一个解析器,该解析器将一些输入的数据跟动态本体做一个映射,并且把输入数据添加到数据库中

Palantir动态本体通过解析器可以把各种格式的数据都集成到一个数据库中,从而很好地实现了异构数据的集成。

同时,为了达到这个目的,需要将动态本体的对象类型和属性类型定义完备,同时需要将解析器的正则表达式写好,否则很难使用。这也是Palantir的动态本体的缺陷所在。

总结

本体的设计原则和概念在此做了一些介绍,可以说本体是千变万化的,相同的业务领域基于不同的应用方式以及设计目的,形态和结果多种多样,总得来说以业务需求为导向去设计,并且结合应用场景和应用性能。

当前,本体开发技术存在很多大的局限性,即使Palantir设计出了动态本体以弥补数据和需求的动态演变过程中的本体变化问题,但是解析器的正则表达式仍要穷举,无法定义完备,希望在技术的发展过程中,后续会有更好的本体开发技术出现。

当前依然处于学习和应用尝试中,认知有局限性,不当之处,欢迎私信指出和交流。后台可添加微信

推荐阅读

思考总结:领域知识图谱平台构建与业务应用【指北】

参考文献

  1. 神秘Palantir-平台介绍: https://mp.weixin.qq.com/s/JgLkd4_J5s93FDuS31F-Cg
  2. 动态本体 palantir: https://blog.csdn.net/weixin_44319196/article/details/111598680
  3. 动态本体简介: https://zhuanlan.zhihu.com/p/30799669
  4. 本体(Ontology)概述: https://blog.csdn.net/baijinswpu/article/details/81113314

http://chatgpt.dhexx.cn/article/HA1ijKNw.shtml

相关文章

常用本体建模工具

常用本体建模工具: Apollo、OntoStudio、TopBraid Composer、Semantic Turkey、Knoodl、Chimaera、OliEd、WebODE、Kmgen和DOME Protg Protg[1]是一款由斯坦福大学编写并维护的开源本体建模和编辑工具,其支持Web版本和PC版本,使用OWL语言…

本体(Ontology)

我是在撰写毕业论文中接触到知识表示方面的内容,有时需要理论与实践相结合,关于这方面的理论知识学习,除了网页资料、书籍、另外推荐一个网站:熊猫学术(https://sc.panda321.com/),可以查阅很多相关的学术论文&#xf…

知识图谱初步学习(一)——本体+Protege新手学习

文章目录 前言(本体详解)1.本体概念2.本体分类3.本体组成4.本体构建方法5.本体构建的原则6.本体应用 一、protege简介二、软件使用步骤1.安装2.使用3.案例 三、问题解决方案汇总 前言(本体详解) 在开始学习知识图谱的过程中&…

本体调研

1.1本体概念 本体是用于描述一个领域的术语集合,其组织结构是层次结构化的,可以作为一个知识库的骨架和基础。 本体不等同于个体,它是相应领域内公认的概念集合。 1.2 本体分类 依照领域依赖程度: (1)顶层本体&…

知识图谱初步学习(零)——本体是什么

知识图谱初步学习(零)——本体是什么 文章目录 知识图谱初步学习(零)——本体是什么前言一、 哲学层面理解二、 引申到语义层面理解三、学术层面四、其他层面- 术语- 语义网 五、本体与类、本源、实体、符号的区别六、用语义三角形…

本体(Ontology)概述

认识本体 本体(Ontology)的概念源自于哲学领域,在哲学中的定义为“对世界上客观事物的系统描述,即存在论”。哲学中的本体关心的是客观现实的抽象本质。而在计算机领域,本体可以在语义层次上描述知识,可以看…

区块链 Vs. 互联网,创新在哪里?

本文转载自共识未来公众号 引言:最近关于区块链革命的提法少了很多,我们很少再听到“区块链即将颠覆互联网”的提法,这似乎也寓意着区块链技术(加密技术)正在进入一个理性发展的阶段,如果按照Gartner的技术…

js提交form表单

【背景】 前段时间将边用边学javascript.pdf书看完了,其中之前最不熟悉的也是这次印象最深刻的就是提交form表单,所以在这里总结一下js提交form表单,以及表单中对应的一些扩展知识O(∩_∩)O~ 【概念】 表单在网页中主要负责数据采集功能;一个表单偶三个基本组成部分&am…

JavaScript笔记-点击button提交form表单

功能如下&#xff1a; 点击购买后&#xff0c;点击确定。 确定调用了一个js函数&#xff0c;提交form表达给后端 代码如下&#xff1a; <div class"modal-footer"><button type"button" class"btn text-white border bg-dark" data-b…

yeild函数

1、把函数变成一个生成器 2、起到延迟的作用&#xff0c;在需要的时候产生结果&#xff0c;节省资源 3、声明一个序列不同的是生成器在不使用的情况下&#xff0c;是不占内存的 def getNum(n):i 0while i < n:print(i)i 1getNum(5)def getNum(n):i 0while i < n:retu…

Python关键字------yeild

文章目录 yeild例子 在阅读python程序源码的时候&#xff0c;发现yeild关键字&#xff0c;产生了疑惑&#xff0c;看了很多博客感觉没有能够讲清楚的。 yeild yeild其实可以理解成return&#xff0c;不够有点区别的是return是不会执行下面的语句&#xff0c;而yeild在满足一定…

join(),sleep() 和 yeild() 方法的区别

目录 1、join() 方法&#xff1a;释放锁 2、sleep() 方法&#xff1a;不释放锁 3、yeild() 方法&#xff1a;不释放锁 1、join() 方法&#xff1a;释放锁 使用场景&#xff1a; 等待调用 join() 方法的线程结束之后&#xff0c;程序再继续执行&#xff0c;一般用于等待异步…

C#中关于Task.Yeild()的探究

在与同事讨论async/await内部实现的时候&#xff0c;突然想到Task.Yeild()这个函数&#xff0c;为什么呢&#xff0c;了解一点C#async/await内部机制的都知道&#xff0c;在await一个异步任务&#xff08;函数&#xff09;的时候&#xff0c;它会先判断该Task是否已经完成&…

python yeild next使用注意事项

关于得带的基本使用方法&#xff0c;可以往上查一下。这里主要记录下在编码中可能遇到的报错&#xff0c;和处理方式。 import timedef func3():for i in range(5):yield iwhile True:a next(func3())print(a)time.sleep(1) 如果使用上面这种取值方式&#xff0c;你会发现会…

Java多线程礼让yeild()和插队join()方法案例

一. yeild()和join()方法 1.yeild():线程礼让&#xff0c;让当前正在执行的线程可能暂停&#xff0c;但不阻塞 2.yeild():当前正在执行的线程可能暂停&#xff0c;也可能不暂停。 3.yeild():是静态方法&#xff0c;而join()是非静态方法 4.join():能…

gitlab artifacts too large

gitlab在打包artifacts遇到&#xff1a; Uploading artifacts as “archive” to coordinator… too large archive 413 error 网上看了很多方案&#xff0c;一般都是说在admin账户的setting下找到CI/CD&#xff0c;把Maximum artifacts size (MB)改大点 当然这是其中一个点哈…

IDEA 解决 artifacts not found 问题

目录 1. 问题2. 解答方法一方法二 1. 问题 部署 Tomcat 时&#xff0c;选择 Edit Configuration 无 Artifact 选项。 2. 解答 方法一 选择 Fix 直接修复即可。 方法二 打开 Project Structure&#xff1b;选择 Aritfacts 选项&#xff1b;点击 号&#xff0c;选择 Web …

jenkins使用Send build artifacts over SSH遇到的坑

在jenkins构建项目后&#xff0c;优势需要把jar等文件复制到其他服务器&#xff0c;如下图&#xff0c;可以使用Send build artifacts over SSH功能。 但是在使用时可能会遇到无法复制成功 可以从以下几方面入手&#xff0c;基本可以解决该问题 1、检查是否配好了目标主机的用…

【论文笔记】Details or Artifacts: A Locally Discriminative Learning Approach toRealistic Image Super-Reso

细节还是伪纹理&#xff1a;真实图像超分辨率的局部判别方法 来自于CVPR2022&#xff0c;作者Jie Liang&#xff0c; Hui Zeng and Lei Zhang 论文地址&#xff1a;https://arxiv.org/abs/2203.09195 Abstract: 目前超分想要优异的纹理信息&#xff0c;那GAN&#xff08;生成…

解析IDEA中的Artifacts配置

1. Artifact 2. Artifact名称 3. Artifact类型 4. 输出路径&#xff08;也就是Deployment root部署根目录&#xff09;&#xff0c;项目运行后的输出根目录 5. 输出根目录&#xff0c;即4指定的地址 6. 输出目录下的结构层次 针对指定项目&#xff0c;对应分析 1. 输出根…