3. 知识图谱模式设计

知识图谱模式(Schema)是图谱的“骨架”与“契约”。在药物重定位场景中,模式设计决定了后续能问出什么问题、能推理出什么新关联。如果模式过于松散,图谱会退化为一张巨大的三元组表,难以支撑“某老药是否可能治疗新适应症”这类结构化查询;如果模式过于僵硬,又会丢失药物重定位最依赖的跨域联想能力。本节围绕药物、靶点、疾病、通路、副作用等核心实体类型及其关系,讨论如何设计一个既能表达机制、又能支撑推理的本体与模式。

一、先明确实体类型:药物重定位的“名词表”

实体类型(Entity Type / Class)是模式的第一层。面向药物重定位,至少需要以下核心类:

  • Drug(药物):包括已上市药物、临床试验阶段药物、化合物。关键属性如 DrugBank ID、ChEMBL ID、通用名、SMILES、最大临床剂量、给药途径。
  • Target(靶点):主要是蛋白质,也可包括基因、RNA、离子通道。关键属性如 UniProt ID、基因符号、蛋白家族。
  • Disease(疾病):包括疾病本体中的标准术语,如 OMIM、DOID、ICD-10 编码。关键属性如疾病名称、分类、遗传关联。
  • Pathway(通路):如 Reactome、KEGG 通路。关键属性如通路 ID、通路名称、所属细胞过程。
  • SideEffect(副作用):如 MedDRA 术语、UMLS 编码。关键属性如副作用名称、严重程度、发生频率。

此外,根据重定位策略,还可扩展 Gene(基因)、ProteinComplex(蛋白复合物)、ClinicalTrial(临床试验)、Literature(文献) 等类。实体类型的选择应遵循“最小可用集”原则:先覆盖药物—靶点—疾病—通路—副作用这条主链,再按需扩展。

二、定义关系类型:让实体之间“说话”

关系(Relation / Property)是模式的第二层,也是重定位推理的关键。常见关系包括:

  • Drug–Target:binds / inhibits / activates / modulates。这是药物作用机制的核心边。例如“二甲双胍 —activates→ AMPK”。
  • Drug–Disease:treats / contraindicated_for / off_label_use。这是重定位的“已知答案”边,用于训练和验证。
  • Target–Disease:associated_with / causative_for / risk_factor。这是从靶点推断疾病关联的桥梁。
  • Drug–SideEffect:causes / has_adverse_event。副作用常被用作重定位信号,例如某药的副作用提示其可能作用于新靶点。
  • Target–Pathway:participates_in / regulates。通路是连接靶点与疾病表型的中层结构。
  • Pathway–Disease:dysregulated_in / involved_in。通路异常与疾病发生密切相关。
  • Drug–Drug:interacts_with / synergizes_with / antagonizes。用于组合重定位或药物相互作用分析。

关系设计要区分方向性与对称性。例如“binds”通常无方向,但“inhibits”有方向;“interacts_with”可视为对称关系。方向定义一旦确定,全文与图谱存储必须保持一致,否则推理路径会出错。

三、模式设计中的约束与推理规则

仅有实体和关系还不够,模式还需要约束(Constraint)和推理规则(Rule)。约束用于保证数据质量,例如:Drug 的 SMILES 必须唯一;Target 的 UniProt ID 必须符合正则格式;Disease 必须来自 DOID 或 OMIM 本体。推理规则用于从已有边推导新边,例如:

规则1:若 Drug A binds Target T,且 Target T associated_with Disease D,
       则推测 Drug A may_treat Disease D(置信度需结合证据强度)。

规则2:若 Drug A causes SideEffect S,且 SideEffect S 与 Target T 相关,
       则推测 Drug A 可能作用于 Target T(副作用反向映射)。

规则3:若 Drug A treats Disease D1,且 Disease D1 shares_pathway_with Disease D2,
       则推测 Drug A 可能对 Disease D2 有效(通路介导的重定位)。

这些规则不是绝对真理,而是产生候选假设的“生成器”。在模式中,应把规则产生的边标记为 inferred 或 hypothesis,与人工审核的 asserted 边区分开,便于后续证据追溯。

四、用 SVG 展示模式的核心结构

下图给出面向药物重定位的核心模式:实体类型、主要关系及推理方向。图中实线表示直接证据边,虚线表示可推理边,箭头表示关系方向。

Drug 药物 Target 靶点 Disease 疾病 Pathway 通路 SideEffect 副作用 binds / inhibits associated_with may_treat(推理) causes participates_in dysregulated_in 反向映射 图例 直接证据边(asserted) 推理边(inferred / hypothesis) 核心推理链:Drug → Target → Disease;Drug → SideEffect → Target;Drug → Disease → Pathway → Disease

五、模式落地:从本体到图谱存储

设计好的模式需要落地为可执行的图谱结构。常见做法是采用 RDF/OWL 或属性图(Property Graph)。以属性图为例,节点标签对应实体类型,边类型对应关系,属性挂在节点或边上。例如:

// 节点示例
(:Drug {drugbank_id: "DB00331", name: "Metformin", smiles: "CN(C)C(=N)N=C(N)N"})
(:Target {uniprot_id: "Q13131", gene: "PRKAA1", name: "AMPK alpha-1"})
(:Disease {doid: "DOID:9352", name: "type 2 diabetes mellitus"})

// 边示例
(:Drug)-[:BINDS {affinity: "IC50=10uM", source: "ChEMBL"}]->(:Target)
(:Target)-[:ASSOCIATED_WITH {score: 0.87, source: "DisGeNET"}]->(:Disease)
(:Drug)-[:MAY_TREAT {confidence: 0.72, inferred: true}]->(:Disease)

在存储时,建议为每条边保留 source、confidence、inferred 三个元属性。这样,当图谱用于重定位假设生成时,可以按置信度排序,并快速回溯证据来源。

六、模式设计的常见陷阱

  • 实体粒度不一致:把“基因”和“蛋白质”混为一谈,导致同一靶点出现多个节点。应在模式中明确 Target 以 UniProt 为准,Gene 单独建类并用 encodes 关系连接。
  • 关系语义过载:用同一个 associated_with 表示药物—靶点、靶点—疾病、疾病—通路,导致推理时无法区分。应按语义拆分关系类型。
  • 忽略否定证据:只记录“有效”边,不记录“无效”或“矛盾”边。重定位中,阴性结果同样重要,应支持 contradicts 或 negative_evidence 关系。
  • 缺少版本管理:本体和模式会随知识更新而演化,应记录模式版本,避免旧数据与新规则冲突。
实践建议:在项目初期,先用 5 个实体类 + 8 种关系构建最小模式,跑通“药物—靶点—疾病”推理链;再根据实际查询需求逐步扩展通路、副作用、临床试验等类。模式不是一次设计完成的,而是在重定位任务迭代中不断收敛的。

总结来说,面向药物重定位的本体与模式设计,核心是围绕“药物—靶点—疾病—通路—副作用”这条主链,明确实体类型、关系方向、约束条件和推理规则,并在存储层保留证据与置信度元数据。一个好的模式,能让图谱既表达已知机制,又能生成可验证的新假设,为后续的链接预测、路径推理和候选药物排序打下坚实基础。