一、背景与研究目标

问题:在质谱(MS/MS)或色谱-质谱等分析化学场景中,如何将观测到的谱图/特征匹配到正确的化学结构(分子式/SMILES/化学式)是核心任务。当前方法(数据库检索 + 指纹/相似度/机器学习排序)在 Top1 准确率上仍有较大提升空间,尤其在低谱图质量或未知化合物的情况下。

研究目标:提出一个**基于深度对比学习(Deep Contrastive Learning)**的联合嵌入框架,把谱图和分子结构映射到共同的表征空间,使得真实匹配对在向量空间距离更近,从而显著提升 Top1 匹配率(以及 Top5/Top10、MAP 等指标)。重点研究:

  • 设计谱图与分子结构的有效数据增强与正/负样本挖掘策略;
  • 构建谱图-结构的双塔(two-tower)对比学习模型(类似 CLIP 思路但针对分析化学);
  • 对比不同 encoder(GNN、Transformer、CNN)与不同对比损失(NT-Xent、InfoNCE、硬负采样)对 Top1 的影响;
  • 在公开 MS/MS 数据集(GNPS、MassBank、METLIN 等)上验证并与主流基线方法对比。

二、方法概览(核心思想)

采用双塔对比学习(spectrum encoder 与 structure encoder),训练过程中只需谱图—结构对(positive pair)。目标是最小化正样本对的向量距离、最大化与其他样本(批内或队列)间的距离(NT-Xent / InfoNCE)。

训练完成后,进行检索:把数据库中所有候选结构预先编码为向量(离线),给定查询谱图编码后直接做最近邻检索(ANN),返回 TopK 候选并计算 Top1 命中率。

关键创新点:

  1. 域专用增强策略:为谱图设计对比增强(noise injection、peak dropout、m/z jitter、intensity scaling、spectral cropping);为结构设计化学等价增强(SMILES 随机洗牌、图扩增、立体化学扰动在允许范围内)。
  2. 嵌入正则化:结合对比学习与辅助任务(如预测分子指纹、分子质量回归)帮助嵌入捕获更好的化学相似性。
  3. 硬负采样与混合采样:引入基于结构指纹/前期相似度检索的“困难负样本”(hard negatives)到对比损失,以提高辨别能力。
  4. 多尺度谱图表征:结合全谱和局部片段(区间)编码,提高对部分丢失/噪声谱图的鲁棒性。

三、数据与预处理

3.1 数据源(建议)

  • GNPS (Global Natural Products Social Molecular Networking)
  • MassBank
  • METLIN(若有访问权限)
  • NIST MS(若可用)
  • PubChem / ChEMBL(作为结构数据库 / SMILES 源)

(以上为常见公开/商业数据库,实际实施请按许可/版权使用)

3.2 样本格式与标准化

  • 谱图处理
    • 统一单位:m/z 精度与强度归一化(常用 log 或 max-normalize 强度)。
    • 峰筛选:保留前 N 个强峰或基于阈值。
    • 去噪与平滑(可选)。
    • 将谱图表示为:稀疏 (m/z, intensity) 列表,或固定长度向量(binned spectrum),或谱图图像(2D histogram)。
  • 结构处理
    • 使用 canonical SMILES + optional randomized SMILES augmentation。
    • 生成分子指纹(e.g. Morgan fingerprint)供辅助损失 / 负样本检索。
    • 若使用图神经网络(GNN),解析为原子节点与键边特征。

3.3 正负样本构造

  • 正样本:同一分子对应的谱图与其结构为正对。
  • 负样本
    • 批内随机负样本(默认)。
    • 基于指纹相似度选择的硬负样本(高化学相似度但非真实对应的结构);
    • 基于谱图相似度(Spec2Vec、cosine)挑选的谱图 hard negative(反之亦然)。

四、模型架构(建议实现)

4.1 双塔结构

  • Spectrum Encoder (S-Encoder)
    • 输入:预处理后的谱图(binned vector / peak list)。
    • 可选架构:
      • 1D-CNN + pooling(良好且轻量)。
      • Transformer(用连续 m/z 位置或峰序列 + attention)。
      • Graph-based spectrum encoder(将峰构成图,边为 m/z 差分)。
    • 输出:d 维向量(L2 归一化)。
  • Structure Encoder (M-Encoder)
    • 输入:SMILES / 分子图。
    • 可选架构:
      • GNN(GIN、GAT、GraphSAGE)对分子图编码。
      • Transformer over SMILES(如 ChemBERTa、SMILES Transformer)。
    • 输出:d 维向量(L2 归一化)。
  • Projection Head(可选):encoder 后加 1~2 层 MLP 投影到对比空间(如 SimCLR 所用方式),训练时使用投影向量计算对比损失,检索时可用 encoder 的原始向量或 projection 向量,需实验对比。

4.2 损失函数

  • InfoNCE / NT-Xent loss
    • 使用温度超参 τ,批内或与队列(MoCo)进行对比。
  • 辅助损失(多任务)(可加权):
    • 指纹重构损失(binary cross-entropy),帮助嵌入保留化学信息。
    • 分子质量回归 / 离子峰预测等。

4.3 负样本策略

  • Batch-based:在一个 batch 内每个正对对应所有其他样本为负。
  • Memory bank / MoCo:保存一个负样本队列,扩大负样本集。
  • Hard negative mining:周期性从数据库中检索与查询在 fingerprint 或 spec-sim 上最相似的 K 个负样本加入训练。

五、数据增强策略(关键)

5.1 谱图增强(Spectrum Augmentations)

  • 峰随机丢弃 (peak dropout):随机删去若干峰(模拟丢失数据)。
  • m/z 偏移 (m/z jitter):对峰的 m/z 添加小量偏移(模拟仪器漂移)。
  • 强度扰动 (intensity scaling/noise):乘以随机系数,添加高斯噪声。
  • 局部裁剪 (spectral crop):裁剪 m/z 范围或随机采样子区间(模拟部分检测范围)。
  • 插值与平滑:改变峰形态,模拟不同解析度仪器。

对比学习中把原谱图与其增强版本视为正对(spectrum-to-spectrum 的自监督),也可做 cross-domain(spectrum ↔ structure)的正对。

5.2 结构增强(Structure Augmentations)

  • SMILES 随机化:不同的 SMILES 表示携带相同结构语义。
  • 图级扰动(轻微):例如随机打乱邻接顺序、掩蔽部分原子特征(需小心不改变分子语义)。
  • 子结构掩码/补全任务:类似于 Masked Graph Modeling 增强 encoder 的稳健性。

六、训练细节(超参建议)

  • embedding dim d:128 ~ 512(根据数据量与检索效率折衷)
  • batch size:64 ~ 512(对比学习常受益于大批次)
  • 温度 τ:0.07 ~ 0.2(NT-Xent)
  • 学习率:1e-4 ~ 5e-4(AdamW)
  • 优化器:AdamW,weight decay 1e-4
  • 训练轮次:50 ~ 200 epoch(视数据量)
  • 硬负样本比例:初期 10% ~ 30%,动态调整
  • 混合精度训练:建议使用 FP16(加速)

七、检索与评估协议

7.1 检索流程

  1. 离线把数据库中所有分子通过 M-Encoder 编码为向量并存储(可用 Faiss 做 ANN)。
  2. 对每个测试谱图用 S-Encoder 编码,使用最近邻检索 TopK(e.g. K=1,5,10)。
  3. 根据真实分子 ID 判断是否命中 TopK。

7.2 指标

  • Top-1 / Top-5 / Top-10 命中率(主指标)
  • Mean Average Precision (MAP)MRR (Mean Reciprocal Rank)
  • Precision@K / Recall@K
  • ROC / PR 曲线(若转为二分类评分)
  • 统计显著性检验:用 bootstrap 获取置信区间,或 McNemar 测试对比方法差异显著性。

7.3 基线方法

  • Cosine similarity over binned spectra 与 Morgan fingerprint(传统相似度检索)。
  • Spec2Vec(或 MS2DeepScore)+ fingerprint ranking(若有实现)。
  • 直接监督学习分类器(谱图 -> top N candidates ranking)。

八、实验计划与消融研究

  1. 主实验:对比学习双塔 vs 传统检索(cosine on spec/fingerprint)在相同数据集上的 Top1/Top5/Top10。
  2. 消融一:增强策略
    • 无增、仅谱图增强、仅结构增强、两者皆用。
  3. 消融二:负样本策略
    • 批内随机、memory bank、hard negatives。
  4. 消融三:encoder 类型
    • S-Encoder: CNN vs Transformer;M-Encoder: GNN vs SMILES Transformer。
  5. 消融四:是否使用辅助任务(指纹/质量预测)。
  6. 参数灵敏度:温度、embedding dim、batch size。
  7. 鲁棒性测试:在加噪/部分丢失的测试谱图上对比性能下降幅度。
  8. 泛化性测试:训练集与测试集来源不同(cross-dataset)以评估迁移能力。

九、实现示例(PyTorch 风格伪码)

下面给出一个简化的训练伪代码(仅示意主干):

# 伪代码:双塔对比学习训练循环
for epoch in range(EPOCHS):
    for batch in dataloader:
        spectra = batch['spectrum']       # e.g. binned vectors
        smiles = batch['smiles']

        # 随机增强
        s_aug1 = spectrum_augment(spectra)
        s_aug2 = spectrum_augment(spectra)
        m_aug = smiles_augment(smiles)

        # 编码
        z_s1 = SEncoder(s_aug1)   # shape [B, d]
        z_s2 = SEncoder(s_aug2)
        z_m  = MEncoder(m_aug)

        # 归一化
        z_s1 = l2_normalize(z_s1)
        z_s2 = l2_normalize(z_s2)
        z_m  = l2_normalize(z_m)

        # contrastive loss between spectrum and structure
        loss_cs = InfoNCE(z_s1, z_m, temperature)
        loss_sc = InfoNCE(z_s2, z_m, temperature)
        loss = (loss_cs + loss_sc) * 0.5

        # optional fingerprint auxiliary loss
        fp_pred = FingerprintHead(z_m)
        loss_fp = BCE(fp_pred, true_fp)
        total_loss = loss + alpha * loss_fp

        optimizer.zero_grad()
        total_loss.backward()
        optimizer.step()

细节:InfoNCE 可包含硬负样本;可采用 queue/MoCo 机制扩充负样本。训练时注意同步 batch 内的正负对 index。


十、实现与工程要点

  • 检索加速:使用 Faiss 构建 ANN 索引(IVF/PQ)支持百万级候选离线检索。
  • 存储与内存:离线编码后的向量可以用 float16 存储以节省内存,并在检索时转回 float32。
  • 可重复性:固定随机种子、保存模型检查点与数据分割信息,记录严格的训练配置(JSON)。
  • 评估脚本:单独模块化,支持不同检索策略与指标计算。
  • 可视化:TSNE/UMAP 展示 spectrum 与 molecule 嵌入分布,查看正负样本的聚类情况。
  • 代码库建议结构:data/, models/, losses/, train.py, eval.py, utils/(augmentations, featurizers, faiss_utils)

十一、风险、局限与注意事项

  • 标签噪声:真实数据中谱图—结构对可能含错误注释,须做严格清洗或使用高置信度子集训练。
  • 域偏移:不同仪器/模式(正离子/负离子)差异大,建议分模式训练或引入条件编码。
  • 可解释性:对比学习嵌入难以直接解释化学原因,需辅以可视化或辅助任务提高可解释性。
  • 法律与伦理:商业数据库(METLIN、NIST)可能有限制,请遵守使用协议。

十二、预期结果与时间表(示例)

预期改进

  • 在中等规模数据集上(数万谱图)预计 Top1 提升 5% ~ 15%(相较于传统谱图相似度 + 指纹检索),Top5/Top10 增益可能更高。
  • 对低质量/部分丢失谱图的鲁棒性显著改善(更小的性能下降)。

(注:具体数值依数据集、实现与基线而异,需实验验证)

时间表(3 个月原型)

  • Week 1-2:数据收集、清洗、预处理流水线搭建。
  • Week 3-5:实现 S-Encoder、M-Encoder,完成基础双塔训练框架。
  • Week 6-8:实现增强策略、硬负采样、FAISS 检索与初步实验。
  • Week 9-10:系统化消融实验与超参调优。
  • Week 11-12:撰写报告/论文、可视化、复现包整理。

十三、可选扩展(进阶方向)

  • 跨模态预训练:类似 CLIP,在大规模未标注谱图与分子对上预训练,然后再做微调。
  • 对抗训练:生成对抗性谱图以提升鲁棒性。
  • 半监督/自监督结合:利用大量未标注谱图做自监督(spectrum↔spectrum)并与少量标注数据的 cross-modal 对比学习联合训练。
  • 多任务联合学习:同时回归质谱预测(in-silico spectrum prediction)增强理解。

十四、结语与下一步

如果你愿意,我可以继续:

  1. 把上面的方案转换成论文方法+实验章节(LaTeX/Markdown)
  2. 给出完整可运行的 PyTorch 实现(包含数据 loader、增强、双塔模型、InfoNCE 实现、FAISS 检索与 eval 脚本);
  3. 或者帮你设计具体实验表格/图表模板(结果展示的 LaTeX 表格、绘图脚本)。