1. ADMET的生物学地盘:先弄清楚毒从何而来
1.1 ADMET五个字母背后讲的是哪些事
ADMET,拆开看是五个单词的缩写:Absorption(吸收)、Distribution(分布)、Metabolism(代谢)、Excretion(排泄)、Toxicity(毒性)。很多刚开始接触这个领域的人容易把它理解成“一个关于安全性的标签”,其实远不止这么简单。这五个字母几乎刻画了一个药物分子进入人体后的完整命运:从吃下去或者注射进去之后能不能被吸收,到随血液分布到哪些组织,再经过肝脏等器官代谢转化,最后通过肾脏等途径排出体外,中间任何一步出了问题,都可能导致候选分子无法成药。
举一个直观的例子:一个化合物在体外酶活性测试里表现极好,IC50值漂亮得让人兴奋,但一测水溶性,低到微克级别,那么它在肠道里的吸收率几乎为零。即便强行做成注射剂,肝脏首过效应也可能让大部分药物在进入体循环之前就被代谢掉。更别提那些代谢过程中生成的中间产物,有时比原药本身毒性还大。所以ADMET研究不是“一个附加的安全性测试”,而是决定一个化合物能不能从“生物活性分子”升级为“药物”的关卡。
我在实际做项目的时候,经常跟新同事说一句话:靶点活性决定你能否拿到OFFER,ADMET决定你能否签下劳动合同。靶点结合是前提,但要真正进入体内发挥作用并安全走完整个旅程,ADMET每一项都得及格。这五个字母拆开是五个维度,合起来是一张安全与功效的边界网,任何一条边失守,整体就崩了。
1.2 毒性不是单一指标:从安全边界到责任边界
Toxicity这个词最容易让外行误解,觉得“有毒没毒”是个二元问题。真正做过毒理的人都知道,毒性是一个高度多维的概念:有急性毒性,比如一次大剂量灌胃后观察动物的死亡情况;有长期毒性,需要连续给药几个月甚至更久观察慢性损伤;有遗传毒性,看是否诱发基因突变;有生殖毒性,影响生育和胎儿发育;还有最让制药公司头疼的心脏毒性,主要是hERG通道抑制引发的QT间期延长,轻则心律失常,重则猝死。
同样叫毒性,机制也完全不同。有的毒性是靶点相关的,比如你想激活某个通路,但这个通路在正常组织里也承担关键功能,激活它就等于杀伤正常细胞;有的毒性是化学结构带来的,某个官能团本身就有反应活性,进入体内后与蛋白质、DNA发生非特异性反应;还有的毒性是代谢产物引起的,母体化合物本身安全,但经过CYP450酶系转化后,产生了亲电性中间体,与细胞大分子共价结合,引发氧化应激和细胞死亡。
这给做AI预测的人提了一个很大的醒:你在构建数据的时候,不能简单地把“有毒性”当成一个布尔标签去训练模型。你得问自己,我预测的是哪一类毒性,数据来源是否一致,实验终点是否统一。同一个化合物,在hERG实验里可能显示阳性,但在Ames实验里却是阴性,这不是矛盾,而是毒性的多面性。我见过不少新手直接把多个数据库的毒性标签合并成一个二分类目标,结果模型性能一塌糊涂,不是算法不行,而是标签定义本身已经熵增成噪声了。
1.3 传统方法为什么又慢又贵
既然毒性这么重要,制药行业过去是怎么评估的?传统路子基本是体外实验和动物实验。体外实验包括用Caco-2细胞单层模型测渗透性,用肝微粒体或原代肝细胞测代谢稳定性,用膜片钳技术测hERG通道电流抑制,用Ames试验测细菌回复突变。动物实验更不用说,大鼠、犬、猴一路做上去,急毒、亚急、慢性毒、生殖毒、致癌实验,每一个都需要数月的周期和大量动物消耗。
这套体系到今天仍然不可替代,因为监管审批需要真实实验数据,AI预测目前不能作为申报主体数据,只能提供辅助判断。但研发阶段的效率瓶颈实在太明显了。一个典型的例子:某公司在高通量筛选中从几十万个化合物里挑出几百个活性分子,其中只有个位数能真正进入临床前开发阶段,而掉队的绝大多数,不是因为活性不够,而是因为吸收太差、代谢太快、毒性太强。传统实验验证一个化合物的ADMET属性组合下来,成本要以万元到十万元计,时间要按月算。
如果你把所有候选化合物都送去做全套ADMET实验,预算和周期都是不可接受的。所以行业里早就有了一种需求:能不能在合成化合物之前,甚至在虚拟筛选阶段,先用计算手段把那些大概率死在ADMET关卡上的分子过滤掉,让有限的实验资源聚焦在最有希望的少数分子上。这正是AI进入ADMET预测的核心动力。AI当然不能替代实验,但它能以前置筛选的模式,把实验成本降低一个数量级,把研发决策的优先级做得更聪明。理解了这一层,你就能明白为什么过去十年里,AI+ADMET成为计算化学和药物设计领域最活跃的交叉方向之一。
2. AI凭什么能当毒性猎人
2.1 数据:AI的弹药
做AI模型的都懂一句话:数据决定上限,模型只是逼近这个上限。ADMET预测领域最幸运的一点是,经过几十年的积累,公共数据源已经相当可观。ChEMBL里有大量化合物的生物活性与药化实验数据,PubChem的BioAssay板块收录了多种毒理筛选结果,Tox21项目用高通量筛选方法对上万种化合物做了一致化的毒性测试,ToxCast则覆盖了上千条毒性通路。还有ClinTox这类专门整理临床阶段成败数据的资源。这些数据库合并起来,给毒性预测模型提供了几万到几十万的训练样本。
但这里有一个新手最容易踩的坑:公共数据源并不是为建模而设计的。它们来自不同实验室、不同实验批次、不同实验平台,同样的化合物在不同数据集里可能给出互相矛盾的标签。比如同一个结构在一个数据源里被标记为肝毒性阳性,在另一个里是阴性,原因可能是实验浓度不同、细胞系不同、判定阈值不同。如果你直接把这些数据拼在一起训练,等于把系统性误差灌进了模型,预测结果的可靠性要大打折扣。
所以,对于一个真实的ADMET建模项目来说,数据清洗和标准化从来不比模型调参省力。我会先做标准化化学结构,把同一化合物的盐形式、溶剂组合归一化;再做重复条目合并和冲突检测,设定一致的判定优先级;最后还要做样本去重和相似度控制,避免某个结构系列的化合物在训练集里过度集中而扭曲模型偏向。每一步看起来不起眼,但累积起来决定了模型在未知化合物上的泛化能力。
2.2 分子的数字表征:让化学结构变成机器能懂的向量
数据有了,接下来要解决的问题是:怎么把一个分子结构变成模型可以吃的数值向量。这是个老问题,但也是ADMET预测的支点。如今常用的分子表征方式有三类,各有各的适用场景。
第一类是基于描述符的数值特征,通过RDKit这类工具包计算分子的理化性质,比如相对分子质量、脂水分配系数logP、拓扑极性表面积TPSA、氢键供体受体数量、可旋转键数目等。这类特征的优势是解释性强,直接对应药物化学中的结构-性质关系,像Lipinski五规则用的就是这类参数。缺点是它丢失了分子的拓扑连接信息,两个结构差异巨大但性质参数相近的分子可能拿到几乎一样的特征向量。
第二类是基于分子指纹的编码方式,最常用的是Morgan指纹(也叫圆形指纹)。它把分子结构中每个原子周围的环境按半径展开,哈希成固定长度的位向量。Morgan指纹的优势在于局部环境敏感性,两个分子共享相同的子结构片段的越多,指纹的相似度就越高,这和有机化学家做构效关系时的思维方式很接近。缺点是它难以保留全局的空间排列信息,而且高维稀疏的位向量会让某些模型变得笨重。
第三类是把分子当作图结构来处理,原子是节点,化学键是边,用图神经网络或者消息传递网络直接在图上学习原子间的相互作用。图表征的优点是理论上能捕捉分子的完整拓扑结构,更接近分子在空间中的真实连接关系,也是当前深度学习做分子性质预测的主流方案。缺点是训练需要的数据量更大,可解释性更弱,且实施复杂度明显高于前两类方法。
我的个人经验是:别一上来就奔最复杂的方案。对于几千到几万条数据的中等规模毒性预测任务,用摩根指纹加梯度提升树,往往能打平甚至打过一个调参不充分的图神经网络。图神经网络的潜力要在数据量过万之后才显出来,而且需要足够的工程时间和更强的算力。一个项目刚开始的时候,先用简单可解释的特征建一个可靠基线,比盲目堆深模型务实得多。
2.3 模型家族:从随机森林到图神经网络
ADMET预测里用到的模型,大致可以分成经典机器学习和深度学习两个阵营。
经典机器学习阵营的代表是随机森林和梯度提升树。这类模型的好处是训练快、参数少、对特征缩放不敏感、还能给出特征重要性排序,方便后续解释。特别是在化合物数量不太大的场景下,树模型的稳定性非常出色。随机森林对噪声数据的韧性尤其好,而ADMET数据恰恰是出了名的噪声大,所以它在很长一段时间里都是ADMET预测的基线标配。XGBoost、LightGBM这类梯度提升工具在同类型任务上通常能比随机森林再提升一点,但需要做更多的正则化调整,否则很容易过拟合。
深度学习阵营主要分为两类结构。一类是前馈神经网络,直接吃描述符或指纹向量然后输出预测;另一类是图神经网络,以分子图为输入,经过若干层消息传递更新原子表征,最后通过汇总(如池化)得到整个分子的表征。近年来还出现了基于Transformer的分子语言模型,把SMILES字符串当作自然语言序列来学习。这类模型的优势体现在大数据量场景下,它们能从底层的原子连接方式出发自动提取更有表达力的特征,而不需要人工设计分子指纹。分子语言模型还可以借助大规模无监督预训练,从几亿个分子结构里学化学语义,再在下游毒性任务上微调,往往能带来明显提升。
实际选择模型的时候需要考虑任务的通量。如果只是给几十个候选分子做排序,任何模型都够用;但如果要做百万级别化合物的虚拟筛选,那推理速度也是必须考虑的因素,树模型和简单指纹加浅层网络的速度优势就体现出来了。我的建议是,项目早期先做基线,中期再判断是否需要上更复杂的深度模型,让数据和任务来驱动选型,而不是跟着潮流走。
2.4 评价指标:不能只拿准确率说事
很多第一次做ADMET分类模型的人,习惯性用准确率来衡量好坏。这在数据不均衡的场景下非常容易踩雷。举个例子:一个毒性数据集里10%的分子有毒,90%无毒,你只需要把所有分子都预测成无毒,准确率就有90%,但这个模型没有任何实用价值。毒性预测的痛点恰恰在于,那些比例很小的有毒分子才是你最想抓出来的对象。
所以,ADMET分类需要看得更全。AUC-ROC曲线能综合反映模型在不同阈值下的敏感性和特异性权衡,是一个相对稳健的排序能力指标。但如果正样本占比很低,AUC-ROC会显得过于乐观,这时看AUC-PR(精确率-召回率曲线下面积)更有参考价值,它更侧重于关注少数类。此外,召回率在毒性筛选中也很关键,因为漏掉一个有风险的化合物,在药物研发里意味着未来可能付出巨大的实验成本甚至临床风险;但精确率也不能太低,否则预测了一堆阳性,实验验证全飞,研发人员就不再信任这个模型了。
评估时还有一个经常被忽视的问题:数据切分方式。随机切分容易在训练集和测试集里出现结构相近的分子,这时候模型表现好,很大程度是“抄了近亲答案”。但在真实研发场景里,你预测的都是全新结构的化合物,与训练集的分子相似度往往更低。更贴近实际的做法是用骨架切分(scaffold split)或者按时间切分,分别将分子骨架或时间较早的化合物作为训练集,测试集用与训练集结构差异更大的分子。这样评估出来的性能才更能反映模型在真实场景中的泛化能力。我自己的习惯是同时跑三种切分方式对比结果,如果随机切分性能远高于骨架切分,那我就要警惕模型是不是过度依赖了某些结构片段。
3. 从零搭建一个ADMET毒性预测模型
3.1 明确任务边界
动手写代码之前,先把问题定义清楚。毒性预测任务有多种形态:二分类(有毒/无毒)、多分类(无毒性/低毒性/高毒性)、回归(预测IC50或剂量阈值)。不同任务的目标变量不同,建模方式和评价指标也不同。做二分类时,你需要确定毒性阈值怎么定;做回归时,你面对的是实验数据里的连续值,但不同实验室的数据波动会对训练产生很大影响。
第二个决策点是单任务还是多任务。一个分子同时有hERG毒性、肝毒性、致癌性等多个标签时,你可以选择对每个毒性终点分别建模型,也可以用一个多任务模型共享分子表征来同时预测多个终点。多任务模型的好处是能通过共享信息提升数据量稀缺终点的预测效果,前提是这些任务之间存在一定相关性。hERG抑制和整体毒性可能有一定关联,但致癌性和急性毒性机制差异较大,强行共享底层表征可能不一定有帮助。
还有一个容易忽略的点:预测的应用边界。如果模型的定位是早期虚拟筛选,那任务是高召回率的排序;如果定位是候选化合物优化中的风险评估,那需要提供连续的概率值而不是简单的类别判定。想清楚模型输出给谁用、怎么用,再回头定模型目标,能省去很多返工的工夫。
3.2 数据处理与样本切分
任务定义清楚后,第一步就是数据准备。以hERG毒性预测为例,一个典型的流程是:从ChEMBL或Tox21里挑出包含hERG活性数据的化合物,标准化盐形式、去重、统一活性判定标准,构成一个有明确阳性/阴性标签的数据集。这里有个常见的坑是,不同来源的活性测定条件不同,有的用IC50小于10微摩尔作为阳性,有的用30微摩尔,阈值不一致带来的标签噪声会让模型性能看起来很差。建议同一来源数据优先保留,跨来源合并时要做标签一致性映射。
样本切分是建模质量的生死线。随机切分得到的结果只能用来做开发调试阶段的参考,最终评估一定要用骨架切分或时间切分。骨架切分可以用RDKit里的Murcko骨架提取来实现,按骨架而不是按分子进行分组切分,确保同一个骨架的化合物不会同时出现在训练集和测试集里。时间切分适合有明确登记时间的数据,用较早的化合物做训练,较新的做测试,模拟时间未来方向上的预测能力。我建议在项目早期就把三种切分结果都跑出来,如果骨架切分性能显著差于随机切分,说明模型泛化能力不足,需要调整特征或者增加数据的结构多样性。
这个环节还有一个容易被忽略的操作:对分子进行标准化和归一化。同一种化合物可能以酸、碱、盐、溶剂合物等多种形式存在,建模前要将其统一到母体分子结构,避免重复计数和标签冲突。RDKit提供的归一化函数能把常见的盐基团剥掉,只保留核心骨架,这一步虽然琐碎但直接影响数据质量。
3.3 分子特征工程:从描述符到图表示
特征工程是建模型的实干环节。我习惯用RDKit来生成分子指纹和描述符。Morgan指纹最常用的参数是radius=2和nBits=2048,这个配置在大多数药物性质预测任务里都表现良好。半径设得越大,指纹包含的环境范围越广,但特征维度和稀疏性也会上升;位数太少容易碰撞冲突,太多又增加存储和训练开销。如果你是第一次做,先从2048维、半径2试起,再用交叉验证对比半径1和3的表现,通常能找到一个稳妥的配置。
描述符方面,我常看的一批特征包括logP、分子量、TPSA、氢键供体受体个数、可旋转键个数、芳香环数量、电荷分布等。这类具有物理化学含义的特征有助于提升模型的解释性。但需要提醒的是,描述符和指纹一起拼接时要注意特征分布范围,树模型基本不用做标准化,但神经网络通常需要归一化处理。另外,特征之间如果高度相关会放大共线性问题,建议在正式建模前用相关性矩阵做个初步筛查。
如果你的数据量足够,想上分子图模型,那就不需要手工设计特征,模型的输入直接是原子类型、键类型、原子电荷等原始信息组成的图结构。图神经网络会自动学习重要子结构,这对毒性预测尤其有吸引力,因为很多毒性机制恰恰与特定官能团和子结构相关。你可以用PyTorch Geometric或DGL等库来构建图数据管道,把SMILES转化为分子图。注意处理孤对电子和芳环的Kekul化,这一细节经常导致同一结构的图表示不一致,进而影响模型训练。
3.4 模型训练与调参实战
这部分给一个可以直接上手的流程。我用的是中等规模毒性数据集,假设已经完成特征化和数据切分。基线模型用逻辑回归和随机森林,然后是LightGBM,最后再试一个搭建简单的图卷积网络。
对于随机森林和LightGBM,scikit-learn和LightGBM库里都有成熟接口。需要重点调整的参数包括:树的数量、最大深度、最小叶子样本数和特征采样比例。调参不值得用太多时间,如果数据质量没问题,默认参数加适度网格搜索就能到七八分的水平。更关键的是处理类别不平衡,可以使用class_weight参数把少数类权重调高,或者用SMOTE等过采样方法。我个人的倾向是,先试类别权重方案,因为它不产生合成样本,不会引入额外噪声。
代码示例,用随机森林做一个基础模型:
from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import roc_auc_score, average_precision_score model = RandomForestClassifier( n_estimators=500, max_depth=20, min_samples_leaf=3, class_weight='balanced', random_state=42, n_jobs=-1 ) model.fit(X_train, y_train) y_prob = model.predict_proba(X_test)[:, 1] print('AUC-ROC :', roc_auc_score(y_test, y_prob)) print('AUC-PR :', average_precision_score(y_test, y_prob))如果你想训练一个图神经网络做预测,用PyTorch Geometric实现一个基本的图卷积模型:
import torch import torch.nn.functional as F from torch_geometric.nn import GCNConv, global_mean_pool class GCNPredictor(torch.nn.Module): def __init__(self, in_dim, hidden_dim, out_dim): super().__init__() self.conv1 = GCNConv(in_dim, hidden_dim) self.conv2 = GCNConv(hidden_dim, hidden_dim) self.out = torch.nn.Linear(hidden_dim, out_dim) def forward(self, data): x, edge_index, batch = data.x, data.edge_index, data.batch x = F.relu(self.conv1(x, edge_index)) x = F.relu(self.conv2(x, edge_index)) x = global_mean_pool(x, batch) return self.out(x)训练这类模型时,首先要注意的是过拟合。树模型可以通过限制深度和叶节点数来缓解,图模型则要增加Dropout层或边丢弃(edge dropout)。其次是学习率的设置,Adam优化器配合1e-3的初始学习率比较稳妥,在训练后期可以对学习率做衰减。图模型对数据量很敏感,如果你的训练集只有几千个样本,一个从零训练的GCN往往不如随机森林稳定。这时候可以考虑用一个在大型分子库上预训练过的模型做迁移学习,或者多任务联合训练,让共享的表征从多个毒性相关任务中学到更泛化的化学生物学语义。
模型选择和调参没有万能公式,但有一个原则值得反复强调:做一次改动就跑一次清晰的评估,记录下训练精度、验证精度和测试精度,判断是欠拟合还是过拟合。如果你的训练精度远高于测试精度,说明模型容量偏大或正则化不足;如果两者都低,则需要增大模型规模或者说特征表达能力不够。
3.5 模型解释与适用域评估
模型训完,不等于可以交付使用。ADMET预测最大的现实问题就是可信度。研发人员不会因为模型说“这个分子安全”就把它送进动物房,他们需要理解模型给出的判断依据是什么。这个时候可解释性工具就变得非常有用。SHAP值可以给出每个特征对预测结果的贡献方向,比如某个分子被预测为hERG阳性,SHAP分析可能显示是因为它的logP偏高、结构中含有疏水性芳香环片段,这些线索可以直接给药物化学家提供优化方向。如果前面用的是树模型,直接用SHAP或特征重要性即可;如果是深度模型,可以用梯度类可解释工具或者注意力权重辅助分析。
适用域评估同样是必须做的事情。适用域指的是模型能够可靠预测的化学空间范围。分子描述符或者指纹分布偏离训练集太远的新化合物,模型的预测往往不可靠。一种常用做法是计算样本到训练集相似度的距离,比如用欧氏距离或Tanimoto相似度设定一个阈值,当新化合物的最相似训练样本相似度低于某个标准时,就明确标注“超出适用域,预测结果仅供参考”。有条件的团队可以在模型对外输出时直接附带这个置信度标记,便于下游决策。
没有置信度标记的毒性预测,就像一个没有测量范围和误差说明的仪表,读数再精确也没有实际意义。我在实战中要求模型输出三样东西:预测类别、概率分数、适用域标记。研发人员看到的不再是孤立的“有毒/无毒”,而是一份可以综合判断的信息,他们才能真正把模型结果纳入决策流程。
4. 实操中的坑与排查:我踩过的那些雷
4.1 数据泄漏:最隐蔽的性能杀手
数据泄漏是ADMET建模里最容易犯、也最伤结果的问题。之前提到的骨架切分是一种规避方式,但具体场景里泄漏的形式更加隐晦。比如同一化合物的不同盐型出现在训练集和测试集,虽然SMILES字符串不同,但去除盐基团后是同一个分子。又比如手性异构体,模型可能通过分子式之外几乎没有差异的特征,无意中记忆了结构特征。还有一种情况是含有相同核心骨架的化合物,只是侧链差异很小,如果训练集和测试集里都出现了同一系列的类似物,那模型的测试性能可能虚高。
排查方法很简单粗暴:计算训练集和测试集分子两两之间的Tanimoto相似度,把相似度高于0.6甚至0.8的测试样本依次列出来检查。如果发现同类结构扎堆分布在测试集里,那说明切分方式可能有问题。一个更干净的策略是把分子按照Murcko骨架聚类后再切分,保证同一骨架的分子全部落在同一边。这一招会让模型性能“难看”不少,但换回来的是对真实应用场景更诚实的性能估计。
4.2 数据不平衡与标签噪声
毒性数据天然存在正负样本比例失调,尤其在hERG抑制这类高特异性终点上,阳性比例往往只有百分之十几。直接训练默认会把所有样本预测为阴性。除了调整类别权重,还有一个更有效的技巧:分桶处理。把化合物按活性区间分成强阳性、弱阳性、弱阴性、强阴性四档,用回归或有序分类的方式来建模,这样模型学习的不是粗暴的类别边界,而是更平滑的结构-活性关系。
标签噪声是更棘手的问题。ADMET实验的复现性远不如普通生化活性实验,同样的实验在另一个实验室做可能得到相反的结果。一个实用的去噪策略是用模型集成做自举清洗:先用全量数据训练模型,把训练集中模型高置信度判定为错误标签的样本标记出来,人工复查或者从训练集中剔除。这个方法我在做肝毒性模型时用过,去除大约8%的噪声样本后,测试集AUC提升了五个百分点。它本质上是用模型自身的共识来筛选数据中的不一致项,操作起来简单但效果相当显著。
4.3 活性悬崖和过拟合
活性悬崖是药物化学里永恒的话题:两个结构几乎相同的分子,一个活性很强,一个完全没有活性。这类样本会让任何监督学习模型很痛苦,因为特征是连续的,而标签是不连续的。如果训练集正好有大量这样的悬崖结构,模型就会强行记住特定结构细节而牺牲泛化能力,表现为随机切分表现极好但骨架切分性能骤降。
面对活性悬崖,一个可行策略是给模型提供更丰富的立体化学信息,比如加入三维构象相关的特征,让模型有机会捕捉到二维指纹无法区分的空间因素。另一个策略是用多个模型做集成并观察分歧度,如果成员模型对某个样本的预测分歧极大,那这个样本大概率处在活性悬崖或者训练数据稀疏区域,框架上可以将其标记为低置信度对象。我在实际使用中还会把集成分歧度发给药物化学家,因为路线的经验常常能告诉我这个分子是不是存在特殊电子效应或构象偏好。
4.4 训练分布漂移:历史数据模型的先天局限
就算模型训练时很成功,部署后不等于一劳永逸。研发项目的主攻方向会变,新的化学系列会不断出现,如果新的化合物族在结构上与训练集的数据存在明显分布偏移,模型的性能就会悄悄下降。有个很典型的例子:团队从一开始专注脂肪族侧链系列,后来转向了含硼酸的系列,整个训练集里几乎没有硼原子的样本,此时模型对硼酸类化合物的毒性预测基本就是瞎猜。
应对这个问题的办法是建立监控机制。每次部署模型前,计算新一批化合物与训练集的最近邻相似度分布,当相似度中位数低于历史阈值时,主动提醒使用方“这批化合物的预测置信度有限”。同时定期用新获取的实验数据增量训练模型,让模型不断适应新增的化学空间。我把这种方式叫“预测-实验-再训练”的闭环,它比任何一次性的建模方案都更能应对实际项目中化学空间不断变化的问题。
4.5 常见问题速查表
| 问题现象 | 可能原因 | 排查与解决办法 |
|---|---|---|
| 测试集AUC高但新化合物预测不准 | 数据泄漏或随机切分策略过于乐观 | 改用骨架切分重新评估,交叉检查相似度分布 |
| 阳性样本几乎全被预测为阴性 | 类别不平衡未被处理 | 使用类别权重、过采样或在回归框架中建模 |
| 训练精度极高而验证精度低 | 过拟合 | 增强正则化、减少模型复杂度、增加数据量 |
| 同一种分子在数据集中重复出现 | 盐型或多个来源合并 | 标准化结构、去盐、合并重复记录并统一冲突标签 |
| 预测概率普遍在0.5附近,区分度低 | 特征表达不足或标签噪声大 | 尝试更强的分子表征或做标签噪声清洗 |
| 模型在不同批次的预测结果波动大 | 训练数据量不够或模型不稳定 | 使用集成模型,或对随机种子做多次训练取平均 |
4.6 模型的可解释性与伦理边界
深度学习模型给出的结果如果完全无法解释,在药物研发决策中很难被真正信任。这方面我的实际感受是,药物化学家对SHAP这类工具的兴趣远高于模型性能指标本身。他们最常问的一个问题是,“这个分子被预测为有毒,主要是因为哪个片段做贡献?”如果你能回答出“中间的芳香杂环是主要贡献区域,可能与代谢活化相关”,他们就会把这个预测当作一个可操作的线索,而不是一个黑盒答案。
另外必须强调的是AI模型的边界。ADMET预测目前不能替代GBP申报或其他法规安全实验,它的价值在于研发阶段的优先级排序和风险预警。使用者一定要清楚这个模型给的是概率和假设,而不是安全与否的最终结论。把AI预测当作参考信息而不是裁决者,这是使用ADMET预测模型最核心的伦理边界。
5. 在药物研发链路中的实际部署与影响
5.1 虚拟筛选前置去毒:让成本花在更聪明的地方
AI+ADMET最直接的价值体现在高通量虚拟筛选环节。比如一个项目有100万个可购买化合物,基于靶点药效团的分子对接和药效团筛选可能先过滤掉80%,剩下的大约20万个分子。这时候如果需要实验验证,20万个化合物的采购和测试费用绝对是天文数字。如果在实验之前,先用ADMET模型对这批20万个分子做一次安全风险评估,把预测为明显高风险(比如hERG强抑制、高肝毒性概率)的分子去掉30%到40%,剩下用于实验的资金就可以集中投向安全性预测更好的分子,项目整体推进速度会明显加快。
实际操作中,这种前置筛选不是简单地把预测值大于某个阈值的化合物一棒子打死。我通常会做分层决策:高安全风险组直接丢弃;中等风险组保留但标记关注项;低风险组优先推荐合成和实验测试。这样既能控制实验通量,又不会因为模型预测的小误差而漏掉潜在的好分子。这种“软过滤”的模式让实验和计算互相补位,比任何刚性规则都更符合研发逻辑。
5.2 先导化合物优化:从单点评估到全局地图
进入先导化合物优化阶段,AI的介入方式更多是引导性。药物化学团队手里有一个母核骨架,他们开始围绕骨架做结构修饰,比如改变苯环上的取代基、把酯键换成酰胺键、调整侧链长度和极性。每个新设计的分子都开车跑一遍ADMET模型,把预计的hERG风险、代谢稳定性、渗透性数据标在化学空间的地图上。这样一来,化学家就能直观看到哪些区域是安全的,哪些方向走几步就会碰到毒性悬崖,从而把合成工作集中在安全区域。对合成化学家来说,这种属性地图比单一活性数据有用得多,因为它直接把下一步该做什么化学变成了一个可视化的决策问题。
我自己参与过的一个模拟项目中,团队围绕一个母核设计了几百个衍生物,AI模型先对所有结构进行毒性排序,把设计空间分成高风险、中风险、低风险三个区域,然后优先合成低风险区域的分子。事后回看,有相当大比例的合成资源都花在低风险子空间里,而高活性与低风险同时具备的分子数量也比上一轮提高了约三成。单独看模型对单个分子的预测误差没有缩小多少,但整体决策效率的提升是明显的。
5.3 与药代动力学和代谢组学联动
单独建毒性模型只是第一步,更高价值的应用是把ADMET预测与药代动力学数据联动起来,建立“吸收-分布-代谢-排泄-毒性”的全链路风险评估。比如一个化合物被预测为肝毒性阳性,光知道这个结论还不够,如果同时结合它的代谢稳定性数据和CYP抑制活性,就可以判断毒性可能来自原药本身还是代谢中间产物。那个信息对药物化学家的帮助就大得多,比如发现毒性主要来自代谢产物时,团队可以尝试封闭代谢位点或者更换代谢路径,而不是直接放弃整个系列。
这种联动的实现需要把多个模型串成一条管线:先用吸收和渗透模型给出生物利用度预估,再用代谢稳定性模型估算半衰期和清除路径,接着用代谢产物预测模型生成可能的代谢物结构,最后把原药和代谢物一起投入毒性预测模型。链路看起来复杂,但在代码层面就是若干个函数调用的组合,数据层面的关键是确保每个子模型的输入格式统一。我在实施过程中体会到,这种管线带来的价值不是任何一个单点模型能做到的,从单点预测量进化到全链路风险评估,对研发决策的参考意义完全不同。
5.4 数据盲区与未来方向
当前的AI+ADMET还远非万能。很多毒性涉及复杂的体内过程:免疫介导的毒性难以用体外训练数据建模;肝毒性里包含胆汁淤积、磷脂沉积、线粒体损伤等不同类型,它们需要不同的实验终点来表征,而公共数据里这些细分标签极其稀缺。还有动物种属差异的问题,大鼠毒性数据训练出的模型未必能预测人的风险,种属间代谢酶表达差异巨大。这些难题不是简单堆更多数据就能解决的,需要更系统的实验设计和数据标准化。
未来几个方向值得关注。一是多模态融合,把分子结构数据、体外实验图像数据、基因表达谱数据结合起来,让模型理解毒性的生物学机制而不只是化学结构特征。二是物理信息约束的模型,把机理性的药代动力学和毒代动力学方程嵌入神经网络,让模型输出更符合生理学规律。三是生成式AI正在改变药物设计的整个范式,它不再满足于预测一个分子有没有毒性,而是在设计阶段就把低毒性作为约束条件,直接生成满足活性与安全性条件的候选结构。这个方向的成熟度还有限,但它代表了一个更终极的愿景:让毒性预测不只是一个体检报告,而是一个从一开始就能参与分子设计的约束引擎。
最后再分享一点个人的实际感受
做了一段时间AI+ADMET的项目,我最大的体会是,这个领域对工程能力的要求远比很多人想象得高。数据清洗、标准化、切分策略、可解释性工程,每一项都不起眼,但每一项都在决定模型能不能从论文demo变成研发团队愿意用的工具。我个人强烈建议任何一个新人入门时,先拿一个公开的毒性数据集把完整流程跑通一遍:从数据清洗开始,做基线模型,再做骨架切分评估,最后用SHAP工具分析特征重要性。整个过程不需要很深的数学基础,但对建立对ADMET建模的系统直觉帮助极大。
另外,研发团队在部署模型时,切忌把预测结果直接当成最终结论。AI毒性预测的本质是给“风险优先级”排序,而不是给安全性背书。使用方如果理解这一点,就会把模型放在合适的位置上,它就能真正发挥提效作用。我自己在每一个模型交付时都会再三强调:这个输出是参考,需要实验确认。如果有人对这个边界不够清楚,我会宁可高调警示也不含糊其词。
如果你打算在自己的项目里引入AI+ADMET,先选择标准化程度高、数据相对干净、毒性机制相对明确的终点来做,比如hERG抑制和Ames致突变,这类任务容易做扎实且结果可信度高。把第一个模型做成可用、可解释、可复现,比追求“端到端自动毒性预测”那种大而不实的方案有价值得多。等团队对这套工作流有了信心,再往肝毒性、发育毒性这类更复杂的终点扩展,推进会顺畅很多。