1. 药物相似性概述:定义、应用场景与挑战

做药物研发的朋友应该都有体会:一个新药从靶点发现到上市,动辄十年,烧掉十几亿美元。这中间90%的候选分子都在临床阶段失败了。那有没有办法在早期就筛选掉那些“注定失败”的结构?

药物相似性计算,说白了就是回答一个问题:两个分子有多像? 这个“像”的程度,可以用来做很多事情——找替代化合物、预测药效、排除毒性结构,甚至是判断一个分子有没有“成药性”。我最早接触这个领域还是在五年前做虚拟筛选的时候,当时导师丢给我一句:“这个lead结构活性不好,你找个相似的改改。” 一开始觉得挺简单,向量化算个距离就行,后来才发现里面的坑深着呢。

1.1 药物相似性的定义

先下个定义。药物相似性(Molecular Similarity)测量的是两个化学结构在特征空间中的接近程度。用数学语言讲:

  • 把每个分子映射到一个特征向量(指纹、描述符或隐空间表示)
  • 在两个向量之间定义一个距离或相似度度量
  • 数值越高,说明两个分子越相似

举个最基础、最常用的例子——Tanimoto系数,也叫Jaccard系数。假设我们把分子编码成一个二值向量(bit vector),每个bit代表一个子结构是否存在。

分子A的指纹: 1 0 1 0 0 1 1 0
分子B的指纹: 1 1 1 0 0 0 1 0

Tanimoto(A,B) = AB_bits / (A_bits + B_bits - AB_bits)
               = 3 / (4 + 3 - 3)
               = 0.75

这么简单的公式,在真实的药物筛选场景中,依旧是指纹引擎的标配。你想想看,一个企业级数据库里可能有上亿个分子,如果不用这种计算量可控的系数,根本跑不动。

当然,特征工程本身也在不断演进。早期只有MACCS指纹(166个预定义结构键),后来有了ECFP(Extended-Connectivity Fingerprints)自动提取局部环境,再到今天图神经网络直接从分子图学习特征——相似性的“定义”越来越深了。

1.2 核心技术与挑战

聊几个我在项目中踩过的坑。

相似性 ≠ 活性相似性

结构相似的分子,活性可能差好几个数量级——这就是所谓“活性悬崖”(Activity Cliff)。很多初学者用Tanimoto > 0.85筛选出来的分子,拿去测活性发现完全不行。我建议你在实际项目中,一定不要把相似性度量当成预测活性的唯一标准。

指纹的选择直接影响结果。不同指纹捕捉的化学信息不同:

指纹类型编码方式维度典型应用
MACCS预定义子结构字典166 bits快速初筛
ECFP(4/6)圆形拓扑环境哈希1024–4096 bits活性相似性、聚类
FCFP功能团圆形环境同上药效团匹配
Graph IsomorphismWL子图核变长小数据集精细比较

我之前接过一个项目,用MACCS指纹做库筛选,召回率始终上不去。后来换成ECFP6,同样的Tanimoto阈值,命中率直接翻了一倍。所以这里有一个经验:ECFP系列是当前分子相似性计算的“黄金标准”。

计算效率是大规模应用的瓶颈。如果你手里有100万分子,两两计算相似度就是10^12次操作——按每秒10万次对比也要好几个月。解决方案一般是:

  • 索引+近似最近邻搜索(ANN):用LSH(局部敏感哈希)或者HNSW图索引把候选集缩小。
  • 碎片化+预计算:比如先按骨架聚类,再在族内做细粒度比较。
  • 库-库相似性矩阵的稀疏化:只保留Top-K近邻。

提示:RDKit自带的GetSimilarityMatrix在分子数超过5万时会爆内存。我一般用BulkTanimotoSimilarity分块计算,配合numpy的矩阵运算,能压到几秒内搞定。

1.3 主要应用场景

  1. 虚拟筛选中的先导化合物发现

    已知一个活性参考分子,用相似性检索从文库中挑出类似结构。这个场景在工业界的平均命中率(active rate)比随机库高出3–5倍。

  2. 毒性预测与脱靶效应评估

    如果一个候选分子跟已知毒性骨架相似,大概率需要额外关注。我个人习惯在进入ADMET实验前先做一层相似性过滤,排除掉结构警示要素(Structural Alerts)频繁出现的分子。

  3. 骨架跃迁(Scaffold Hopping)

    注意,这里要的不是“高度相似”,而是“活性相似但结构不同”。这就需要用到药效团相似性甚至图神经网络的隐空间。骨架跃迁是打破专利壁垒的常用手段,我们在项目中也常碰到。

  4. 化学库多样性分析

    构建化合物库时,要保证库内的结构多样性,避免“都是小变化”的冗余结构。这时候需要计算所有针对之间的相似性矩阵,取平均或使用最大公共子结构相似度来做多样性评估。

1.4 当前面临的主要挑战

我把我团队去年遇到的一个典型案例分享给你:我们拿到了一组ChEMBL数据,结构相似度在0.9以上的分子有一大批,但活性从nM到μM不等。这暴露了一个核心问题——结构相似性不绝对等价于功能相似性。

具体来说:

  • 活性悬崖——微小的结构修饰(如甲基位移)可能导致活性突变,传统指纹很难捕捉这种“边界效应”。
  • 三维构象差异——二维指纹完全一样,分子在蛋白口袋中的姿态却天差地别。这也是为什么说“配体相似性”要结合蛋白结构和结合模式来分析。
  • 属性过少或过多——指纹太短会丢失鉴别信息,太长则带来噪声和稀疏性问题。比如MACCS的166位已经不够用了,而ECFP的4096位又容易导致“维度灾难”。
  • 评估标准不统一——不同论文用不同的相似度阈值、不同的测试集、不同的活性检测方法,实验结果很难直接横向对比。

我曾经在做一个跨库相似性分析时,发现同样的ECFP4指纹,用Tanimoto算出来A和B相似度0.7,换成Dice系数(另一种适用于二值向量的相似度),直接变成0.82。你看,连度量方式的选择都会影响结论。所以在实际建模中,一定要明确你们团队的标准相似度度量“是什么”,然后所有人固定下来。

1.5 本章知识体系概览

为了让整体脉络更清楚,我画了一张结构图,把药物相似性计算的核心要素、面临的主要挑战以及典型的应用方向串起来。你可以把它当作本章乃至整个课程的知识骨架。

药物相似性计算:知识结构图 药物相似性 定义 & 度量 核心挑战 应用场景 指纹编码 相似度系数 图/拓扑 3D构象 活性悬崖 维度与稀疏 度量一致性 评估标准 虚拟筛选 毒性预测 骨架跃迁 多样性分析 说明: 图结构展示药物相似性计算的三个核心维度:定义与度量方式、 关键挑战以及下游应用。这些内容将贯穿后续 29 章课程。

注意事项:本章知识体系图中将“定义 & 度量”、“核心挑战”、“应用场景”列为三大支柱。进入后续章节前,建议你先理解这三种维度之间的关联逻辑——定义的细节直接决定了你会遇到什么挑战,而挑战又影响你如何落地应用。不要孤立地学指纹或算法。

嗯,这一章我们主要把“药物相似性计算”是什么、用在哪儿、难在哪梳理了一遍。从定义出发,我强调了结构相似 ≠ 活性相似,这是很多人入坑后容易忽视的基础认知。有了这个基础,接下来的指纹工程、图特征提取、大规模检索和实操代码才有了落地的意义。