3. 疾病本体与药物本体构建

在疾病药物关联建模中,本体不是可有可无的“术语表”,而是把来自电子病历、文献、知识库和药物说明书的异构表述,收敛到同一套可计算语义坐标系的底座。疾病本体回答“疾病是什么、如何分类、彼此有何关系”,药物本体回答“药物是什么、如何归类、以什么形式作用于疾病”。两者只有各自标准化并完成对齐,后续的关联抽取、图嵌入和推理才有稳定的语义基础。

一、标准化术语:从自由文本到受控标识

标准化术语的核心任务,是给每个概念分配一个稳定、唯一、可追溯的标识符,并绑定规范名称与同义词集合。以疾病为例,临床文本中“2型糖尿病”“II型糖尿病”“T2DM”“成人发病型糖尿病”指向同一概念,应统一映射到同一本体标识,例如以 DOID、ICD-10、MeSH 或 SNOMED CT 中的编码作为主键,其余表述进入同义词列表。药物侧同理,“阿司匹林”“乙酰水杨酸”“Aspirin”“ASA”应归并到同一药物概念,可选用 DrugBank ID、RxNorm CUI 或 ChEBI 作为主标识。

实际操作中,标准化不是简单字符串匹配,而要处理三类问题:一是缩写与全称的对应,如“COPD”与“慢性阻塞性肺疾病”;二是语序与修饰差异,如“非小细胞肺癌”与“肺癌,非小细胞型”;三是粒度差异,如“糖尿病”与“1型糖尿病”是上下位关系而非同义关系。建议为每个概念维护如下最小字段:主标识、规范名称、同义词数组、来源本体、版本号、映射置信度。置信度低于阈值(例如 0.85)的映射应进入人工复核队列,而不是直接写入生产本体。

二、层级关系:is-a、part-of 与因果链

本体的价值很大程度体现在层级结构上。疾病本体中,最常用的是 is-a(上下位)关系,例如“2型糖尿病 is-a 糖尿病 is-a 胰腺内分泌疾病”;其次是 part-of 与 has-location,用于表达解剖部位和系统归属。药物本体中,除 is-a(如“阿司匹林 is-a 非甾体抗炎药”)外,还需表达 has-target、has-mechanism、has-metabolite 等关系,才能支撑“药物—靶点—疾病”的推理路径。

层级设计要避免两个极端:过深会导致推理链过长、噪声放大;过浅则失去分类价值。工程上通常把疾病本体控制在 5~7 层,药物本体控制在 4~6 层,并在关键节点设置“多父节点”以表达交叉分类,例如“糖尿病肾病”同时属于“糖尿病并发症”和“肾脏疾病”。多父节点必须显式声明,否则后续图查询会出现路径歧义。

疾病本体与药物本体的对齐结构 左侧疾病层级 · 右侧药物层级 · 中部语义映射与对齐 疾病本体(Disease Ontology) 代谢性疾病 (DOID:001) 糖尿病 (DOID:9352) 1型糖尿病 2型糖尿病 糖尿病肾病 糖尿病视网膜病变 并发症 (part-of 关系) is-a 实线 · part-of 橙线 药物本体(Drug Ontology) 降糖药 (ATC:A10) 双胍类 (ATC:A10BA) 二甲双胍 (DB00331) 靶点 AMPK 肝脏代谢 has-target / has-mechanism is-a 实线 · has-target 紫线 语义映射与对齐 同义词归一化 跨本体映射 置信度评估 人工复核队列 映射结果写入关联三元组 疾病—药物关联三元组:(疾病ID, 治疗/禁忌, 药物ID)

三、语义映射:把临床表述接到本体节点

语义映射解决的是“文本到概念”的落地问题。工程上通常分三步走。第一步是词典匹配,用规范名称和同义词构建倒排索引,对输入文本做最长优先匹配,命中即给出候选概念。第二步是规则消歧,利用上下文窗口中的否定词、时间词、部位词过滤错误候选,例如“无糖尿病史”中的“糖尿病”不应被映射为确诊疾病。第三步是向量召回与重排,对未命中词典的表述,用生物医学预训练模型生成句向量,在概念向量库中检索 Top-K 候选,再按相似度排序。

一个可参考的映射记录格式如下,字段可根据实际系统裁剪:

{
  "mention": "II型糖尿病",
  "normalized": "2型糖尿病",
  "concept_id": "DOID:9352",
  "source_ontology": "DOID",
  "match_type": "synonym",
  "confidence": 0.96,
  "context": "患者确诊II型糖尿病5年",
  "review_status": "auto_accepted"
}

当置信度落在 0.70~0.85 区间时,建议标记为“待复核”,并保留原始 mention 与上下文,供人工在审核界面中一键确认或改判。低于 0.70 的候选直接丢弃,避免污染本体。

四、本体对齐:让疾病与药物说同一种语言

疾病本体与药物本体各自建好后,必须做对齐,否则关联模型无法把“二甲双胍”和“2型糖尿病”连起来。对齐包括三个层次:概念级对齐、关系级对齐和实例级对齐。概念级对齐是把不同本体中指向同一概念的节点合并,例如把 DOID:9352 与 ICD-10 的 E11 建立等价映射;关系级对齐是统一关系谓词,例如把“治疗”“用于”“适应症”统一为 treats 关系;实例级对齐是把具体药物—疾病对写入关联表,并标注证据来源与强度。

对齐质量可用三个指标衡量:覆盖率(能对齐的概念占比)、准确率(对齐正确的比例)和一致性(对齐后不产生矛盾路径的比例)。实践中,建议先做高置信度的自动对齐,再对边界概念做人工抽检,抽检比例不低于 10%。对齐结果应版本化保存,每次本体升级后重新跑一遍对齐流水线,并记录差异,避免“静默漂移”。

本体构建不是一次性工程。建议把术语表、映射规则、对齐结果都纳入版本管理,每次更新都保留变更日志,这样在关联模型效果波动时才能快速定位是本体变更还是数据分布变化导致的。

五、工程落地要点

第一,主标识要稳定。一旦选定 DOID 或 DrugBank ID 作为主键,就不要频繁更换,否则历史关联数据需要整体重写。第二,同义词要持续扩充。新药上市、疾病命名更新、指南术语变化都会带来新表述,建议每月从文献和病历中抽取未登录词,人工确认后补入同义词库。第三,层级深度要克制。过深的分类会让图查询变慢,也会让嵌入模型难以学到有效表示。第四,对齐要留痕。每条映射记录都应包含来源、时间、置信度和审核人,便于追溯和回滚。