榴莲忘返AIDD
通过学习分子对之间的性质差异,这种新方法巧妙地绕过了药物研发中普遍存在的"删失数据"陷阱,显著提升了 ADMET 预测的准确性。
- 核心创新是引入双线性转导(bilinear transduction)进行类比推理,模型不再直接预测绝对值,而是预测分子对之间的性质差异。
- 在处理高度删失的数据集时,该方法效果惊人,R² 值相比基线模型提升高达 100-200%,解决了传统模型预测值扎堆在阈值附近的难题。
药物发现牛马谁没被 ADMET 数据折磨过?
实验数据里充斥着大量的">10 µM"或"<50 nM"。这种数据叫"删失数据"(censored data),它就像一把坏掉的尺子,只能告诉你一个东西比某个刻度长或短,但具体多长多短,一概不知。
传统的机器学习模型碰到这种数据基本就傻眼了。它们努力学习,最后得出的结论往往就是把所有预测值都堆在那个阈值附近。这有什么用?
我们想知道的是一个化合物的真实属性,而不是它"大概率会触及检测上限"。
这篇来自 MIT 和 Genentech 的论文,给出了一个解决方案。作者们没有试图去"修复"这些残缺的数据,而是换了个思路:**既然直接预测绝对值这么难,那我们能不能预测"相对值"**?
他们给模型一对分子:一个是我们属性已知的"锚点分子"(anchor),另一个是我们要预测的"查询分子"(query)。然后,模型要学习的不是查询分子的绝对属性值,而是它和锚点分子之间的属性差异。这就像化学家们天天在脑子里做的事情——"把这个甲基换成氯,溶解度会变好还是变坏?变多少?"这就是所谓的类比推理(analogical reasoning),现在被塞进了 Chemprop 这个常用的图神经网络里。
这个方法的核心就是双线性转导(bilinear transduction)。它专门学习分子结构上的微小变化(比如少个基团、多个基团、或者换个基团)和 ADMET 性质变化之间的对应关系。
双线性转导到底是什么?
别被这个名字吓到,我试着讲一下我的理解:
忘掉"预测",拥抱"比较"
假设你手上有一个巨大的 Excel 表格,每一行是一种候选药物分子,有好几列数据:分子结构(就当是一串叫 SMILES 的文本吧)、溶解度、代谢稳定性(ADMET 属性),等等。
现在,问题来了。你的实验数据乱七八糟。在"溶解度"那一列,很多值都不是具体的数字,而是写着">1000"。这是什么意思?意思是这个化合物的溶解度太差了,差到超出了我们仪器的检测上限。我们只知道它大于 1000,但具体是 1001 还是 1,000,000,天知道。这种数据,我们称之为"删失数据"(censored data)。
如果你用传统的机器学习模型(比如随机森林或者一个简单的神经网络)去处理这个表格,会发生什么?
你告诉模型:y = model.predict(X),其中 X 是分子结构,y 是溶解度。
当模型看到一堆 y 都是">1000"时,它就懵了。它学不到任何有用的东西,为了让误差最小,它会学到一个最"安全"的策略:对于所有看起来不怎么溶的分子,我干脆就预测它们是 1001 吧。结果就是,模型的预测值全都扎堆挤在那个 1000 的阈值附近。这对我们做药研发基本等于废话,毫无指导意义。
像化学家一样思考
现在,我们不再问那个蠢问题:"这个新分子的溶解度是多少?"
我们换一个真正的化学家每天在脑子里问无数遍的问题:
"这是我们很熟悉的分子 A,我们知道它的溶解度是 50。现在,我设计了一个新的分子 B,它只是在 A 的基础上改动了一个小小的基团。你告诉我,分子 B 的溶解度相对于 A,是变好了还是变差了?大概变化了多少?"
看到了吗?我们把一个绝对预测问题,变成了一个相对比较问题。
这就是"双线性转导"思想的核心。它不直接预测一个值,它预测一个差值(delta)。
回到 Excel 表格:
-
挑选"锚点"(Anchor):我们不再把所有数据一股脑喂给模型。我们先从数据集中挑出一些我们对其属性值非常确定的分子。比如,我们挑一个溶解度确定是 50 的分子 A,把它作为"锚点"。
-
创建分子对:然后,我们把数据库里所有其他的"查询分子"(Query)B、C、D... 挨个跟锚点 A 配对,形成 (A, B), (A, C), (A, D) 这样的分子对。
-
训练模型预测"差值":现在,模型的任务变了。它不再是 model.predict(B),而是 model.predict_difference(A, B)。模型要学习的,是分子 B 和分子 A 在结构上的差异,如何导致了它们在性质上的差异。
比如,模型看到 B 比 A 多了一个油乎乎的甲基,它可能就会从大量数据中学习到,这种变化通常会让溶解度降低 20 个单位。于是,model.predict_difference(A, B) 的输出就是 -20。
-
计算最终结果:我们想知道 B 的溶解度,对吧?太简单了: solubility_B = solubility_A + predicted_difference solubility_B = 50 + (-20) = 30
瞧,我们就得到了一个非常具体的、有意义的预测值,而不是那个模糊的">1000"。
最后把这些碎片拼起来,这就是"双线性转导"
现在我们可以给这个方法起名字了。
-
"Bi-linear"(双线性):"Bi"就是"双",因为它同时看两个分子(锚点和查询)。它学习的是这两个输入之间的关系。你可以粗略地理解为,它在学习一个转换规则,这个规则描述了"结构差异"和"属性差异"之间的映射关系。
-
"Transduction"(转导):这个词在这里有点学术化,但你可以理解为一种"推理"方式。标准的机器学习是"归纳"(Induction),从已知数据学习一个通用模型,然后应用到任何未知数据上。而"转导"更像是"具体问题具体分析",它利用了查询数据本身的信息(即它和锚点的关系)来进行预测,而不是完全依赖一个通用的、预先训练好的模型。
为什么这个方法这么好用?
因为它巧妙地绕开了"删失数据"这个大坑。就算分子 B 的真实溶解度是 2000(也就是">1000"),我们没法直接学习。但是,只要我们的锚点分子 A 的性质是确定的(比如 50),那么它们之间的差值(1950)就是一个巨大而清晰的、可学习的信号!模型不需要知道那个"1000"的阈值在哪里,它只需要学会"从 A 到 B 的结构变化,会引起性质的巨大下降"这个化学规则就行了。
所以:
双线性转导,本质上就是让机器学习模型别再像个傻瓜一样死记硬背每个分子的绝对属性,而是让它像个经验丰富的化学家一样,通过比较分子之间的结构差异,来推理它们性质上的相对变化。
结果怎么样?
在那些删失比例高达 75% 的数据集上(这在现实世界里太常见了),新方法的 R² 值(决定系数,越接近 1 越好)比基线模型提升了 100% 到 200%。看论文里的图就一目了然:老模型的预测值像一群苍蝇一样糊在删失数据那堵墙上,而新模型的预测值则分布得非常均匀,看起来更接近真实情况。
这套方法用的是集成学习。训练时选 20 个不同的锚点分子,每个都训练成一个独立的预测模型,最后把它们的预测结果平均一下。有意思的是,研究者发现用 8 到 10 个锚点分子效果就基本饱和了,再多也只是让结果更稳定一些,并不能大幅提升准度。这在计算成本和性能之间找到了一个不错的平衡点。
更妙的是,预测效果的好坏,和锚点分子与查询分子的结构有多像(用 Tanimoto 系数衡量)关系不大。这意味着模型学到的不是表面的化学结构相似性,而是在表示空间里学到了一种更深层次的"化学变化"逻辑。这才是真正的 AI for Science。
当然,天下没有免费的午餐。这种方法的计算成本更高,毕竟你要为每个锚点分子单独训练模型。在数据量很小的情况下,优势可能也不明显。
但这瑕不掩瑜。这项工作真正解决了我们日常工作中的一个痛点。它没有要求我们去做更多、更贵的实验来填补数据空白,而是用一种更聪明的方式,把那些我们以为是"垃圾"的删失数据重新利用了起来,从里面榨出了宝贵的信息。在药物发现的早期阶段,能做出更靠谱的决策,这价值可就太大了。
📜Title: Integrating Bilinear Transduction with Message Passing Neural Networks for Improved ADMET Property Prediction 📜Paper: https://doi.org/10.26434/chemrxiv-2025-dm67f