1. AIDD为什么偏偏长出了开源生态先想清楚来龙去脉在药物研发圈子里待久了你会发现一个有意思的现象越是靠近算法、模型、数据处理的环节开源工具的使用率越高而越靠近湿实验、临床试验的环节商业软件和内部平台的占比就越大。这在很大程度上不是偶然AIDDAI驱动药物研发这个领域的底层逻辑本身就高度依赖开源生态。1.1 数据、模型、验证三座大山下的必然选择先说说数据。药物研发的数据长在极其分散的地方文献、专利、公共数据库、企业内部实验记录、CRO返回的报告……没有任何一个商业闭源平台能把它们全部收拢并清洗好。反过来说大部分组学数据、化合物活性数据、蛋白结构数据本身就来自学术界和公共资助项目这让数据层面的“开源”有了天然基础。比如大家每天都在用的CHEMBL、PubChem以及蛋白质结构相关的PDB数据库本质上都是开放资源。如果你的pipeline不围绕这些开放数据建设反而很难找到可靠的信息来源。再说模型。机器学习和深度学习领域的开源氛围已经是共识PyTorch、scikit-learn、DeepChem这些库在学术圈和工业界都是默认选项。药物研发的场景非常长从靶点发现、化合物筛选、ADMET预测到分子生成每一步都有特定的小模型和专用工具。封闭的软件公司很难在每个环节都做得比整个社区加起来的成果更好这就逼着所有玩家选择“搭积木”式开发——而积木的最佳来源自然是开源社区。最后说验证。药物研发的验证周期是按月和年计算的一个预测模型到底准不准往往要等到合成一批化合物、跑完一轮活性测试之后才有结论。这种长期验证的代价决定了AIDD从业者极度看重“可复现性”别人能不能用同样的数据和代码跑出同样结果。开源项目把数据和代码摆在你面前你可以自己重训、自己评测、自己改这种透明度对于建立信任是商业软件很难给的。1.2 开源不等于“科研玩具”产业界比想象中更依赖它很多人有个刻板印象开源项目是学术界的玩物真正到了制药企业大家用的都是商业套件。这个印象在四五年前可能还算成立但现在已经不太对了。我自己接触过的项目中从大型药企的AI部门到初创biotech内部流程里跑的最多的恰恰是开源工具RDKit做分子处理和描述符计算AutoDock Vina做对接筛选Chemprop或者自训练的图神经网络做ADMET预测分子生成部分则可能是Diffusion模型或者强化学习框架。商业软件当然也有但很多时候是用来做最终分子动力学模拟、结合自由能计算或者配合内部标准流程并不是整条流水线的地基。另一个被低估的点是开源生态的组件往往比商业软件更快拥抱前沿方法。一个新模型在论文里出现随之而来的开源代码通常在几个月内就会被社区整合进既有的工具链。而商业软件的更新节奏普遍慢等到新算法被固化进商业产品时开源社区可能已经迭代了好几轮。再加上AIDD本身是个交叉学科算法工程师、计算化学家、药理学背景的人要协作大家共同的“语言”不一定是软件产品而是开源代码和公开数据格式。所以这篇文章想做的事情很简单把AIDD开源生态从头到尾梳理一遍按环节介绍真正能落地的工具然后用一条完整的虚拟筛选pipeline串起来最后聊聊那些只有真正跑过才会知道的坑。如果你正准备进入这个领域或者已经在做但总感觉工具选型混乱这篇文章应该可以帮你省下不少时间。2. 生态地图从分子表示到候选分子每一环都有开源顶梁柱AIDD的开源工具数量非常庞大但真正经过大规模使用、社区活跃、文档靠谱的核心组件其实是可以归类梳理的。我会按照一条药物发现流水线的逻辑来组织先处理分子表示再计算性质和活性然后做对接与结构分析最后生成新分子和编排整个流程。2.1 基础表征层一切pipeline的第一道工序所有AI药物研发任务的第一步都是把化学结构变成机器能读的数据。标准格式有很多种其中SMILES是最常见的字符串表示比如苯环可以写成c1ccccc1InChI则是一种更规范化的哈希式表示3D结构文件则有MOL2、SDF、PDB等格式。这个环节的王者级工具当属RDKit——它支持几乎所有常见格式的读写、结构规范化和标准化、指纹计算、子结构搜索、骨架分解等等。我自己在做项目时通常会把RDKit放在所有流程的最前面专门负责“洗数据”去掉混合物和含有非有机元素的化合物统一中性状态、电荷处理移除同一个分子在不同数据源里的重复表示生成标准化SMILES作为统一的分子标识很多人忽略了这个基础步骤直接拿原始SMILES塞进模型里训练结果往往是模型学了各种噪声而不是化学本质。RDKit在标准化这一步的灵活度极高但也正因如此每个人的标准化逻辑可能都不一样。这里我建议参考MolVS一个基于RDKit的标准化工具的思路它把常见的电荷问题、官能团互变异构、盐的剔除都处理得比较规范适合作为默认清洗管线。除了RDKitOpen Babel也值得一提。它支持的格式更杂转换起来很灵活尤其当你需要处理一些罕见格式或者批量大文件的格式转换时Open Babel经常比RDKit更快。不过论描述符计算的丰富度和社区生态RDKit依然是最稳妥的选择。还有一款叫CDK的Java库主要是给Knime这类可视化工作流平台做底层支持的对Java技术栈友好但在Python生态里用得不多。2.2 性质预测与虚拟筛选把筛选标准变成可计算指标分子表示搞定之后接下来要回答一个重要问题这个化合物有没有可能成为药物这需要计算各种性质包括亲脂性logP、溶解度、渗透性、代谢稳定性等等还要做活性预测判断化合物与靶点结合的可能性。在ADMET预测这一层开源社区最近几年进步非常明显。传统方法基于描述符做QSAR比如用RDKit算出几百个描述符再喂给随机森林或者XGBoost这类方案依然有效很多内部模型就是这样训练的。但图神经网络出现之后ADMET预测的精度上限被抬高了。DeepChem就是其中的代表性框架之一它封装了多种分子神经网络架构用户只需要把分子表示为带原子和键信息的图结构就能直接训练模型。另一款值得关注的是Chemprop它是基于消息传递神经网络MPNN的实现专门针对分子属性预测做了大量优化。我的实际使用体验是Chemprop在小数据集上的表现往往优于直接在PyTorch里搭GCN因为它内置了化学上合理的原子特征和键特征组合并且支持多任务学习——一个模型同时预测几十个ADMET终点。这在药物研发里非常实用因为每个化合物一次性算出的属性越多后面的过滤效率就越高。再来看对接/虚拟筛选。AutoDock Vina可以说是目前开源分子对接工具里的默认选择。它的打分函数虽然没有商业软件那么精细但速度快、稳定适合做几百万个化合物的初筛。实际跑对接之前还需要对靶点结构做处理去水分子、加氢、补全残基、定义口袋坐标。这个环节可以用A6B工具另一个开源对接辅助工具或者PyMOL的脚本来自动化。近年来还有GNINA它引入了深度学习的打分函数预测精度比Vina有提升尤其在蛋白-配体结合模式预测上表现不错。值得补充的是深度学习打分函数包括GNINA、DeepScore等其实代表了一个趋势不再用手工设计的势能项来打分子相互作用的分而是直接让神经网络从大规模晶体结构中学习“什么叫做合理结合”。这在精度上确实有优势但缺点是数据分布外的泛化问题——遇到训练集里从没见过的蛋白质折叠类型表现可能断崖式下降。所以我的建议是很多时候不一定要二选一Vina兜底GNINA做第二轮精排效果往往比只用一个工具好。2.3 生成式分子设计与结构优化让AI参与创造前面几个环节都是在“筛”已有化合物但AIDD的另一个重头戏是“生成”新化合物。生成式分子设计的目标是在保持类药性的前提下生成与已知活性分子结构不同但活性可能更高的新分子。开源社区在分子生成方面有不少可用的框架。比较经典的做法是基于SMILES的生成模型用循环神经网络RNN训练出一个SMILES生成器再通过强化学习引导生成器输出具有预期性质的分子。这类实现的代表有REINVENT它是基于RNN的分子生成和优化框架在多个项目中验证过可以从头生成类药分子并优化到指定性质的分布。不过REINVENT较重大新手不妨先从简单的基因算法入手比如RDKit内置的进化优化器或者GitHub上很多轻量GA实现把问题模型搞清楚再上大框架。另一个更现代的路线是扩散模型。3D空间内的分子生成工具近年来出现了很多比如利用等变图神经网络在蛋白质口袋内直接生成配体。这类工具明显更贴近药物研发的实际场景你有一个蛋白口袋坐标模型直接在口袋里“长”出一个分子来。不过它们对算力的要求也更高而且训练数据依赖蛋白-配体复合物结构数据量远小于纯文本SMILES所以经常面临数据不足的问题。实际项目中更多人会把生成模型当“主意提供者”跑出一批候选分子再做对接、ADMET和人工评估而不是指望模型一次生成就能直接进合成。除了生成分子优化也要提一句。AIDD里很常见的需求是“骨架跃迁”——保留一个已知活性分子的药效团但换掉它的核心骨架以改善稳定性、溶解度等。开源社区有几个工具叫Skeletons和MedChem Transformer前者用基因算法改造骨架后者用迁移学习做分子性质导向的变换。这些工具用起来需要一点门槛但对做药物化学优化的团队来说相当顺手。2.4 工作流与自动化把散件拼成生产线工具再多如果每次都要手动把数据从一个脚本传到另一个脚本效率会非常低。真正能在团队里落地的AIDD系统一定有一个工作流编排层。开源生态里有几个选择值得考虑。纯Python生态的可以选择Snakemake它用规则rule定义每个环节的输入、输出和命令自动处理依赖关系和并发调度很适合做数据清洗、特征计算和模型训练这种多步任务流。如果你更熟悉通用型流水线Nextflow是生物信息领域的常客对容器支持更好适合重计算场景。深度学习训练这部分社区里还有MLflow和Weights Biases这类开源插件做实验跟踪方便记录每一次训练的模型参数、指标和产物。特别是在做ADMET模型迭代时如果没有系统化的实验记录你会很快迷失在几十个版本的模型里忘记哪个超参组合效果最好。总的来说这个生态的分布是底层数据标准化用RDKit中间层预测用DeepChem/Chemprop和对接工具上层生成用REINVENT/扩散模型最外层再用Snakemake/MLflow串起来。接下来的章节我会用一个实际案例把这些组件串成一条能跑通的pipeline。3. 亲手搭一条开源AIDD初筛流水线从靶点文件到候选清单工具了解得再多不动手跑一遍等于白搭。我在这里给你拆解一条我自己在项目里反复使用的初筛pipeline。它不算复杂但覆盖了从靶点准备、化合物库生成、对接筛选到ADMET过滤的完整链路。所有组件都是开源软件代码量不大重点在于理解每一步的选型逻辑和参数含义。3.1 场景设定与选型逻辑假设我们要针对某个激酶靶点做一个虚拟筛选目标是从一个几万级别的化合物库中挑出几十个候选分子交给实验组去测试。这个场景非常典型实验组不可能合成十万个分子去测活性虚拟筛选的价值就是帮他们缩小范围。选型逻辑上我做了这样的判断靶点结构已有实验解析可以用AutoDock Vina做刚性受体对接初筛化合物库用开源的ZINC标准集子集用RDKit做标准化和去重对接打分之后再用Chemprop训练或直接用已有的ADMET预训练模型做性质过滤最终合并打分用线性权重对接亲和力占大头ADMET性质做硬性过滤为什么用Vina而不是更复杂的工具因为初筛的目的是宁可漏掉一些好分子也要把实验组要跑的单子控制在合理范围内。Vina速度快对刚接触这个领域的同事来说结果也容易解释——打分越负表示越可能结合。至于精筛那是第二轮的事。3.2 步骤一靶点结构与配体预处理拿到的靶点结构文件通常是蛋白质-配体复合物的PDB格式在使用前我们必须做几件事去除水分子、金属离子和无关的共晶溶剂分子准备受体结构加氢、分配电荷、有时还要修复缺失的残基提取共晶配体坐标确定结合口袋的中心实际操作时我们可以借助开源工具Open Babel和一个小脚本来自动化处理。比如用Open Babel把PDB转为带氢的MOL2格式再配合一个口袋中心坐标参数预处理完受体文件之后就可以准备配体库了。整个预处理最容易被忽略的是口袋中心坐标的选择。你从晶体结构里拿到的共晶配体就是最可靠的参考——它在哪儿对接的口袋中心就设在哪儿。如果结构里没有共晶配体就需要靠经验判断或者用检测工具来找空腔。这一步如果出错后续所有对接结果都没有意义。3.3 步骤二化合物库生成与对接筛选化合物库准备阶段我从公开数据集里取一批类药分子然后做标准化清洗。清洗规则我可以定为剔除不含C和N的分子、踢掉含硫醇或重氮基团这种易被氧化的结构、用RDKit的FilterCatalog去Pan-Assay Interference CompoundsPAINS过滤。PAINS是个著名的“假阳性官能团”清单常见于一些容易在生化测试中产生无效信号的基团初筛阶段建议直接去掉。接下来是批量对接。Vina需要一个配置文件里面包含受体文件、配体文件、口袋中心和搜索空间大小。在几万个分子级别我们可以写一个Python脚本逐个调用Vina再把结果汇总成表格。CPU资源足够的话这一步用并行跑一个中等规模的配体库通常在几小时内能完成。不过这里有个点要提醒你Vina打分是能量值单位是kcal/mol往往在-6到-9之间。很多人直接把打分排个序就完事这其实不太够。因为Vina打分对分子大小有一定偏好分子量偏大的配体容易拿到偏负的分数但这并不代表结合更稳定。更稳的做法是配合配体效率值——打分除以重原子数——来做二次排序这个比值才是对“每原子结合贡献”的衡量。3.4 步骤三合并ADMET预测并按规则过滤对接结束后你会得到一份按亲和力排序的候选列表但这还远远不够。很多化合物可能活性预测很好但溶解性太差或者穿透性糟糕进了细胞实验可能压根不起作用。所以第三步是把ADMET预测结果合并进来。这部分我用Chemprop或RDKit描述符随机森林模型预测内容包括水溶性LogS血浆蛋白结合率Caco-2细胞渗透性定性分类hERG心脏毒性风险代谢稳定性肝微粒体清除率预测完成后我按这套规则做硬性过滤LogS大于某个阈值确保化合物在水相中有基础溶解度hERG风险归为高风险的直接剔除渗透性为中或高分子量落在300到500区间满足类药五规则中至少4条把过滤条件设成硬性规则而不是软性加权打分的原因很实际这些性质在后期实验里一旦失败补救成本极高尤其是渗透性和毒性风险。与其让它们进入候选列表之后再被实验组退回来不如从一开始就卡严。3.5 步骤四给结果留痕并可视化最后一步反而是很多新手最容易忽略的结果整理与可视化。你需要给实验组交付的不只是一串分子ID还要有清晰的证据支持每个分子的对接构象长什么样、打分多少、ADMET预测数据如何。我习惯用RDKit和Streamlit搭一个小型结果查看界面交互式展示分子结构、打分区间过滤和ADMET报表。Streamlit是开源的可视化框架用纯Python就能生成网页应用界面虽然不如前端工程师写得精致但对内部项目组沟通已经足够。没有这个界面时也可以用PyMOL导出几组对接pose图直接贴进PPT效果一样好。还需要提醒的是结构化留痕把所有中间产物——清洗后的SMILES、打分值、ADMET预测值——存成带版本的数据文件方便任何一个环节出错时回溯。这一步在项目刚开始时挺麻烦但一旦实验组反馈某个分子活性很好你需要能复现“当时为什么选它出来”记录的完备性这时就体现出价值了。4. 开源AIDD最容易被低估的三个暗坑在AIDD开源生态里泡久了我踩过的坑多到可以写本书。这一节不打算面面俱到只挑三个最致命、最容易让新人翻车的点来说说。4.1 数据集里的“幽灵样品”与活性标签噪音很多做机器学习的人拿到一个公开活性数据集第一反应就是“数据挺多的可以开始训练了”。这是一个非常危险的认知。我见过最离谱的情况是同一个分子在不同文献里被报告为“活性”和“无活性”原因是测试浓度不同、实验批次不同、甚至因为分子在仓储过程中降解。处理这类问题我的经验是总是用标准化后的规范SMILES去重不能直接用原始字符串多终点数据要保留实验条件和测定方法信息不能只保留最后的0/1标签同一个分子有多个活性记录时采用“稳健汇总”策略而不是全部保留训练集和测试集的划分要考虑骨架相似性不能简单随机洗牌否则模型只是在记忆同骨架分子泛化能力被高估骨架相似性划分这一点尤其重要。Random split在分子数据集上得到的性能指标往往虚高因为测试集里的分子和训练集里有些长得太像了模型靠记忆就能答对。用Murcko骨架做拆分保持训练集和测试集骨架不重叠这种评估结果才更接近真实的新药发现场景。4.2 模型评估指标与湿实验命中率之间的落差第二个大坑是过度相信模型指标。我在一个项目里训练过一个AUC达到0.95的分类模型结果去跑实测化合物的富集率发现Top 1%的分子里命中率跟随机筛选没有显著差别。原因是什么呢AUC是全局指标它衡量的是随机一个正样本比随机一个负样本得分更高的概率但在虚拟筛选里我们只对排序最靠前的分子感兴趣。模型可能在中间分数段区分得很好而Top分数段恰恰是噪声最大、正样本密度最低的地方。所以做筛选类任务时应该重点关注富集因子Enrichment Factor也就是Top 1%或者Top 5%里正样本的占比相对于随机筛选的提升倍数。这个指标才是虚拟筛选场景下真正有效的度量。另外模型训练时常见的“过拟合”问题在AIDD场景里表现形式更隐蔽。因为分子数据是高维的而样本量往往只有几千到几万模型很容易记住训练集的特殊结构特征而不是学习泛化规律。用外部数据集验证是唯一可靠的检验方式——把模型放到它没见过的、不同来源的活性数据上去测一遍即使这类数据不太干净也比内部测试集更能说明问题。4.3 环境复现的日常折磨与工程化溢价第三个坑不是算法问题而是纯工程问题。AIDD工具链的依赖关系太复杂了RDKit、PyTorch、Vina、Chemprop各有各的版本要求CUDA版本还不能乱换。我经历过的最惨烈一次是做好的pipeline在同事电脑上完全跑不动折腾了三天才发现是OpenMP版本冲突。这一块我的做法已经固化成标准流程所有依赖放进Docker镜像里镜像版本跟代码一起打tagconda环境文件固定每个包的具体版本号不用latest对深度学习模型记录CUDA版本、cuDNN版本、PyTorch版本最好写进README每次跑实验之前用固定的随机种子保证结果可复现不要小看这些工程化的琐碎工作。在AIDD这个AI和化学交叉的领域团队里不仅算法工程师要用代码计算化学背景的同事也要跑pipeline。如果环境搭建每次都要两三天整个团队的效率会被拖垮。Docker化之后新同事第一天就能把环境跑起来省下的时间远超维护镜像的成本。5. 最后分享一点我个人在选型上的体会说了这么多工具和坑最后聊几句掏心窝的话。我见过不少团队一开始雄心勃勃想自己从零写一套完整的AIDD系统觉得开源工具不够“定制化”。但现实是从零写RDKit级别的分子处理工具至少得一两年才能勉强稳定好用而你在这一两年里完全可以把精力投到真正有壁垒的地方——比如跟你实验室数据相关的特定模型优化、跟内部流程深度绑定的自动化逻辑。我的建议非常明确能用开源组件拼的一个都别自己写需要自己写的只有那些直接决定你项目差异化的部分。选型标准永远是“这个组件是否稳定、是否活跃、是否好复现”而不是“它是不是最前沿”。AIDD领域优秀的pipeline常常是很无聊的大量开源工具、少量定制代码、清晰的日志和数据留痕。真正让模型好用的往往是数据清洗和训练策略上的功夫而不是某些让人眼前一亮的新算法。如果你正在搭建自己的第一条pipeline不妨从这条链路开始RDKit清洗数据、Chemprop做初步活性预测、Vina做对接精筛、Streamlit做结果展示。跑通一遍之后你自然会知道哪个环节最需要优化、哪个环节最值得花时间投入。这比任何现成的商业平台都能让你更清楚地理解AIDD到底在做什么。
阅读完成 · 觉得有帮助?