
药物筛选这个圈子里有一个默认的心态在计算资源面前想做的事情和能做的事情之间总是隔着两三个数量级。某高校与某AI研究院联合团队最近发表的那项研究成果很大程度上就是把中间隔着的那两三个数量级直接砍掉了——用AI驱动药物筛选把筛选通量提升了百万倍并且把目光从少数“可成药靶点”扩展到整个基因组范围的潜在靶标。这个工作用的是一套基于对比学习的药物-靶点匹配框架业内讨论时习惯叫它DrugCLIP下文我先用“PharmaCLIP”这个代号来指代它方便叙述。一句话概括它的能力过去我们要对两万个蛋白一个个跑虚拟筛选现在可以把所有药物和所有靶点分别编码成向量然后做一次大规模最近邻检索。听起来只是流程上的变化但懂行的人应该已经意识到这不是算法的小修补而是整个筛选范式变了。这篇内容我没有打算只复述论文结论而是想从底层逻辑拆开讲为什么传统方法跑不动全基因组PharmaCLIP的对比学习设计到底做了什么百万倍速是怎么来的以及如果你自己也想复现或借鉴这套思路哪些地方最容易被坑。1. 全基因组靶向的尴尬不是不想筛是算不动1.1 一对一筛选的旧模式传统虚拟筛选的逻辑是“锁定一个靶点然后枚举化合物库”。流程通常是选定某个蛋白结构准备结合口袋把几百万甚至上亿个化合物一个个放进去做分子对接用打分函数估一个结合能最后按分数排序挑出靠前的候选分子做湿实验。这个流程本身没错问题出在“一个靶点一个靶点地跑”。每筛选一个靶点所有化合物的对接计算都要重新做一遍。更麻烦的是一旦靶点蛋白没有高分辨率晶体结构对接就无从下手只能靠同源建模凑一个结构出来精度还不一定有保证。所以过去十几年的产业界实践里真正被系统筛选过的靶点始终集中在有限的那几千个所谓“可成药基因组”里。至于全基因组范围的两万多个蛋白编码基因绝大多数靶点连基础的筛选机会都没有。这不是药企不想做而是计算成本实在撑不住。1.2 “一次计算一个靶点”的代价到底有多高我见过不少刚接触虚拟筛选的团队最初都会低估枚举式计算的成本。拿一个小规模的例子来算笔账假设某个化合物库有一百万个分子一个靶点的对接打分平均需要30秒现实里往往更慢那么单核跑完这个靶点大概需要347天。你把这个任务并行到1000个核上也需要8个多小时才能筛完一个靶点。如果目标上升到全基因组的两万个蛋白同样的并行规模下要跑接近两年。这还没算化合物库扩大到十亿量级的情况。虚拟筛选这个领域里化合物库规模一直在膨胀从几十万到几百万再到上亿但靶点数量却几乎没有同步扩大。因为按“药物×靶点”两两枚举的思路复杂度是化合物库规模和靶点规模的乘积这两个变量一旦同时拉大计算量直接爆炸。这就是全基因组靶向迟迟打不开局面的根本原因不是没有人想筛所有的蛋白而是枚举式计算方法决定了这在算力上不现实。2. PharmaCLIP的底层思路把药物和靶点编码到同一套向量空间2.1 多视图分子表示二维图、三维构象和靶蛋白序列PharmaCLIP不是传统意义上“训练一个分类器判断有没有结合”而是借鉴了跨模态对比学习的思路把药物分子和靶蛋白当作两种不同的“模态”让它们映射到同一个向量空间里。在这个空间里已知能结合的药物和靶点会靠在一起不相关的组合自然被分开。药物分子的表示他们用了两个视图。一个是二维分子图也就是把原子当节点、化学键当边用图神经网络提取拓扑信息。另一个是三维构象把分子在空间里的立体坐标塞进一个具有旋转等变性质的编码器里捕捉空间互补性。为什么要同时用两个视图因为二维图能反映分子的骨架和官能团组成三维构象能反映形状和静电互补。只靠任何一个都不完整多视图融合相当于让模型同时看“化学式”和“实体形状”。靶蛋白这一侧则不同他们没有依赖昂贵的晶体结构而是直接吃氨基酸序列用预训练的蛋白语言模型把序列转成向量。这个选择很关键全基因组范围内有实验结构的蛋白是少数但序列信息是现成的两万多个蛋白都能拿到。序列编码意味着即使某个靶点从来没有被解析过结构依然可以参与筛选。这就把覆盖范围从“有结构的靶点”扩大到了“所有已知序列的靶点”。2.2 对比学习在做什么正面拉近反面推远对比学习的训练目标通俗讲就是“把已知配对的药物和靶点拉近把随机组合推远”。具体实现时从公开的蛋白-配体活性数据里抽取已知结合关系当作正样本对再从库里随机采样一批不相干的药物-靶点组合当作负样本对。每进来一个批次模型都会计算这批样本的对比损失。正样本对在向量空间里的距离要尽量小负样本对的距离要尽量大。训练到收敛后模型学到的不是一个简单的“配不配”的答案而是一个坐标系——药物和靶点在这个坐标系里的位置反映了它们之间潜在结合的倾向。负样本的选择在这个流程里比大多数人以为的更重要。随机采样负样本很容易因为绝大多数药物和绝大多数蛋白本来就不结合。但真正提升模型辨别能力的是那些“长得像但实际不结合”的难负样本。比如结构相似的激酶家族或者骨架相同的类似物。PharmaCLIP这类模型一般会在训练中专门加入难负样本挖掘逼着模型去学细节差异而不是靠粗粒度特征蒙混过关。2.3 为什么这种表示能覆盖全基因组靶点传统对接打分依赖结构信息而PharmaCLIP把靶点编码简化为“序列特征语言模型表示”。这意味着全基因组两万多个蛋白里只要序列已知就能参与计算不再被结构覆盖率卡脖子。更深一层的原因是对比学习本身就是在海量数据上学“药物-蛋白”之间的通用匹配规律。预训练阶段见过大量不同家族、不同结合模式的样本后模型学到的是跨靶点的共性规则。遇到一个序列上没见过的新靶点它依然能把“什么样的分子可能嵌进这个序列对应的口袋里”泛化出来。有偏置地说这种表示学习本质上把“药物筛选”变成了“语义匹配”而语义匹配的泛化能力是传统打分函数很难做到的。3. 百万倍速是怎么实现的在线打分换成了预计算检索3.1 传统虚拟筛选的在线枚举逻辑传统流程的慢不只是单次计算慢更关键的是它的计算模式是“在线枚举”。每来一个药物都要和当前靶点做一次实打实的构象搜索和打分换一个靶点一切从头再来。这种“边查边算”的模式在组合空间面前毫无优势。你可以把传统方法想象成一个不记路的配送员每送到一个新地址都要重新看地图、重新规划路线。哪怕同一个小区去了几百次下次去还是得从头算。而PharmaCLIP做的事情相当于先跑一遍把全城地图和所有地址的位置全部编码好之后每一次配送只需要查一下备忘录。3.2 离线编码加近似最近邻搜索流程彻底变了PharmaCLIP的另一半核心在工程流程上。它把筛选拆成了两段一段是耗时的离线编码另一段是极快的在线检索。离线阶段把所有化合物库里的分子过一次编码器得到“化合物向量库”把所有靶蛋白序列过一次蛋白编码器得到“靶点向量库”。这两个库都不需要实时计算一次性建好之后可以反复使用。在线阶段来了一个新药物或者新化合物只需要把它编码成一个向量然后在靶点向量库里做近似最近邻搜索找出距离最近的几十几百个靶点就是候选靶标。靶点库一般也就两万个向量这个规模的最近邻检索在毫秒级就能完成。就算化合物库膨胀到十亿量级离线编码的边际成本也只是一次模型推理加一次检索而不是两两枚举。这也就是“百万倍速”的来源传统流程是化合物数乘以靶点数新流程是化合物数加靶点数从乘积关系变成了求和关系。算力瓶颈被彻底绕开了。3.3 精召平衡Top-K不等于真阳性有一点必须泼冷水检索出来的最近邻靶点只是“表示层面最接近”的候选不代表真的结合。我曾经见过有团队把Top-1的结果直接当结论去写报告这是很危险的。正确姿势是把PharmaCLIP这样的模型当作第一层粗筛漏斗。它的价值在于把人要从两万个靶点里无从下手压缩到只需要重点关注前50个或前100个候选。之后对这些候选再用传统对接、分子动力学模拟或者自由能计算做第二轮确认最后才进湿实验。检索结果的分数本身只用于排序不要过度解读为结合亲和力预测值。4. 实测表现与值得警惕的边界4.1 回顾性验证和前瞻性筛选的关键差异论文里通常会展示一堆漂亮的回顾性指标在测试集上AUC高、Top-K召回率高、比传统指纹相似度基线强出一个身位。这些都是很好的信号但我要提醒一句回顾性测试的成绩可能会比真实场景好看。原因在于已知的蛋白-配体活性数据天然偏向热门靶点比如某些研究多年的激酶、受体和酶。模型在训练时见过大量这些靶点的样本测试时再拿这些靶点的掩藏样本去评估相当于做开卷考试。而真实的全基因组筛选面对的绝大多数是冷门靶点这些靶点几乎没有已知活性数据模型没见过它们的“考试题”表现自然会打折扣。所以判断这类工作能不能用不要只看回顾性指标更要看有没有做前瞻性筛选。也就是模型预测一批没有标注的靶点然后通过实验去验证。PharmaCLIP相关工作的高明之处恰恰是把前瞻性实验的命中率放在一个比较重要的位置上而不是停留在计算模拟。4.2 全基因组脱靶与药物重定位的自然产物一旦能用两万个靶点做检索很多过去做不到的事会自然冒出来。最直接的受益者是药物重定位。老药的安全性数据已经很丰富如果它在全基因组检索里意外对齐了一个以前没想过的新靶点就直接省掉了早期安全性评估环节只需要验证新靶点的效力。业内已经有类似流程在新药研发早期用于预测脱靶副作用把潜在的毒性靶点提前找出来避免到临床阶段才因为安全事件翻车。全基因组靶向的另一个价值在罕见病领域。罕见病靶点往往没有盈利空间也很难吸引大型药企投入系统筛选。但用PharmaCLIP这类流程任何实验室拿到一个序列都能在几天内获得一批有根据的候选分子传统模式下这是一个小团队几个月都不敢想的任务。技术平权的意义在这里体现得挺明显。4.3 我做实验验证时最担心的三个问题第一是假阳性率。对比学习拉近的向量只能说明“分子和靶点在语义空间上兼容”不代表热力学上真的结合。放进化合物库里一测经常会发现好几个预测阳性在酶活实验里完全没动静。所以这类流程必须搭配二次筛选直接进实验是不现实的。第二是泛抑制剂干扰。高浓度化合物容易在缓冲液里形成聚集体非特异性地抑制蛋白活性这在实验里表现为“什么都抑制”很容易被误认成阳性结果。做验证时一定要加去垢剂对照并且做剂量-反应曲线排除掉那些靠聚集体“装结合”的化合物。第三是数据泄漏问题。训练集和测试集如果按分子骨架随机切分相似的分子会同时出现在两边模型等于提前知道了答案。我自己复现过一些类似模型发现只要多做一步严格的时间切分或者骨架切分指标能掉一大截。这不代表方法不行但提醒我们读指标的时候要多问一句“它是怎么切数据的”。5. 想复现这套工作实操上的准备清单5.1 数据准备与特征构建中的坑第一道门槛永远是数据。公开的蛋白-配体活性数据分散在好几个库里需要自己清洗合并。合并的时候注意三件事结构去重、靶点标识符统一、活性值单位标准化。我见过不少同学卡在最后一步——同样一个IC50值有的数据用纳米摩尔有的用微摩尔单位没统一就直接进模型训练时模型完全学不到东西。特征构建上重点是“标准化的分子输入”。同一个分子在不同数据库里可能有不同的盐形式、电荷状态甚至质子化状态如果不做统一处理模型会觉得它们是不同分子。还需要对分子做去盐、去金属离子、中和电荷这些标准化操作这些琐碎步骤决定了编码器的输入质量。骨架切分和序列去重也要在数据准备阶段就完成不要拖到训练之后发现指标虚高再来返工。5.2 模型训练的算力与指标陷阱训练一个多视图对比学习模型单卡基本撑不起来。我的建议是先跑一个小规模的子集比如几千个分子和几百个靶点把训练脚本调通确认损失函数在下降再去扩大数据规模。这一步省下来的调试时间往往比想象中多得多跑大规模训练时再发现程序Bug成本就很高了。评估指标不要只盯AUC。在药物筛选场景里命中率比AUC更贴近实际需求AUC衡量的是整体排序质量但真正决定项目成败的往往是“前100个候选里到底有几个能通过实验”。建议同时看Top-50和Top-200召回率以及候选分子在新靶点上的富集倍数。别忘了要和最基础的基线做对比。比如直接用分子指纹算相似度或者用传统对接打分跑一遍同样的测试集。没有基线对照很难判断对比学习模型增加的复杂度到底值不值。我在实际对比中观察到对于热门靶点指纹方法的成绩并没有预想中那么差模型优势主要体现在冷门靶点和跨靶点泛化上这也验证了它的定位是“全基因组粗筛”而不是“单靶点精筛”。5.3 下游湿实验的优先级建议如果你的目的是通过这个流程找新靶点我的建议是不要一上来就做全基因组级别的筛选。先在几百个与目标疾病相关的靶点上跑通整个流程人工检查一下检索质量的排序是否合理比如已知靶点是不是排得足够靠前。当你确认排序逻辑可信后再扩展到全基因组。到了湿实验阶段强烈建议按优先级分三批处理第一批选分数最高的20个候选同时要求这些化合物有良好的类药性和溶解度第二批选新颖性最高、在已有文献里没有任何记录的靶点组合第三批再选那些分数中等但生物学机制上有故事可讲的候选。分批验证可以有效降低工作量也能帮助判断模型在不同难度候选上的真实表现。还有一个小技巧对PharmaCLIP这类对比学习模型可以把药物编码器和靶点编码器产出的向量直接做可视化比如降维投影。这样能呈现“哪些靶点家族聚在一起”“哪些药物和已知药物在向量空间里距离很近”。这些图在做项目汇报时非常有说服力比单纯报一个ROC曲线要直观得多。我自己在实际复现类似流程时最大的体会是这种全基因组检索的流程工程上的复杂度远低于传统虚拟筛选真正的门槛反而在数据清洗、评估设计和下游验证策略。模型本身只是一个放大器你给它什么样的数据和验证标准它就放大什么样的结果。把这几个环节做扎实哪怕实际上手的是一个远没有论文里那么大规模的小模型也能在实用项目里交付不错的预测质量。最后分享一个扩展方向这套“先编码、后检索”的框架并不只适用于药物和靶蛋白。它完全可以平移到其他生物信息学配对场景比如预测miRNA与靶基因的调控关系、预测CRISPR向导RNA的脱靶位点。核心逻辑是一样的——把两类对象编码到同一空间再把配对问题转化成近邻检索问题。这个思路一旦想通能玩出不少新东西。