4.2 分子指纹:把结构压成比特串


文档摘要

4.2 分子指纹:把结构压成比特串 本节摘要:分子指纹是把结构压成定长比特串的编码,让"两个分子像不像"退化为两次比特串的比较。本节讲两条技术路线——键式指纹(MACCS)与圆环指纹(摩根/ECFP),拆解摩根指纹的逐层哈希与折叠碰撞机制,并用"追查一个比特位"的调试案例把指纹从黑箱变成玻璃箱。 上一节的描述符语义清晰却不擅长比较:要问"布洛芬和谁长得像",上百列描述符算不出令化学家信服的答案。指纹就是为此而生:2.2 节预告的"廉价粗筛",燃料全在这里炼成。第5章的相似性、聚类、多样性,全部站在指纹肩上。 指纹不是哈希猛冲,是两代设计哲学 键式指纹先于指纹时代的大部分技术:预先定义一组结构问题("含酯基吗?""有仲胺吗?"),每个问题对应一个比特位,逐位作答。

4.2 分子指纹:把结构压成比特串

本节摘要:分子指纹是把结构压成定长比特串的编码,让"两个分子像不像"退化为两次比特串的比较。本节讲两条技术路线——键式指纹(MACCS)与圆环指纹(摩根/ECFP),拆解摩根指纹的逐层哈希与折叠碰撞机制,并用"追查一个比特位"的调试案例把指纹从黑箱变成玻璃箱。

上一节的描述符语义清晰却不擅长比较:要问"布洛芬和谁长得像",上百列描述符算不出令化学家信服的答案。指纹就是为此而生:2.2 节预告的"廉价粗筛",燃料全在这里炼成。第5章的相似性、聚类、多样性,全部站在指纹肩上。

指纹不是哈希猛冲,是两代设计哲学

键式指纹先于指纹时代的大部分技术:预先定义一组结构问题("含酯基吗?""有仲胺吗?"),每个问题对应一个比特位,逐位作答。MACCS 键指纹是代表,一百六十六个预定义键,小而快,位与化学语义一一对应——所以它至今活跃在告警与初筛场景。局限也来自设计:问题集固定,表达力封顶,两个键式指纹相同的分子可能结构差别很大。

圆环指纹换了一条哲学:不预设问题,而是把每个原子周围逐层扩大的环境逐一哈希。摩根指纹(文献里常叫 ECFP,半径参数不同版本名号不同)从每个原子的初始不变量(元素、价态、电荷)出发,每一轮把自己的哈希与邻居的哈希聚合,得到"以此原子为中心、半径 r 以内的环境"的哈希值;这些哈希值经过取模折叠落进定长比特串。半径一常见于考虑直接邻居,半径二连邻居的邻居也入账——参数控制的是指纹的"视力范围"。

图 4-2:摩根指纹的逐层哈希与折叠

图 4-2:摩根指纹的逐层哈希与折叠

折叠是理解指纹的关键一步:环境哈希对总位数取模决定落位,位数少于环境数时不同环境会撞进同一格——碰撞。碰撞让指纹有损,但相似比较的要义恰在统计意义而非精确还原,少量碰撞不伤大局;实战中两千位与四千位是常用折中。

案例:追查一个比特位上站着谁

背景。指纹最大的槽位是黑箱感:模型说"第一千三百七十二位很重要",没人知道那一位是什么。但这其实查得到——摩根指纹是确定性算法,每个置位都能追溯到产生它的原子环境。可解释性排查、指纹碰撞检查,都靠这一手。

操作。思路:先用整体指纹拿到非零位;再对每个原子单独生成"以它为中心"的指纹,看哪些原子把目标位点亮:

from rdkit import Chem from rdkit.Chem import AllChem mol = Chem.MolFromSmiles("O=C(O)c1ccccc1OC(=O)C") # 阿司匹林 fp = AllChem.GetMorganFingerprint(mol, 2) # 计数型指纹 bits = {b for b, v in fp.GetNonzeroElements().items()} target = 1372 # 假设模型点名这一位 owners = [] for atom in mol.GetAtoms(): env = AllChem.GetMorganFingerprint(mol, 2, fromAtoms=[atom.GetIdx()]) if target in {b for b, v in env.GetNonzeroElements().items()}: owners.append(atom.GetIdx()) print("点亮该位的中心原子:", owners) print("对应原子符号:", [mol.GetAtomWithIdx(i).GetSymbol() for i in owners])

结果。输出通常指认一两个原子:以酯羰碳为中心、半径二以内的环境(碳氧双键、醚氧与芳环邻居在列)正是把 1372 号位点亮的那段结构——指纹位与具体化学环境的对应关系,一步到位。

解读。这个案例给出三层启示。其一,指纹可解释但不直观:查得到是哪段环境,但哈希值本身没有化学含义,含义来自回溯。其二,同一位可被不同分子里的不同环境点亮,这正是碰撞的直观形态——审查跨分子模型时,重要指纹位要抽几个分子回查。其三,计数型指纹(一环境多位可重复计数)比比特型保留更多证据,解释任务优先用它。

变式。顺着这条线索还能做两件事:把两个分子的非零位集合相减,得到"差异指纹",直观呈现取代基变化落在哪些环境上——药物化学同事最爱的 scaffold hopping 讨论材料;把重要指纹位反查环境后人工归类,给深度模型的预测配上"指纹级"的化学解释——第8章可解释性的雏形技术。

指纹选型速查:什么时候用哪把钥匙

指纹家族比"MACCS 对摩根"的对决要热闹,把常用货色与适用场面排一排。

MACCS 键适合当"对话语言":位位有语义,向不懂计算的解释者汇报"两个分子差在哪类特征"时最直观;也适合做粗过滤与快速去重。**摩根指纹(ECFP 系)**是默认主力:相似检索、聚类、机器学习的特征,十有八九由它承担;半径一保留"官能团视角",半径二起保留"官能团加邻位视角",药物分子常用半径二配两千位。**拓扑扭转指纹(Topological torsion 与 Atom pair 系)**从"原子对及间隔路径"的角度编码,与摩根视角互补,文献里常见两族指纹联用的方案——相似检索的交集命中往往质量更高(8.3 节的"表示分歧是信息"在此同样成立)。药效团指纹把原子抽象成供体、受体、芳香、疏水等类型再编码,牺牲拓扑细节换取"作用方式相似",适合骨架跃迁场景——你要找的不是长得像,而是"对蛋白说话方式像"的分子。反指纹(禁用特征编码)响应指纹属于进阶定制:前者显式编码负样本差异,后者在指纹空间里给"活性克隆"方向加权,见于成熟项目的精细调优。

参数侧只有三个高频旋钮。位数:两千是万级库的顺手值,亿级流水线常用一万位以上压碰撞;半径:一与二为主,三以上信息冗余开始淹没区分度;计数型对比特型:解释与建模优先计数型(信息无损),纯检索用比特型(比较快、存储省)。选型的元原则重申一遍第5章的立场:选一个、用到底、写进项目文档——指纹换了,相似度的语义就换了,跨阶段不可比。

本节要点回顾

  • 两代哲学:键式指纹预设问题、位位有语义;圆环指纹逐层哈希环境、表达力无边但需回溯解释。
  • 半径即视力:半径二覆盖邻居的邻居,是相似检索的常用配置。
  • 折叠与碰撞:取模落位必然有损,加长位数缓解而不根除,统计比较不受小碍。
  • 比特位可追查:以单原子为中心重算指纹,就能指认点亮某位的化学环境——黑箱可开。
  • 下一站:指纹解决了"怎么比",4.3 节解决"比什么"——上百列特征用之前,先瘦身。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U