PrimeKG — 哈佛精准医疗知识图谱:129,375 节点与 405 万关系把 20 个医学生物数据源焊成一张图

Harvard Medical School Zitnik Lab 构建的精准医疗基础设施——把 DrugBank、MONDO、HPO、GO、Reactome、UBERON 等 20 个数据源经本体调和与实体消解融合为 10 类节点、30 种无向边的异构图,专为药物重定位与多模态 AI 而生,整合数据 CC0 1.0 发放

来源 DrugBank、MONDO、UMLS、HPO、GO、Reactome、UBERON、Entrez Gene、Orphanet、Mayo Clinic、SIDER、DrugCentral、CTD、DisGeNET、Bgee、NCBI Gene、OMIM(2023 扩展)等 20 个医学生物数据源的整合(完整清单与各自角色见正文附录 A)发布时间: 2026-10-04最后更新: 2026-10-20 阅读 80
PrimeKG — 哈佛精准医疗知识图谱:129,375 节点与 405 万关系把 20 个医学生物数据源焊成一张图

信息速览

数据集名称PrimeKG — 哈佛精准医疗知识图谱:129,375 节点与 405 万关系把 20 个医学生物数据源焊成一张图
数据类型原始数据,文本数据,知识图谱
规模129,375 个实体节点(疾病 17,080、蛋白 27,671、生物过程 28,642 等 10 类);无患者级个体数据
接入方式DrugBank、MONDO、UMLS、HPO、GO、Reactome、UBERON、Entrez Gene、Orphanet、Mayo Clinic、SIDER、DrugCentral、CTD、DisGeNET、Bgee、NCBI Gene、OMIM(2023 扩展)等 20 个医学生物数据源的整合(完整清单与各自角色见正文附录 A)
AI 就绪度

INFOBOX — PrimeKG 一屏速览

维度 内容
本质 精准医疗异构知识图谱:20 个医学生物数据源经实体消解融合为单表 CSV 图(kg.csv),不是原始数据的简单堆栈
团队 Harvard Medical School Zitnik Lab;Payal Chandak*、Kexin Huang*(*同等贡献)、Marinka Zitnik(通讯)
论文 Building a knowledge graph to enable precision medicine,Scientific Data 2023;10:67(doi:10.1038/s41597-023-01960-3,CC BY 4.0)
规模 129,375 节点(10 类)|4,050,249 无向关系(30 种;kg.csv 双向存储 8,100,498 行)|kg.csv 0.94 GB
节点分布 生物过程 28,642|蛋白 27,671|疾病 17,080|表型 15,311|解剖 14,035|分子功能 11,169|药物 7,957|细胞组分 4,176|通路 2,516|暴露 818
ID 本体 drug=DrugBank|disease=MONDO|gene/protein=Entrez|BP/MF/CC=GO|phenotype=HPO|anatomy=UBERON|pathway=Reactome|exposure=CTD
差异化 治药关系三件套:indication / contraindication / off-label use——治药关系按证据状态拆成三条边
疾病消解 22,236 术语 → 17,080 分组疾病:字符串匹配 + ClinicalBERT 余弦 0.98 聚类 + 人工审核
多模态 疾病节点挂 10 类临床文本字段(流行率、症状、病因等),药物节点挂 6 类药学文本字段
基线 疾病覆盖比 SPOKE、HSDN、GARD 高 1-2 个数量级(论文口径)
获取 Harvard Dataverse DOI 10.7910/DVN/IXA7BM;kg.csv 官方 wget 直链单文件可取
许可 三层:代码 MIT|整合数据 CC0 1.0|上游 20 源各自许可仍有效
加载 pandas 秒级直读;PyTDC 一行建资源;PyKEEN 内置;NetworkX 一键转图
版本坑 Dataverse 是 2022-05 v2 快照;2023-07 重跑与 2023-12 OMIM 扩展(+612,282 边)只在 GitHub 脚本层
库内互链 drugbank(89)、sider(92)、mondo(748)、hpo(747)、reactome(424)、tdc(131)、omim(159) 等 20 余条目

PrimeKG 是一个「把散落在 20 个数据库里的分子、疾病、药物与临床事实焊接成一张图」的基础设施工程:哈佛医学院 Zitnik Lab(Zitnik Lab, Harvard Medical School)从 DrugBank、MONDO、HPO、GO 等数据源出发,做本体调和(ontology harmonization)与实体消解(entity resolution),产出一张 129,375 节点、405 万无向关系的异构知识图谱,以一个 0.94 GB 的单表 CSV(kg.csv)发放。它最鲜明的身份是「药物重定位图谱」——indication(适应症)、contraindication(禁忌症)、off-label use(超适应症使用)三种治药关系是相对同类知识图谱的差异化配置;它最容易被误用的地方是「快照陷阱」——Dataverse 直链下载的是 2022 年 5 月的 v2 快照,2023 年的两次重要更新只存在于 GitHub 脚本层。

导语读法三则:

  1. 只想下数据:直奔 §6 获取与许可——先看 6.1 三层许可与 wget 直链,再看 6.3 版本链,别把 v2 快照当成最新版。
  2. 做图机器学习:直奔 §5 任务与用法——PyTDC/PyKEEN 加载代码与 2.3 节关系字符串清单连读,过滤条件里的类型字符串写错会静默返回空集。
  3. 做文献对比:直奔 §4 横向比较与 §10 避坑清单——与 SPOKE、Hetionet 的规模对照和九个已踩过的坑。

§0 导读:这个数据集解决什么问题

精准医疗的核心推理模式是「跨尺度连接」:药物作用在蛋白上,蛋白在某些组织里表达,组织异常构成疾病,疾病携带表型,表型又反过来指向药物。任何单一数据源都只覆盖这条链上的一小段——DrugBank 知道药物-靶点,MONDO 知道疾病层级,HPO 知道表型词汇表,GO 知道基因功能,UMLS 知道术语映射,但「药→靶→通路→解剖→疾病→表型」的完整链条没有任何一个源替你打通。研究者要么在十个数据库之间手工搬运 ID,要么忍受各源之间互相冲突的同名异义与异名同义。

一个常见疑问值得先回答:2022 年冻结的图,今天还值得用吗?值得——PrimeKG 的节点 ID 挂在 MONDO、Entrez、GO 这类持续维护的标准本体上,前向更新走 GitHub 脚本层;但如果你要的是 v2 快照之后的新药-靶点证据(如 2023-12 的 OMIM 扩展内容),直链确实给不了,需要自建(坑 5)或换库。换句话说,它值得用的前提是想清楚自己用的是哪一支版本。

PrimeKG 的回答是「整合而非采集」,论文标题里的动词是 build a knowledge graph——它几乎不产生新的生物实验数据,而是把别人的数据做深度的清洗与连接。贡献分三层:

  1. 数据层:10 类节点、30 种无向边(论文 Methods 口径;摘要与 README 写 29 种——坑 2 存照),覆盖从分子(蛋白、分子功能)到细胞(细胞组分、通路)到组织(解剖)到临床(疾病、表型、药物)再到环境(暴露)的 10 个生物尺度,节点总数 129,375、无向关系 4,050,249。
  2. 方法层:实体消解是把 22,236 个疾病术语折叠成 17,080 个分组疾病的关键工艺——字符串匹配、ClinicalBERT 句嵌入余弦相似度 0.98 截断聚类、人工审核三道工序串联,让「自闭症」在 MONDO 里的 37 个概念、UMLS 里的 192 个概念与 Orphanet 里的 6 个概念收敛为按临床亚型分组的少数节点。
  3. 工程层:单表 CSV、10 列固定模式、节点 ID 全部采用 DrugBank/MONDO/Entrez/GO/HPO/UBERON/Reactome/CTD 等标准本体、CC0 1.0 许可、Harvard Dataverse 持久 DOI——这是一份对机器学习管线极度友好的发放形态。

这三层叠加的效果可以量化:论文给出的对比基线显示,PrimeKG 的疾病覆盖比 SPOKE、HSDN、GARD 三个同类知识图谱高 1-2 个数量级。换句话说,同样的「药物-基因-疾病」推理任务,别的图里能覆盖的疾病只是它的一角。

§0 读法三则:

  1. 这个条目描述的是「整合型知识图谱」而非「标注型数据集」:PrimeKG 的价值在知识整合工程,没有逐样本的人工标注;评估它该问「连接质量如何」,不是「标注一致率多少」。
  2. 全文硬数字均出自论文 Table 1、Methods 与 Dataverse API 实测;摘要宣传口径(100,000+ 节点)与精确口径(129,375)并存处,已在坑 1、坑 3 逐条存照。
  3. 检索时如果把「PrimeKG paper Table 3」当作数据规模表去找会落空——论文里 Table 1 才是节点分布总表,Table 3/4 是药物-疾病特征统计(本次未逐表核对,见存照清单)。

§1 数据集速览:十问十答

Q1:PrimeKG 到底是什么——一张图还是一堆文件?
两者都是,但形态是文件。逻辑上它是一张异构图:节点是疾病、药物、基因/蛋白等 10 类实体,边是它们之间的 30 种无向关系;物理上它发放为一个单表 CSV(kg.csv,0.94 GB,10 列,8,100,498 行),每行一条关系记录,外加若干特征文件与疾病分组中间产物。把 kg.csv 读进 pandas 或图数据库,图就回来了。

Q2:「129,375 节点」和宣传里的「100,000+ 节点」哪个对?
都对,但精确度不同。129,375 是论文 Table 1 的逐类加总精确值;「100,000+」是摘要里的取整修辞。引用时用 129,375;10 类节点的完整分布表(最大类生物过程 28,642,最小类暴露 818)见 §2.1。

Q3:为什么 kg.csv 有 810 万行,论文却说 405 万关系?
因为构建流程里有一步「加反向边」:每条无向边在 CSV 里双向各存一行,8,100,498 = 2 × 4,050,249,精确吻合。直接数行数会把关系数高估一倍——这是 PrimeKG 最常见的引用错误,也是本条目坑 1 的主题。

Q4:节点 ID 用什么本体,能和其他数据库直接 join 吗?
能,这是它 AI-Ready 的核心卖点之一:drug=DrugBank ID、disease=MONDO、anatomy=UBERON、pathway=Reactome、gene/protein=Entrez Gene ID、三大 GO 类=GO 术语、effect/phenotype=HPO ID、exposure=CTD ExposureStressorID。拿着这些标准 ID 可以直接与库内 drugbank(89)、mondo(748)、hpo(747) 等条目的数据对接。

Q5:疾病节点是怎么从 2 万多个术语变成 17,080 个的?
三道工序:先字符串匹配合并明显同义词,再用 ClinicalBERT 句嵌入做余弦相似度聚类(0.98 截断阈值,宁缺毋滥),最后人工审核。消解前 22,236 个疾病术语(其中 MONDO 贡献 22,205 个概念),消解后 17,080 个分组疾病,且同一疾病的不同临床亚型保留为独立节点。

Q6:PrimeKG 能做什么任务?
论文定位与社区实践共有五类:药物重定位(利用 indication/contraindication/off-label use 三种治药边做假设生成,这是差异化能力)、疾病亚型分类、疾病-基因-通路机制分析、图神经网络(GNN)与知识图谱嵌入(KGE)的链接预测、图+文本多模态学习(疾病与药物节点自带文本字段)。

Q7:我能直接下载吗?什么许可?
能。Harvard Dataverse DOI 10.7910/DVN/IXA7BM,README 给了 kg.csv 的官方 wget 直链,11 个文件带 md5。整合数据是 CC0 1.0(公有领域贡献),代码库是 MIT——但注意第三层:上游 20 个数据源各自的许可仍然有效,DrugBank 非商业许可、UMLS 需签署协议这类约束不会因为 CC0 而消失。

Q8:2023 年 OMIM 扩展的版本去哪找?
不在 Dataverse。Dataverse 上的 kg.csv 停在 2022-05-02 的 v2 快照;2023-07 团队在 GitHub 更新了 17 个处理脚本(可重建至 2023-07 数据库版),2023-12 又加入 OMIM 扩展(+612,282 边、+32,866 节点)。要新版本,必须用官方脚本对上游源自行重建——这是本条目坑 5 的主题。

Q9:它和 SPOKE、Hetionet 这类医学科研知识图谱比有什么不同?
论文的定量口径:疾病覆盖高 1-2 个数量级。结构上的差异点:治药关系按证据状态拆成适应症、禁忌症、超适应症三条(Hetionet 只有不分状态的 treats 边);暴露(exposure)节点类型是多数同类图没有的环境尺度;发放形态是单表 CSV 而非 Neo4j dump 或自建 API。

Q10:为什么它对 AI-Ready 很重要?
五个理由:CC0 许可让再分发与商用评估有明确基线;持久 DOI 让引用与版本回溯稳定;标准本体 ID 让跨库 join 不需要模糊匹配;单表 10 列固定模式让 pandas/SQL/图数据库三条路都能秒接;官方维护 PyTDC 与 PyKEEN 加载器,一行代码进管线。§6.4 有完整的 AI-Ready 维度评分。

§1.5 五分钟上手:从零到第一条查询

以下五步在任意有 Python 3.8+ 与网络的机器上可完成,全程无需注册或申请:

  1. 下载主文件(约 0.94 GB,走 Harvard Dataverse 直链):
wget -O kg.csv https://dataverse.harvard.edu/api/access/datafile/6180620
md5sum kg.csv   # 校验:aac8191d4fbc5bf09cdf8c3c78b4e75f
  1. 载入与体检(确认行数与类型全集,防止字符串坑):
import pandas as pd
kg = pd.read_csv('kg.csv', low_memory=False)
print(len(kg))                    # 8,100,498(双向存储行数,勿直接称「边数」)
print(kg.relation.unique())       # 关系字符串全集——写过滤条件前先看这里
print(kg.x_type.value_counts())   # 节点类型分布(x_type 口径)
  1. 第一个领域查询(某疾病的一跳邻域,以帕金森病为例):
pd_rows = kg[kg.x_name.str.contains('Parkinson', case=False, na=False)
             & (kg.x_type == 'disease')]
print(pd_rows[['relation', 'y_type', 'y_name']].head(20))
  1. 第一组重定位信号(三类治药边的规模感):
tx = kg[kg.relation.isin(['indication', 'contraindication', 'off-label use'])]
print(tx.relation.value_counts())   # 三类各自的数量,合计约 3 万条
  1. 要图结构就一键转 NetworkX(装好 PyTDC 后):
from tdc.resource import PrimeKG
data = PrimeKG(path='./data')   # 指向 kg.csv 所在目录
nx_graph = data.to_nx()

三处常见卡点提前排雷:下载中断不报错(先 md5 后使用);low_memory=False 别省(否则 dtype 分块推断出噪声);类型字符串 gene/protein 与 effect/phenotype 直接从 unique() 输出复制,不要手敲。

§2 数据构成与规格

2.1 规模总表:10 类节点的精确分布

PrimeKG 的节点清单以论文 Table 1 为准,总数 129,375,十类节点从两万八到八百一十八横跨两个数量级:

节点类型 数量 占比 ID 本体 尺度
Biological process(生物过程) 28,642 22.1% GO 分子功能
Protein(蛋白/基因) 27,671 21.4% Entrez Gene 分子
Disease(疾病) 17,080 13.2% MONDO 临床
Phenotype(表型/副作用) 15,311 11.8% HPO 临床
Anatomy(解剖结构) 14,035 10.8% UBERON 组织
Molecular function(分子功能) 11,169 8.6% GO 分子功能
Drug(药物) 7,957 6.2% DrugBank 干预
Cellular component(细胞组分) 4,176 3.2% GO 细胞
Pathway(通路) 2,516 1.9% Reactome 细胞
Exposure(暴露) 818 0.6% CTD ExposureStressorID 环境
合计 129,375 100% — —

三个读表要点:

  1. GO 一家占三类:生物过程、分子功能、细胞组分都是 Gene Ontology 的分支,合计 43,987 个节点(34%),是图里最大的单一本体家族——做节点分类任务时这三类的同质性要留意。
  2. 蛋白节点是斜杠类型:kg.csv 里的类型字符串写作 gene/protein(斜杠),因为 Entrez Gene ID 同时编码基因与其编码蛋白,PrimeKG 选择不拆分。
  3. 表型节点是折叠类型:effect/phenotype 把 HPO 人类表型本体词条与 SIDER 药物副作用词条折叠为同一类型——同一种字符串、两种语义来源,按 x_source/y_source 列区分。

2.2 kg.csv 十列模式:单表即全图

kg.csv 是 981,751,236 字节(约 0.94 GB)的单表 CSV,8,100,498 行数据,10 列固定模式:

列名 含义 示例值(示意)
relation 关系字符串(机器用) drug_protein
display_relation 关系显示名(人类读) drug-target
x_id 源节点 ID DB00959(DrugBank)
x_type 源节点类型 drug
x_name 源节点名称 Carboplatin
x_source 源节点来源数据库 DrugBank
y_id 目标节点 ID MONDO:0001234
y_type 目标节点类型 disease
y_name 目标节点名称 …
y_source 目标节点来源数据库 MONDO

这个模式的三点设计意图:

  1. 边列表即图:不需要单独的节点文件,节点集合可以从 x_* 与 y_* 两列聚合得到(Dataverse 里的 nodes.tab 是便捷用的节点清单,8,893,706 字节)。
  2. 显示名与机器 ID 并存:relation 与 display_relation 的分工让过滤脚本用稳定字符串、报表用可读名称,两不耽误。
  3. 来源列全保留:x_source/y_source 记录每个节点的原始数据库归属,这是追溯「这条边是谁说的」的第一入口。

2.3 关系字符串清单:过滤前必查

kg.csv 的 relation 列是机器过滤的入口,以下 18 个字符串是本次核实过的实际取值,覆盖 10 类节点之间的主要连接:

关系字符串 语义方向 连接的节点类型
protein_protein 蛋白-蛋白相互作用 gene/protein ↔ gene/protein
drug_protein 药物作用于靶点 drug ↔ gene/protein
disease_protein 疾病-基因关联 disease ↔ gene/protein
drug_drug 药物相互作用 drug ↔ drug
drug_side_effect 药物副作用 drug ↔ effect/phenotype
indication 适应症 drug ↔ disease
contraindication 禁忌症 drug ↔ disease
off-label use 超适应症使用 drug ↔ disease
disease_phenotype_positive 疾病携带阳性表型 disease ↔ effect/phenotype
disease_phenotype_negative 疾病不携带该表型 disease ↔ effect/phenotype
anatomy_protein_present 该解剖结构表达该蛋白 anatomy ↔ gene/protein
anatomy_protein_absent 该解剖结构不表达该蛋白 anatomy ↔ gene/protein
bioprocess_protein 生物过程参与 biological_process ↔ gene/protein
molfunc_protein 分子功能执行 molecular_function ↔ gene/protein
cellcomp_protein 细胞组分定位 cellular_component ↔ gene/protein
pathway_protein 通路成员 pathway ↔ gene/protein
exposure_disease 暴露-疾病关联 exposure ↔ disease
go_go GO 术语间层级/关联 GO 类 ↔ GO 类

三个易错点(对应坑 4/坑 8):

  1. 不存在 drug_disease 关系——治药关系被拆成 indication/contraindication/off-label use 三条,过滤「所有药物-疾病边」时要 OR 三个字符串。
  2. 不存在 disease_gene 关系——疾病与基因的关联写作 disease_protein,因为 PrimeKG 里基因与蛋白是同一节点类型 gene/protein。
  3. 两态关系别写串——anatomy_protein_present 与 absent、disease_phenotype_positive 与 negative 是语义相反的两态,用模糊匹配或前缀过滤时要清楚自己拿到的是哪一态。

论文 Methods 与腾讯云译文口径称「10 types of nodes and 30 types of undirected edges」——上表 18 个是核实过的子集,完整 30 种边类型的逐一清单以 kg.csv 的 relation 列实测为准(本条目存照清单不对其余 12 个字符串做无据推测)。

2.4 多模态文本字段:图之外的第二个模态

PrimeKG 的「多模态」不指图像,指图结构之外挂接的文本描述:

疾病节点文本(源自 MONDO/Orphanet/Mayo Clinic/UMLS 四个来源):

字段 内容
prevalence 流行率
symptoms 症状
cause 病因
risk_factors 危险因素
epidemiology 流行病学
clinical_description 临床描述
management 管理与治疗
complications 并发症
prevention 预防
when_exams_needed 何时需要就诊

药物节点文本(源自 DrugBank/DrugCentral 两个来源):

字段 内容
molecular_weight 分子量
indication 适应症描述
mechanism_of_action 作用机制
pharmacodynamics 药效学
protein_binding 蛋白结合
pathway 代谢途径

对应特征文件在 Dataverse:disease_features.tab(113,533,957 字节)与 drug_features.tab(10,029,833 字节)。文本模态的三种用法:

  1. 检索增强:把疾病/药物描述文本喂给 LLM,图结构做候选约束——社区已有多篇 LLM+KG 的组合实践。
  2. 表征初始化:文本嵌入作为 GNN 节点特征,替代随机初始化。
  3. 可解释输出:预测出的药物重定位假设可以回溯到 mechanism_of_action 文本,让假设自带机制叙事。

2.5 Dataverse 文件族:11 个文件的分工

Harvard Dataverse v2 版(2022-05-02)共 11 个文件,除 README.txt 外按三组分工:

文件 大小(字节) 角色
kg.csv 981,751,236 主文件:清理后完整图,10 列边表
edges.csv 386,582,390 边清单(精简列)
nodes.tab 8,893,706 节点清单
disease_features.tab 113,533,957 疾病文本特征
drug_features.tab 10,029,833 药物文本特征
kg_raw.csv 893,347,412 构建中间产物:全边原始版
kg_giant.csv 893,328,974 构建中间产物:最大连通分量版
kg_grouped.csv 888,336,264 构建中间产物:疾病分组版
kg_grouped_diseases.tab 2,915,370 疾病分组映射
kg_grouped_diseases_bert_map.tab 1,402,282 ClinicalBERT 聚类映射
README.txt 3,137 官方 wget 指引

11 个文件的 md5 校验值全部核过并登记于本条目附录 C 的证据链表与附录 E 的逐文件 md5 全表,下载后先对 md5 再入库——Dataverse 大文件传输中断不报错,坏文件会以诡异方式毒化下游。

三版本语义值得单独一表:

版本 语义 用途
kg_raw.csv 合并 20 源后的全边原始表 想自己做连通分量/清理策略的研究者
kg_giant.csv 取最大连通分量后 保证全图连通的中间形态
kg.csv 删 NaN/重复→加反向边→再去重→删自环 官方推荐使用版

2.6 十类节点速记:类型字符串、本体与主要关系

把 2.1-2.3 节的信息压成一张速记表(关系列只列已核实字符串):

类型字符串 中文名 ID 本体 主要关系(已核实) 一句话用途
drug 药物 DrugBank drug_protein、drug_drug、drug_side_effect、indication、contraindication、off-label use 重定位任务的核心查询起点
disease 疾病 MONDO disease_protein、disease_phenotype_positive/negative、exposure_disease + 三条治药关系的反向 临床侧枢纽
gene/protein 基因/蛋白 Entrez protein_protein、drug_protein、disease_protein、anatomy_protein_present/absent + 四类 GO 关系 分子侧枢纽,连接度最高
effect/phenotype 表型/副作用 HPO(折叠 SIDER) drug_side_effect、disease_phenotype_positive/negative 表型语义与副作用信号
biological_process 生物过程 GO bioprocess_protein、go_go 机制路径的中间层
molecular_function 分子功能 GO molfunc_protein、go_go 功能注释
cellular_component 细胞组分 GO cellcomp_protein、go_go 亚细胞定位
pathway 通路 Reactome pathway_protein 机制分析
anatomy 解剖 UBERON anatomy_protein_present/absent 组织表达特异性
exposure 暴露 CTD exposure_disease 环境健康尺度

§3 构建方法:从 20 个数据源到一张图

3.1 六步流水线

PrimeKG 的构建流程在论文 Methods 里有明确步骤序列,可以压缩为六步:

  1. 合并:把 20 个数据源的关系表按统一模式(节点类型、ID 本体、关系类型)装进同一张边表——kg_raw.csv 就是这一步的产物。
  2. 取最大连通分量:扔掉游离小岛,只保留最大连通分量,保证图上任意两节点可达——kg_giant.csv。
  3. 删 NaN 与重复边:清洗缺失值记录,去掉完全重复的边。
  4. 加反向边:为每条边补一条反向记录——这是 8,100,498 = 2 × 4,050,249 的来源。
  5. 再去重:加反向边操作可能引入新的重复,再清一遍。
  6. 删自环:去掉 x=y 的自指边。

每一步都是可从 GitHub 仓库的 17 个处理脚本复现的确定性操作——这也是「整合型数据集」的 QA 形态:质量不靠标注一致率,靠流程可复现。

3.2 疾病实体消解:三道工序折叠 5,156 个冗余概念

疾病是全图语义最混乱的角落:同一个病在不同数据库里叫不同名字、挂不同 ID、切不同粒度。PrimeKG 的处理分三道工序:

  1. 字符串匹配:先合并字面同义词,处理掉最机械的一批。
  2. ClinicalBERT 聚类:对剩余术语取句嵌入,余弦相似度 ≥0.98 才聚为一组——阈值设得极高,宁漏勿错,错折叠会永久混淆两个不同的病。
  3. 人工审核:机器聚类结果抽样人工确认。

三道工序把 22,236 个疾病术语(MONDO 贡献 22,205 个概念)折叠为 17,080 个分组疾病。论文给的自闭症案例能说明折叠幅度:「自闭症谱系」在 MONDO 里有 37 个概念、在 UMLS 里有 192 个概念、在 Orphanet 里有 6 个概念——消解后收敛为按临床亚型(如典型自闭症、Asperger 综合征等)分组的 3 个节点。疾病分组映射的中间产物(kg_grouped_diseases.tab 与 kg_grouped_diseases_bert_map.tab)也在 Dataverse 公开,想知道某个疾病被怎么折叠的,直接查映射表。

3.3 文本挂接:两个模态的缝合线

图结构建好之后,团队为疾病与药物两类临床核心节点挂接文本(字段清单见 2.4 节)。挂接本身不是简单抄库——同一字段(如适应症)在 DrugBank 与 DrugCentral 的叙述风格、详细程度都不同,PrimeKG 保留来源标注,使用者可按来源分层使用。这两个 .tab 特征文件与主图以节点 ID 对接,不进 kg.csv 主表——主表保持纯边结构,文本按需加载。

3.4 质量验证:论文 Technical Validation 说了什么

作为整合型数据集,PrimeKG 的验证形态与标注型数据集完全不同,论文的验证分三块:

  1. 结构与连通性验证:最大连通分量策略保证图主体可达;十类节点的度分布与边类型的合理性检查。
  2. 消解质量个案研究:自闭症案例逐概念核对(3.2 节),展示分组疾病与临床亚型的对应性。
  3. 性能基准:全图加载 <5.18s ± 51.9ms,图上查询 <1s——为「能进生产管线」提供工程背书。

没有 ML 排行榜、没有下游任务 SOTA——PrimeKG 定位是基础设施,不是竞赛题。它的下游评测生态在 TDC(Therapeutics Data Commons)的 benchmark 体系里(见 §5)。

3.5 重建脚本层:17 个脚本与两次「纸面更新」

GitHub 仓库(mims-harvard/PrimeKG)维护着完整的重建管线,两个时间点的更新值得记住:

  1. 2023-07:17 个 processing 脚本重跑/更新,支持对 2023-07 版上游数据库重建 PrimeKG。重跑覆盖的源包括 Bgee、CTD、DisGeNET、DrugBank、DrugCentral、NCBI Gene、GO、HPO、MONDO、Reactome、SIDER、UBERON、UMLS——注意这份清单里没有 OMIM 与 Mayo Clinic(OMIM 属 2023-12 的单独扩展、Mayo Clinic 走特征工程层的 mapping_mayo.ipynb,自建新版时按附录 L 的步骤另行处理),版本归属的完整讨论见坑 5。
  2. 2023-12:加入 OMIM 扩展,带来 +612,282 条边与 +32,866 个节点(README 口径;中文社区转述成「61 万条关系和 3 万多个节点」——坑 9 存照)。

这两次更新都不改变 Dataverse 上的文件:v2 快照停在 2022-05-02,日后也不会更新。Dataverse 与 GitHub 的关系可以这样理解——前者是「论文发表时的冻结版本」(保证可复现论文结果),后者是「活的前向版本」(跟随上游源演进)。两种需求都正当,但引用与使用时必须声明自己用的是哪一支。

3.6 数据源-处理脚本对照表(已核实部分)

20 个一手资源的完整名单与下载标识以论文 Data Records 节为准;GitHub 仓库对每个资源提供处理脚本与期望输出,本条目已核实以下 15 个(自建新版时照此对照):

数据源 处理脚本 期望输出
Bgee bgee.py anatomy_gene.csv
CTD(比较毒理基因组学数据库) ctd.py exposure_data.csv
DisGeNET —(直接使用 curated_gene_disease_associations.tsv) —
DrugBank drugbank_drug_drug.py / drugbank_drug_protein.py drug_drug.csv / drug_protein.csv
DrugBank(特征) parsexml_drugbank.ipynb / Parsed_feature.ipynb 12 个药物特征文件
DrugCentral drugcentral_queries.txt / drugcentral_feature.Rmd drug_disease.csv / dc_features.csv
Entrez Gene(NCBI) ncbigene.py protein_go_associations.csv
Gene Ontology go.py go_terms_info.csv / go_terms_relations.csv
HPO(本体) hpo.py / hpo_obo_parser.py hp_terms.csv / hp_parents.csv / hp_references.csv
HPO(注释) hpoa.py disease_phenotype_pos.csv / disease_phenotype_neg.csv
MONDO mondo.py / mondo_obo_parser.py mondo_terms/parents/references/subsets/definitions.csv
OMIM(2023-12 扩展) omim_tools.py / omim-api.ipynb / append_omim.ipynb mim2gene.txt / genemap2.txt / morbidmap.txt 等
Reactome reactome.py reactome_ncbi.csv / reactome_terms.csv / reactome_relations.csv
SIDER sider.py sider.csv
UBERON uberon.py uberon_terms.csv / uberon_rels.csv / uberon_is_a.csv
UMLS(映射) umls.py / map_umls_mondo.py umls_mondo.csv
UMLS(定义) umls.ipynb umls_def_disorder_2021.csv / umls_def_disease_2021.csv

三个补充说明:

  1. Mayo Clinic 与 Orphanet 不在此表——两者的疾病文本经特征工程层(engineer_features.ipynb / mapping_mayo.ipynb)挂接,属于 3.3 节的文本挂接工序而非边表构建工序。
  2. 2023-07 重跑覆盖 13 源(§3.5 清单)——DisGeNET 与 OMIM 不在重跑清单内的原因分别是「无需改动」与「当时扩展尚未发生」。
  3. 表为「已核实部分」而非全 20——Human PPI Network、Disease Ontology 等其余源的处理细节未在本次抓取材料中逐一显式列出,按存照纪律不做无据补全,以论文 Data Records 与仓库实际为准。

§4 横向比较:PrimeKG 在医学科研知识图谱中的位置

4.1 与 SPOKE、HSDN、GARD 的定量比较

论文给出的基线对比口径:PrimeKG 的疾病覆盖比 SPOKE、HSDN、GARD 高 1-2 个数量级。这三个对照物的定位各不相同:

对照物 性质 与 PrimeKG 的差异要点
SPOKE UCSC 的整合型生物医学 KG 同为多源整合,但疾病覆盖少 1-2 个数量级(论文口径)
HSDN 疾病-症状共现网络 文献共现驱动,非本体调和的实体消解
GARD 罕见病知识库 覆盖面限于罕见病;PrimeKG 的罕见病覆盖(Orphanet 9,348 罕见病覆盖约 90.8%,待核论文原文口径)反而反超

读这张表的注意事项:

  1. 「1-2 个数量级」是论文作者自报的口径,对照细节在论文正文与 Table(本次未逐表核对,见存照清单第 11 条)——引用时写「论文口径」比写绝对数字更稳。
  2. 覆盖数量不等于连接质量:SPOKE 等图的边密度、验证深度各有侧重,PrimeKG 的优势主张集中在疾病节点的覆盖广度。
  3. Orphanet 90.8% 的罕见病覆盖若属实,PrimeKG 同时是库内罕见病维度上最值得互链的知识图谱条目(罕见病 tag 与 orphanet-ordo(812)、hpo(747) 形成三角)。

4.2 与 Hetionet 的结构比较

Hetionet 是更早(2017)的整合型生物医学 KG,也是 PrimeKG 论文里隐含的同类参照:

  1. 节点/边类型:Hetionet 11 类节点 24 种边;PrimeKG 10 类节点 30 种边——PrimeKG 多出来的边类型主要在治药关系的细分与 GO 内部关系。
  2. 治药关系:Hetionet 只有不分状态的 treats 边(Compound-Disease);PrimeKG 拆成 indication / contraindication / off-label use 三条——「这个药对这个病是适应症还是禁忌」在 Hetionet 里无法表达。
  3. 暴露尺度:Hetionet 没有 exposure 节点类型;PrimeKG 有 818 个 CTD 暴露实体。
  4. 文本模态:Hetionet 无节点文本;PrimeKG 疾病/药物节点带 16 类文本字段。
  5. 发放形态:Hetionet 提供多格式(JSON/TSV/Neo4j dump);PrimeKG 是单表 CSV——更朴素,但 ID 本体标准化程度高。

库内检索提示:Hetionet 在本库暂无 status=1 条目(查 %hetionet% 0 行),本条目提及它只作背景对照,不配互链 rid。

4.3 治药关系三件套:为什么值得单独一节

indication / contraindication / off-label use 的三边组是 PrimeKG 最有辨识度的设计,也是药物重定位任务的真正入口:

  1. indication(适应症):监管批准的用途——「已被证明有效」的已知识库。
  2. contraindication(禁忌症):明确不能用的情况——负样本的稀缺来源。链接预测文献里正样本遍地、高质量负样本难求,禁忌症边是天然的「确定不该发生」关系。
  3. off-label use(超适应症使用):临床在用但未获批——正在发生的重定位现场,是假设生成任务最有趣的学习信号。

三者在 kg.csv 里是三个不同的 relation 字符串,意味着任何「药物-疾病」推理模型都能直接把「治疗推荐」细化为「适应症扩展 / 禁忌回避 / 超适应症观察」三种不同置信语义。论文与官网把这一组关系表述为 contradictions(应为 contraindication 之笔误——坑 4 存照),检索论文原文时用 contraindication 才能在 kg.csv 里对上字符串。

一个实操推论:做「药物重定位」假设生成时,典型路径是 drug→gene/protein→disease 的两跳推理(药-靶边 + 病-基因边),而 indication 边用来构造训练正样本、contraindication 边用来构造硬负样本——这个组合在单一图内即可完成,不需要跨库拼接。

4.4 在库内知识图谱类条目中的位置

本库与 PrimeKG 直接相关的知识图谱类条目是 tdc(131)——Therapeutics Data Commons(NeurIPS 2021 Datasets & Benchmarks)。两者的关系是一体两面:

  1. 人员纽带:TDC 一作 Kexin Huang 同时是 PrimeKG 共同一作——PrimeKG 作为内置资源(tdc.resource.PrimeKG)进入 TDC 分发体系。
  2. 定位分工:TDC 是任务与基准的集合(带 ML 任务的评测接口),PrimeKG 是单一知识资源(图本体本身)——TDC 回答「用什么任务测」,PrimeKG 回答「图长什么样」。
  3. 代码入口:TDC 用户从 tdc.resource 进入 PrimeKG;PrimeKG 直读用户不一定需要 TDC。

4.5 选型决策:什么时候选 PrimeKG

把 §4.1-§4.4 的比较压成一张决策表:

你的需求 首选 理由
药物重定位假设生成(需正负样本) PrimeKG indication/contraindication/off-label use 三态边只有这里有
疾病覆盖面要求高的机制分析 PrimeKG 疾病覆盖高同类 1-2 个数量级(论文口径)
罕见病基因-表型关联 PrimeKG(辅 orphanet-ordo/hpo 条目源) Orphanet 覆盖约 90.8%(论文口径)
多平台可比对的 treats 类粗信号 Hetionet 生态更老、下游复现多;库内暂无条目
患者数据整合、个体化引擎 SPOKE 开放整合引擎形态,节点类型更多元
带 ML 任务封装与排行榜的评测 TDC(tdc(131)) PrimeKG 经 TDC 进入基准体系
证据打分、靶点优先级排序 Open Targets(open-targets(456)) 平台形态、持续更新,与图谱形态互补
需要患者级纵向数据 都不选 去库里电子健康记录类条目——PrimeKG 无个体

选型的底层逻辑一句话:要「决定级」的药物-疾病语义选 PrimeKG,要「过程级」的多源数据流选引擎型平台——两者不是替代关系,聪明的做法是 PrimeKG 做训练资产、平台做校验资产。

§5 任务与用法:五类任务与四条加载路径

5.1 五类任务的适配度

任务 适配度 依赖的关系/字段 备注
药物重定位 ★★★★★ indication / contraindication / off-label use / drug_protein / disease_protein 差异化主场,三态治药边无可替代
疾病亚型分类 ★★★★ disease_phenotype_positive / negative + 疾病文本字段 消解后的亚型粒度是现成标签
机制分析(病-因-通路) ★★★★ disease_protein / pathway_protein / bioprocess_protein / anatomy_protein_present 跨尺度路径查询
GNN / KGE 链接预测 ★★★★ 全图结构 PyKEEN 内置支持,TDC 提供任务切分
图+文本多模态 ★★★ 16 类文本字段 + 图结构 文本仅覆盖疾病/药物两类节点

不适合的场景也明确:

  1. 需要患者级数据(队列、生存分析、真实世界证据)——PrimeKG 无个体,去库里电子健康记录类条目。
  2. 需要分子结构描述符做 QSAR——药物节点只有文本字段无结构文件,分子结构去 drugbank(89) 或 chembl(85) 主条目拿原始库。
  3. 需要实时更新的临床证据——图是快照不是服务,2022-05 之后的证据不在里面(除非自建 2023-07/2023-12 版)。

5.2 四条加载路径(官方支持)

路径一:pandas 直读(最朴素,适合探索与过滤):

import pandas as pd
kg = pd.read_csv('kg.csv', low_memory=False)
# 注意 low_memory=False:10 列混合类型,分块推断会产生 dtype 噪声
# 过滤示例:取所有疾病相关边
disease_edges = kg.query('y_type=="disease" | x_type=="disease"')

路径二:PyTDC 资源封装(适合走 TDC 生态):

from tdc.resource import PrimeKG
data = PrimeKG(path='./data')          # 首次调用自动下载
drug_feature = data.get_features(feature_type='drug')   # 文本特征
nx_graph = data.to_nx()                 # 一键转 NetworkX
data.get_node_list(type='disease')      # 按类型取节点清单

路径三:PyKEEN(知识图谱嵌入,适合 KGE 链接预测):

import pykeen.datasets
pykeen.datasets.has_dataset('primekg')   # True:内置数据集入口

路径四:环境复现(适合自建新版本):

conda env create --name PrimeKG --file=environment.yml
wget -O kg.csv https://dataverse.harvard.edu/api/access/datafile/6180620

四条路径的选型:探索性分析选一;与 TDC 基准联动选二;KGE 论文复现选三;要 2023-07 之后的新版本只能选四走 GitHub 脚本自建。

5.3 药物重定位的最小实操路径

一个不依赖深度学习的最小推理链,用于说明图的价值:

  1. 选定目标疾病 d,取其 disease_protein 邻居基因集 G(d)。
  2. 对每个候选药物 c,取其 drug_protein 邻居靶点集 T©。
  3. 计算 |T© ∩ G(d)| 与通路/生物过程层面的间接连接强度。
  4. 用 indication 边排除已知适应症(它们不是「新」假设)、用 contraindication 边排除禁忌组合。
  5. 剩余高连接候选即重定位假设清单,附 mechanism_of_action 文本做可解释性背书。

这条链在 PrimeKG 里不需要任何跨库 join;在原始的 20 个数据源里做同样的事,光是 ID 映射就要写一天的胶水代码——这就是「整合型知识图谱」的生产力论据。

5.5 六个常用查询模式

以下模式覆盖 80% 的探索性需求(代码基于路径一的 pandas 直读):

# 模式 1:某疾病的一跳邻居(基因 + 表型 + 药物)
nb = kg[(kg.x_name == 'rheumatoid arthritis') | (kg.y_name == 'rheumatoid arthritis')]

# 模式 2:某药物的全部作用靶点
targets = kg[(kg.relation == 'drug_protein') & (kg.x_name == 'Imatinib')]

# 模式 3:某疾病的表型画像(记得只有 positive 是「有此表型」)
pheno = kg[(kg.relation == 'disease_phenotype_positive') & (kg.y_type == 'effect/phenotype')]

# 模式 4:各关系类型边数统计(无向计数记得除 2,坑 1)
counts = kg.groupby('relation').size() / 2

# 模式 5:药物-疾病三态对照(坑 4:三条字符串缺一不可)
tx = kg[kg.relation.isin(['indication', 'contraindication', 'off-label use'])]

# 模式 6:节点类型枚举实测(坑 8 的标准规避动作)
print(kg['x_type'].unique())

两个模式层面的提醒:模式 3 里 positive/negative 是语义相反的两态,混用会把「无此表型」算进「有此表型」;模式 4 的 groupby 计数是双向行数,直接当关系数发布会高估一倍。

5.4 版本声明规范

引用或发布基于 PrimeKG 的结果时,条目建议的声明格式:

  1. 数据版本:Dataverse v2(2022-05-02 快照)或 GitHub 2023-07 重建版 / 2023-12 OMIM 扩展版——三者结果不可混比。
  2. 许可合规:CC0 1.0 覆盖整合产物;若成果涉及 DrugBank/UMLS 等上游源的原样再分发,逐源核对许可(§6.1)。
  3. 关系计数口径:写「4,050,249 无向关系」或「8,100,498 边记录(双向存储)」,不写「810 万关系」。

5.5 内存与性能工程要点

0.94 GB 的 CSV 在工程上属于「单机无压力但要讲方法」的体量:

  1. 内存预留 4-6 倍:pandas 以 object 列存 10 列文本,实载约 3-6 GB——8 GB 内存的笔记本可跑,4 GB 的容器要精简列。
  2. 先裁列后运算:绝大多数任务只需要 5 列(relation/x_type/x_id/y_type/y_id),usecols 裁剪后内存直降一半以上。
  3. 转 Parquet 一劳永逸:kg.to_parquet('kg.parquet') 之后体积约减半、载入快 3-5 倍、dtype 固化——团队协作场景强烈建议做一次。
  4. 按类型分块:只研究疾病子图时,pd.read_csv(..., chunksize=1_000_000) 流式过滤 x_type/y_type=='disease' 再拼接,峰值内存可控。
  5. 图算法选好武器:NetworkX 适合十万节点级的分析与教学;百万级边要上 PyG/DGL 的稀疏表示或 graphscope——论文的 <5.18s 加载是「读进 DataFrame」的口径,不含图算法耗时。
  6. 去重的正确姿势:双向存储意味着 kg[['x_id','y_id','relation']].drop_duplicates() 只会去掉完全相同的行,得不到无向语义——先对两端排序拼无向键再去重(坑 2 的工程化表述)。

§6 获取与许可:三层许可的门怎么进

6.1 三层许可结构

PrimeKG 的许可是三层嵌套结构,README 原文明确区分了代码库许可与数据集本身许可的边界:

层 对象 许可 含义
L1 GitHub 代码库(17 个构建脚本与工具) MIT 可自由使用、修改、再分发,保留版权声明即可
L2 整合数据集(Dataverse 11 个文件) CC0 1.0 公有领域贡献:复制、再分发、商用均无需授权
L3 上游 20 个数据源各自的原始数据 各源自定(DrugBank 非商业许可、UMLS 需签署协议等) 不因 CC0 而失效,原样再分发上游内容仍受各源约束

三层的关键推论:

  1. CC0 覆盖的是「整合行为」的产物——PrimeKG 团队投入劳动产生的边表、消解映射、文本组织形态。
  2. 想把 PrimeKG 里来自单一上游的大段原始内容(如 DrugBank 的药物说明书文本)单独抽出来再分发,L3 的约束照样适用——CC0 不是上游许可的洗白通道。
  3. 学术发表引用 PrimeKG 数据通常无需额外授权;商业产品化(尤其药物-靶点数据的原样内嵌)建议逐源做一次许可盘点。

6.2 获取实操:直链、md5 与环境

获取主文件的最短路径(README 官方命令):

wget -O kg.csv https://dataverse.harvard.edu/api/access/datafile/6180620
md5sum kg.csv   # 应为 aac8191d4fbc5bf09cdf8c3c78b4e75f

要点:

  1. datafile id 6180620 对应 kg.csv(981,751,236 字节,md5 aac8191d4fbc5bf09cdf8c3c78b4e75f)——其余 10 个文件各有独立 datafile id,全部 11 个文件的 id 与 md5 登记于附录 E。
  2. 先验 md5 再用:Dataverse 大文件传输中断不报错,坏 CSV 会在下游以行数对不上、编码错位等诡异方式毒化结果。
  3. Dataverse 维护窗口不可取:哈佛 Dataverse 定期维护,抓取失败先看 Dataverse 公告再怀疑命令。
  4. kg_raw/kg_giant/kg_grouped 系列是中间产物(三版本语义见 2.5 节),常规用户只取 kg.csv + 两个特征 tab 即可。

6.3 版本链:从存入到扩展的完整时间线

时点 事件 载体
2021-07-12 Dataverse 首次存入(depositor: Chandak, Payal) Harvard Dataverse
2022-04 预印本 v1 上线(bioRxiv 10.1101/2022.05.01.489928) bioRxiv
2022-05-02 Dataverse v2(RELEASED,现行文件版)——kg.csv 即此快照 Harvard Dataverse
2022-06 Dataverse 下载量破 5,000 Dataverse 统计
2023-02 正式刊发 Scientific Data 2023;10:67(DOI 10.1038/s41597-023-01960-3,论文 CC BY 4.0) Nature Portfolio
2023-07 GitHub 17 脚本重跑/更新,支持 2023-07 数据库版重建;Dataverse 文件不变 GitHub
2023-12 OMIM 扩展:+612,282 边、+32,866 节点;仅脚本层 GitHub

版本链的结论一句话:Dataverse 是冻结的论文版,GitHub 是活的前向版——引用 PrimeKG 必须声明用的是哪一支(5.4 节声明规范)。

6.4 AI-Ready 速评:五个维度的叙事版

按本库 AI-Ready 评估框架(D/A/I/M/S 五维,逐项打分见附录 B):

  1. 可发现性(D):持久 DOI + 论文 CC BY 4.0 + 官网 + GitHub 多入口,检索即达;唯一暗坑是官网线索类文章偶有张冠李戴(本条目坑 6)。
  2. 可获取性(A):CC0 + 直链 wget + 单文件 0.94 GB 无需注册——库内第一梯队。
  3. 可互操作性(I):标准本体 ID(DrugBank/MONDO/Entrez/GO/HPO/UBERON/Reactome/CTD)+ 单表 10 列 + 四条官方加载路径——I 维度的标杆样本。
  4. 元数据质量(M):论文 Methods 完整、README 清晰、Dataverse 主题字段规范;扣分项是版本状态在两个载体间割裂(快照 vs 脚本层),初次使用者易混淆。
  5. 可持续性(S):Zitnik Lab 持续维护(2023 两次更新)+ TDC 生态内建 + 学术引用量大;风险点是数据文件层停止更新后,新版获取依赖自建管线的技术门槛。

6.5 上游源许可逐源速查(商用前必读)

L3 层(上游源各自许可)不必逐字读条款也可以先做风险分级——按「是否允许商用」把高频源分三档:

风险档 数据源 要点
高(明确限制) DrugBank 数据非商业许可;商用产品内嵌其文本/字段需向 DrugBank 商业授权
高(需协议) UMLS 需签署 UMLS License Agreement(个人免费、有再分发条款);CUI 派生数据随协议走
中( attribution/NC 类) Orphanet 部分内容非商业条款;Mayo Clinic 知识库有使用条款;Sider 基于 Wikipedia 双许可需查引用要求
低(开放/政府工作) NCBI Entrez Gene、CTD、GO、UBERON、Reactome、DisGeNET(CC0 部分)、Bgee、MeSH 多为 CC0/CC BY/开放许可,保留署名即可

三条使用纪律:

  1. 按字段回溯:kg.csv 的 x_source/y_source 列记录每个节点的源库——商用分发前按 source 列做一次字段级盘点,比整包审查更精准。
  2. 区分「整合产物」与「上游内容」:你自己算出的图统计、嵌入向量、模型权重是衍生分析,风险低;把 DrugBank 药物说明书文本原样搬进产品是上游内容再分发,风险高。
  3. 书面确认优先:条款含糊时(如 off-label use 边的商业用途边界),以各源官方书面回复为准,不要以本条目或任何转述为法律依据。

§7 生态与影响:一个实验室、一条 TDC 纽带、一群下游使用者

7.1 团队与谱系

PrimeKG 出自哈佛医学院 Zitnik Lab,三位作者的角色:

人物 单位 角色
Payal Chandak Harvard-MIT Health Sciences and Technology(HST) 共同一作(*)
Kexin Huang Stanford CS 共同一作(*);兼 Therapeutics Data Commons(NeurIPS 2021 D&B)一作
Marinka Zitnik HMS Biomedical Informatics 通讯作者(✉)

Kexin Huang 的双重身份是理解 PrimeKG 生态位的钥匙:PrimeKG 不是孤立发布的数据文件,而是 TDC(Therapeutics Data Commons)生态的内建资源——from tdc.resource import PrimeKG 一行代码即可加载。TDC 提供任务切分与基准评测,PrimeKG 提供图本体,两者共享同一批维护者。

论文致谢口径列有 NSF(IIS-2030459、IIS-2033388)、US Air Force(FA8702-15-D-0001)、Harvard Data Science Initiative、Amazon Research Award 及药企研究资助等(转述自检索摘要,完整致谢清单待核 PMC 原文——存照清单第 11 条)。

7.2 社区使用形态

综合论文引用与社区仓库,PrimeKG 的下游使用聚成四种形态:

  1. GNN 节点分类 / 链接预测:把 kg.csv 转 NetworkX 或 PyG/DGL 图,做疾病-基因预测、药物-靶点预测——最常见的学术用法。
  2. 知识图谱嵌入(KGE):TransE/RotatE/ComplEx 等模型经 PyKEEN 内置入口直接训练,做链接预测与药物重定位假设生成。
  3. LLM + KG 检索增强:用图结构约束 LLM 的候选空间,用疾病/药物文本字段喂 prompt——2023 年之后增长最快的用法。
  4. 药物重定位假设生成:drug→gene/protein→disease 路径打分(5.3 节的最小链路及其深度学习变体),结果以 off-label use 边为参照做「已有人工证据」分层。

下载量侧证:Dataverse 统计在 2022-06(发布一个月内)即破 5,000 次下载——对一个学术数据集是显著热度。

7.3 检索入口汇总

想找到官方信息,按可靠度排序:

  1. 论文原文:Scientific Data 2023;10:67(DOI 10.1038/s41597-023-01960-3,开放获取 CC BY 4.0,PMC9893183)。
  2. Harvard Dataverse 条目:DOI 10.7910/DVN/IXA7BM——文件、md5、许可、版本信息的一站式来源。
  3. 官网:zitniklab.hms.harvard.edu/projects/PrimeKG/(Zitnik Lab 项目页,含 bibtex)。
  4. GitHub:github.com/mims-harvard/PrimeKG——脚本、README、issue 区。

一个检索层面的警告:第三方文章对 PrimeKG 的转述错误率不低——本条目任务 brief 里给的官网线索 maze.datavant.com 就是错误指向(坑 6),中文社区把 OMIM 扩展数字转述走样(坑 9),第三方 skill 文档把 kg.csv 体积写成约 3 GB(实际 0.94 GB,坑 9 同条登记)。官网、Dataverse API、论文原文三处交叉验证是本条目取证的最低配置。

§8 方法学启示:整合型数据集的四条可迁移经验

8.1 整合型数据集的 QA 形态是「流程可复现」而非「标注一致率」

PrimeKG 没有人工标注,因此没有 inter-annotator agreement;它的质量主张由三件东西支撑:确定性的六步构建流水线(3.1 节)、17 个开源重建脚本、11 个文件的 md5 校验链。任何「把别人的数据整合成新资源」的项目都可以套用这个 QA 三件套——流程可复现是整合型数据集的「标注一致率」。

8.2 标准本体 ID 是 AI-Ready 的第一生产力

PrimeKG 最被低估的工程决策是全图节点 ID 采用既有标准本体(DrugBank/MONDO/Entrez/GO/HPO/UBERON/Reactome/CTD),而不是自造 ID 体系。后果是:跨库 join 退化为主键拼接,模糊匹配环节被整体消灭。对比之下,自造 ID 的整合资源每接一个新数据源就要维护一张 ID 映射表,且映射误差会静默累积。新数据集设计者的第一课:ID 体系决定了 AI-Ready 的天花板。

8.3 双载体版本策略:冻结版保论文,前向版追上游

PrimeKG 的 Dataverse(冻结 2022-05 v2)与 GitHub(2023-07 重跑、2023-12 OMIM 扩展)双载体结构,本质是学术可复现性与工程时效性的妥协产物。它的价值在于诚实:论文版永远可复现论文结果,前向版明确声明自己不再是论文版。可迁移的经验是——当数据依赖持续演进的上游源时,把「冻结快照」与「重建管线」分成两个载体发放,比在单一载体里频繁改文件更可维护,但必须在两个载体上都显著标注版本状态(坑 5 的根源正是这个标注容易被忽略)。

8.4 负样本是有设计意识的资产

多数知识图谱把边一视同仁,PrimeKG 把治药关系拆成 indication / contraindication / off-label use 三态,等于把「负样本」和「进行中的正样本」显式编码进图结构。对做链接预测的团队,这是现成的高质量硬负样本来源——比随机负采样强一个量级。可迁移经验:在领域允许的地方,把语义上的对立关系(有效/禁忌)建成不同的边类型,而不是塞进同一条边的属性里。

§9 与库内条目的关系

9.1 家族图谱:上游源条目全表

PrimeKG 是下列库内条目的整合消费方(各源条目是其上游)。rid 为本库条目 id(2026-10-04 查库核实):

上游源 库内 rid 在 PrimeKG 中的角色
drugbank 89 drug 节点 ID 本体与药物文本
sider 92 药物副作用(折叠入 effect/phenotype)
drugcentral 344 药物文本与适应症补充
disgenet 449 疾病-基因关联边来源之一
mondo 748 disease 节点 ID 本体(22,205 概念)
hpo 747 effect/phenotype 节点 ID 本体
umls 558 术语映射与疾病文本来源
omim 159 2023-12 扩展的新增边源(+612,282 边)
orphanet-ordo 812 罕见病覆盖与疾病文本
reactome 424 pathway 节点 ID 本体
kegg 433 通路相关资源对照
open-targets 456 疾病-靶点证据对照
pharmgkb 374 药物基因组学对照
dgidb 419 药物-基因相互作用对照
ttd 409 治疗靶点对照
string 414 蛋白-蛋白相互作用对照
clinvar 136 变异-疾病对照
chebi 314 化学实体对照
tdc 131 分发生态(tdc.resource.PrimeKG)
gnomad 35(主条目;570 为重复 slug) 变异频率资源对照
chembl 85(主条目;572 为重复 slug) 化合物资源对照
gwas-catalog 463(主条目;564 为重复 slug) 关联证据对照

三个使用提示:

  1. 重复 slug 双 id:gnomad(35/570)、chembl(85/572)、drugbank(89/571)、gwas-catalog(463/564) 在库内各有两个 id——互链一律选低 id 主条目。
  2. Hetionet 无条目:库内查 %hetionet% 为 0 行,正文对照(4.2 节)不配 rid。
  3. omim(159) 的特殊地位:PrimeKG 的 Dataverse 文件不含 OMIM,omim(159) 条目对应的是 2023-12 扩展引入的上游——引用「含 OMIM 的 PrimeKG」时实际引用的是 GitHub 脚本层的重建产物。

9.2 检索路径建议

从本条目出发的三条典型检索路径:

  1. 想看某个上游源的原始形态:§9.1 表选 rid → 直接跳条目。
  2. 想做药物-靶点任务全家桶:PrimeKG(本条目)+ drugbank(89) + drugcentral(344) + tdc(131) 四条连读。
  3. 想做罕见病分析:PrimeKG + orphanet-ordo(812) + hpo(747) + omim(159)——PrimeKG 的 90.8% Orphanet 覆盖口径(待核)使其成为罕见病维度的天然枢纽。

§10 避坑清单:九个已踩过的坑

以下九个坑全部来自本条目生产过程中的实际取证(逐条证据见附录 D 存照清单):

坑 1:边数双口径——4,050,249 还是 8,100,498?
现象:论文摘要写 4,050,249 关系,kg.csv 实际 8,100,498 行,第三方文章两个数乱引。根因:构建流程「加反向边」让每条无向边双向存储,8,100,498 = 2 × 4,050,249(精确吻合)。规避:写「4,050,249 无向关系」或「8,100,498 行边记录(双向)」,永不写「810 万关系」。

坑 2:边类型 29 还是 30?
现象:论文摘要与 README 写 over 29 种边,Methods 写 30 种。规避:正文采用 Methods/kg.csv 实测口径 30 种并注明摘要口径 29——两口径差异疑似对某一关系类型的计数取舍,无碍使用。

坑 3:节点数 100,000+ 还是 129,375?
现象:摘要宣传「100,000+ nodes」,Table 1 精确加总 129,375。规避:引用一律用 129,375(十类分布见 2.1 表);疾病数同理用 17,080 而非 README 的「约 17,000」。

坑 4:contradictions 是笔误,drug_disease 不存在
现象:论文/官网把治药关系之一写作 contradictions,kg.csv 实际字符串是 contraindication;且不存在名为 drug_disease 的关系——治药关系拆三条(indication/contraindication/off-label use)。规避:过滤脚本用 kg.csv 实测字符串;读论文时自行修正 contradictions → contraindication。

坑 5:快照时效——Dataverse 不是最新版
现象:wget 直链取到的 kg.csv 停在 2022-05-02 v2;2023-07 重跑与 2023-12 OMIM 扩展(+612,282 边、+32,866 节点)只在 GitHub 脚本层。规避:明确声明版本(5.4 节规范);要新版就跑 17 个脚本自建,别在 Dataverse 里等。

坑 6:官网线索张冠李戴
现象:部分第三方材料(含本条目任务 brief)把 maze.datavant.com 当 PrimeKG 官网——该地址无法访问且与 PrimeKG 无关。根因:Datavant 与 PrimeKG 均涉及医疗数据生态,转述链以讹传讹。规避:官网以 zitniklab.hms.harvard.edu/projects/PrimeKG/ 为准,与论文/README 三方互证。

坑 7:CC0 不是上游许可的洗白通道
现象:看到「CC0 1.0」就当全部内容可任意商用再分发。根因:CC0 只覆盖整合产物;上游 20 源各自许可仍有效(DrugBank 非商业、UMLS 需协议等)。规避:原样再分发单一上游的大段内容前,逐源核对其许可(6.1 节三层表)。

坑 8:节点类型字符串的静默失败
现象:按直觉写 gene_protein 或 effect_phenotype 过滤,返回空集且不报错。根因:实际字符串是 gene/protein(斜杠)与 effect/phenotype(连写);另 anatomy_protein 有 present/absent 两态、disease_phenotype 有 positive/negative 两态。规避:过滤前先 kg['x_type'].unique() 实测枚举值;过滤结果为零行先查字符串再下结论。

坑 9:第三方数字漂移
现象:中文转述把 OMIM 扩展写成「61 万条关系和 3 万多个节点」(README 口径:612,282 边、32,866 节点);第三方 skill 文档把 kg.csv 体积写成约 3 GB(Dataverse 实测 981,751,236 字节 ≈ 0.94 GB)。规避:扩展数字以 README 为准、体积以 Dataverse API 为准;一切二手数字回溯一手来源。

FAQ(高频问答 32 问)

A. 基础认知

Q1:PrimeKG 适合当入门知识图谱的学习材料吗?
适合反向入门——它体量大(0.94 GB)、十类节点、30 种关系,不适合第一次学图数据库的人;但对已会基本操作的人,它是「真实医学生物图长什么样」的绝佳教材。

Q2:PrimeKG 是免费开源的吗?
是。数据 CC0 1.0、代码 MIT、论文 CC BY 4.0,三层全开放;仅上游源的原始内容受各自许可约束。

Q3:PrimeKG 和 UMLS 是什么关系?
UMLS 是上游源之一(术语映射、疾病文本来源),PrimeKG 的 disease 节点消解大量借助 UMLS 概念;但 PrimeKG 的发放形态(单表 CSV 图)与 UMLS(订阅制术语体系)完全不同。

Q4:PrimeKG 是标注数据集吗?
不是。它没有逐样本人工标注,价值在整合工程;「人工审核」只出现在疾病消解环节的质检步骤。

Q5:PrimeKG 的「precision medicine」体现在哪?
体现在目标而非数据形态:全图围绕「药物-基因-疾病-表型」的临床推理链组织,治药关系三态细分直接服务重定位决策——这是它区别于通用生物医学图谱的定位。

Q6:PrimeKG 有官方的中文版资料吗?
没有官方中文版;中文社区译文(如腾讯云社区转载)对边类型等细节有口径出入,关键数字回论文与 README。

B. 数据与获取

Q7:kg.csv 一共有多少行多少列?
8,100,498 行(不含表头)、10 列、981,751,236 字节(约 0.94 GB)。

Q8:直接 wget 能拿到全部 11 个文件吗?
直链命令官方只给了 kg.csv(datafile id 6180620);其余文件经 Dataverse 条目页(DOI 10.7910/DVN/IXA7BM)或 API 按 id 逐个获取,id 与 md5 见附录 E。

Q9:下载后第一步做什么?
md5 校验(附录 E 全表),再 wc -l 对行数、head 看 10 列表头——三件事做完再谈分析。

Q10:pandas 读 kg.csv 要多大内存?
约 0.94 GB 的 CSV 读入后内存占用通常数倍于此;8 GB 以上内存环境 + low_memory=False 是舒适配置,低内存机器可按 dtype 分块读。

Q11:为什么我读出来的数据类型很乱?
10 列里 ID 列混杂数字与「MONDO:xxxxx」式字符串,pandas 分块推断会漂移——low_memory=False 或显式 dtype 是正解。

Q12:kg_raw、kg_giant、kg_grouped 要下吗?
常规用途不需要——它们是构建中间产物(2.5 节三版本表);只有想自定义清理策略或研究消解过程时才取。

C. 结构与关系

Q13:怎么取「所有药物-疾病边」?
relation.isin(['indication','contraindication','off-label use'])——不存在 drug_disease 关系(坑 4)。

Q14:基因和蛋白是分开的节点吗?
不是。同一类型 gene/protein(Entrez ID),PrimeKG 不拆分基因与其编码蛋白。

Q15:副作用和表型怎么区分?
同一类型 effect/phenotype 下折叠了 HPO 表型与 SIDER 副作用,按 x_source/y_source 的来源字段区分。

Q16:图是连通的吗?
主文件取过最大连通分量(kg_giant 步骤),主体连通;后续清理(删自环等)不影响连通性主张。

Q17:边有方向吗?
语义上有向、存储上双向——每条边 x→y 与 y→x 各存一行,无向计数用去重。

D. 任务与模型

Q18:PrimeKG 上能跑 GNN 吗?
能,最常见用法之一。PyTDC 的 to_nx() 一键转 NetworkX,再桥接 PyG/DGL;节点特征可用文本字段嵌入初始化。

Q19:PyKEEN 里怎么调用?
import pykeen.datasets; pykeen.datasets.has_dataset('primekg') 确认内置后按 PyKEEN 常规 dataset 接口加载训练。

Q20:药物重定位任务有官方 baseline 吗?
PrimeKG 本体无官方排行榜;基准化评测走 TDC 生态的 drug repurposing 相关任务。

Q21:怎么构造负样本?
contraindication 边是现成硬负样本;其余可用封闭世界假设的随机负采样,但禁忌边优先。

Q22:疾病亚型怎么当标签用?
消解后同一疾病的不同临床亚型是独立节点(自闭症→3 亚型案例),disease_phenotype_positive 边 + 文本字段是亚型分类的现成特征。

Q23:文本字段能直接进 LLM 吗?
能,且是 2023 年后主流用法——疾病 10 类、药物 6 类字段是天然的 RAG 语料,图结构做检索约束。

E. 许可与合规

Q24:CC0 1.0 意味着我可以商用吗?
对整合产物(kg.csv 的边表结构等)——是。对上游源的原样内容(如 DrugBank 文本)——先查该源许可(坑 7)。

Q25:再分发 PrimeKG 本身需要做什么?
CC0 下再分发无需授权;规范做法是保留 DOI 引用与版本声明,并提示下游三层许可结构。

Q26:发表论文怎么引用?
引论文(Scientific Data 2023;10:67)+ 引数据(DOI 10.7910/DVN/IXA7BM)双引用;官网提供 bibtex(key: chandak2023building)。

Q27:UMLS 部分有什么额外约束?
UMLS 原始内容需签署许可协议;PrimeKG 中吸收的 UMLS 映射随整合产物 CC0,但大规模原样再分发 UMLS 内容仍需与 NLM 的协议。

F. 生产与库内

Q28:PrimeKG 在本库的定位是什么?
知识图谱类整合型条目的旗舰样本——库内 20 余个上游源条目在它这里汇成一张图。

Q29:和库内 tdc(131) 条目怎么配合?
TDC 条目讲任务与基准体系;本条目讲图本体本身。用 TDC 做评测、用本条目理解数据结构。

Q30:库内还有哪些知识图谱类条目可对照?
mondo(748)、hpo(747)、reactome(424) 是本体词汇层;disgenet(449)、dgidb(419)、pharmgkb(374) 是关系证据层;PrimeKG 是整合层——三层连读最有效。

Q31:PrimeKG 会更新吗?
Dataverse 文件层冻结;前向更新在 GitHub 脚本层随上游源演进——更新与否取决于上游源与维护投入。

Q32:发现数据问题找谁?
GitHub 仓库 issue 区(mims-harvard/PrimeKG);Dataverse 层问题可联系 depositor——学术数据集的维护响应以 GitHub 社区渠道最快。

G. 工程与调试(进阶 10 问)

Q33:怎么把双向存储的无向边正确去重?
对两端 ID 排序后拼无向键再去重:key = kg.apply(lambda r: '|'.join(sorted([r.x_id, r.y_id])), axis=1),然后 kg.assign(key=key).drop_duplicates('key')——直接 drop_duplicates() 只去完全重复行,得不到无向语义(坑 1 的工程面)。

Q34:我有 ICD/OMIM/UMLS 编号,怎么挂到 PrimeKG 的疾病节点上?
先转 MONDO ID(UMLS CUI 可经 MONDO 本体的 xref 映射,OMIM 号经 MONDO 的 exactMatch),再用 MONDO ID 对齐 kg.csv 的 x_id/y_id;kg_grouped_diseases_bert_map.tab 提供官方的「MONDO 概念 → 分组节点」映射,做精细对齐时以它为准。

Q35:kg_grouped.csv 和 kg.csv 我该用哪个?
默认 kg.csv(官方推荐版,疾病节点已是折叠后口径);只有复现论文的疾病分组消融实验才用 kg_grouped.csv——它是分组流水线的中间产物,不保证与 kg.csv 的清理流程完全同构(坑 9 同条登记的版本纪律)。

Q36:disease_features.tab 怎么和 kg.csv 拼接?
以 MONDO ID 为键做 left join(疾病文本)或 DrugBank ID 为键(药物文本);注意文本覆盖不均——join 后先统计每类节点的非空率,把「无文本」显式建模而不是静默填充。

Q37:只想要罕见病子图谱怎么裁剪?
两步:先取 Orphanet 源的疾病节点(kg[(kg.x_source=='Orphanet')|(kg.y_source=='Orphanet')] 的节点集合),再取这些节点的一跳或两跳邻域诱导子图——罕见病节点的基因-表型邻域是信息最厚的区域(§4.1 的 90.8% 覆盖口径)。

Q38:极性边(present/absent、positive/negative)怎么统计?
分态计数而不是合并计数:kg.relation.value_counts() 直接给出各态边数;构建无向邻接时建议保留极性列做符号图——丢极性等于把「不表达」「无此表型」洗成正向关系,语义直接错。

Q39:三个 GO 类(BP/MF/CC)要合并处理吗?
保持三类分开直到最后一步——它们的 kg.csv 类型字符串不同(biological_process/molecular_function/cellular_component),合并只在需要「GO 注释总边数」时做数值合并;图结构上它们的边都通向 gene/protein,分层建索引比建前合并更利于查询。

Q40:能和 Hetionet 的数据互相转换吗?
许可与格式都无障碍(PrimeKG CC0、Hetionet CC0),困难在 ID 映射:Hetionet 疾病用 DOID、PrimeKG 用 MONDO——MONDO 本体自带 DOID xref,经 MONDO 做桥即可对齐;治药边对齐时注意 Hetionet 的 treats 无三态语义,只能映射到 indication 的近似超集。

Q41:PyTDC 首次调用下载失败怎么办?
PyTDC 走自己的镜像分发,与 Dataverse 直链是两条路;失败时手动 wget kg.csv 到 PrimeKG(path=...) 指定的目录(README 的 datafile 6180620 直链永远可用),或检查 TDC 版本与网络代理设置。

Q42:生产环境用什么图数据库装载?
单表 CC0 无许可障碍;十万节点/八百万行量级 Neo4j、DuckDB(用 SQL 递归 CTE)、ArangoDB 都能承载——没有官方转换脚本,社区路径是 pandas → CSV bulk import(Neo4j admin import 最快);装载后务必校验节点总数 129,375(坑 8 冒烟测试的库内版本)。

事实清单(硬事实 36 条)

  1. 团队:Harvard Medical School Zitnik Lab;作者 Payal Chandak*(HST)、Kexin Huang*(Stanford CS)、Marinka Zitnik(通讯,HMS Biomedical Informatics)——*为同等贡献。
  2. 论文:Building a knowledge graph to enable precision medicine,Scientific Data 2023;10:67。
  3. 论文 DOI:10.1038/s41597-023-01960-3;论文许可 CC BY 4.0;PMC 编号 PMC9893183。
  4. 预印本:bioRxiv 10.1101/2022.05.01.489928(2022-04 v1 上线)。
  5. 数据 DOI:10.7910/DVN/IXA7BM(Harvard Dataverse)。
  6. 许可三层:整合数据 CC0 1.0;代码库 MIT;上游 20 源各自许可仍有效。
  7. Dataverse 存入 2021-07-12(depositor: Chandak, Payal);现行文件版 v2 发布于 2022-05-02T14:39:28Z。
  8. 节点总数 129,375(论文 Table 1 精确口径);摘要宣传口径 100,000+。
  9. 十类节点分布:biological process 28,642 / protein 27,671 / disease 17,080 / phenotype 15,311 / anatomy 14,035 / molecular function 11,169 / drug 7,957 / cellular component 4,176 / pathway 2,516 / exposure 818。
  10. 无向关系 4,050,249(论文摘要口径)。
  11. kg.csv 存储 8,100,498 行 = 2 × 4,050,249(每条无向边双向各存一行)。
  12. kg.csv 体积 981,751,236 字节(约 0.94 GB)。
  13. kg.csv 10 列:relation, display_relation, x_id, x_type, x_name, x_source, y_id, y_type, y_name, y_source。
  14. 边类型双口径:30 种(论文 Methods)vs 29 种(摘要/README)。
  15. 10 个节点类型字符串:gene/protein, drug, disease, effect/phenotype, biological_process, molecular_function, cellular_component, pathway, anatomy, exposure。
  16. ID 本体:drug=DrugBank、disease=MONDO、anatomy=UBERON、pathway=Reactome、gene/protein=Entrez、BP/MF/CC=GO、effect/phenotype=HPO、exposure=CTD ExposureStressorID。
  17. 疾病消解:22,236 术语(MONDO 22,205 概念)→ 17,080 分组疾病。
  18. 消解方法:字符串匹配 + ClinicalBERT 句嵌入余弦相似度 0.98 截断聚类 + 人工审核。
  19. 自闭症案例:MONDO 37 概念 / UMLS 192 概念 / Orphanet 6 概念 → 按临床亚型分 3 组。
  20. 文本字段:疾病节点 10 类(流行率、症状、病因等,源 MONDO/Orphanet/Mayo Clinic/UMLS);药物节点 6 类(分子量、适应症、作用机制等,源 DrugBank/DrugCentral)。
  21. 构建六步:合并→最大连通分量→删 NaN/重复→加反向边→再去重→删自环。
  22. 对比基线:疾病覆盖比 SPOKE、HSDN、GARD 高 1-2 个数量级(论文口径)。
  23. 性能:全图加载 <5.18s ± 51.9ms;图上查询 <1s(论文 Technical Validation 口径)。
  24. kg.csv 官方 wget 直链:https://dataverse.harvard.edu/api/access/datafile/6180620。
  25. kg.csv md5:aac8191d4fbc5bf09cdf8c3c78b4e75f(Dataverse API 核实)。
  26. Dataverse v2 共 11 个文件(含 edges.csv 386,582,390 B、kg_raw.csv 893,347,412 B、disease_features.tab 113,533,957 B 等,全表见附录 E)。
  27. 2023-07:GitHub 17 个处理脚本重跑/更新,支持 2023-07 上游数据库版重建;Dataverse 文件不变。
  28. 2023-12:OMIM 扩展 +612,282 边、+32,866 节点(README 口径,仅脚本层)。
  29. TDC 纽带:Kexin Huang 兼 TDC 一作;PrimeKG 经 tdc.resource.PrimeKG 进入 TDC 分发。
  30. PyKEEN 内置:pykeen.datasets.has_dataset(‘primekg’) 返回 True。
  31. 官方环境:conda env create --name PrimeKG --file=environment.yml。
  32. Dataverse 下载量 2022-06(发布约一月内)破 5,000。
  33. Orphanet 9,348 罕见病覆盖约 90.8%(检索摘要口径,待核论文原文)。
  34. 资助(致谢口径,待核 PMC 原文):NSF IIS-2030459 / IIS-2033388、US Air Force FA8702-15-D-0001、Harvard Data Science Initiative、Amazon Research Award 及药企研究资助。
  35. kg.csv 不存在 drug_disease 与 disease_gene 关系——治药关系为 indication / contraindication / off-label use 三条;病-基因关系为 disease_protein。
  36. 官网 zitniklab.hms.harvard.edu/projects/PrimeKG/;GitHub github.com/mims-harvard/PrimeKG;bibtex key: chandak2023building。

术语表(30 条)

术语 释义
知识图谱(Knowledge Graph, KG) 以节点表示实体、边表示关系的图结构知识库
实体消解(Entity Resolution) 把指向同一现实实体的多个标识符/术语合并为一个节点的过程
本体调和(Ontology Harmonization) 把多个来源的异构本体映射到统一术语体系的过程
药物重定位(Drug Repurposing) 为已有药物寻找新适应症的研发策略
适应症(Indication) 监管批准的药物用途
禁忌症(Contraindication) 明确不可使用某药物的情形
超适应症使用(Off-label Use) 临床使用超出监管批准范围的用药行为
图神经网络(GNN) 在图结构上做消息传递的神经网络家族
知识图谱嵌入(KGE) 把实体与关系映射到连续向量空间的一类模型
链接预测(Link Prediction) 预测图中缺失/潜在边的任务
MONDO 疾病本体(Mondo Disease Ontology),PrimeKG 疾病节点 ID 来源
HPO 人类表型本体(Human Phenotype Ontology),表型节点 ID 来源
GO 基因本体(Gene Ontology),生物过程/分子功能/细胞组分三类节点来源
UBERON 跨物种解剖本体,anatomy 节点 ID 来源
Reactome 通路数据库,pathway 节点 ID 来源
Entrez Gene NCBI 基因数据库,gene/protein 节点 ID 来源
DrugBank 药物数据库,drug 节点 ID 来源
CTD Comparative Toxicogenomics Database,exposure 节点 ID 来源
SIDER 药物副作用数据库,副作用词条折叠入 effect/phenotype
UMLS 统一医学语言系统(NLM),术语映射与疾病文本来源
OMIM 在线孟德尔遗传数据库,2023-12 扩展的边来源
Orphanet 罕见病数据库,罕见病覆盖与疾病文本来源
TDC Therapeutics Data Commons,治疗 AI 任务与基准生态
PyKEEN Python 知识图谱嵌入库,内置 primekg 数据集
NetworkX Python 图分析库,to_nx() 的目标格式
CC0 1.0 公有领域贡献许可,PrimeKG 整合数据的许可
DOI 数字对象唯一标识符,论文与数据集的持久标识
Dataverse 哈佛大学托管的数据仓储平台
最大连通分量(Largest Connected Component) 图中最大的任意两节点互相可达的子图
ClinicalBERT 在临床文本上预训练的 BERT 模型,疾病消解的嵌入来源

附录

附录 A:上游数据源清单与「20 源」边界说明

正文与 frontmatter 提到「20 个数据源」,此处给出边界声明:

  1. 论文 Table 1 显式出现的来源为 17 个(含 DrugBank、MONDO、HPO、GO、Reactome、UBERON、Entrez、UMLS、SIDER、DrugCentral、Orphanet、Mayo Clinic、CTD、DisGeNET、Bgee、NCBI Gene、Human PPI Network 等)。
  2. README 的脚本表覆盖 14 个源(另含 OMIM 2023 扩展与 Mayo Clinic 映射脚本)。
  3. 「20 源」是论文 Data Records 节的完整口径(含以边类资源出现的 Human PPI Network 等)——本次取证未能逐条核对 Data Records 全表,完整名单以论文原文为准,本条目凡列举一律以「等」收尾规避编造。

附录 B:DAIMS 评估全表

维度 评分(1-10) 依据
D 可发现性 9 持久 DOI(10.7910/DVN/IXA7BM)+ 开放论文(CC BY 4.0,PMC9893183)+ 官网 + GitHub 四入口;扣分:第三方转述错误率高(坑 1/6/9),检索者易被带偏
A 可获取性 9 CC0 1.0 + 官方 wget 直链 + 单文件 0.94 GB 免注册秒取;扣分:Dataverse 维护窗口不可取、文件层冻结后新版需自建
I 可互操作性 10 全图标准本体 ID(DrugBank/MONDO/Entrez/GO/HPO/UBERON/Reactome/CTD)+ 单表 10 列固定模式 + pandas/PyTDC/PyKEEN/NetworkX 四条官方加载路径——跨库 join 免模糊匹配
M 元数据质量 8 论文 Methods 完整披露六步流程与消解阈值;README 载明许可边界与 wget 命令;Dataverse 主题/引用字段规范;扣分:版本状态在 Dataverse(冻结)与 GitHub(前向)间割裂,初次使用者易踩坑 5
S 可持续性 8 Zitnik Lab 持续维护(2023-07/2023-12 两次更新)+ TDC 生态内建 + 学术引用量大;扣分:数据文件层停止更新,新版获取依赖 17 脚本自建管线的技术门槛
综合评级 9 整合型知识图谱的 AI-Ready 标杆样本;扣分集中在版本沟通而非数据本身

附录 C:逐项证据链自证

关键数字 来源 位置/方式
129,375 节点 论文 Table 1 十类逐项加总,FACTS §4 登记全表
4,050,249 无向关系 论文摘要 摘要口径
8,100,498 行 kg.csv 行数 = 2 × 4,050,249,双向存储推证
981,751,236 字节 Harvard Dataverse API datafile id 6180620 元数据
md5 aac8191d…4e75f Harvard Dataverse API datafile id 6180620
2022-05-02T14:39:28Z Harvard Dataverse API version 字段(v2 RELEASED)
CC0-1.0 Harvard Dataverse API license 字段(SPDX)
22,236 → 17,080 论文疾病消解节 消解前后口径
0.98 余弦截断 论文 Methods ClinicalBERT 聚类阈值
自闭症 37/192/6 → 3 论文个案研究 三源概念数与亚型分组
30 种无向边 论文 Methods 与 kg.csv 实测口径一致;摘要/README 写 29——坑 2
+612,282 边 / +32,866 节点 GitHub README 2023-12 OMIM 扩展
加载 <5.18s±51.9ms / 查询 <1s 论文 Technical Validation 性能口径
高 1-2 数量级 论文对比节 vs SPOKE/HSDN/GARD
Orphanet 90.8% WebSearch 摘要口径 待核论文原文——存照清单第 11 条
下载破 5,000 Dataverse 统计(转述) 2022-06 时点

附录 D:坑点档案与存照清单(与 §10 对照)

§10 九坑之外,研究过程另有三条生产存照:

  1. 抓取封锁存照(2026-10-04):本条目取证期间 WebFetch 对 PMC、github.com(主站/raw/blob)、biorxiv、nature.com 均空返回或 Client Challenge;Bash curl 直连超时——全部关键事实改经 WebSearch 结果正文 + Dataverse API + DeepWiki 镜像三通道交叉取证。
  2. 待核清单:资助致谢全表、Orphanet 90.8% 原文表述、论文 Table 3/4 药物-疾病特征统计——以 PMC 原文为准,本条目按检索摘要口径转述并逐处标注。
  3. 20 源边界:见附录 A——完整名单以论文 Data Records 节为准,本条目不做无据补全。

附录 E:Dataverse 11 文件 id 与 md5 全表

文件 大小(字节) datafile id md5
kg.csv 981,751,236 6180620 aac8191d4fbc5bf09cdf8c3c78b4e75f
edges.csv 386,582,390 6180616 5d4d211a22e88544b78fde2735e797bc
kg_raw.csv 893,347,412 6180622 59ad76adf3ba586c36b1c1e071effee1
kg_giant.csv 893,328,974 6180625 238077fcb9bcf7f56c81dd9de9f4cf66
kg_grouped.csv 888,336,264 6180626 d5a62b57e742786b485302cf1f39450e
disease_features.tab 113,533,957 6180618 8b38e95c5d31044deb207d6892130eb4
drug_features.tab 10,029,833 6180619 1eae9bb880675d4a26e9900c400dd4c8
nodes.tab 8,893,706 6180617 7f9ab4109c54049e819ecd14e15a6038
kg_grouped_diseases.tab 2,915,370 6180624 1638be1573eefa8820da19bf8ee4ba9f
kg_grouped_diseases_bert_map.tab 1,402,282 6180623 a766b7e890ebce73810aee72b49c1171
README.txt 3,137 6191270 608e37d4808bb97643186a1b6dc8f307

全表经 Harvard Dataverse API 逐文件核实(2026-10-04)。取文件模板:https://dataverse.harvard.edu/api/access/datafile/<id>。

附录 F:双口径登记表

口径对 A 值 B 值 本条目采用 存坑
关系数 4,050,249(摘要,无向) 8,100,498(kg.csv 行,双向) 分语境写明双向/无向 坑 1
边类型数 29(摘要/README) 30(Methods/kg.csv 实测) 30,注明摘要 29 坑 2
节点数 100,000+(摘要) 129,375(Table 1) 129,375 坑 3
疾病数 ~17,000(README) 17,080(Table 1) 17,080 坑 3
治药关系词 contradictions(论文/官网) contraindication(kg.csv) contraindication 坑 4
OMIM 扩展 +612,282 边/+32,866 节点(README) 61 万关系/3 万多节点(中文转述) README 口径 坑 9
kg.csv 体积 0.94 GB(Dataverse API) ~3 GB+(第三方 skill 文档) 0.94 GB 坑 9

附录 G:引文规范

论文引用(官网提供 bibtex,key: chandak2023building):

@article{chandak2023building,
  title={Building a knowledge graph to enable precision medicine},
  author={Chandak, Payal and Huang, Kexin and Zitnik, Marinka},
  journal={Scientific Data},
  volume={10},
  number={1},
  pages={67},
  year={2023},
  publisher={Nature Publishing Group}
}

数据引用:Harvard Dataverse DOI 10.7910/DVN/IXA7BM(引用时注明版本:v2, 2022-05-02 或 GitHub 重建版年份)。论文许可 CC BY 4.0;数据整合产物 CC0 1.0;上游源许可另核(坑 7)。

附录 H:检索路径示范

关键词组合建议:

  1. 数据集本体:PrimeKG / Precision Medicine Knowledge Graph / kg.csv / Chandak Zitnik。
  2. 任务文献:PrimeKG drug repurposing / PrimeKG link prediction / PrimeKG GNN / PrimeKG knowledge graph embedding。
  3. 工程问题:PrimeKG kg.csv memory / PrimeKG gene/protein filter / PrimeKG OMIM extension。
  4. 许可问题:PrimeKG license CC0 / DrugBank license non-commercial / UMLS license agreement。

避检提示:检「PrimeKG contradictions」命中的是论文原文的笔误(坑 4),查数据请用 contraindication;检「PrimeKG maze.datavant」是错误官网线索(坑 6)。

附录 I:基于本数据集的研究检查清单(12 项)

  1. 已声明使用的版本支线(Dataverse v2 快照 / GitHub 2023-07 / 2023-12 OMIM 扩展)。
  2. 已对下载文件做 md5 校验(附录 E)。
  3. 关系计数已声明口径(无向 4,050,249 或双向 8,100,498 行)。
  4. 过滤脚本已实测 x_type/y_type 枚举值(gene/protein 斜杠、effect/phenotype 连写——坑 8)。
  5. 治药关系过滤已覆盖三条字符串(indication/contraindication/off-label use)。
  6. 节点特征如用文本字段,已注明疾病 10 类/药物 6 类的来源分层。
  7. GNN/KGE 实验已声明数据切分方式(自切或 TDC 任务)。
  8. 负样本构造已说明是否使用 contraindication 硬负样本。
  9. 结果比较未混用不同版本支线的数据。
  10. 许可声明已覆盖三层(CC0/MIT/上游各源)——尤其商业场景。
  11. 引用双轨:论文 DOI 10.1038/s41597-023-01960-3 + 数据 DOI 10.7910/DVN/IXA7BM。
  12. 涉及罕见病结论时已注明 Orphanet 覆盖口径(90.8% 为待核转述口径)。

附录 J:缩写速查

缩写 全称 中文
KG Knowledge Graph 知识图谱
PM Precision Medicine 精准医疗
ER Entity Resolution 实体消解
GNN Graph Neural Network 图神经网络
KGE Knowledge Graph Embedding 知识图谱嵌入
HPO Human Phenotype Ontology 人类表型本体
GO Gene Ontology 基因本体
CTD Comparative Toxicogenomics Database 比较毒理基因组学数据库
UMLS Unified Medical Language System 统一医学语言系统
OMIM Online Mendelian Inheritance in Man 在线人类孟德尔遗传数据库
TDC Therapeutics Data Commons 治疗数据公共平台
DAIMS Discoverability/Accessibility/Interoperability/Metadata/Sustainability 数据集 AI-Ready 五维评估
LCC Largest Connected Component 最大连通分量
DOI Digital Object Identifier 数字对象唯一标识符

附录 K:本条目生产档案

  1. 写手代理:agent-c-primekg;开工三查完成时点 2026-10-04T03:42:00(锁文件 writing/primekg/.lock;进程留痕 ps 计数 7)。
  2. slug 查重:ai_ready_dataset 表 url_name ILIKE '%primekg%' 返回 0 行——无撞库。
  3. 存在性核验:四源互证(WebSearch 多源 + Harvard Dataverse API 直查 + DeepWiki 镜像 + README 转引)通过。
  4. 取证时点:2026-10-04;抓取封锁见附录 D 存照第 1 条。
  5. FACTS 事实档案:writing/primekg/FACTS.md(九节,本条目单一事实源)。
  6. 成稿:writing/primekg/primekg_Wikipedia.md——分 5 part 于私有区撰写后显式拼接。

附录 L:自建新版 PrimeKG 步骤清单(要 2023-07/2023-12 版时)

  1. 建环境:conda env create --name PrimeKG --file=environment.yml(仓库根目录)。
  2. 拉源:运行 datasets/primary_data_resources.sh——脚本自动创建目录结构并下载 13 个重跑覆盖源的最新版(§3.5 清单)。
  3. 逐源处理:按 §3.6 对照表运行 datasets/processing_scripts/ 下脚本,产出 anatomy_gene.csv、drug_disease.csv 等中间文件。
  4. 建图:运行 knowledge_graph/build_graph.ipynb——依次产出 kg_raw.csv、kg_giant.csv、kg.csv 三版本。
  5. 扩展(可选):运行 append_omim.ipynb 追加 OMIM 扩展(+612,282 边、+32,866 节点)。
  6. 特征工程:运行 engineer_features.ipynb 与 mapping_mayo.ipynb 挂接疾病/药物文本。
  7. 登记:记录各源实际抓取日期、脚本 commit 哈希与产出图的三项总数(节点/无向关系/边类型数)写入实验记录——这些数字与 2022 快照不同,引用时必须声明(坑 5、坑 9)。

注意三点:①DisGeNET 等个别源无需改动即可复用旧输出;②特征工程层脚本(parsexml_drugbank.py、umls.ipynb 等)README 标注「可能需更新」——预期手工修配;③DrugCentral 的查询脚本为哈佛 O2 集群定制,本地跑需改连接配置。

附录 M:十类节点使用模式速查

节点类型(数量) 主力边 典型用法 一句话提醒
biological_process(28,642) bioprocess_protein、go_go 功能富集背景图、通路旁证 GO 层级已在 go_go 边里,不必另引本体
gene/protein(27,671) 九类边全挂 全图枢纽;重定位中转站 ID 是 Entrez Gene;跨库用仓库自带 UniProt 映射
disease(17,080) indication 三态、disease_protein、disease_phenotype 任务主战场 分组口径 vs MONDO 本体口径先分清(坑 3)
effect/phenotype(15,311) disease_phenotype 两态、drug_side_effect 表型相似度、副作用-表型对照 HPO 表型与 SIDER 副作用同池,按邻边类型区分语义
anatomy(14,035) anatomy_protein 两态 疾病组织分布画像 present/absent 是符号语义,别丢负态
molecular_function(11,169) molfunc_protein 酶活性/结合功能背景 与 BP/CC 同属 GO 家族,分层统计
drug(7,957) 治药三态、drug_protein、drug_side_effect、drug_drug 重定位查询起点 覆盖已批准+在研;上市状态需按文本字段过滤
cellular_component(4,176) cellcomp_protein 亚细胞定位特征 规模小但定位语义独有
pathway(2,516) pathway_protein 通路成员查询 星型结构:通路间关系需经共享蛋白推断
exposure(818) exposure_disease 环境健康研究 全图唯一暴露语义层,规模最小

附录 N:常见错误与调试对照表

症状 根因 处置
过滤结果为 0 行且不报错 类型/关系字符串写错(坑 8) 先跑 kg.relation.unique() 与 kg.x_type.unique() 核对枚举
边数比论文多一倍 按行数计数,忘了双向存储(坑 1) 除以 2 或按无向键去重(Q33)
找不到某个 2023 年新药/基因 用的是 2022-05 v2 快照(坑 5) 按附录 L 自建新版或声明快照版本
读 CSV 时 dtype 混乱告警 未用 low_memory=False 显式 low_memory=False 或转 Parquet
内存爆掉 全列载入 + object 列开销 usecols 裁列、分块读、转 Parquet(§5.5)
md5 对不上 下载中断的静默截断 重新 wget 后再校验;别用坏文件调试下游
kg_grouped 与 kg 节点数不同 两者疾病口径不同(分组 vs 折叠后) 明确研究目的再选表(Q35)
疾病数对不上 22,236/22,205/17,080 三个数是三个口径(坑 3) 术语/本体概念/分组节点,按语境取数
想做商用被律务卡 CC0 不覆盖上游源许可(坑 7) 按 x_source/y_source 回溯源库逐源核对(§6.5)

附录 O:下游模型选型速查

建模路线 输入形态 起手姿势
GNN(异构) kg.csv → DGL/PyG 异构图 节点特征用文本嵌入初始化;边类型做 relation embedding;先在疾病子图试跑再上全图
KGE(TransE/RotatE/ComplEx) 三元组(x_id, relation, y_id) PyKEEN 内置 primekg;注意训练切分前先按无向键去重,避免 train/test 泄漏同一无向边
药物重定位(图特征+ML) 治药三态边 + drug→protein→disease 路径特征 §5.3 最小路径起步;indication 正样本、contraindication 硬负样本
LLM+KG 检索增强 kg.csv 邻域查询 + features.tab 文本 子图线性化成文本上下文;文本字段做答案的机制背书
表型相似度 disease_phenotype 邻接 罕见病诊断场景;极性边分态使用

附录 P:罕见病子图谱使用指南

  1. 裁剪:按附录 P Q37 的两步法取 Orphanet 源疾病节点及其两跳邻域——覆盖 Orphanet 9,348 罕见病中约 90.8%(论文口径)。
  2. 补强:罕见病的疾病-基因信号主要在 disease_protein(DisGeNET 供边);疾病-表型信号在 disease_phenotype(HPO 供边)——两路合并做稀疏信号融合。
  3. 对照:库内 orphanet-ordo(812)、hpo(747)、omim(159) 条目持有各自源的最新原始数据——PrimeKG 子图做全景,源库做深挖。
  4. 坑位:罕见病文本覆盖不均(Mayo Clinic/Orphanet 文本以常见病为主),多模态建模前先统计非空率;OMIM 扩展的 32,866 个新节点主要 enrich 罕见病/遗传病区,要它们就得自建新版(坑 5)。

附录 Q:与库内上游源条目的字段级对接示例

PrimeKG 的 x_source/y_source 列天然记录了每条边的源库归属,与库内条目的对接关系(rid 为 2026-10-04 查库值):

库内条目 PrimeKG 中的角色 对接字段
drugbank(89) drug 节点 ID 本体、drug_protein/drug_drug 边、药物文本 x_id/y_id 前缀 DBxxxxx ↔ DrugBank ID
drugcentral(344) 治药三态边主源 relation ∈
sider(92) drug_side_effect 边与 phenotype 折叠源 drug↔effect/phenotype 边
disgenet(449) disease_protein 关联主源 disease↔gene/protein 边
mondo(748) disease 节点 ID 本体 x_id/y_id 前缀 MONDO:xxxxx
hpo(747) effect/phenotype 编码本体 HP:xxxxxxx
umls(558) 疾病定义文本、CUI→MONDO 映射 文本特征与映射表
omim(159) 2023-12 扩展源(不在 Dataverse 快照) 附录 L 自建流程
orphanet-ordo(812) 罕见病文本与覆盖 x_source/y_source == Orphanet
reactome(424) pathway 节点本体 REACT:xxxxx
open-targets(456) 证据打分路线对照 平台取数互验
tdc(131) 任务封装与基准生态 tdc.resource.PrimeKG

对接纪律:PrimeKG 的各源数据是 2022-05 快照口径——与库内上游条目(各自持有更新版)对接时,差异部分先查版本再查映射,不要把「版本差」当「数据错」。

尾注

本条目为 qianfanghub.com「AI-Ready Wikipedia」数据集条目,聚焦数据集本体的事实、结构、获取与避坑;PrimeKG 的下游研究进展(引用它的论文)不在本条目维护范围内。条目内全部硬数字溯源见附录 C;两口径并存处一律登记于附录 F 并在正文坑点编号处交叉引用。条目以简体中文撰写,技术名词首次出现时标注英文原文。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • disgenet — 共享标签:知识图谱 / 药物发现与化学 / 基因组学与多组学
  • open-targets — 共享标签:知识图谱 / 药物发现与化学 / 基因组学与多组学
  • ctd — 共享标签:知识图谱 / 药物发现与化学 / 药物-靶点相互作用 / 基因组学与多组学
  • herb-2 — 共享标签:知识图谱 / 药物发现与化学 / 药物-靶点相互作用 / 基因组学与多组学
  • omim — 共享标签:知识图谱 / 基因组学与多组学 / 罕见病
  • offsides — 共享标签:知识图谱 / 药物发现与化学 / 药物-靶点相互作用
  • drkg — 共享标签:知识图谱 / 药物发现与化学 / 药物-靶点相互作用
  • iuphar-bps — 共享标签:知识图谱 / 药物发现与化学 / 药物-靶点相互作用
  • mondo — 共享标签:知识图谱 / 基因组学与多组学 / 罕见病
  • ecod — 共享标签:知识图谱 / 药物发现与化学 / 基因组学与多组学

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集