PaddleHelix 分子模型上手指南:GeoGNN 与 SD VAE 两个核心组件从原理到跑通

发布时间:2026/10/24 6:30:56
PaddleHelix 分子模型上手指南:GeoGNN 与 SD VAE 两个核心组件从原理到跑通

PaddleHelix 分子模型上手指南:GeoGNN 与 SD VAE 两个核心组件从原理到跑通

【免费下载链接】PaddleHelixBio-Computing Platform Featuring Large-Scale Representation Learning and Multi-Task Deep Learning “螺旋桨”生物计算工具集项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleHelix

做药物计算的同学通常会卡在同两个地方:拿到一堆分子想预测它们的性质,却不知道该喂什么特征、怎么聚合;手里只有少量已知分子,想"造"出新的候选分子,又怕生成出来的结构根本不合法。PaddleHelix 恰好把这两件事拆给了两个核心组件——pahelix/model_zoo/gem_model.py 里的 GeoGNN 负责"看懂"分子,pahelix/model_zoo/sd_vae_model.py 里的 SD VAE(Syntax-Directed VAE,基于语法的变分自编码器)负责"生成"分子。下面用仓库里真实存在的几个文件,把这两个组件的原理和跑法一次讲清楚。

它是什么:预测和生成,两个组件各管一头

一句话定位:pahelix/model_zoo/是 PaddleHelix 的模型库(model zoo,仓库里开箱即用的模型集合),GeoGNN 与 SD VAE 是其中两条最常用的模型线。

  • GeoGNN:分子表示模型,把分子读成图并学习整体表征
  • GEM:基于 GeoGNN 的自监督预训练任务集
  • SD VAE:语法约束的分子生成模型,产出新 SMILES
  • featurizer:把分子转成图结构的"翻译官"
  • finetune_*.py:拿预训练权重做下游微调的入口

它怎么工作:一个读分子,一个写分子

GeoGNN:把分子当"社交网络"来读

GeoGNN 先把分子画成一张图:原子是节点、化学键是边,再额外补一张"键角图"。类比成读微信群聊——节点每轮更新都像把邻居发来的消息看一遍再发言,仓库里这个"楼层"由 apps/pretrained_compound/ChemRL/GEM/model_configs/geognn_l8.json 的layer_num: 8控制。和普通图网络的区别在于:它同时处理原子-键图和键角图,键长、键角这些连续数值由 RBF(径向基函数,把数值映射成向量的小工具)编码,分子三维摆姿里的几何信息就进了表征。最后用均值池化(readout: "mean")把整张图压成一个向量,交给任务头做预测。

在 GeoGNN 之上,GEM 挂了 5 个自监督预训练任务(见 model_configs/pretrain_gem.json):原子上下文掩码预测(Cm)、功能团分类(Fg)、键角回归(Bar)、键长回归(Blr)、原子间距分类(Adc)。相当于不花一分钱标注,就让模型自己学会"这个分子在空间里长什么样"。

SD VAE:让分子生成受"语法"约束

变分自编码器(VAE)的一般套路是:编码器把输入压成一个潜在分布,解码器从分布里采样再还原。PaddleHelix 的 SD VAE 把"输入"换成了分子语法树(CFG parse tree)的决策序列:先按分子文法把分子解析成"写分子说明书"的决策,sd_vae_model.py 里的 CNNEncoder 编码这串决策、输出均值与方差,再经重参数化采样出 z,GRU 解码器逐步把决策还原出来。因为每一步决策都受文法规则约束(PerpCalculator 里用 rule_masks 屏蔽非法选项),生成结果天然更可能拼成合法分子。

关键超参在 apps/molecular_generation/SD_VAE/model_config.json:latent_dim(潜在空间维度)为 56、max_decode_steps为 278、编码器类型 cnn、解码器类型 gru。

怎么用起来:准备 → 运行 → 验证三步

准备:按 installation_guide.md 装好环境(GEM 依赖 paddlepaddle>=2.0.0、pgl>=2.1.5 等)。

运行:

  • GEM 预训练:apps/pretrained_compound/ChemRL/GEM/scripts/pretrain.sh 会自动下载 demo Zinc 数据并启动pretrain.py,模型落在./pretrain_models;不想自己跑可以直接下官方预训练权重。
  • SD VAE:先用data_preprocessing/里的make_dataset_parallel.py、dump_cfg_trees.py把原始 SMILES 编译成二进制(这一步不能省),再执行 train_zinc.py 训练:
python make_dataset_parallel.py -info_fold ../data/data_SD_VAE/context_free_grammars \ -grammar_file .../mol_zinc.grammar -smiles_file .../250k_rndm_zinc_drugs_clean.smi

验证:GEM 微调完成后结果保存在./log/pretrain-$dataset/final_result(脚本 scripts/finetune_class.sh、finetune_regr.sh);SD VAE 训练好后用 paddle_eval/sample_prior.py 从先验采样新分子,官方 README 给出的基准是 valid 0.49、reconstruction accuracy 0.92,可对照自己的结果。

怎么选、怎么搭配

GeoGNN(GEM)SD VAE
输入分子图 + 三维几何(需 featurizer 转换)SMILES 语法树决策序列
任务属性预测(分类/回归)分子生成、重构
关键配置geognn_l8.json / pretrain_gem.jsonmodel_config.json
训练脚本GEM/pretrain.pySD_VAE/train_zinc.py
  • 要预测分子性质 → 用 GEM:先拿预训练权重,再走 finetune_class.py(分类)或 finetune_regr.py(回归)微调。
  • 要生成新分子 → 用 SD VAE:训好后从先验采样,或在已知分子附近重构探索。
  • 两者能串起来:SD VAE 生成 → GeoGNN 打分筛选,组成"生成 + 筛选"的闭环。

⚠️ 两个提醒:GEM 的 demo 数据需要跑 MMFF 力场优化,README 明确说单卡要数小时,别期待分钟级出结果;SD VAE 的数据必须先编译成二进制,跳过预处理脚本会直接报错。更多细节看 docs/ 下的 API 文档和两个 README 即可。

【免费下载链接】PaddleHelixBio-Computing Platform Featuring Large-Scale Representation Learning and Multi-Task Deep Learning “螺旋桨”生物计算工具集项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleHelix

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考