3. 药物数据源接入与治理

药物知识图谱的质量上限,在数据接入阶段就已经被决定了。图谱推理再精巧,如果底层实体名称混乱、剂量单位不统一、药物与靶点关系来源不明,推理结果就不可信。本节围绕药物数据从“外部来源”到“可入库知识”的完整链路,讲清数据源类型、抽取策略、清洗对齐、质量控制与版本管理五个关键环节。

一、药物数据源的四种类型

药物数据源按结构化程度和获取方式,大致可分为四类,它们的抽取难度和治理重点差异很大。

  • 结构化数据库:如 DrugBank、ChEMBL、TTD、PubChem。字段明确、有主键和标准标识符(DrugBank ID、ChEMBL ID、CAS 号),抽取以字段映射为主,治理重点是标识符对齐与版本追踪。
  • 半结构化资源:如 FDA 药品标签(SPL)、EMA 评估报告、临床试验注册信息(ClinicalTrials.gov)。有固定章节但文本自由,需按章节定位后做实体与关系抽取。
  • 非结构化文献:如 PubMed 摘要、药品说明书 PDF、专利文本。需要 NER(命名实体识别)与关系抽取模型,治理重点是抽取置信度与人工复核。
  • 内部业务数据:如医院处方、不良反应上报、药物警戒系统记录。字段私有、编码不统一,治理重点是术语映射与隐私脱敏。

实际工程中,一个药物实体往往同时来自多个源。例如“阿司匹林”在 DrugBank 是 DB00945,在 ChEMBL 是 CHEMBL25,在 PubChem 是 CID 2244。接入时必须保留源标识 + 源版本,否则后续无法追溯某条关系的出处。

二、抽取策略:从字段映射到关系抽取

抽取策略要与数据源类型匹配,不能一刀切。对结构化库,采用声明式映射:定义源字段到图谱属性/关系的映射规则,例如将 DrugBank 的 targets 表映射为 (Drug)-[TARGETS]->(Protein)。对半结构化文本,采用章节锚定 + 规则抽取:先按 SPL 的 <section> 标题定位“适应症”“不良反应”等段落,再在段内抽取药物、疾病、反应术语。对非结构化文献,采用模型抽取 + 置信度过滤:用 BioBERT 类模型输出实体与关系,并保留概率分数,低于阈值(如 0.75)的进入人工复核队列。

一个常见的教学示例是抽取“药物—靶点—作用类型”三元组。假设从 ChEMBL 的 activities 表抽取,关键字段包括 molecule_chembl_id、target_chembl_id、standard_type(如 IC50)、standard_value、standard_units。抽取规则可写成:当 standard_type = IC50 且 standard_units = nM 时,生成关系 (Drug)-[INHIBITS {assay: IC50, value: 12.5, unit: nM}]->(Target)。这里必须保留测定类型和单位,否则不同实验条件的数据会被错误合并。

药物数据接入与治理链路 数据源 结构化库 DrugBank/ChEMBL 半结构化 SPL/CT.gov 非结构化 PubMed/说明书 抽取策略 字段映射(结构化) 章节锚定+规则(半结构) 模型抽取+置信度(非结构) 清洗与对齐 名称归一(同义词合并) 标识符映射(CAS/InChIKey) 单位与剂量标准化 质量控制 完整性检查 一致性校验 置信度阈值 版本管理(贯穿全链路) 源版本快照 · 抽取规则版本 · 映射表版本 · 质控报告版本 · 图谱发布版本(可回滚、可对比、可追溯) 抽取示例:ChEMBL 活性数据 源字段:molecule_chembl_id, target_chembl_id, standard_type=IC50, standard_value=12.5, standard_units=nM 生成关系: (Drug)-[INHIBITS {IC50:12.5nM}]→(Target) 质控关键指标(示例阈值) • 必填字段完整率 ≥ 98% • 标识符可映射率 ≥ 95% • 单位标准化覆盖率 = 100% • 关系抽取置信度 ≥ 0.75 方可入库

三、清洗对齐:让不同来源说同一种语言

清洗对齐是治理中最耗时也最关键的环节,核心是三件事:名称归一、标识符映射、单位标准化。

名称归一解决“同药异名”。例如“阿司匹林”“乙酰水杨酸”“Aspirin”“ASA”指向同一药物。做法是建立同义词表,以首选名(preferred name)为主键,其余作为别名。工程上常用 InChIKey 作为化学结构的唯一指纹:阿司匹林的 InChIKey 为 BSYNRYMUTXBXSQ-UHFFFAOYSA-N,只要结构相同,无论名称如何变化都能对齐。

标识符映射解决跨库关联。建议维护一张映射表,字段包括:preferred_name、cas、drugbank_id、chembl_id、pubchem_cid、inchikey。当新数据接入时,优先用 InChIKey 匹配,其次 CAS,最后名称模糊匹配并人工确认。

单位标准化解决剂量与活性值可比性。例如 IC50 可能以 nM、μM、mg/mL 出现,必须统一到 nM 并保留原始值。换算关系为 1 μM = 1000 nM,1 mM = 106 nM。对剂量,需区分每日剂量、单次剂量、累积剂量,并统一到 mg。若源数据是“500 mg bid”,应解析为每日 1000 mg,并保留给药频次属性。

四、质量控制:用指标守住入库门槛

质量控制不是事后抽查,而是嵌入抽取与清洗流程的自动检查。建议设置以下检查点:

  • 完整性:药物实体必须有首选名和至少一个唯一标识符;关系三元组必须包含主语、谓语、宾语和来源。
  • 一致性:同一药物在不同源中的靶点关系若冲突,标记为待仲裁,不直接合并。
  • 合法性:剂量值必须为正数,单位必须在允许枚举内,日期格式统一为 ISO 8601。
  • 置信度:模型抽取的关系保留概率分数,低于阈值进入人工复核队列,不直接入库。

一个可执行的质控报告应包含:总记录数、通过数、拒绝数、拒绝原因分布、人工复核队列长度。例如某批次接入 12,000 条药物—靶点关系,通过 11,340 条,拒绝 660 条,其中 420 条因单位缺失、180 条因置信度低于 0.75、60 条因靶点标识符无法映射。这些数字直接决定该批次能否发布。

五、版本管理:让图谱可追溯、可回滚

药物数据是持续更新的:DrugBank 每年多个版本,ChEMBL 定期发布,FDA 标签随时修订。因此图谱必须版本化。版本管理至少覆盖四层:源版本(记录每个数据源的抓取日期与版本号)、抽取规则版本(规则变更后旧结果可复现)、映射表版本(同义词与标识符映射的变更历史)、图谱发布版本(每次发布的节点数、边数、质控报告摘要)。

推荐做法是采用“快照 + 差异”策略:每次发布保存完整快照,同时计算与上一版本的差异(新增、删除、修改的实体与关系)。当推理结果出现异常时,可以快速定位是哪次数据更新引入的。例如某次更新后“华法林—出血风险”关系置信度骤降,通过版本对比发现是某源标签修订导致抽取段落变化,从而定位问题。

治理不是一次性任务,而是伴随图谱生命周期的持续过程。建议把质控指标和版本记录纳入日常监控看板,每次数据更新后自动生成报告,人工只需关注异常项。

总结来看,药物数据接入与治理的完整闭环是:识别数据源类型 → 选择匹配的抽取策略 → 执行名称、标识符、单位三层对齐 → 用完整性、一致性、合法性、置信度四类指标质控 → 以源版本、规则版本、映射版本、发布版本四层版本管理兜底。只有这条链路稳定,后续的图谱推理才有可靠的知识基础。