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 层,并在关键节点设置“多父节点”以表达交叉分类,例如“糖尿病肾病”同时属于“糖尿病并发症”和“肾脏疾病”。多父节点必须显式声明,否则后续图查询会出现路径歧义。
三、语义映射:把临床表述接到本体节点
语义映射解决的是“文本到概念”的落地问题。工程上通常分三步走。第一步是词典匹配,用规范名称和同义词构建倒排索引,对输入文本做最长优先匹配,命中即给出候选概念。第二步是规则消歧,利用上下文窗口中的否定词、时间词、部位词过滤错误候选,例如“无糖尿病史”中的“糖尿病”不应被映射为确诊疾病。第三步是向量召回与重排,对未命中词典的表述,用生物医学预训练模型生成句向量,在概念向量库中检索 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 作为主键,就不要频繁更换,否则历史关联数据需要整体重写。第二,同义词要持续扩充。新药上市、疾病命名更新、指南术语变化都会带来新表述,建议每月从文献和病历中抽取未登录词,人工确认后补入同义词库。第三,层级深度要克制。过深的分类会让图查询变慢,也会让嵌入模型难以学到有效表示。第四,对齐要留痕。每条映射记录都应包含来源、时间、置信度和审核人,便于追溯和回滚。