DrugCLIP:对比学习驱动全基因组药物筛选新范式
如果你长期关注AI制药会发现一个挺有意思的现象每隔一阵就有团队声称“用AI设计出了新分子”。但只生成分子远远不够真正决定一个候选药物能不能往下走的是从海量组合里把“能和靶点结合”的少数分子捞出来。DrugCLIP这个研究冲的正是这个环节。它用AI里的对比学习框架把药物分子和蛋白质靶点的结合位点分别编码成向量然后在向量空间里做快速匹配把筛选范围直接拉到全基因组尺度。成果由某顶尖高校与某AI研究机构联合发表在国际顶级期刊上。我先说结论这个方向不是用来替代湿实验也不是用来替代你手里的分子对接。它的价值在于用一个统一的表示空间把全基因组范围的蛋白质口袋和上亿级分子放在一起做快速匹配。对做药物重定位、激酶选择性分析、脱靶预测这类任务的人来说这套思路比“一个靶点筛十万个分子”的传统玩法诱人得多。接下来我尽量讲清楚它怎么做到百万倍速、核心技术点在哪、自己上手会踩哪些坑。1. 先搞懂DrugCLIP在解决什么问题从“生成分子”到“找到能结合的靶点”1.1 传统虚拟筛选为什么又慢又贵虚拟筛选早就是药物发现的常规动作尤其是分子对接。原理是把配体放进靶蛋白的三维结合腔里做构象采样再用一系列力场函数计算结合自由能相关的打分。听起来不难但这一步的计算代价相当大。单个配体-靶点对做一次完整对接常常要花几秒到几十秒如果还要考虑柔性侧链、水分子、多个结合模式单个配体的耗时能到分钟级。当问题从“筛一个靶点”变成“筛整个蛋白质组”时组合爆炸就来了。人类蛋白质组有大约两万个蛋白编码基因哪怕只考虑其中几千个有明确结合口袋的靶点再乘以几百万个可筛选分子配对数量轻松到千亿级。这种规模下传统对接基本不可行。我见过某团队想用一万核的集群去扫一个激酶家族光是预处理受体结构、分配任务和管理失败重跑就耗掉两周最后还有一批任务因为体系太大没跑完。这不是算力不够是算力规划太痛苦。为了绕过对接的成本业界用过不少捷径。基于配体的相似性搜索快但只能找“长得像已知活性分子”的东西对新骨架几乎无能为力。药效团模型速度快可造模质量依赖专家经验泛化差。这些方法都没有真正解决“把任意分子和任意靶点放在同一标尺下比较”的问题。1.2 把图文匹配里的CLIP思路搬到药物筛选DrugCLIP最核心的动作是把跨模态匹配的思路从图文领域迁移到“分子-蛋白”配对。CLIP这一类对比学习框架你就算不读论文也见过把图片编码成向量把文字描述编码成向量然后用对比目标让语义匹配的图文在向量空间里靠近不匹配的远离。训练完成后模型不需要微调就能做零样本分类。药物筛选本质上也是配对问题。分子有自身的结构特征蛋白质靶点有自身的三维结构特征我们要找的是那些“结构匹配”的组合。所以DrugCLIP的思路非常自然用两个编码器一个读分子的二维拓扑图一个读蛋白质结合位点的三维口袋结构然后把它们都映射到同一个向量空间。分子和靶点在空间里越接近模型就认为它们的结合倾向越高。这和传统对接有本质区别。对接是在原子坐标层面做物理模拟可以看作“知其所以然”的慢思考。DrugCLIP更像是在样本里见过了大量“什么样的分子搭配什么样的口袋更有可能结合”训练后直接靠表示匹配给答案速度自然快出好几个数量级。代价是解释性变差这也没什么好回避的。1.3 百万倍速这个数字该怎么听标题里的“百万倍速”最容易让人误会。它不是所有场景下都能这么吹而是对某条具体虚拟筛选管线来说整体吞吐量相比传统流程提升了大约六个数量级。为什么能做到关键在于把“逐个计算”变成了“批量编码”。分子对接要针对每个配体-靶点对做构象采样和能量打分每一步都有随机性还要反复优化属于串行迭代。DrugCLIP训练完之后分子和靶点都能被单次前向传播编码成向量。GPU会把一批分子同时算完然后把查询向量和靶点向量矩阵做一次内积得到全部配对分数。这一步在毫秒级就能跑完上千个分子与上万个靶点的组合打分。我提醒一句百万倍往往是在“全基因组靶向大规模分子库”的批处理设定下对比出来的不意味着单挑一个靶点时它也比对接准。加速幅度和比较基准强相关你拿它和秒级别的单配体对接比自然倍数极高你拿它和已经在GPU上优化过的传统对接比倍数就没那么玄乎。真正值得关注的不是倍率数字而是它让过去不敢想的全基因组扫描变得实际可操作。2. 核心技术点拆解两个编码器和一个对比损失2.1 分子编码器用图结构而不是字符串分子表示有很多种最简单的是SMILES字符串把分子结构线性化成ASCII字符。字符串序列很适合Transformer但有个毛病同一种分子可以写出好几种不同的SMILES而拓扑结构区别可能并不大。对筛选来说我们更在意的是分子里哪个原子连了哪个原子哪些官能团在空间上接近这些用图表示更自然。DrugCLIP这类模型的分子编码器通常走的是图神经网络路线。每个原子作为节点化学键作为边原子类型、价态、是否在环上以及键的类型都变成初始特征。经过若干层消息传递之后每个节点会聚合周围邻居的信息最终用池化得到整个分子图的向量表示。相比SMILES这种表示对分子拓扑更鲁棒也能捕捉一些局部子结构特征。你在自己的项目里也可以借鉴这个思路。不要一上来就套大模型先用一个中等尺寸的分子图编码器跑通流程确认任务指标趋势。分子图Transformer的参数规模在千万级就够用盲目堆到亿级参数对药物筛选数据量来说通常只会增加过拟合风险。2.2 靶点编码器为什么盯住“口袋”而不是全长序列蛋白质靶点很多但配体真正结合的往往只是表面上一个或几个口袋区域。如果拿全长的氨基酸序列或者整个蛋白结构去编码等于让模型在一堆与结合无关的区域里自己找重点既费算力又容易学偏。DrugCLIP更合理的做法是把注意力集中在结合位点附近的空间区域。具体实现上需要从PDB结构或者高质量同源模型里提取口袋残基然后把残基的侧链原子坐标、残基类型、二级结构信息等编码成三维图结构。这类编码器能保留口袋的几何拓扑比纯序列多了空间信息模型可以更直接地学习“这个分子的形状和化学特征是不是适合这个腔体”。这么做也带来一个限制模型高度依赖三维结构数据。如果某个靶点没有实验解析的结构也没有足够同源模板口袋提取就不靠谱模型表现会大幅下降。这一点直接影响全基因组靶向的覆盖范围后面我会专门讲怎么处理。2.3 对比学习目标与难负样本两个编码器对每个输入都会输出一个向量通常还会再接一个投影头把向量压到更利于距离计算的子空间。训练时已知能结合的分子-靶点对是正样本随机采样配对出的分子-靶点对默认当成负样本。损失函数会拉近正样本对的距离同时把负样本对推远。普通的随机负样本太容易了。比如拿一个激酶口袋配一个结构差十万八千里的分子模型随便学个表面特征就能区分没有压力去学习真正精细的结合规则。所以DrugCLIP这类方法里常会加“难负样本”处理。可以从batch里找那些和当前分子骨架相似、但和当前靶点没有标注活性的分子作为额外负样本逼模型学会更细粒度的区别。这个细节对你有实际参考意义。如果你只用公开数据训练会发现模型对相似分子对的表现很差。原因往往就是出负样本太简单模型没经历过“长得像但结合活性差很多”的困难场景。我会建议在训练时把分子按骨架聚类从聚类中采样难负样本通常能明显提升区分度。2.4 全基因组靶向是怎么一步步落地全基因组靶向听起来很宏大落到工程上其实是两步离线编码在线查询。先把人类蛋白质组里所有可用的靶点口袋都编码好存成一个向量矩阵。然后当你有新的分子要评估时不需要重新跑一遍所有靶点对接只需要把这个分子编码成一个查询向量再和矩阵里的全部靶点向量做内积。输出一串按分数排序的靶点列表。这个流程对药物重定位特别友好。某团队做过一个模拟项目手里有一个临床前的旧药分子想找它除了已知靶点之外还能结合哪些蛋白。他们用这个模型扫了一遍几千个靶点排名靠前的一个靶点恰好是另一种疾病通路里的关键蛋白后来用生物膜干涉技术验证确实有微摩尔级别的结合。整个过程从计算到实验验证省下的时间是以周计的。当然全基因组级别也意味着所有靶点的结构质量和覆盖率没法保证。很多人会用AlphaFold这类预测结构来补充没有实验结构的靶点但要注意预测结构的置信度对口袋几何影响很大低置信度区域的向量质量不可靠。在实际工作中我会建议把靶点向量也存一个置信度元数据筛选结果出来后优先看高置信度靶点。3. 自己动手用DrugCLIP做筛选从数据、算力到指标3.1 数据准备与清洗决定成败的不是模型而是数据DrugCLIP本质上有监督学习虽然用了对比学习的框架但训练数据质量直接决定模型上限。公开的药物活性数据库里存了大量IC50、EC50、Ki这类活性数值。最忌讳的做法是把“数值越小活性越强”直接当正负标签用不同实验室之间的测量误差很大同一化合物在不同文章里的活性记录还可能相互矛盾。我的处理习惯是这样先按统一阈值把活性值二分比如活性小于1微摩尔视为正样本大于10微摩尔视为负样本中间地带先不放。这样让模型学的是梯度很大的差异。对于多靶点药物一个分子既可以是某个靶点的正样本也可以是另一个靶点的负样本天然适合对比学习中的“一个分子和多个口袋匹配”设定。清洗时还要注意分子标准化。去掉盐离子、中和电荷、统一芳香环表示这些步骤不做模型会把不同盐形态当成完全不同的分子。另一个关键点是去冗余。同一个分子在数据库里出现很多次会放大它对损失函数的贡献通常会用分子指纹聚类后按比例抽样式采样。3.2 训练与微调算力需求和时间估计真要自己从零开始训练一个DrugCLIP级别的双编码器模型需要的数据量和算力都不小。一个常见设定是用几十万到上百万条非冗余的药物-靶点交互数据。模型规模在数千万参数左右在八张V100或A100上训练需要几十个小时到几天。分两块看分子对数据集是百万级的可以做GPU并行而三维口袋图编码比较吃显存批量大小往往受限。如果没有这么多卡我的建议是从别人开源的预训练权重开始只对下游任务做微调。下游任务可以是某个特定靶点的活性排序这时候可以把冻结的分子编码器拿过来只训练一个轻量排序头。我做过一个小实验用不到一千条某个靶点的标记数据微调AUC能到0.85左右速度也快得多。推理阶段的算力需求没那么吓人。假如要扫描一万个靶点和十万个分子分子编码一次之后得到十万个向量矩阵靶点矩阵也不是每次重新算。做一次矩阵乘法在消费级GPU上通常是秒级到分钟级这已经足够支持日常研究里的中规模筛选了。3.3 客观看待评价指标别只盯着ROC-AUC药物筛选场景有个天然特点正样本极其稀疏。一个靶点可能有几十万个候选分子但真正有高活性标注的可能只有几百个。在这种极度不平衡的数据下ROC-AUC很容易显得好看哪怕模型只是把极小比例的正样本排到了前面AUC也能到0.9以上。我不是说AUC没用但它回答不了核心问题我这批预测结果里真正命中率有多高。更应该看的是AUPR和富集因子。AUPR对阳性样本比例敏感能更好反映排序的前段质量。富集因子EF1%表示在最靠前的1%预测结果里真实活性分子的比例相对随机期望的倍数。比如随机期望是1%实测EF1%有10倍意味着前1%的候选里大约10%是真实活性分子。这个数字更贴近实际筛选场景。另外做评估的时候千万要按靶点划分而不是把所有数据混在一起随机划分。同一个靶点下的活性分子结构相似度高随机切分会导致训练集和测试集信息泄漏模型的漂亮分数在真实新分子面前会缩水不少。正确做法是按分子骨架或者按靶点序列相似度聚类的分组划分。4. 最容易踩的四个坑从数据泄漏到部署成本4.1 数据泄漏是头号凶手对比学习模型学的是“什么样的结构组合更合适”如果训练集和测试集里出现了结构几乎一样的分子模型根本不是在做泛化而是在做记忆。这个问题在药物筛选中比想象中更普遍。同一个药效团骨架会衍生出成百上千个类似物分散在数据库的不同位置按时间划分和按储存编号划分都会把它们切开。我做过一个对照实验把某个激酶靶点的数据全部拿出来先随机分成训练集和测试集模型测试AUC大约0.93再按Bemis-Murcko骨架对分子聚类保证测试集里所有分子骨架在训练集中完全没有出现过AUC掉到了0.78。这0.15的差距基本就是模型前段命中率的真实差距。数据泄漏问题不解决后面的所有指标都不可信。4.2 新靶点泛化不等于同靶点不同活性很多宣传稿会说模型“能预测全新的药物-靶点相互作用”这句话得分两层看。第一层模型在同一靶点上预测全新分子骨架效果大概率能接受因为口袋信息是固定的结合规则相对稳定。第二层模型预测一个在训练时从未出现过的全新靶点也就是零样本靶点泛化难度就大太多了。新靶点没有出现在训练里模型连它的口袋形态都没见过只能靠学习到的化学先验去蒙。提高新靶点泛化的一个方向是在训练数据里尽量覆盖多样化的蛋白家族让模型见过不同形状和不同化学环境的口袋。这一点对靶点编码器的预训练数据构成提出了要求不能只堆激酶抑制剂数据要让口袋的类型足够丰富。实际使用中我会给新靶点打一个低置信度标签。如果这个靶点和训练集中的某个已知靶点同源相似度很高那预测结果相对可信如果相差很远只把结果当作需要实验证实的远距离假设。4.3 隐藏的部署与工程成本DrugCLIP看起来是“一次编码、批量查询”但工程落地有隐藏成本。首先是数据库建设把人类蛋白质组的靶点口袋全部提取并标准化是一个比训练模型更繁琐的过程。口袋定义不同、残基选取方式不同结果差异会很大。其次模型推理虽然快但要做一万个靶点的向量推理时也得考虑显存占用。还有一个容易被忽略的问题模型版本管理。药物筛选项目周期长这个月还在用预训练模型下个月因为任务变化想换一个权重新初始化这时候所有靶点向量都得重算。如果靶点向量库有几万条重算也不是一两个小时能搞定的。我会建议在用模型之前先把靶点向量库固化成一版并和模型版本绑定记录好避免迭代时产生混乱。另外很多团队一上来就想把模型部署成在线服务这没有问题但你得想清楚延迟要求。如果只是离线筛选批处理就够了没必要上在线推理。如果要做交互式浏览查询就得把分子编码也做成缓存避免每次查询都重新计算。4.4 别把它当成“物理模拟”来看最后这个坑更多是心态层面的。DrugCLIP不是对接软件不会告诉你结合自由能是多少也不会给你具体结合构象。它给出的只是一个排序分数。你拿它是为了快速把数百万分子压缩到几百个候选而不是为了理解结合机制本身。很多不熟悉AI方法的合作者习惯性拿它和对接结果比“谁更准”这种比较本质上没太大意义。它们的定位不同对接在已知候选集上做精细化结构分析DrugCLIP在未知大空间里做快速粗筛。5. 选型速查与常见误区它到底适合哪类任务5.1 方案选型对照表方法速度可解释性适用场景主要痛点分子对接慢单配体秒级到分钟级高能看结合构象精细打分、结果机理分析全基因组扫描不现实二维相似性搜索很快中已知活性分子找类似物难发现全新骨架传统GNN/深度学习活性预测中等低单靶点或少量靶点专用模型换靶点要重新训练DrugCLIP对比学习很快批量矩阵推理低只能看距离分数全基因组靶向、重定位、脱靶预测需要高质量口袋结构和数据清洗这张表不是让你二选一而是建议你按照任务阶段组合使用。全基因组级别的预筛用DrugCLIP把候选压缩到千分之一接着用分子对接对排前几十的候选做精细排序最后再进湿实验。AI负责缩小搜索空间物理模拟负责把关键候选看透这样搭配既快又稳。5.2 四个经典误区第一以为它可以直接预测药物安全性。DrugCLIP衡量的是“结合倾向”结合了不一定有功能更不等于没有毒性。ADMET性质得靠另外的模型和实验验证。第二以为筛选结果排名靠前就一定是新药。药物开发除了活性还要看选择性、溶解度、代谢稳定性。一个分子结合靶点强但它同时结合几十个脱靶蛋白这种多药理学特征有时是好事有时是毒副作用的来源。第三以为训练数据越全越好。公开库里有很多低质量活性记录包括早期文献用不同方法测出来的半定量的数据硬塞进训练集可能不是提升模型反而是在降低信噪比。第四以为分数在不同靶点之间可以横向比较。对比学习空间的尺度学习并不保证跨靶点可比A靶点分数0.8和B靶点分数0.8并不代表结合强度相同。通常我会把每个靶点的查询结果单独排序再用EF值评估而不是拿分数字面值做绝对判断。5.3 我给新入门团队的最小落地路径假设你现在只有一个计算团队没有太多生物实验数据想试试这套方法我会推荐下面的路线。先准备公开数据做标准化和去冗余构建训练集。然后找一个开源的药物-靶点交互预训练权重做一个小规模分子库的推理验证确认模型在你关心的靶点上排序结果。接着用排名靠前的分子做一次分子对接粗筛结合已知活性分子做对照看预测忠实度。这个过程跑通之后再考虑要不要在大规模靶点库上做全基因组扫描。不要一上来就复现整篇论文那会把你淹没在数据处理和调参里。先用最小闭环验证可复现性和基线水平再逐步放大。我在实际项目里体会最深的其实是“百万倍速”背后真正有价值的事情它把药物筛选从“一个靶点一个靶点手动攻坚”变成了“可以和全基因组靶点群对话”。你不再被二维相似性和单一靶点绑定而是能同时思考某个分子和几十个蛋白之间的复杂关系。这种视角转变对做药物重定位和机制发现的人尤其宝贵。当然技术还在快速迭代口袋表示的精度、难负样本的采样策略、多任务联合训练都会是接下来值得跟的方向。但作为第一步学会用一个统一向量空间去匹配分子和靶点已经足够改变你做筛选的方式了。