跳到主要内容

本体:把领域知识写成机器能推理的形式

这一章讲三件事: 本体(ontology)是什么、它比「画几张连线图」严格在哪; RDFS 和 OWL 两种建模语言的推理能力差在哪;用行业标准工具 Protégé 建一个金融本体的完整流程。 它是下一章「把本体装进知识图谱做 RAG」的前半程。

1. 为什么向量之外还要一条路

到此为止我们的检索全靠「相似」:语义相似、关键词相似。原书指出这套混合打法的天花板: 它扛不住需要精确推理、可解释性、严格事实落地的场景。下一步进化是图-based RAG—— 用知识图谱(knowledge graph,以后简称 KG)给 agent 一个结构化、可导航、 显式标注了概念与关系的世界1

本体(ontology)是 KG 的施工图:领域知识的形式化表示——有哪些类、有什么属性、 关系受什么约束。有了它,「金融监管层级」这种业务规则可以被显式编码, agent 据此推理出「某金融产品在某辖区需要什么合规义务」这类没直接写在数据里的结论2

一个术语先掰清:individual(个体) 在本体语境里不是「人」,是「一个具体的东西」。 AAPL 是一个个的个体(Stock 类的一个实例),Apple_Inc 也是(Organization 类的实例)3。 四个核心词的关系:类是类别,个体是实例,实体是所有构件的总称,断言(assertion)是把个体和属性连起来的事实—— 比如「AAPL hasTicker 'AAPL'」就是一条断言4

2. RDFS vs OWL:推理能力差一个量级

建模语言决定「机器能自动推出什么」。原书用一组递进的例子讲清两代语言5:

RDFS(Resource Description Framework Schema) 管类和属性的层级:

  • 你声明「Employee 是一种 Person」「worksFor 连接人和公司」;
  • 机器自动继承:所有 Employee 都是 Person,所有 Person 都有名字 → 所有 Employee 都有名字

OWL(Web Ontology Language) 在 RDFS 之上加了逻辑约束:

  • 「经理 = 管理至少一个员工的 Employee」;
  • 「没有人可以既是公司又是人」;
  • 关系可以声明为对称的(A 认识 B → B 认识 A)、传递的(A 监督 B,B 监督 C → A 监督 C)、 或带基数约束(一个人恰好有两位生物学父母)6

这些约束的回报是自动推理:机器可以从显式事实推出隐含事实, 甚至检测出数据里的逻辑矛盾。选型建议:简单层级用 RDFS,要约束、校验、推理就上 OWL; 很多项目从 RDFS 起步,按需引入 OWL 构件7。本章实验室选的是 OWL 2 DL—— 表达力与推理支持平衡最广的选择8

3. 方法论:competency questions 先行

本体工程最容易犯的错是「上来就画类图」。原书的方法论把顺序倒过来:先写下你的系统 必须能回答的问题,再倒推需要什么类和关系。这些问题叫 competency questions (能力问题)——它们是本体的试金石:建完之后拿它们验收,答不上来就是模型没建够9

本章金融本体的五个能力问题10:

1. AAPL 是股票还是债券?
2. USTB 是什么类型的金融工具?
3. 谁监管 MSFT?
4. SEC 监管哪些股票?发行人是谁?
5. 你知道哪些股票?哪些债券?

倒推出的设计(刻意保持小而完整)11:

要素内容
类层级FinancialInstrument → Equity → Stock;FinancialInstrument → Debt → Bond;Organization → RegulatoryAuthority;Person;Account
个体AAPL、MSFT(股票);USTB(债券);Apple_Inc、Microsoft_Corp、US_Treasury(机构);SEC(监管者)
对象属性issuedBy(工具→机构)、isRegulatedBy(工具→监管者)、ownedBy(工具→人/机构)
数据属性hasTicker(工具→字符串)

域(domain)与值域(range)是属性上的约束:hasTicker 只有金融工具能有(domain), 值必须是字符串(range)。写上它们不只是文档——Protégé 内建的推理器(reasoner)能据此 查出与约束冲突的建模错误12

范围控制同样是方法论:明确排除衍生品、期权、私募、价格数据—— 「小而完整、能验收」胜过「大而失控」13

4. 实操:Protégé 里的一小时

Protégé 是斯坦福出品、免费开源的本体编辑器,行业标准14。原书的十几个步骤, 骨架是这五步:

  1. 建类层级。 技巧:类名单按层级用 Tab 缩进排好,一次粘贴导入; Protégé 会问「兄弟类之间要不要设为互斥(disjoint)」——勾上。 Equity 和 Debt 互斥,意味着 AAPL 被推理器保证「不可能同时是债券」——约束自动执法15;
  2. 建属性,写 domain/range。 见上节16;
  3. 建个体,连断言。 AAPL:hasTicker "AAPL";issuedBy Apple_Inc;isRegulatedBy SEC。 三个个体、几条断言,本体就「活」了17;
  4. SKOS 注释,给类加「人话」。 SKOS 是 W3C 的词汇表标准,提供一组现成的注释属性: label(人读的名字)、definition(定义)、scope note(范围说明)、example、 hidden label(隐藏标签)——最后一项最妙:给 Stock 类挂上「equity share」「common stock」 作为隐藏同义词,用户搜「普通股」也能命中这个类,而它不出现在正式类名里18;
  5. 存成 Turtle(.ttl)格式。 比 RDF/XML 简洁可读,语义完全等价—— 这个文件就是下一章导入 Neo4j 的原料19

一个初见会困惑的细节:类树的根永远是 owl:Thing——OWL 标准内建的万能根类, 不可删除,推理机制(子类推断、一致性检查)依赖它存在20

5. 边界与局限

  • 本章本体只有 3 个个体、5 个问题,真实金融本体(如书里点名的行业标准 FIBO)大几个数量级; 作者明说生产环境要对所有类做完整注释,本章为省篇幅跳过了大部分21;
  • ownedBy 属性定义了但没用上——真实场景里它连接投资者与持仓,教学里省略了22;
  • 本体工程是人力活:领域专家的参与不可替代,LLM 只能辅助抽取候选实体和关系23

6. 可带走的

  1. 本体 = 类 + 属性 + 约束的正式规格;individual 是「实例」不是「人」。
  2. RDFS 给继承,OWL 给逻辑约束与矛盾检测——「经理=管理至少一人的员工」这种规则只有 OWL 写得出。
  3. 先写 competency questions 再建模;建完拿问题验收,这是本体工程的试金石。
  4. domain/range 不是文档,是让推理器替你查错的执法依据
  5. disjoint(互斥)是花一秒钟换来永久保证的约束:勾上它,AAPL 永远不可能同时是债券。
  6. SKOS 的 hidden label 是检索的暗道:类名之外的同义词入口。
  7. 产品是 .ttl 文件,下一章喂给 Neo4j。

7. 原文地图

主题原书章原文位置
向量/关键词的天花板Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:94(搜「precise reasoning, explainability」)
本体定义Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:100(搜「formal, explicit representation」)
监管层级的推理例Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:121(搜「regulatory frameworks」)
RDFS 继承例Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:130(搜「is a type of Person」)
OWL 约束例(经理/对称/传递)Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:133(搜「managers are employees」) · text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:133(搜「transitive」)
RDFS→OWL 渐进选型Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:136(搜「start with RDFS」)
选 OWL 2 DLOntology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:271(搜「OWL 2 DL」)
能力问题是试金石Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:173(搜「litmus test」)
五个能力问题Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:174(搜「Is AAPL a stock or bond?」)
范围排除(衍生品等)Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:164(搜「derivatives, options」)
类层级蓝图Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:225(搜「FinancialInstrument」)
domain/range 与查错Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:259(搜「domain specifies」)
Protégé 介绍与用途Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:151(搜「workbench」)
Tab 缩进批量导入Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:331(搜「tab indentation」)
owl:Thing 不可删Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:334(搜「owl:Thing」)
互斥(disjoint)与 AAPL 例Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:382(搜「disjoint」)
术语:individuals/assertionsOntology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:340(搜「Individuals by class」)
AAPL 断言(issuedBy/isRegulatedBy)Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:728(搜「issuedBy = Apple_Inc」)
SKOS 注释与 hidden labelOntology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:809(搜「hidden label」) · text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:803(搜「scope note」)
SKOS 导入 URLOntology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:84(搜「skos-owl1-dl」)
FIBO 行业标准Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:145(搜「FIBO」)
生产级注释的诚实声明Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:893(搜「comprehensive annotations」)
ownedBy 未演示的说明Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:212(搜「ownedBy」)
LLM 辅助收集领域知识Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:199(搜「use LLMs to extract」)
产出 .ttl 文件Ontology-Based Knowledge Engineering for Graphstext/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:81(搜「FinancialOntology.ttl」)

Footnotes

  1. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 94 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:94,搜「graph-based RAG」)。

  2. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 100 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:100,搜「formal, explicit representation」)与第 121 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:121,搜「regulatory frameworks」)。

  3. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 559 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:559,搜「doesn't mean person」所在段,搜「a single, specific example」)。

  4. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 340 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:340,搜「assertions are the facts」)。

  5. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 130 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:130,搜「is a type of Person」)。

  6. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 133-136 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:133,搜「managers are employees」;text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:133,搜「transitive」)。

  7. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 136 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:136,搜「start with RDFS」)。

  8. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 271 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:271,搜「OWL 2 DL」)。

  9. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 173 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:173,搜「litmus test」)。

  10. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 174-186 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:174,搜「Is AAPL a stock or bond?」)。

  11. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 203-216 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:203,搜「AAPL (Apple Inc.)」)与第 225-231 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:225,搜「FinancialInstrument」)。

  12. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 259-262 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:259,搜「domain specifies」)。

  13. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 164 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:164,搜「derivatives, options」)。

  14. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 151 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:151,搜「workbench」)。

  15. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 382 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:382,搜「disjoint」);Tab 缩进技巧在第 331 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:331,搜「tab indentation」)。

  16. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 242-252 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:242,搜「hasTicker」)。

  17. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 728 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:728,搜「issuedBy = Apple_Inc」)。

  18. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 588-603 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:803,搜「scope note」;text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:809,搜「hidden label」)。

  19. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 303 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:303,搜「Turtle」)与第 81 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:81,搜「FinancialOntology.ttl」)。

  20. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 334 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:334,搜「owl:Thing」)。

  21. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 145 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:145,搜「FIBO」)与第 893 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:893,搜「comprehensive annotations」)。

  22. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 212 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:212,搜「ownedBy」)。

  23. 出处:「Ontology-Based Knowledge Engineering for Graphs」第 199 段(text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:199,搜「use LLMs to extract」)。