目录

SGMD

misaraty 更新 | 2026-08-29

SGMD

SGMD 是一个由代理性质模型引导的分子生成与迭代富集框架。程序首先训练 Chemprop 性质预测模型,再使用多种互补的分子表示生成候选结构、预测目标性质,并将最优候选作为下一轮生成的种子。

SGMD 工作流程
代理模型引导的分子生成与发现流程

版本历史

v1.5

  • 增加从数据集自动确定 SELFIES 长度与补齐上限。

  • 增加基于 GPU 显存和分子大小的批大小自动选择。

  • 增加 graph/GeoDiff 节点容量自动对齐。

  • 增加 Diffusion 最低有效生成数自动计算。

  • 增加富集种子数自动计算:候选数的 10%,限制为 32–256。

  • 增加 auto_config_sequence.txtauto_config_diffusion.txt,便于记录和复现自动配置。

  • 将目标方向简化为“阈值与训练集中位数比较”的自动判断。

  • Diffusion 改为从合并候选池选择下一轮的富集种子。

v1.4

  • 增加 D.csv 无效 SMILES 报告和 canonical SMILES 规范化。

  • 增加重复结构标签的可配置聚合方式。

  • 增加生成候选内部去重及相对于 D.csv 的新颖性过滤。

  • 增加中性形式电荷、排除元素和数据集重原子范围过滤。

  • 通过 TARGET_DIRECTION 支持性质最大化与最小化。

  • 增加明确的固定五折训练/验证/测试划分、评价指标、图和绘图数据。

  • 增加从输入数据自动发现元素种类及 graph/GeoDiff 容量。

  • 自定义数据默认文件名改为 D.csv

v1.2

  • 论文及示例版本。

  • Sequence 集成 RNN、Transformer 和 VAE。

  • Diffusion 集成 SELFIES、graph 和几何感知扩散。

  • 实现 Chemprop 引导的迭代生成和基于阈值的命中筛选。

  • 提供 BACE、energetics 和 permeability 示例及其结果文件。

生成模型介绍

Sequence_*.py 包含三种序列生成模型:

  • 基于 GRU 的分子 RNN

  • 分子 Transformer

  • 分子 VAE

Diffusion_*.py 包含三种扩散生成分支:

  • SELFIES diffusion

  • graph diffusion

  • 几何感知扩散(GeoDiff)

两条流程都使用 Chemprop 集成模型作为性质代理模型;默认从 R0 运行至 R5

输入数据

CSV 至少包含两列:

1
2
3
SMILES,D
CCO,1.23
CCN,2.34
  • 分子列名称必须包含 smiles,不区分大小写。

  • 性质列建议命名为 Dtargetlabel;程序也可以识别 velocity

  • 性质值必须为数值。

  • v1.2、v1.4 和 v1.5 默认读取 D.csv

v1.5 使用方法

新建一个干净的任务目录,只复制一条生成流程的脚本和数据:

1
2
3
my_task/
├── D.csv
└── Sequence_v1.5.py

或:

1
2
3
my_task/
├── D.csv
└── Diffusion_v1.5.py

修改脚本顶部的配置区,至少检查:

1
2
3
4
5
6
7
8
DATA_CSV = "D.csv"
TARGET_D = 20
DM_DUPLICATE_MODE = "mean"
EXCLUDED_ELEMENTS = []
SIZE_FILTER_QUANTILES = (0.01, 0.99)
NUM_GEN = 2048          # Sequence_v1.5.py
NUM_GEN = 1024          # Diffusion_v1.5.py
ENRICH_ROUNDS = 5

每个任务目录只运行一条流程:

1
python Sequence_v1.5.py

或:

1
python Diffusion_v1.5.py

不要在同一任务目录中同时运行 Sequence 和 Diffusion。两者都会写入 runs/mol_chemprop_multi/,并可能覆盖或混合结果。比较两条流程时应使用两个独立目录。

目标方向

优化方向由训练集性质中位数自动确定:

  • TARGET_D >= median(D) 时,程序执行性质最大化,命中条件为 D_pred >= TARGET_D

  • TARGET_D < median(D) 时,程序执行性质最小化,命中条件为 D_pred <= TARGET_D

如果该规则不符合实际科学目标,且最大化/最小化方向必须独立于阈值强制指定,请改用 v1.4,并设置 TARGET_DIRECTION = "max""min"

自动确定的参数

流程 v1.5 自动参数
Sequence 根据有效 SELFIES 的最大长度确定 MAX_LEN,并向上对齐至 8 的倍数;根据 GPU 显存和序列长度确定 BATCH_SIZE_GENSAMPLE_BATCH_SIZE;从候选的 10% 自动选择富集种子,数量限制为 32–256。
Diffusion 从数据集确定 SELFIES 长度及前缀长度;自动学习 graph/GeoDiff 元素种类和节点容量;根据 GPU 显存与分子大小选择批大小;按 NUM_GEN 的 12.5% 确定 MIN_VALID;从候选的 10% 自动选择富集种子,数量限制为 32–256。

最终采用的自动参数会保存为:

  • runs/mol_chemprop_multi/outputs/auto_config_sequence.txt

  • runs/mol_chemprop_multi/outputs/auto_config_diffusion.txt

运行哪条流程,就只生成对应的配置文件。

v1.4 使用方法

准备方式和运行方式与 v1.5 相同,只需改用 Sequence_v1.4.pyDiffusion_v1.4.py

需要重点检查的通用参数如下:

1
2
3
4
5
6
7
8
DATA_CSV = "D.csv"
TARGET_D = 20
TARGET_DIRECTION = "auto"   # auto、max 或 min
DM_DUPLICATE_MODE = "mean"  # first、mean、median、max 或 min
EXCLUDED_ELEMENTS = []
SIZE_FILTER_QUANTILES = (0.01, 0.99)
ENRICH_ROUNDS = 5
TOPK_SEED = 256

当您需要强制指定优化方向,或者需要手工控制序列长度、批大小、最低有效生成数和富集种子数时,应选择 v1.4。

运行:

1
python Sequence_v1.4.py

或:

1
python Diffusion_v1.4.py

v1.2 使用方法

三个示例数据集均分别包含 Sequence/Diffusion/ 目录。例如:

1
2
cd example/BACE/Sequence
python Sequence_v1.2.py
1
2
cd example/BACE/Diffusion
python Diffusion_v1.2.py

主要输出文件

所有结果写入:

1
2
3
4
5
runs/mol_chemprop_multi/
├── models_chemprop/
│   ├── fold_0/ ... fold_4/
│   └── cv_splits/
└── outputs/
输出 含义
invalid_smiles_in_D.csv 输入数据中的无效 SMILES;仅在发现无效行时生成。
Dm_deduplicated.csv Sequence v1.4/v1.5 生成的 canonical SMILES 去重及标签聚合数据。
kfold_*pred*.jpg 固定五折真实值—预测值图。
kfold_*pred*.dat 五折预测图对应的原始数据。
verbose.log 各折 MAE、RMSE、R² 及总体统计。
generated_*_R0.csvgenerated_*_R5.csv 每个生成分支在各轮产生的候选。
generated_merged_round0.csvgenerated_merged_round5.csv 合并并去重后的候选池。
generated_with_pred_*_R*.csv 含 Chemprop 预测值、并按优化方向排序的全部生成候选。
generated_hits_*_R*.csv 满足 TARGET_D 阈值的候选。

通常最终使用:

1
2
runs/mol_chemprop_multi/outputs/generated_with_pred_MERGED_R5.csv
runs/mol_chemprop_multi/outputs/generated_hits_MERGED_R5.csv

需要查看全部最终候选及预测值时,读取 generated_with_pred_MERGED_R5.csv;只需要达到阈值的分子时,读取 generated_hits_MERGED_R5.csv

生成分子的后处理

smiles_check/smiles_check_v6.py 是可选的 RDKit 筛选与可视化脚本,可进行解析与 SanitizeMol 检查、单组分/中性检查、元素及分子大小限制、理化性质范围过滤、环限制、PAINS 警示、合成可及性评分,以及相对于参考 CSV 的可选新颖性过滤。

运行前必须根据当前任务修改输入文件路径、预测性质列及阈值、可选参考数据和筛选开关。sascorer.pyfpscores.pkl.gz 需要保持为后处理脚本可访问。

注意事项

  • 为控制项目体积,示例压缩包未包含部分 *.pt 模型文件;需要时可重新运行对应脚本生成。

  • 一次完整运行会重新训练五折 Chemprop 和三种生成模型。代码的部分步骤会删除或覆盖已有目录,因此应备份重要结果,或为每次实验建立新的任务目录。

  • 精确数值复现还会受到软件版本、CUDA/PyTorch 行为以及模型检查点是否存在的影响。

引用