喔家ArchiSelf公众号文章

本体方法实践:从 RDF 和 OWL 到 GraphRAG

本体工程最实用的形态可能是什么?

喔家ArchiSelf

公众号 · 14 篇文章

【引】"本体"(Ontology)这个词略显神秘。本质上,本体只是对一个领域的显式约定:哪些东西存在、它们之间可以有什么关系、这些关系应遵循什么规则、系统从已知事实能推断出什么。本文是对《本体驱动的AI大模型:方法与实践》一书的解读与补充。以一个实例逐层拆解 I命名空间、RDF、RDFS、OWL、SHACL 五大技术层,并展示本体如何让 GraphRAG 更可靠。

Tom Gruber 将本体描述为"对概念化的显式规范"。用大白话说,它是一份机器可读的说明,描述我们如何决定理解世界的某个特定部分。

例如,Vanguard S&P 500 ETF(VOO)是一个全球投资者熟悉的产品,追求跟踪 S&P 500 指数的投资表现。假设我们希望一个金融知识系统理解以下事实:

  • Vanguard S&P 500 ETF 是一只 ETF。
  • 它由Vanguard集团管理。
  • 它跟踪 S&P 500 指数。

这三句话足以引入本体技术的每一个重要层次。

一、本体和知识图谱不是一回事

最简单的区分是本体定义世界的规则,知识图谱存储关于这个世界的事实。

本体可能定义:

  • ETF和AssetManager作为实体类型
  • managedBy作为从 ETF 到资产管理者的关系
  • tracksIndex作为从 ETF 到市场指数的关系

知识图谱则存储实际的实体和关系:

  • VOO 是一个 ETF
  • VOO managedBy Vanguard
  • VOO tracksIndex S&P500Index

把本体想象成一款棋盘游戏的设计图——它定义棋子、合法走法和规则。知识图谱是桌上正在进行的这局棋。

这就是为什么"本体是模式、知识图谱是数据"是一个有用的捷径,本体能表达比传统数据库schema丰富得多的逻辑。

二、我们总需要本体吗?

不需要。如果你的应用只存储几个字段并按精确键检索,关系表或 JSON 文档就够了。本体工作引入设计、治理、验证和维护成本。当一个或多个以下问题出现时,它才变得有价值:

问题 1:不同系统用不同的词

一个系统说"基金提供商",另一个说"资产管理公司",第三个说"管理公司"。本体可以定义首选概念并将替代标签映射到它。

问题 2:用户提问需要关系

考虑:

哪些由先锋管理的 ETF 跟踪美国股票指数?

回答这个问题需要跨越多种实体类型和关系的路径,而非简单的关键词匹配。

问题 3:系统需要检测无效数据

如果 managedBy 应指向一个组织,以下声明应被标记:

VOO managedBy John Smith

John Smith 可能是一位投资组合经理,但他不是负责该 ETF 的资产管理组织。金融机构、医疗提供商和其他受监管行业依赖可信的知识图谱——单个错误关系就可能破坏 AI 可靠性、合规性和决策。本体约束充当护栏,确保只有语义有效的知识进入系统。

问题 4:系统应推导从未直接存储的事实

如果每只 ETF 都是交易所交易产品,而 VOO 是一只 ETF,推理器可以推断:VOO 是一种交易所交易产品。

问题 5:LLM 需要可靠的领域地图

LLM 可能生成流畅文本,同时混淆基金、指数、发行人和投资组合经理。本体给系统明确的实体类型、路径和约束,可引导检索并检查生成的答案。

实用规则很简单,从语义精度和关联推理创造足够价值以抵消维护成本的领域开始。

三、一个例子,五个技术层

语义 Web 技术栈常令人困惑,因为多个标准被一起讨论。每个标准回答不同的问题。让我们逐层构建示例。

第 1 层:标识符与命名空间

知识图谱需要为每个重要资源取一个无歧义的名字。"Vanguard"可读,但并非全局唯一——它可能指一个组织、一个产品系列或与金融无关的东西。IRI 给实体一个唯一标识符:

https://example.org/finance/Vanguard

到处输入完整标识符会很痛苦,所以我们定义命名空间前缀:

@prefix fin: <https://example.org/finance/> .

现在我们可以写:

fin:Vanguard

简写和完整 IRI 标识同一资源。前缀只是方便的缩写,不改变底层身份。

为什么标识符看起来像网址? RDF 和 OWL 是为语义 Web 开发的,不同组织的数据需要无命名冲突地连接。Web 式 IRI 利用域名所有权创建全局唯一名称:company-a.com/ETF 和 company-b.com/ETF 可以安全地指向不同概念。它可能打开文档页面,但不必如此——IRI 的首要工作是标识,不是导航。

第 2 层:RDF 将事实表示为三元组

RDF 将信息表示为"主语-谓语-宾语"三元组。

主语
谓语
宾语
VOO
managedBy
Vanguard
VOO
tracksIndex
S&P 500 Index

在 Turtle(一种紧凑的 RDF 序列化格式)中,同样的事实如下所示:

@prefix fin: <https://example.org/finance/> .

fin:VOO fin:managedBy fin:Vanguard ;
        fin:tracksIndex fin:SP500Index .

分号表示下一条语句使用相同的主语 fin:VOO。

RDF 是数据模型,Turtle 是书写该模型的一种方式。关系类似表格和 CSV:一个是底层结构,另一个是表达它的文件格式。

同一 RDF 图也可以序列化为 JSON-LD:

{
"@context":{
"fin":"https://example.org/finance/",
"managedBy":{
"@id":"fin:managedBy",
"@type":"@id"
},
"tracksIndex":{
"@id":"fin:tracksIndex",
"@type":"@id"
}
},
"@id":"fin:VOO",
"managedBy":"fin:Vanguard",
"tracksIndex":"fin:SP500Index"
}

Turtle 和 JSON-LD 看起来不同,但可以描述同一个图。

第 3 层:RDFS 引入基本模式

RDF 能陈述事实,通过 RDF Schema,我们可以定义类、子类、属性、定义域和值域:

@prefix fin:  <https://example.org/finance/> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

fin:FinancialProduct a rdfs:Class .
fin:Fund             a rdfs:Class ;
                     rdfs:subClassOf fin:FinancialProduct .
fin:ETF              a rdfs:Class ;
                     rdfs:subClassOf fin:Fund .
fin:AssetManager     a rdfs:Class .
fin:MarketIndex      a rdfs:Class .

fin:managedBy a rdf:Property ;
    rdfs:domain fin:Fund ;
    rdfs:range fin:AssetManager .

fin:tracksIndex a rdf:Property ;
    rdfs:domain fin:ETF ;
    rdfs:range fin:MarketIndex .

现在图有了基本的概念结构:

FinancialProduct
└── Fund
    └── ETF

有一个令许多初学者惊讶的关键细节:

在 RDFS 中,定义域和值域主要支持推理,它们不是数据录入验证规则。

如果图包含 fin:VOO fin:managedBy fin:Vanguard,且 managedBy 的定义域是 Fund,RDFS 推理器可能推断 VOO 是一个 Fund。它不一定会因为 VOO 缺少显式的 Fund 类型而拒绝该三元组。如果目标是拒绝或报告不符合规范的数据,那是 SHACL 等验证语言的工作。

第 4 层:OWL 添加更丰富的语义

OWL 2 是一种具有形式化定义含义的本体语言。它能表达类、属性、个体、等价性、不相交性、属性特征、基数约束等。例如:

@prefix fin: <https://example.org/finance/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .

fin:managedBy a owl:ObjectProperty ;
    owl:inverseOf fin:manages .

fin:ETF owl:disjointWith fin:AssetManager .

逆属性公理意味着:

如果 VOO 由 Vanguard 管理,那么 Vanguard 管理 VOO。

我们只存储了一个方向:

fin:VOO fin:managedBy fin:Vanguard .

OWL 推理器可以推导另一个方向:

fin:Vanguard fin:manages fin:VOO .

不相交公理表示单一个体不能同时是 ETF 和资产管理公司。

OWL 在目标是描述含义并支持逻辑推理时很有用。它不应被视为传统表单验证器。OWL 通常遵循开放世界假设:缺失的事实是"未知",而非自动为"假"。例如,如果某只 ETF 没有提供 managedBy 值,OWL 不一定得出该 ETF 没有管理者的结论,图可能只是不完整。

第 5 层:SHACL 验证图数据

SHACL 描述 RDF 数据应满足的条件,假设我们的应用要求:

  • 每只 ETF 必须有且仅有一个资产管理公司。
  • 每只 ETF 必须跟踪至少一个市场指数。

我们可以写一个 SHACL 形状:

@prefix fin: <https://example.org/finance/> .
@prefix sh:  <http://www.w3.org/ns/shacl#> .

fin:ETFShape
    a sh:NodeShape ;
    sh:targetClass fin:ETF ;
    sh:property [        
        sh:path fin:managedBy ;       
        sh:class fin:AssetManager ;        
        sh:minCount 1 ;        
        sh:maxCount 1    
    ] ;

    sh:property [        
        sh:path fin:tracksIndex ;        
        sh:class fin:MarketIndex ;        
        sh:minCount 1    
    ] .

这组数据符合规范:

fin:VOO a fin:ETF ;
    fin:managedBy fin:Vanguard ;
    fin:tracksIndex fin:SP500Index .

fin:Vanguard a fin:AssetManager .
fin:SP500Index a fin:MarketIndex .

这组数据不符合:

fin:BrokenFund a fin:ETF ;
    fin:managedBy fin:Alice .

fin:Alice a fin:PortfolioManager .

验证器可以报告至少两个问题:

  1. fin:Alice
     
    被归类为 PortfolioManager 而非 AssetManager。
  2. fin:BrokenFund
     
    没有 tracksIndex 值。

这个区别值得记住:OWL 描述语句的含义和可推断内容,SHACL 检查图是否符合操作要求,二者互补。

四、推理如何创造新知识

让我们组合几条公理:

fin:ETF rdfs:subClassOf fin:Fund .
fin:Fund rdfs:subClassOf fin:FinancialProduct .
fin:managedBy rdfs:range fin:AssetManager .
fin:managedBy owl:inverseOf fin:manages .

现在只存储:

fin:VOO a fin:ETF ;
    fin:managedBy fin:Vanguard .

推理器可以推导出:

fin:VOO a fin:Fund .
fin:VOO a fin:FinancialProduct .
fin:Vanguard a fin:AssetManager .
fin:Vanguard fin:manages fin:VOO .

两条显式三元组产生了四条额外语句。这是本体系统的核心吸引力:精心设计的语义让机器做出有用、可解释的推断,而非仅依赖文本相似度。

然而,推断的事实仅与产生它们的公理一样可信。一条糟糕的领域规则可能在整个图中传播错误的分类。因此本体设计不仅是建模练习,更是知识治理。

五、能力问题:从问题倒推设计

一个常见错误是从"建模领域的一切已知内容"开始。这通常产生一个巨大的、价值不明的本体。更实用的方法从能力问题(Competency Questions)开始,即完成后的知识库必须能回答的问题。

对于投资产品本体,它们可能包括:

  • 哪些 ETF 由给定的资产管理公司管理?
  • 某只 ETF 跟踪哪个市场指数?
  • 哪些 ETF 提供对给定公司的敞口?
  • 哪些基金使用相同的基准?
  • 谁管理一只基金,这个人受雇于哪个组织?

这些问题揭示了我们真正需要的概念和关系:

  • 类:ETF,AssetManager,MarketIndex,Company,PortfolioManager
  • 关系:managedBy、tracksIndex、holdsSecurity、employs
  • 数据属性:ticker、legalName、identifier

它们还暴露了语言的模糊。"管理者"一词可能指资产管理公司,也可能指个人投资组合经理。将它们建模为不同的类可以防止一种常见的范畴错误,过程是迭代的:

  1. 写下问题
  2. 识别所需的概念和路径
  3. 建模能回答它们的最小本体
  4. 用样本数据测试问题
  5. 仅在真实需求出现时扩展

这种方法反映了一个重要设计原则:为预期用途做最小的本体承诺。

六、实用的本体开发工作流

已有多种成熟方法论,包括 TOVE、METHONTOLOGY、On-To-Knowledge、Ontology Development 101 等。它们在范围和严谨度上各有不同,但轻量级项目可以结合它们最实用的想法,形成约 9 个步骤的开发流程:从确定范围和目标出发,通过能力问题驱动概念提取,构建初始本体,再经过推理验证、迭代修订,最终发布和持续维护。

LLM 可以加速本体工程,尤其在早期发现阶段。给定领域文档、数据库模式和样本用户查询,LLM 可以帮助:

  • 提出能力问题
  • 提取候选概念和关系
  • 规范化同义词
  • 起草类和属性定义
  • 建议逆关系
  • 生成初始 Turtle 和 SHACL
  • 识别缺失的标签和注释
  • 检测常见建模反模式

一个有用的流水线:

领域目标 + 用户问题 + 源数据
              ↓
     能力问题生成
              ↓
     概念和关系提取
              ↓
      初始本体提案
              ↓
  推理、SHACL 和查询评估
              ↓
     人工审查和迭代修订

人工审查步骤至关重要。LLM 可能生成语法正确但包含微妙业务错误的本体——例如把 S&P 500 指数当作可交易基金,一个负责任的系统因此应当是:

  • 有据可依(Grounded):只建模有权威来源或数据支持的概念
  • 可复用(Reusable):适当扩展已有词汇表
  • 可扩展(Extensible):允许新产品和关系而无需重写现有定义
  • 查询驱动(Query-driven):为真实能力问题优化模型
  • 可测试(Testable):自动评估推理、验证和查询结果
  • 受治理(Governed):重大语义规则需领域专家批准

七、本体如何帮助 GraphRAG

GraphRAG 将检索与图中的关系结合,本体可以让多个阶段更可靠。

7.1. 查询分解

考虑:"哪些由先锋管理的 ETF 跟踪 S&P 500 指数?"

本体告诉系统这是一条有效路径:

ETF ──managedBy──> AssetManager
ETF ──tracksIndex──> MarketIndex

问题可被翻译为结构化图查询:

SELECT ?etf
WHERE {
  ?etf a fin:ETF ;
       fin:managedBy fin:Vanguard ;
       fin:tracksIndex fin:SP500Index .
}

本体充当查询规划的导航地图。

7.2. 实体消解

同一组织可能出现为 "Vanguard"、"The Vanguard Group"、"Vanguard Group, Inc."。本体可以分开定义标签和强标识符——注册标识符或其他权威键可支持身份匹配,而 skos:altLabel 可为搜索保留别名。

本体不会魔法般解决实体消解——它定义的是消解系统做决策时哪些证据有意义。

7.3. 检索控制

如果用户问 ETF 的基准,本体可以优先检索与 tracksIndex 关联的文档和图路径,而非检索每个包含该 ETF 名称的页面。

7.4. 答案验证

假设 LLM 说:"S&P 500 指数由先锋管理。"本体方法认为:

  • managedBy:期望 Fund 作为主语
  • S&P500Index :是 MarketIndex
  • MarketIndex 和 Fund 不相交

系统可以检测到类型冲突,要求模型使用检索到的证据重新生成答案。本体给应用一种结构化方式,在某些类别的错误到达用户之前检测到它们。

Tom Gruber 的经典本体设计原则在现代知识图谱项目中仍然有用:

  1. 清晰性(Clarity)——定义应有效传达含义
  2. 一致性(Coherence)——定义应逻辑自洽
  3. 可扩展性(Extendibility)——设计应支持共享词汇表上的特化
  4. 最小编码偏差(Minimal Encoding Bias)——概念化不应依赖于特定符号
  5. 最小本体承诺(Minimal Ontological Commitment)——只做推理需求所要求的假设

最后一条尤为重要:一个能回答真实问题的更小本体,通常比整个金融宇宙的宏大模型更有价值。

小结

不需要记住整个语义 Web 技术栈,记住每层的职责即可:

层
职责
IRI 和命名空间
唯一命名事物
RDF
将事实表示为三元组
RDFS
定义基本词汇和层次
OWL
表达更丰富语义并启用逻辑推理
SHACL
根据操作要求验证数据
Turtle / JSON-LD
将图序列化为文件

这就是本体工程最实用的形态:命名重要的事物、定义它们如何关联、让规则显式化、测试数据和答案是否尊重这些规则。

对于知识图谱和 GraphRAG,但当语言模糊、关系重要、且需要可信推理时,它可以成为让整个系统保持一致的语义基石。

【关联阅读】

前往微信阅读全文

内容来自公众号,可前往微信查看原文。

查看作者的更多文章 →订阅更新、RSS 与阅读指南 →