2. 药物领域知识建模
药物知识图谱的推理能力,首先取决于底层知识模型是否把药物世界里真正重要的对象、联系和约束表达清楚。知识建模不是把数据库表换个名字,而是先回答三个问题:领域里有哪些必须被区分的对象?这些对象之间有哪些有方向、有语义的联系?每个对象需要携带哪些属性,才能支撑后续的检索、校验和推理?本节围绕实体类型、关系类型、属性设计以及本体与词表构建方法展开,并给出可落地的建模过程。
一、实体类型:从“药物”这一笼统概念拆开
在药物领域,最容易被误用的做法是把所有东西都塞进一个“药物”实体。实际上,一个药物分子、一个上市药品、一个活性成分、一个靶点、一个疾病、一个不良反应、一个代谢酶,在推理中扮演的角色完全不同。合理的实体类型划分通常包括:
- 化学实体类:活性成分(ActiveIngredient)、盐型/酯型、代谢产物、杂质。
- 药品类:上市药品(DrugProduct)、剂型、规格、批准文号、商品名。
- 生物靶点类:靶点(Target)、基因、蛋白、酶、受体、转运体。
- 疾病与表型类:疾病(Disease)、症状、适应症、禁忌症。
- 药效与安全类:不良反应(AdverseEvent)、药物相互作用、毒性终点。
- 证据与来源类:文献、临床试验、数据库记录、监管文件。
实体类型划分的关键判据是“是否具有独立标识和独立属性”。例如“阿司匹林”作为活性成分有分子式、分子量、SMILES;“拜阿司匹灵”作为药品有商品名、剂型、规格、批准文号。二者不能合并,否则查询“某成分的所有上市剂型”时就会丢失层级。
二、关系类型:有方向、有语义、可推理
关系类型决定图谱能否做路径推理。药物领域常见关系可归为几组:
- 成分—药品:
hasActiveIngredient、isIngredientOf。 - 药物—靶点:
targets、inhibits、activates、agonizes、antagonizes。 - 药物—疾病:
indicatedFor、contraindicatedIn。 - 药物—药物:
interactsWith、synergizesWith、antagonizesDrug。 - 药物—不良反应:
causesAdverseEvent、associatedWith。 - 代谢关系:
metabolizedBy、inhibitsEnzyme、inducesEnzyme。
关系必须带方向。例如“华法林抑制CYP2C9”与“CYP2C9代谢华法林”方向相反,推理含义也不同。前者用于判断相互作用风险,后者用于解释血药浓度变化。若方向缺失,路径推理会得出错误结论。
三、属性设计:区分标识属性、描述属性与推理属性
属性不是越多越好,而应按用途分层。以活性成分为例:
| 属性类别 | 示例字段 | 用途 |
|---|---|---|
| 标识属性 | InChIKey、CAS号、DrugBank ID | 实体对齐、去重 |
| 描述属性 | 分子式、分子量、SMILES | 展示、相似性计算 |
| 推理属性 | logP、氢键供体数、靶点亲和力 | 规则推理、打分 |
| 证据属性 | 来源文献、置信度、更新时间 | 溯源与可信度评估 |
属性设计要避免两个极端:一是把关系硬塞成属性,例如把“靶点”写成药物表里的一个文本字段,导致无法反向查询;二是把属性拆成实体,例如把“分子量”也建成节点,造成图谱膨胀。判断标准是:若某值需要被独立引用、参与多跳推理或与其他实体建立联系,就应建为实体或关系;否则保留为属性。
四、本体与词表构建方法
本体(Ontology)提供类、属性、约束和公理;词表(Vocabulary)提供受控术语和同义词映射。构建过程可概括为:
- 确定范围与复用:优先复用 ChEBI、GO、MeSH、DrugBank、SNOMED CT 等已有本体,避免自造术语。
- 抽取候选术语:从药品说明书、文献、数据库字段中抽取名词短语。
- 归类与定义:把候选术语归入实体类型,给出自然语言定义和形式化约束。
- 建立层级与同义:用
subClassOf、exactMatch、closeMatch建立上下位和同义关系。 - 校验与迭代:用推理机检查一致性,用真实查询验证覆盖度。
下面这张图展示了一个药物知识模型的核心结构:左侧是实体类型,中间是关系类型,右侧是属性与证据,底部是本体与词表的支撑关系。
五、一个可执行的建模片段
以“华法林—CYP2C9—不良反应”为例,建模结果可表示为:
实体:
DrugProduct: 华法林钠片(规格2.5mg,批准文号H...)
ActiveIngredient: 华法林(InChIKey: PJVWKTKQMONHTI-UHFFFAOYSA-N)
Target: CYP2C9(UniProt: P11712)
AdverseEvent: 出血
关系:
华法林钠片 --hasActiveIngredient--> 华法林
华法林 --metabolizedBy--> CYP2C9
华法林 --causesAdverseEvent--> 出血
CYP2C9 --inhibitsEnzyme--> 华法林代谢(方向:抑制代谢)
属性:
华法林.logP = 3.0(示例值)
华法林.氢键供体数 = 1
出血.置信度 = 0.87
出血.来源 = 说明书 + 文献
这段模型可以直接支撑一条推理:若患者同时使用某种CYP2C9抑制剂,则华法林代谢被抑制,血药浓度升高,出血风险上升。推理链为:DrugProduct → ActiveIngredient → metabolizedBy → CYP2C9 ← inhibitsEnzyme ← 抑制剂。如果关系方向或实体类型划分错误,这条链就会断裂。
药物知识建模的最终目标不是画出一张漂亮的类图,而是让图谱能够回答“这个药通过什么靶点起作用”“这个成分可能和哪些药相互作用”“这个不良反应有哪些证据支持”等问题。实体类型决定能问什么,关系类型决定能推什么,属性决定能信什么,本体与词表决定这些答案是否一致、可复用、可扩展。