本体:把领域知识写成机器能推理的形式
这一章讲三件事: 本体(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。原书的十几个步骤, 骨架是这五步:
- 建类层级。 技巧:类名单按层级用 Tab 缩进排好,一次粘贴导入; Protégé 会问「兄弟类之间要不要设为互斥(disjoint)」——勾上。 Equity 和 Debt 互斥,意味着 AAPL 被推理器保证「不可能同时是债券」——约束自动执法15;
- 建属性,写 domain/range。 见上节16;
- 建个体,连断言。 AAPL:hasTicker "AAPL";issuedBy Apple_Inc;isRegulatedBy SEC。 三个个体、几条断言,本体就「活」了17;
- SKOS 注释,给类加「人话」。 SKOS 是 W3C 的词汇表标准,提供一组现成的注释属性: label(人读的名字)、definition(定义)、scope note(范围说明)、example、 hidden label(隐藏标签)——最后一项最妙:给 Stock 类挂上「equity share」「common stock」 作为隐藏同义词,用户搜「普通股」也能命中这个类,而它不出现在正式类名里18;
- 存成 Turtle(.ttl)格式。 比 RDF/XML 简洁可读,语义完全等价—— 这个文件就是下一章导入 Neo4j 的原料19。
一个初见会困惑的细节:类树的根永远是 owl:Thing——OWL 标准内建的万能根类, 不可删除,推理机制(子类推断、一致性检查)依赖它存在20。
5. 边界与局限
- 本章本体只有 3 个个体、5 个问题,真实金融本体(如书里点名的行业标准 FIBO)大几个数量级; 作者明说生产环境要对所有类做完整注释,本章为省篇幅跳过了大部分21;
- ownedBy 属性定义了但没用上——真实场景里它连接投资者与持仓,教学里省略了22;
- 本体工程是人力活:领域专家的参与不可替代,LLM 只能辅助抽取候选实体和关系23。
6. 可带走的
- 本体 = 类 + 属性 + 约束的正式规格;individual 是「实例」不是「人」。
- RDFS 给继承,OWL 给逻辑约束与矛盾检测——「经理=管理至少一人的员工」这种规则只有 OWL 写得出。
- 先写 competency questions 再建模;建完拿问题验收,这是本体工程的试金石。
- domain/range 不是文档,是让推理器替你查错的执法依据。
- disjoint(互斥)是花一秒钟换来永久保证的约束:勾上它,AAPL 永远不可能同时是债券。
- SKOS 的 hidden label 是检索的暗道:类名之外的同义词入口。
- 产品是 .ttl 文件,下一章喂给 Neo4j。
7. 原文地图
| 主题 | 原书章 | 原文位置 |
|---|---|---|
| 向量/关键词的天花板 | Ontology-Based Knowledge Engineering for Graphs | text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:94(搜「precise reasoning, explainability」) |
| 本体定义 | Ontology-Based Knowledge Engineering for Graphs | text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:100(搜「formal, explicit representation」) |
| 监管层级的推理例 | Ontology-Based Knowledge Engineering for Graphs | text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:121(搜「regulatory frameworks」) |
| RDFS 继承例 | Ontology-Based Knowledge Engineering for Graphs | text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:130(搜「is a type of Person」) |
| OWL 约束例(经理/对称/传递) | Ontology-Based Knowledge Engineering for Graphs | 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」) |
| RDFS→OWL 渐进选型 | Ontology-Based Knowledge Engineering for Graphs | text/76-fm-ontology-based-knowledge-engineering-for-graphs.txt:136(搜「start with RDFS」) |