药物知识图谱简介:节点、边、关系、常用数据集

说起药物知识图谱,我得先坦白一件事。我记得刚接触知识图谱那会儿,觉得这玩意儿不就是个复杂的数据库吗?后来在项目中踩了几次坑才明白——它是把生物医学里那些零散的关系,变成机器可以推理的结构化知识。说白了,就是给AI一张“药物关系网”。

咱们先看这张网由什么组成。其实就三样东西:节点、边、关系。听起来简单,但里面门道不少。

节点:知识图谱里的“实体”

节点就是现实世界里的东西。在药物领域,节点可以是:

  • 药物(Drug):比如阿司匹林、伊马替尼。
  • 疾病(Disease):比如2型糖尿病、非小细胞肺癌。
  • 基因(Gene):比如EGFR、BRCA1。
  • 蛋白质(Protein):比如HER2、PD-L1。
  • 副作用(Side Effect):比如恶心、肝毒性。
  • 通路(Pathway):比如EGFR信号通路。

每种节点有什么用?我个人习惯用领域前缀区分,比如“DRUG:阿斯匹林”这样。避坑指南:不要混用ID格式。我以前见过一个项目,同一种药在数据库中既有CID又有DrugBank ID,结果模型训练时把同一个实体当成两个不同节点处理——白白浪费算力。

节点类型示例常用ID来源
药物伊马替尼DrugBank、ChEMBL
疾病慢性粒细胞白血病Disease Ontology、ICD-10
基因BCR-ABLNCBI Gene、HGNC
副作用皮疹SIDER、MedDRA

边:连接节点的“关系”

边就是两个节点之间的连线。每条边都带有语义——这就是知识图谱比普通数据库聪明的地方。

常见的药物KG关系包括:

  • TREATS:药物治疗疾病
  • CAUSES:药物引起副作用
  • TARGETS:药物靶向蛋白
  • INTERACTS_WITH:药物相互作用
  • ASSOCIATED_WITH:基因与疾病关联

这里面有个坑:关系的方向性。我曾经在项目中用无向边表示“药物-靶点”关系,结果模型推理时完全混乱。后来换成有向边(DRUG → TARGETS → PROTEIN),效果才正常。你想想看,连方向都不对,图神经网络怎么学得会?

核心要点:关系要语义明确,方向不能歧义。每条边只表达一个事实。

三元组:知识图谱的基本单元

知识图谱里最小单位是三元组:(头实体, 关系, 尾实体)。

例如:
(伊马替尼, TREATS, 慢性粒细胞白血病)
(伊马替尼, TARGETS, BCR-ABL蛋白)
(慢性粒细胞白血病, ASSOCIATED_WITH, BCR-ABL基因)

每个三元组就是一条知识。一个完整的药物KG可能包含几百万甚至上亿条这样的三元组。存储格式我推荐用RDF或TSV,后面讲数据处理时会细说。

个人技巧:做超参数搜索前,建议先把三元组去重检查。我见过有项目因为重复三元组导致训练loss一直不降,排查了两天才发现是数据冗余问题。

常用数据集:别重复造轮子

做药物KG建模,数据集的选择很关键。下面几个是我在项目里反复用到的:

数据集名称节点数关系类型特点
DrugBank~15,000药物药物-靶点、药物-疾病、药物-副作用手工标注,质量高但规模小
ChEMBL~200万生物活性数据药物-靶点、活性值数据量大,但噪声多
Hetionet~50,000节点24种关系整合多种生物知识,适合图学习
Biokg~85,000实体93种关系大规模药物KG数据集

我个人习惯先用Hetionet做原型——它的关系类型丰富但数量适中,非常适合调试超参数。等模型跑通了再换到更大规模的数据集。否则一上来就用Biokg,你光数据处理就得忙活半天。

知识图谱的构建流程

下面这张图展示了药物KG的构建和训练逻辑:

药物知识图谱构建与训练流程 原始数据采集 PubMed / DrugBank 实体与关系抽取 NER + 关系分类 三元组构建 格式统一 / 去重 知识图谱嵌入训练 TransE / DistMult / 超参数搜索 评估与优化 MRR / Hits@N / 调参 注意: 数据质量直接影响模型训练效果。 超参数搜索前务必做数据清洗与实体对齐。

为什么需要走这个流程?你想想看,直接从原始数据扔到模型里训练,结果只能是垃圾进垃圾出。我建议每做完一步都做个验证:实体数量合理吗?关系分布均衡吗?

避坑指南:常见问题与对策

  • 实体对齐不一致:同一个基因在不同数据集中用不同ID,必须统一映射。我用过一个轻量工具叫Bon Jovi(不是歌手),专门做生物实体对齐。
  • 关系稀疏性:很多关系只出现几次,模型学不到有效信息。我的做法是合并低频关系,或者用关系侧加权。
  • 数据泄露风险:训练集和测试集不能有共享实体。我吃过一次亏:测试集中出现了训练集的热门药物,导致验证效果虚高。
警告:千万不要为了省事直接下载一个KG数据集就跑模型。至少检查这三条:实体ID是否标准、关系定义是否一致、三元组是否有重复。

药物知识图谱的节点、边、关系,说白了就是给复杂生物系统画地图。有了这张地图,我们才能在上面跑超参数搜索、做药物重定位预测。下面几章,咱们会深入到具体的模型结构和搜索策略上。