8.3 化学预训练大模型 本节摘要:预训练范式把"标签不够"变成了可解问题:先在数亿无标签分子上学通用化学语法,再用少量标注数据微调到具体任务。本节讲清化学语言模型的自监督套路、预训练编码器当相似度引擎的实战用法,以及通用大语言模型闯进化学习题时的能力边界——尤其是结构幻觉这个新麻烦。 AI 编目员的最后一课,也是当前工业界落地的主力形态。8.1 的图模型从零训练、8.2 的生成模型按分布采样,都吃标签;而化学的真实困境是无标签分子上亿、有标签实验以千计——预训练正是为这个剪刀差准备的。 把 SMILES 当句子读的大模型 化学语言模型的预训练目标是自监督的,不需要任何标签。
本节摘要:预训练范式把"标签不够"变成了可解问题:先在数亿无标签分子上学通用化学语法,再用少量标注数据微调到具体任务。本节讲清化学语言模型的自监督套路、预训练编码器当相似度引擎的实战用法,以及通用大语言模型闯进化学习题时的能力边界——尤其是结构幻觉这个新麻烦。
AI 编目员的最后一课,也是当前工业界落地的主力形态。8.1 的图模型从零训练、8.2 的生成模型按分布采样,都吃标签;而化学的真实困境是无标签分子上亿、有标签实验以千计——预训练正是为这个剪刀差准备的。
化学语言模型的预训练目标是自监督的,不需要任何标签。最常见的两种任务:掩码恢复——把 SMILES 里的一部分字符遮住让模型猜(像做完形填空),模型被迫学会官能团搭配、价态规则、环闭合节奏这些"化学语法";序列翻译——从一个分子的写法预测另一个等价或相关的写法(如规范化形式、不同骨架 hopping 的靶分子),逼模型内化"分子同一性"与"结构相似性"。预训练语料是公共数据库的全量结构(亿级分子),算力成本对工业界友好,这是一门性价比生意。
预训练给的馈赠是嵌入向量:任何分子过一遍编码器,出来一个携带化学语义的稠密向量。这个向量的用法与 8.1 的 GNN 嵌入同构——当特征、当相似度量、当检索键——但它的底子是亿级无标签先验,小数据任务的起点高得多。迁移的正式姿势是微调:预训练权重之上接任务头,用几百到几千个标签样本轻轻训一程,语言模型时代的普遍经验是微调后的小样本成绩常追平从零训练的十倍数据成绩。
通用大语言模型(对话式的那种)闯进化学的姿态则要分开评价。它擅长的:文献信息抽取与汇总、实验流程改写、代码脚手架生成、把计算结果翻译成人类报告——本质是语言活。它需警惕的:结构幻觉——让它"写一个能结合某靶点的 SMILES",它会给出行文流畅、语法工整、化学上却常常不存在的分子;让它报某个具体分子的性质数值,它可能凭语感编造。结构生成与性质预测请回到 8.2 的生成管线与本节的微调编码器——大语言模型在这条链路里的正确位置是调度员与翻译官,不是预测引擎。
把第4章以来的表示手段放在一起,选型逻辑一目了然:
| 表示手段 | 训练需求 | 少标签表现 | 可解释性 | 适用阶段 |
|---|---|---|---|---|
| 描述符矩阵 | 无需训练 | 一般 | 每列有语义 | 基线与理化画像 |
| 摩根指纹 | 无需训练 | 良好 | 可回溯环境 | 检索与稳健基线 |
| 图神经网络嵌入 | 需任务标签 | 较弱 | 线索级 | 大数据多任务 |
| 预训练编码器 | 亿级无标签 | 强 | 中等(可探测) | 少标签与迁移 |
背景。一个新靶点项目只有三十几个确认活性分子,5.1 节的指纹相似检索能用,但团队怀疑指纹"看不出作用方式",想试试预训练编码器的语义相似度——两个向量夹角小,是否比两个指纹重合多,更接近"同一结合模式"?
操作。用公开的预训练化学编码器产向量,算余弦相似,与 Tanimoto 并排跑同一份 top-k 检索:
import numpy as np from encoder_hub import ChemEncoder # 预训练编码器(开源权重) from rdkit import Chem, DataStructs from rdkit.Chem import AllChem enc = ChemEncoder.from_pretrained() # 加载预训练权重 def cosine_topk(query_smi, pool, k=10): q = enc.embed(query_smi) # 查询向量 q = q / np.linalg.norm(q) best = [] for s in pool: v = enc.embed(s) best.append((float(q @ (v / np.linalg.norm(v))), s)) return sorted(best, reverse=True)[:k] def tanimoto_topk(query_smi, pool, k=10): qfp = AllChem.GetMorganGenerator().GetFingerprint(Chem.MolFromSmiles(query_smi)) scored = [(DataStructs.TanimotoSimilarity( qfp, AllChem.GetMorganGenerator().GetFingerprint(Chem.MolFromSmiles(s))), s) for s in pool] return sorted(scored, reverse=True)[:k] top_lm = cosine_topk(query_active, purchasable) top_fp = tanimoto_topk(query_active, purchasable) print("两法交集:", sorted(set(x[1] for x in top_lm) & set(x[1] for x in top_fp)))
结果。两法的前十名单交集通常只有三四个——它们对"相似"的定义确有分歧。人工与后续实验的判读:交集分子(两法都看好)复筛命中率最高;编码器独有的命中里出现了两个"指纹距离远但药效团神似"的分子,正是指纹法的盲区;指纹独有的命中多为拓扑近亲,稳但新意有限。
解读。这个案例给出一套通用的多表示策略:表示分歧本身是信息——两法共识是最稳候选,分歧候选是探索性候选,全并集人工收口。预训练编码器的正确期待是"视角不同的第二意见",而不是"更准的真理":它的相似度语义来自预训练目标,不同模型差异可观,换编码器等于换视角。成本上也要记账——编码器推理比指纹慢几个数量级,全库亿级扫描时先指纹粗筛再编码精排才是工程正解。
变式。预训练范式在化学的延伸战线:蛋白质语言模型对靶点序列产嵌入,配体嵌入与蛋白嵌入在共享空间对齐,实现免结构的靶点-配体匹配初筛(10.4 节多组学的接口);结构加文本多模态——分子图与专利文本联合预训练,检索时可用一句话当查询;微调纪律迁移——8.1 的骨架划分与基线对决在预训练时代原样有效,且要追加一条:微调前先确认预训练语料没混入测试集分子(数据泄漏在预训练时代有了新入口)。