药物-靶点相互作用(DTI)预测有多条技术路线。它们不是「新旧替代」的关系,而是解决不同问题、适用不同场景——理解这一点比追踪最新模型更重要。
四条路线的对比
| 路线 | 输入 | 回答的问题 | 速度 |
|---|---|---|---|
| 序列基 | SMILES + 氨基酸序列 | 大规模粗筛 | 最快 |
| 图基 | 分子图 + 序列/图 | 结构-活性关系 | 快 |
| 结构基 | 三维复合物 | 结合模式与机理 | 慢 |
| 知识图谱 | 已知的药物-靶点-疾病关系网络 | 药物重定位 | 快 |
各路线的适用场景
# ---- 序列基(DeepDTA、GraphDTA 类,见 139、140)----
#
# 适合:
# - 【需要处理海量组合】
# 如:1 万个化合物 × 500 个靶点 = 500 万对
# - 靶点没有结构
# - 快速的初步排除
#
# 不适合:
# - 需要理解结合机理
# - 精细的活性排序
# - 新颖靶点(训练分布外)
#
# 改进方向:
# 用 ESM-2 表示替代序列 CNN(见 143)
# → 显著提升蛋白侧的信息量
# ---- 结构基 ----
#
# 包括:
# 传统对接(见 095、097)
# 深度学习对接(见 101)
# AF3 类复合物预测(见 113、121)
#
# 适合:
# - 【理解为什么结合】
# - 指导结构改造
# - 选择性分析(比较靶点与脱靶的口袋)
# - 有结构的靶点
#
# 不适合:
# - 超大规模筛选(速度)
# - 无结构的靶点
#
# 【关键优势】:
# 它给出的是【可验证的机理假设】
# 而非只是一个分数
# → 化学家可以据此设计实验
# ---- 知识图谱 ----
#
# 构建:
# 节点:药物、靶点、疾病、副作用、通路、基因
# 边:已知的相互作用、适应症、不良反应
#
# 方法:
# 知识图谱嵌入(TransE、RotatE 等)
# 图神经网络
# 路径推理
#
# 适合:
# - 【药物重定位】:已上市药物的新适应症
# - 发现间接关联
# - 整合异质证据
#
# 不适合:
# - 【全新化合物】——不在图中,无法推理
# - 需要定量活性
#
# 【根本局限】:
# 知识图谱只包含【已知】的关系
# → 预测本质上是「补全」而非「发现」
# → 【严重偏向研究充分的药物与靶点】
DTI 评测的核心问题
# 【这是整个领域最需要注意的地方】
#
# 问题:数据是「矩阵」而非独立样本
#
# 药物 × 靶点的矩阵中,
# 随机划分会让同一药物/靶点的其它数据留在训练集
# → 模型可以学「边际分布」而非「相互作用」
#
# 【必做的对照实验】:
#
# 基线 A:只用药物 ID 的平均活性
# 基线 B:只用靶点 ID 的平均活性
# 基线 C:矩阵分解(协同过滤)
#
# 如果深度模型没有显著超过这些基线,
# 说明它没学到真正的相互作用
#
# 【必用的划分方式】(见 133):
#
# cold drug 新化合物 → 【虚拟筛选场景】
# cold protein 新靶点 → 【靶点外推场景】
# cold both 两者都新 → 最严格
#
# 实际部署时面对的通常是 cold drug:
# 我们有一批新合成的化合物,想知道它们打不打某个靶点
#
# 【现实】:
# 在 cold protein 设置下,
# 现有方法的性能普遍大幅下降
# → 「预测新靶点的配体」仍是未解决的问题
def evaluate_with_baselines(train_df, test_df, model_preds):
"""DTI 评测必须包含的对照"""
import numpy as np
from scipy.stats import spearmanr
gm = train_df["y"].mean()
dmean = train_df.groupby("drug")["y"].mean()
pmean = train_df.groupby("protein")["y"].mean()
base_d = test_df["drug"].map(dmean).fillna(gm).values
base_p = test_df["protein"].map(pmean).fillna(gm).values
base_dp = (base_d + base_p) / 2
y = test_df["y"].values
for name, pred in [("药物均值", base_d), ("靶点均值", base_p),
("两者平均", base_dp), ("模型", model_preds)]:
r = spearmanr(y, pred).correlation
rmse = np.sqrt(((y - pred) ** 2).mean())
print(f"{name:10s} Spearman={r:.3f} RMSE={rmse:.3f}")
# 【模型必须显著优于前三个,结果才有意义】
组合使用的分级策略
# 实际项目中,应该组合使用而非二选一
#
# 场景:从 100 万化合物库中找某靶点的苗头
#
# 第 1 级:【规则过滤】(秒级)
# 性质范围、结构警示 → 剩 30 万
#
# 第 2 级:【配体相似性】(分钟级)
# 如果有已知配体,做相似性搜索 → 富集
#
# 第 3 级:【序列基 DTI 模型】(小时级)
# 快速打分排序 → 剩 3 万
#
# 第 4 级:【对接】(数小时~天)
# → 剩 3000
#
# 第 5 级:【结构基精化】
# GNINA 重打分、相互作用核对 → 剩 300
#
# 第 6 级:【MM/GBSA 或 Boltz-2】(见 126、121)
# → 剩 100
#
# 第 7 级:【人工审查】
# 药化专家看结构 → 剩 30
#
# 第 8 级:【实验验证】
#
# 【关键设计原则】:
# 每一级用【不同原理】的方法
# → 避免同一种偏倚被层层放大
# → 如果所有级别都用类似的模型,
# 它们会犯相同的错误
#
# 知识图谱在这个流程中的位置:
# 不在筛选链条上,而是【平行的信息源】
# 用于:发现该靶点的其它已知调节剂、
# 相关通路的药物、可重定位的候选
什么时候用知识图谱方法
- 药物重定位:已上市药物找新适应症——这是知识图谱最有价值的应用,因为药物已知、安全性已知,只需找新的靶点/适应症关联;
- 整合异质证据:把表达、遗传、临床、文献信息放进同一个框架;
- 发现间接关联:药物 A → 靶点 B → 通路 C → 疾病 D 这样的多跳路径;
- 不适合:全新化合物(不在图中)、需要定量活性、新靶点(关系少);
- 必须注意的偏倚:图中的关系密度反映的是研究热度,而非生物学重要性——热门药物和靶点的连接多,容易被预测出更多新关联。
关键要点
- 四条路线解决不同问题:序列基做粗筛,结构基给机理,知识图谱做重定位;
- DTI 数据是矩阵不是独立样本——必须做「药物均值/靶点均值」的平凡基线对照;
- 实际部署面对的是 cold drug 场景,cold protein 下现有方法普遍大幅下降;
- 分级筛选时每级应用不同原理的方法,避免同一偏倚被层层放大。
延伸资源
- DeepDTA:140《DeepDTA 论文精读》;GraphDTA:139《GraphDTA 论文精读》;MolTrans:141《MolTrans 论文精读》;
- ESM-2:143《ESM-2 论文精读》;对接打分:095《Docking Score》;TDC:133《TDC 论文精读》。