信息速览
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 脚本层。
导语读法三则:
- 只想下数据:直奔 §6 获取与许可——先看 6.1 三层许可与 wget 直链,再看 6.3 版本链,别把 v2 快照当成最新版。
- 做图机器学习:直奔 §5 任务与用法——PyTDC/PyKEEN 加载代码与 2.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——它几乎不产生新的生物实验数据,而是把别人的数据做深度的清洗与连接。贡献分三层:
- 数据层:10 类节点、30 种无向边(论文 Methods 口径;摘要与 README 写 29 种——坑 2 存照),覆盖从分子(蛋白、分子功能)到细胞(细胞组分、通路)到组织(解剖)到临床(疾病、表型、药物)再到环境(暴露)的 10 个生物尺度,节点总数 129,375、无向关系 4,050,249。
- 方法层:实体消解是把 22,236 个疾病术语折叠成 17,080 个分组疾病的关键工艺——字符串匹配、ClinicalBERT 句嵌入余弦相似度 0.98 截断聚类、人工审核三道工序串联,让「自闭症」在 MONDO 里的 37 个概念、UMLS 里的 192 个概念与 Orphanet 里的 6 个概念收敛为按临床亚型分组的少数节点。
- 工程层:单表 CSV、10 列固定模式、节点 ID 全部采用 DrugBank/MONDO/Entrez/GO/HPO/UBERON/Reactome/CTD 等标准本体、CC0 1.0 许可、Harvard Dataverse 持久 DOI——这是一份对机器学习管线极度友好的发放形态。
这三层叠加的效果可以量化:论文给出的对比基线显示,PrimeKG 的疾病覆盖比 SPOKE、HSDN、GARD 三个同类知识图谱高 1-2 个数量级。换句话说,同样的「药物-基因-疾病」推理任务,别的图里能覆盖的疾病只是它的一角。
§0 读法三则:
- 这个条目描述的是「整合型知识图谱」而非「标注型数据集」:PrimeKG 的价值在知识整合工程,没有逐样本的人工标注;评估它该问「连接质量如何」,不是「标注一致率多少」。
- 全文硬数字均出自论文 Table 1、Methods 与 Dataverse API 实测;摘要宣传口径(100,000+ 节点)与精确口径(129,375)并存处,已在坑 1、坑 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+ 与网络的机器上可完成,全程无需注册或申请:
- 下载主文件(约 0.94 GB,走 Harvard Dataverse 直链):
wget -O kg.csv https://dataverse.harvard.edu/api/access/datafile/6180620
md5sum kg.csv # 校验:aac8191d4fbc5bf09cdf8c3c78b4e75f
- 载入与体检(确认行数与类型全集,防止字符串坑):
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 口径)
- 第一个领域查询(某疾病的一跳邻域,以帕金森病为例):
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))
- 第一组重定位信号(三类治药边的规模感):
tx = kg[kg.relation.isin(['indication', 'contraindication', 'off-label use'])]
print(tx.relation.value_counts()) # 三类各自的数量,合计约 3 万条
- 要图结构就一键转 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% | — | — |
三个读表要点:
- GO 一家占三类:生物过程、分子功能、细胞组分都是 Gene Ontology 的分支,合计 43,987 个节点(34%),是图里最大的单一本体家族——做节点分类任务时这三类的同质性要留意。
- 蛋白节点是斜杠类型:kg.csv 里的类型字符串写作
gene/protein(斜杠),因为 Entrez Gene ID 同时编码基因与其编码蛋白,PrimeKG 选择不拆分。 - 表型节点是折叠类型:
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 |
这个模式的三点设计意图:
- 边列表即图:不需要单独的节点文件,节点集合可以从 x_* 与 y_* 两列聚合得到(Dataverse 里的 nodes.tab 是便捷用的节点清单,8,893,706 字节)。
- 显示名与机器 ID 并存:
relation与display_relation的分工让过滤脚本用稳定字符串、报表用可读名称,两不耽误。 - 来源列全保留: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):
- 不存在
drug_disease关系——治药关系被拆成indication/contraindication/off-label use三条,过滤「所有药物-疾病边」时要 OR 三个字符串。 - 不存在
disease_gene关系——疾病与基因的关联写作disease_protein,因为 PrimeKG 里基因与蛋白是同一节点类型gene/protein。 - 两态关系别写串——
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 字节)。文本模态的三种用法:
- 检索增强:把疾病/药物描述文本喂给 LLM,图结构做候选约束——社区已有多篇 LLM+KG 的组合实践。
- 表征初始化:文本嵌入作为 GNN 节点特征,替代随机初始化。
- 可解释输出:预测出的药物重定位假设可以回溯到 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 里有明确步骤序列,可以压缩为六步:
- 合并:把 20 个数据源的关系表按统一模式(节点类型、ID 本体、关系类型)装进同一张边表——kg_raw.csv 就是这一步的产物。
- 取最大连通分量:扔掉游离小岛,只保留最大连通分量,保证图上任意两节点可达——kg_giant.csv。
- 删 NaN 与重复边:清洗缺失值记录,去掉完全重复的边。
- 加反向边:为每条边补一条反向记录——这是 8,100,498 = 2 × 4,050,249 的来源。
- 再去重:加反向边操作可能引入新的重复,再清一遍。
- 删自环:去掉 x=y 的自指边。
每一步都是可从 GitHub 仓库的 17 个处理脚本复现的确定性操作——这也是「整合型数据集」的 QA 形态:质量不靠标注一致率,靠流程可复现。
3.2 疾病实体消解:三道工序折叠 5,156 个冗余概念
疾病是全图语义最混乱的角落:同一个病在不同数据库里叫不同名字、挂不同 ID、切不同粒度。PrimeKG 的处理分三道工序:
- 字符串匹配:先合并字面同义词,处理掉最机械的一批。
- ClinicalBERT 聚类:对剩余术语取句嵌入,余弦相似度 ≥0.98 才聚为一组——阈值设得极高,宁漏勿错,错折叠会永久混淆两个不同的病。
- 人工审核:机器聚类结果抽样人工确认。
三道工序把 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 的验证形态与标注型数据集完全不同,论文的验证分三块:
- 结构与连通性验证:最大连通分量策略保证图主体可达;十类节点的度分布与边类型的合理性检查。
- 消解质量个案研究:自闭症案例逐概念核对(3.2 节),展示分组疾病与临床亚型的对应性。
- 性能基准:全图加载 <5.18s ± 51.9ms,图上查询 <1s——为「能进生产管线」提供工程背书。
没有 ML 排行榜、没有下游任务 SOTA——PrimeKG 定位是基础设施,不是竞赛题。它的下游评测生态在 TDC(Therapeutics Data Commons)的 benchmark 体系里(见 §5)。
3.5 重建脚本层:17 个脚本与两次「纸面更新」
GitHub 仓库(mims-harvard/PrimeKG)维护着完整的重建管线,两个时间点的更新值得记住:
- 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。
- 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 |
三个补充说明:
- Mayo Clinic 与 Orphanet 不在此表——两者的疾病文本经特征工程层(engineer_features.ipynb / mapping_mayo.ipynb)挂接,属于 3.3 节的文本挂接工序而非边表构建工序。
- 2023-07 重跑覆盖 13 源(§3.5 清单)——DisGeNET 与 OMIM 不在重跑清单内的原因分别是「无需改动」与「当时扩展尚未发生」。
- 表为「已核实部分」而非全 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-2 个数量级」是论文作者自报的口径,对照细节在论文正文与 Table(本次未逐表核对,见存照清单第 11 条)——引用时写「论文口径」比写绝对数字更稳。
- 覆盖数量不等于连接质量:SPOKE 等图的边密度、验证深度各有侧重,PrimeKG 的优势主张集中在疾病节点的覆盖广度。
- Orphanet 90.8% 的罕见病覆盖若属实,PrimeKG 同时是库内罕见病维度上最值得互链的知识图谱条目(罕见病 tag 与 orphanet-ordo(812)、hpo(747) 形成三角)。
4.2 与 Hetionet 的结构比较
Hetionet 是更早(2017)的整合型生物医学 KG,也是 PrimeKG 论文里隐含的同类参照:
- 节点/边类型:Hetionet 11 类节点 24 种边;PrimeKG 10 类节点 30 种边——PrimeKG 多出来的边类型主要在治药关系的细分与 GO 内部关系。
- 治药关系:Hetionet 只有不分状态的
treats边(Compound-Disease);PrimeKG 拆成 indication / contraindication / off-label use 三条——「这个药对这个病是适应症还是禁忌」在 Hetionet 里无法表达。 - 暴露尺度:Hetionet 没有 exposure 节点类型;PrimeKG 有 818 个 CTD 暴露实体。
- 文本模态:Hetionet 无节点文本;PrimeKG 疾病/药物节点带 16 类文本字段。
- 发放形态:Hetionet 提供多格式(JSON/TSV/Neo4j dump);PrimeKG 是单表 CSV——更朴素,但 ID 本体标准化程度高。
库内检索提示:Hetionet 在本库暂无 status=1 条目(查 %hetionet% 0 行),本条目提及它只作背景对照,不配互链 rid。
4.3 治药关系三件套:为什么值得单独一节
indication / contraindication / off-label use 的三边组是 PrimeKG 最有辨识度的设计,也是药物重定位任务的真正入口:
- indication(适应症):监管批准的用途——「已被证明有效」的已知识库。
- contraindication(禁忌症):明确不能用的情况——负样本的稀缺来源。链接预测文献里正样本遍地、高质量负样本难求,禁忌症边是天然的「确定不该发生」关系。
- 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)。两者的关系是一体两面:
- 人员纽带:TDC 一作 Kexin Huang 同时是 PrimeKG 共同一作——PrimeKG 作为内置资源(
tdc.resource.PrimeKG)进入 TDC 分发体系。 - 定位分工:TDC 是任务与基准的集合(带 ML 任务的评测接口),PrimeKG 是单一知识资源(图本体本身)——TDC 回答「用什么任务测」,PrimeKG 回答「图长什么样」。
- 代码入口: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 类文本字段 + 图结构 | 文本仅覆盖疾病/药物两类节点 |
不适合的场景也明确:
- 需要患者级数据(队列、生存分析、真实世界证据)——PrimeKG 无个体,去库里电子健康记录类条目。
- 需要分子结构描述符做 QSAR——药物节点只有文本字段无结构文件,分子结构去 drugbank(89) 或 chembl(85) 主条目拿原始库。
- 需要实时更新的临床证据——图是快照不是服务,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 药物重定位的最小实操路径
一个不依赖深度学习的最小推理链,用于说明图的价值:
- 选定目标疾病 d,取其 disease_protein 邻居基因集 G(d)。
- 对每个候选药物 c,取其 drug_protein 邻居靶点集 T©。
- 计算 |T© ∩ G(d)| 与通路/生物过程层面的间接连接强度。
- 用 indication 边排除已知适应症(它们不是「新」假设)、用 contraindication 边排除禁忌组合。
- 剩余高连接候选即重定位假设清单,附 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 的结果时,条目建议的声明格式:
- 数据版本:Dataverse v2(2022-05-02 快照)或 GitHub 2023-07 重建版 / 2023-12 OMIM 扩展版——三者结果不可混比。
- 许可合规:CC0 1.0 覆盖整合产物;若成果涉及 DrugBank/UMLS 等上游源的原样再分发,逐源核对许可(§6.1)。
- 关系计数口径:写「4,050,249 无向关系」或「8,100,498 边记录(双向存储)」,不写「810 万关系」。
5.5 内存与性能工程要点
0.94 GB 的 CSV 在工程上属于「单机无压力但要讲方法」的体量:
- 内存预留 4-6 倍:pandas 以 object 列存 10 列文本,实载约 3-6 GB——8 GB 内存的笔记本可跑,4 GB 的容器要精简列。
- 先裁列后运算:绝大多数任务只需要 5 列(relation/x_type/x_id/y_type/y_id),
usecols裁剪后内存直降一半以上。 - 转 Parquet 一劳永逸:
kg.to_parquet('kg.parquet')之后体积约减半、载入快 3-5 倍、dtype 固化——团队协作场景强烈建议做一次。 - 按类型分块:只研究疾病子图时,
pd.read_csv(..., chunksize=1_000_000)流式过滤x_type/y_type=='disease'再拼接,峰值内存可控。 - 图算法选好武器:NetworkX 适合十万节点级的分析与教学;百万级边要上 PyG/DGL 的稀疏表示或 graphscope——论文的 <5.18s 加载是「读进 DataFrame」的口径,不含图算法耗时。
- 去重的正确姿势:双向存储意味着
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 而失效,原样再分发上游内容仍受各源约束 |
三层的关键推论:
- CC0 覆盖的是「整合行为」的产物——PrimeKG 团队投入劳动产生的边表、消解映射、文本组织形态。
- 想把 PrimeKG 里来自单一上游的大段原始内容(如 DrugBank 的药物说明书文本)单独抽出来再分发,L3 的约束照样适用——CC0 不是上游许可的洗白通道。
- 学术发表引用 PrimeKG 数据通常无需额外授权;商业产品化(尤其药物-靶点数据的原样内嵌)建议逐源做一次许可盘点。
6.2 获取实操:直链、md5 与环境
获取主文件的最短路径(README 官方命令):
wget -O kg.csv https://dataverse.harvard.edu/api/access/datafile/6180620
md5sum kg.csv # 应为 aac8191d4fbc5bf09cdf8c3c78b4e75f
要点:
- datafile id 6180620 对应 kg.csv(981,751,236 字节,md5 aac8191d4fbc5bf09cdf8c3c78b4e75f)——其余 10 个文件各有独立 datafile id,全部 11 个文件的 id 与 md5 登记于附录 E。
- 先验 md5 再用:Dataverse 大文件传输中断不报错,坏 CSV 会在下游以行数对不上、编码错位等诡异方式毒化结果。
- Dataverse 维护窗口不可取:哈佛 Dataverse 定期维护,抓取失败先看 Dataverse 公告再怀疑命令。
- 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):
- 可发现性(D):持久 DOI + 论文 CC BY 4.0 + 官网 + GitHub 多入口,检索即达;唯一暗坑是官网线索类文章偶有张冠李戴(本条目坑 6)。
- 可获取性(A):CC0 + 直链 wget + 单文件 0.94 GB 无需注册——库内第一梯队。
- 可互操作性(I):标准本体 ID(DrugBank/MONDO/Entrez/GO/HPO/UBERON/Reactome/CTD)+ 单表 10 列 + 四条官方加载路径——I 维度的标杆样本。
- 元数据质量(M):论文 Methods 完整、README 清晰、Dataverse 主题字段规范;扣分项是版本状态在两个载体间割裂(快照 vs 脚本层),初次使用者易混淆。
- 可持续性(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/开放许可,保留署名即可 |
三条使用纪律:
- 按字段回溯:kg.csv 的 x_source/y_source 列记录每个节点的源库——商用分发前按 source 列做一次字段级盘点,比整包审查更精准。
- 区分「整合产物」与「上游内容」:你自己算出的图统计、嵌入向量、模型权重是衍生分析,风险低;把 DrugBank 药物说明书文本原样搬进产品是上游内容再分发,风险高。
- 书面确认优先:条款含糊时(如 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 的下游使用聚成四种形态:
- GNN 节点分类 / 链接预测:把 kg.csv 转 NetworkX 或 PyG/DGL 图,做疾病-基因预测、药物-靶点预测——最常见的学术用法。
- 知识图谱嵌入(KGE):TransE/RotatE/ComplEx 等模型经 PyKEEN 内置入口直接训练,做链接预测与药物重定位假设生成。
- LLM + KG 检索增强:用图结构约束 LLM 的候选空间,用疾病/药物文本字段喂 prompt——2023 年之后增长最快的用法。
- 药物重定位假设生成:drug→gene/protein→disease 路径打分(5.3 节的最小链路及其深度学习变体),结果以 off-label use 边为参照做「已有人工证据」分层。
下载量侧证:Dataverse 统计在 2022-06(发布一个月内)即破 5,000 次下载——对一个学术数据集是显著热度。
7.3 检索入口汇总
想找到官方信息,按可靠度排序:
- 论文原文:Scientific Data 2023;10:67(DOI 10.1038/s41597-023-01960-3,开放获取 CC BY 4.0,PMC9893183)。
- Harvard Dataverse 条目:DOI 10.7910/DVN/IXA7BM——文件、md5、许可、版本信息的一站式来源。
- 官网:zitniklab.hms.harvard.edu/projects/PrimeKG/(Zitnik Lab 项目页,含 bibtex)。
- 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) | 关联证据对照 |
三个使用提示:
- 重复 slug 双 id:gnomad(35/570)、chembl(85/572)、drugbank(89/571)、gwas-catalog(463/564) 在库内各有两个 id——互链一律选低 id 主条目。
- Hetionet 无条目:库内查
%hetionet%为 0 行,正文对照(4.2 节)不配 rid。 - omim(159) 的特殊地位:PrimeKG 的 Dataverse 文件不含 OMIM,omim(159) 条目对应的是 2023-12 扩展引入的上游——引用「含 OMIM 的 PrimeKG」时实际引用的是 GitHub 脚本层的重建产物。
9.2 检索路径建议
从本条目出发的三条典型检索路径:
- 想看某个上游源的原始形态:§9.1 表选 rid → 直接跳条目。
- 想做药物-靶点任务全家桶:PrimeKG(本条目)+ drugbank(89) + drugcentral(344) + tdc(131) 四条连读。
- 想做罕见病分析: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 条)
- 团队:Harvard Medical School Zitnik Lab;作者 Payal Chandak*(HST)、Kexin Huang*(Stanford CS)、Marinka Zitnik(通讯,HMS Biomedical Informatics)——*为同等贡献。
- 论文:Building a knowledge graph to enable precision medicine,Scientific Data 2023;10:67。
- 论文 DOI:10.1038/s41597-023-01960-3;论文许可 CC BY 4.0;PMC 编号 PMC9893183。
- 预印本:bioRxiv 10.1101/2022.05.01.489928(2022-04 v1 上线)。
- 数据 DOI:10.7910/DVN/IXA7BM(Harvard Dataverse)。
- 许可三层:整合数据 CC0 1.0;代码库 MIT;上游 20 源各自许可仍有效。
- Dataverse 存入 2021-07-12(depositor: Chandak, Payal);现行文件版 v2 发布于 2022-05-02T14:39:28Z。
- 节点总数 129,375(论文 Table 1 精确口径);摘要宣传口径 100,000+。
- 十类节点分布: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。
- 无向关系 4,050,249(论文摘要口径)。
- kg.csv 存储 8,100,498 行 = 2 × 4,050,249(每条无向边双向各存一行)。
- kg.csv 体积 981,751,236 字节(约 0.94 GB)。
- kg.csv 10 列:relation, display_relation, x_id, x_type, x_name, x_source, y_id, y_type, y_name, y_source。
- 边类型双口径:30 种(论文 Methods)vs 29 种(摘要/README)。
- 10 个节点类型字符串:gene/protein, drug, disease, effect/phenotype, biological_process, molecular_function, cellular_component, pathway, anatomy, exposure。
- ID 本体:drug=DrugBank、disease=MONDO、anatomy=UBERON、pathway=Reactome、gene/protein=Entrez、BP/MF/CC=GO、effect/phenotype=HPO、exposure=CTD ExposureStressorID。
- 疾病消解:22,236 术语(MONDO 22,205 概念)→ 17,080 分组疾病。
- 消解方法:字符串匹配 + ClinicalBERT 句嵌入余弦相似度 0.98 截断聚类 + 人工审核。
- 自闭症案例:MONDO 37 概念 / UMLS 192 概念 / Orphanet 6 概念 → 按临床亚型分 3 组。
- 文本字段:疾病节点 10 类(流行率、症状、病因等,源 MONDO/Orphanet/Mayo Clinic/UMLS);药物节点 6 类(分子量、适应症、作用机制等,源 DrugBank/DrugCentral)。
- 构建六步:合并→最大连通分量→删 NaN/重复→加反向边→再去重→删自环。
- 对比基线:疾病覆盖比 SPOKE、HSDN、GARD 高 1-2 个数量级(论文口径)。
- 性能:全图加载 <5.18s ± 51.9ms;图上查询 <1s(论文 Technical Validation 口径)。
- kg.csv 官方 wget 直链:https://dataverse.harvard.edu/api/access/datafile/6180620。
- kg.csv md5:aac8191d4fbc5bf09cdf8c3c78b4e75f(Dataverse API 核实)。
- Dataverse v2 共 11 个文件(含 edges.csv 386,582,390 B、kg_raw.csv 893,347,412 B、disease_features.tab 113,533,957 B 等,全表见附录 E)。
- 2023-07:GitHub 17 个处理脚本重跑/更新,支持 2023-07 上游数据库版重建;Dataverse 文件不变。
- 2023-12:OMIM 扩展 +612,282 边、+32,866 节点(README 口径,仅脚本层)。
- TDC 纽带:Kexin Huang 兼 TDC 一作;PrimeKG 经 tdc.resource.PrimeKG 进入 TDC 分发。
- PyKEEN 内置:pykeen.datasets.has_dataset(‘primekg’) 返回 True。
- 官方环境:conda env create --name PrimeKG --file=environment.yml。
- Dataverse 下载量 2022-06(发布约一月内)破 5,000。
- Orphanet 9,348 罕见病覆盖约 90.8%(检索摘要口径,待核论文原文)。
- 资助(致谢口径,待核 PMC 原文):NSF IIS-2030459 / IIS-2033388、US Air Force FA8702-15-D-0001、Harvard Data Science Initiative、Amazon Research Award 及药企研究资助。
- kg.csv 不存在 drug_disease 与 disease_gene 关系——治药关系为 indication / contraindication / off-label use 三条;病-基因关系为 disease_protein。
- 官网 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 个数据源」,此处给出边界声明:
- 论文 Table 1 显式出现的来源为 17 个(含 DrugBank、MONDO、HPO、GO、Reactome、UBERON、Entrez、UMLS、SIDER、DrugCentral、Orphanet、Mayo Clinic、CTD、DisGeNET、Bgee、NCBI Gene、Human PPI Network 等)。
- README 的脚本表覆盖 14 个源(另含 OMIM 2023 扩展与 Mayo Clinic 映射脚本)。
- 「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 九坑之外,研究过程另有三条生产存照:
- 抓取封锁存照(2026-10-04):本条目取证期间 WebFetch 对 PMC、github.com(主站/raw/blob)、biorxiv、nature.com 均空返回或 Client Challenge;Bash curl 直连超时——全部关键事实改经 WebSearch 结果正文 + Dataverse API + DeepWiki 镜像三通道交叉取证。
- 待核清单:资助致谢全表、Orphanet 90.8% 原文表述、论文 Table 3/4 药物-疾病特征统计——以 PMC 原文为准,本条目按检索摘要口径转述并逐处标注。
- 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:检索路径示范
关键词组合建议:
- 数据集本体:PrimeKG / Precision Medicine Knowledge Graph / kg.csv / Chandak Zitnik。
- 任务文献:PrimeKG drug repurposing / PrimeKG link prediction / PrimeKG GNN / PrimeKG knowledge graph embedding。
- 工程问题:PrimeKG kg.csv memory / PrimeKG gene/protein filter / PrimeKG OMIM extension。
- 许可问题:PrimeKG license CC0 / DrugBank license non-commercial / UMLS license agreement。
避检提示:检「PrimeKG contradictions」命中的是论文原文的笔误(坑 4),查数据请用 contraindication;检「PrimeKG maze.datavant」是错误官网线索(坑 6)。
附录 I:基于本数据集的研究检查清单(12 项)
- 已声明使用的版本支线(Dataverse v2 快照 / GitHub 2023-07 / 2023-12 OMIM 扩展)。
- 已对下载文件做 md5 校验(附录 E)。
- 关系计数已声明口径(无向 4,050,249 或双向 8,100,498 行)。
- 过滤脚本已实测 x_type/y_type 枚举值(gene/protein 斜杠、effect/phenotype 连写——坑 8)。
- 治药关系过滤已覆盖三条字符串(indication/contraindication/off-label use)。
- 节点特征如用文本字段,已注明疾病 10 类/药物 6 类的来源分层。
- GNN/KGE 实验已声明数据切分方式(自切或 TDC 任务)。
- 负样本构造已说明是否使用 contraindication 硬负样本。
- 结果比较未混用不同版本支线的数据。
- 许可声明已覆盖三层(CC0/MIT/上游各源)——尤其商业场景。
- 引用双轨:论文 DOI 10.1038/s41597-023-01960-3 + 数据 DOI 10.7910/DVN/IXA7BM。
- 涉及罕见病结论时已注明 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:本条目生产档案
- 写手代理:agent-c-primekg;开工三查完成时点 2026-10-04T03:42:00(锁文件 writing/primekg/.lock;进程留痕 ps 计数 7)。
- slug 查重:ai_ready_dataset 表
url_name ILIKE '%primekg%'返回 0 行——无撞库。 - 存在性核验:四源互证(WebSearch 多源 + Harvard Dataverse API 直查 + DeepWiki 镜像 + README 转引)通过。
- 取证时点:2026-10-04;抓取封锁见附录 D 存照第 1 条。
- FACTS 事实档案:writing/primekg/FACTS.md(九节,本条目单一事实源)。
- 成稿:writing/primekg/primekg_Wikipedia.md——分 5 part 于私有区撰写后显式拼接。
附录 L:自建新版 PrimeKG 步骤清单(要 2023-07/2023-12 版时)
- 建环境:
conda env create --name PrimeKG --file=environment.yml(仓库根目录)。 - 拉源:运行
datasets/primary_data_resources.sh——脚本自动创建目录结构并下载 13 个重跑覆盖源的最新版(§3.5 清单)。 - 逐源处理:按 §3.6 对照表运行 datasets/processing_scripts/ 下脚本,产出 anatomy_gene.csv、drug_disease.csv 等中间文件。
- 建图:运行 knowledge_graph/build_graph.ipynb——依次产出 kg_raw.csv、kg_giant.csv、kg.csv 三版本。
- 扩展(可选):运行 append_omim.ipynb 追加 OMIM 扩展(+612,282 边、+32,866 节点)。
- 特征工程:运行 engineer_features.ipynb 与 mapping_mayo.ipynb 挂接疾病/药物文本。
- 登记:记录各源实际抓取日期、脚本 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:罕见病子图谱使用指南
- 裁剪:按附录 P Q37 的两步法取 Orphanet 源疾病节点及其两跳邻域——覆盖 Orphanet 9,348 罕见病中约 90.8%(论文口径)。
- 补强:罕见病的疾病-基因信号主要在 disease_protein(DisGeNET 供边);疾病-表型信号在 disease_phenotype(HPO 供边)——两路合并做稀疏信号融合。
- 对照:库内 orphanet-ordo(812)、hpo(747)、omim(159) 条目持有各自源的最新原始数据——PrimeKG 子图做全景,源库做深挖。
- 坑位:罕见病文本覆盖不均(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 — 共享标签:知识图谱 / 药物发现与化学 / 基因组学与多组学
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

