个人推荐指数:⭐️⭐️⭐️⭐️

scPairing 简介

scPairing 是一个基于变分自编码器(VAE)的单细胞多组学数据整合与生成框架,能够将不同模态的单细胞数据(如 RNA、ATAC、蛋白质)整合到共同的嵌入空间,并通过”桥接整合”(bridge integration)方法生成高质量的人工多组学数据。该工具由加拿大不列颠哥伦比亚大学(University of British Columbia)的 Jeffrey Niu 和 Jiarui Ding 开发,发表于 Cell Reports Methods(2025年11月)。

scPairing 的核心能力包括:

  • 跨模态数据整合:将 RNA-seq、ATAC-seq、蛋白质等不同模态的单细胞数据整合到统一的嵌入空间
  • 人工多组学数据生成:通过桥接整合方法,从单模态数据生成高质量的配对多组学数据
  • 三模态扩展:支持同时整合三种模态(RNA + ATAC + 蛋白质)的数据
  • 生物学结构保持:生成的数据能够保持粗粒度和细粒度的生物学结构

scPairing 的主要应用场景:

  • 利用少量配对的多组学数据作为”桥接”,将大量单模态数据整合生成人工多组学数据
  • 发现跨模态的生物学关系和调控网络
  • 在缺乏真实多组学数据的情况下进行假设验证
  • 降低多组学实验的成本,提高数据利用率

方法原理

核心思想

scPairing 的核心思想是利用少量配对的多组学数据作为”桥接”(bridge),学习不同模态之间的对应关系,然后将这种关系应用到大量的单模态数据上,生成人工配对的多组学数据。

传统的多组学技术(如 SHARE-seq、10x Multiome)虽然能够同时测量多种模态,但存在以下问题:

  • 成本高昂,限制了样本量和数据规模
  • 数据质量通常低于单模态技术
  • 可用的多组学数据集数量有限

scPairing 通过以下策略解决这些问题:

  1. 使用少量高质量的配对多组学数据训练模型
  2. 将大量单模态数据投影到共同的嵌入空间
  3. 通过相似度匹配生成人工配对数据
  4. 生成的数据可用于下游分析,如细胞类型注释、调控网络推断等

模型架构

scPairing 采用增强的变分自编码器(VAE)架构,结合对比学习和对抗训练,包含以下核心组件:

编码器(Encoder):

  • 模态特异性编码器:每个模态有独立的编码器网络,将低维表示映射到潜在空间
  • 共享超球面嵌入空间:不同模态的编码器输出映射到同一个超球面 S^(d-1)
  • 参数化:编码器输出潜在变量的均值 μ 和方差 σ²
  • 输入:来自 PCA、LSI、scVI、scGPT 等方法的低维表示(20-50 维)
  • 网络结构:单层神经网络,128 单元,ELU 激活,层归一化

解码器(Decoder):

  • 模态特异性解码器:每个模态有独立的解码器网络,从潜在空间重构低维表示
  • 跨模态生成:可以使用一个模态的潜在表示通过另一个模态的解码器生成数据
  • 支持预训练解码器或从头学习的解码器
  • 网络结构:单层神经网络,128 单元,ELU 激活,层归一化

模态判别器(Modality Discriminator):

  • 功能:区分嵌入向量来自哪个模态(RNA 或 ATAC)
  • 输入:超球面上的嵌入向量 μ_RNA 或 μ_ATAC
  • 输出:标量值 ∈ [0,1],表示来自 RNA 模态的概率
  • 网络结构:单层神经网络,128 单元,ELU 激活,层归一化
  • 作用机制:
    • 判别器试图正确分类嵌入的模态来源
    • 编码器通过对抗训练”欺骗”判别器
    • 使得不同模态的嵌入在潜在空间中无法被区分
    • 增强跨模态对齐效果

批次判别器(Batch Discriminator):

  • 功能:识别嵌入向量来自哪个批次
  • 输入:嵌入向量 μ_RNA 或 μ_ATAC
  • 输出:B 维向量 ∈ [0,1]^B,表示来自每个批次的概率(B 为批次数)
  • 网络结构:单层神经网络,128 单元,ELU 激活,层归一化
  • 作用机制:
    • 判别器试图识别嵌入的批次来源
    • 编码器通过对抗训练”欺骗”判别器
    • 消除嵌入中的批次效应
    • 防止细胞按批次过度分离,同时保持生物学结构

损失函数

scPairing 的损失函数包含多个部分,形成了一个增强的 VAE 目标函数:

  1. 重构损失(Reconstruction Loss):

    • 确保模型能够准确重构输入数据
    • 对于 RNA 数据使用负二项分布(Negative Binomial)
    • 对于 ATAC 数据使用伯努利分布(Bernoulli)
    • 对于蛋白质数据使用负二项分布
  2. KL 散度损失(KL Divergence Loss):

    • 约束潜在空间分布接近标准正态分布
    • 防止过拟合,提高泛化能力
  3. 对比学习损失(Contrastive Loss):

    • 受 CLIP(Contrastive Language-Image Pre-training)启发
    • 鼓励同一细胞的不同模态嵌入在超球面上接近
    • 同时推开不同细胞的嵌入
    • 最大化匹配细胞对的余弦相似度,最小化非匹配细胞对的相似度
  4. 模态判别损失(Modality Discriminator Loss, L_D):

    • 引入判别器神经网络 h: S^(d-1) → [0,1]
    • 判别器接收嵌入向量(μ_RNA 或 μ_ATAC),输出其来自 RNA 模态的概率
    • RNA 和 ATAC 编码器被训练来”欺骗”判别器
    • 目标:使判别器无法区分 RNA 嵌入和 ATAC 嵌入
    • 这是一个对抗性目标,进一步增强模态对齐
  5. 批次判别损失(Batch Discriminator Loss, L_B):

    • 在批次效应显著的数据集中,对比损失可能导致细胞按批次过度分离
    • 引入另一个判别器神经网络 b: S^(d-1) → [0,1]^B(B 为批次数)
    • 该判别器预测每个嵌入来自哪个批次
    • RNA 和 ATAC 编码器被训练来”欺骗”这个判别器
    • 使用 B 类交叉熵损失
    • 目标:消除嵌入中的批次效应
  6. 余弦相似度对齐损失(Cosine Similarity Alignment Loss, L_A):

    • 额外的对齐约束,确保配对细胞的嵌入方向一致
    • 只专注于拉近正样本本身,作为对比学习损失的补充
    • 消融实验证明其显著增加了成功配对的细胞数量

总损失函数可表示为:

L = L_ELBO + L_contrastive + L_D + L_B + L_A

其中:

  • L_ELBO = L_recon + β * L_KL(标准 VAE 损失)
  • L_contrastive:对比学习损失
  • L_D:模态判别损失
  • L_B:批次判别损失
  • L_A:余弦相似度对齐损失

具体步骤

步骤 1:训练桥接模型

  • 使用少量配对的多组学数据训练 scPairing 模型
  • 模型学习将不同模态映射到共同的嵌入空间
  • 两步训练过程:
    1. 固定编码器和解码器,更新判别器参数(最大化判别准确率)
    2. 固定判别器,更新编码器和解码器参数(最小化总损失,包括”欺骗”判别器)

步骤 2:投影单模态数据

  • 将大量单模态数据通过训练好的编码器投影到共同的嵌入空间
  • 对于模态 1 的数据,使用模态 1 的编码器获得嵌入 Z1
  • 对于模态 2 的数据,使用模态 2 的编码器获得嵌入 Z2

步骤 3:计算相似度矩阵

  • 计算两个模态嵌入之间的余弦相似度矩阵 S
  • S[i,j] 表示模态 1 的第 i 个细胞与模态 2 的第 j 个细胞的相似度

步骤 4:最大权重二部图匹配

  • 使用匈牙利算法(Hungarian algorithm)求解最大权重二部图匹配问题
  • 找到使总相似度最大的配对方案
  • 设置相似度阈值(如 0.8),过滤掉低相似度的配对

步骤 5:生成人工多组学数据

  • 根据匹配结果重新排列单模态数据
  • 配对的细胞组合成人工多组学数据

三模态扩展

scPairing 可以扩展到三模态数据(triscPairing),同时整合 RNA、ATAC 和蛋白质数据。

架构调整:

  • 三个模态特异性编码器(RNA、ATAC、蛋白质)
  • 三个模态特异性解码器
  • 共享的超球面嵌入空间

训练策略:

  1. 成对对比损失(Pairwise CLIP Loss):

    • 对于三个模态 m₁, m₂, m₃,需要计算三对模态之间的对比损失
    • L_CLIP = L_CLIP^(m₁,m₂) + L_CLIP^(m₁,m₃) + L_CLIP^(m₂,m₃)
    • 每一对模态都使用标准的 CLIP 对比损失
    • 确保任意两个模态的嵌入都能对齐
  2. 模态判别损失扩展:

    • 模态判别器从二分类扩展为多分类
    • 判别器 h: S^(d-1) → [0,1]³
    • 输出三个概率值,分别表示嵌入来自 RNA、ATAC 或蛋白质模态
    • 三个编码器都被训练来”欺骗”判别器
  3. 批次判别损失:

    • 批次判别器同样应用于所有三个模态的嵌入
    • 计算所有模态嵌入的批次预测损失
    • L_B = (1/N) Σᵢ Σₘ CE(bᵢ, b̂(μᵢᵐ))
    • 其中 m ∈ {RNA, ATAC, 蛋白质}
  4. 总损失函数:

    • L_total = L_ELBO + Σ_(m₁,m₂) L_CLIP^(m₁,m₂) + L_D + L_B + L_A
    • 包含所有模态对的对比损失

支持的数据类型:

  • 完整三模态配对数据(如 TEA-seq)
  • 部分配对数据(如只有 RNA+ATAC 或 RNA+蛋白质配对)
  • 可以处理缺失模态的情况

桥接整合:

  • 可以从三个单模态数据集生成三模态配对数据
  • 也可以从双模态数据和单模态数据生成三模态数据
  • 使用贪心算法求解三模态匹配问题(因为不存在高效的最优算法)

三模态配对算法:

  • 对于三模态数据,线性和分配问题变为 NP-hard
  • 使用随机贪心算法(randomized greedy algorithm)生成配对
  • 算法迭代地选择相似度最高的三元组进行配对

技术实现细节

网络结构

编码器网络:

  • 输入层:低维表示(来自 PCA、LSI、scVI 等方法)
  • 隐藏层:单层神经网络,128 个单元
  • 激活函数:指数线性单元(ELU)
  • 归一化:层归一化(Layer Normalization)
  • 输出层:输出潜在变量的均值 μ 和方差 σ²
  • 嵌入空间:超球面(hypersphere)S^(d-1)

解码器网络:

  • 输入层:潜在变量维度
  • 隐藏层:单层神经网络,128 个单元
  • 激活函数:指数线性单元(ELU)
  • 归一化:层归一化
  • 输出层:输出重构数据的参数
  • 支持预训练解码器或从头学习的解码器

模态判别器网络(h):

  • 输入:嵌入向量 μ_RNA 或 μ_ATAC(来自超球面 S^(d-1))
  • 隐藏层:单层神经网络,128 个单元
  • 激活函数:指数线性单元(ELU)
  • 归一化:层归一化
  • 输出:标量值 ∈ [0,1],表示来自 RNA 模态的概率
  • 作用:区分 RNA 嵌入和 ATAC 嵌入

批次判别器网络(b):

  • 输入:嵌入向量 μ_RNA 或 μ_ATAC
  • 隐藏层:单层神经网络,128 个单元
  • 激活函数:指数线性单元(ELU)
  • 归一化:层归一化
  • 输出:B 维向量 ∈ [0,1]^B,表示来自每个批次的概率(B 为批次数)
  • 作用:识别嵌入来自哪个批次,用于消除批次效应

三模态扩展:

  • 对于三模态数据,模态判别器从二分类扩展为三分类
  • 判别器输出维度从 [0,1] 变为 [0,1]^3
  • 批次判别器同样适用于所有三个模态的嵌入

数据预处理

scPairing 的一个重要特点是接受低维表示作为输入,而不是原始计数数据。这提供了灵活性和计算效率。

RNA-seq 数据预处理:

  1. 使用模态特异性方法计算低维表示:
    • PCA(主成分分析)
    • scVI(单细胞变分推断)
    • scGPT(单细胞 GPT 模型)
    • CellPLM(细胞预训练语言模型)
  2. 典型维度:20-50 维
  3. 可选择是否在低维表示中进行批次校正(如使用 Harmony)

ATAC-seq 数据预处理:

  1. 使用模态特异性方法计算低维表示:
    • LSI(潜在语义索引)
    • PeakVI(峰变分推断)
    • Harmony 校正的 LSI
  2. 典型维度:20-50 维
  3. 峰矩阵通常先进行 TF-IDF 转换

蛋白质数据预处理:

  1. 对原始计数进行归一化
  2. 使用 PCA 或其他降维方法
  3. 典型维度:10-30 维(蛋白质特征数量较少)

低维表示的优势:

  • 计算效率高:scPairing 参数量少,训练速度快
  • 灵活性强:可以选择不同的批次校正策略
  • 模态对齐更容易:低维空间中找到对齐比高维原始数据更简单
  • 可利用预训练模型:如 scGPT、CellPLM 等大型预训练模型的嵌入

训练配置

超参数设置:

  • 潜在空间维度:通常设为 10-50
  • 隐藏层单元数:128(所有网络组件统一)
  • 学习率:1e-3 到 1e-4
  • 批次大小:128 或 256
  • 训练轮数:根据验证集损失确定,通常 50-200 轮

损失权重:

  • β(KL 权重):0.1 到 1.0
  • 模态判别损失权重:可调节,过高会影响性能
  • 批次判别损失权重:可调节,过高会影响性能
  • 余弦相似度对齐损失权重:对性能影响较小

优化器:

  • 使用 Adam 优化器
  • 两步训练过程:
    1. 更新判别器参数(最大化 L_D 和 L_B)
    2. 更新编码器和解码器参数(最小化总损失)

早停策略:

  • 监控验证集损失
  • 如果验证集损失连续多轮不下降则停止训练

敏感性分析结果:

  • 余弦相似度对齐损失权重对性能影响不大
  • 模态判别损失和批次判别损失在高权重时会降低性能
  • 当前默认权重设置在多个数据集上表现良好

评估指标

整合质量评估:

  • 批次混合度(Batch mixing):使用 kBET、LISI 等指标
  • 生物学保持度(Bio-conservation):使用 ARI、NMI 等指标
  • 可视化:使用 UMAP 或 t-SNE 可视化嵌入空间

生成质量评估:

  • 与真实多组学数据的相似度
  • 下游任务性能(如细胞类型注释准确率)
  • 跨模态相关性保持

性能评估

数据集

scPairing 在多个公开数据集上进行了评估:

双模态数据集:

  • 10x Multiome PBMC:人类外周血单核细胞的 RNA + ATAC 数据
  • SHARE-seq 小鼠皮肤:小鼠皮肤的 RNA + ATAC 数据
  • CITE-seq PBMC:人类外周血单核细胞的 RNA + 蛋白质数据

三模态数据集:

  • TEA-seq 骨髓:人类骨髓的 RNA + ATAC + 蛋白质数据

单模态数据集:

  • 大规模 scRNA-seq 数据集
  • 大规模 scATAC-seq 数据集

整合性能

scPairing 在整合质量上优于现有方法,能够更好地混合不同批次的数据,同时保持生物学结构。

生成质量

与真实多组学数据的比较:

  • 生成的人工多组学数据与真实多组学数据在细胞类型分布、基因表达模式、染色质可及性模式上高度一致
  • 跨模态相关性(如基因表达与启动子可及性的相关性)得到良好保持

下游任务性能:

  • 使用生成的数据进行细胞类型注释,准确率达到 90% 以上
  • 使用生成的数据推断基因调控网络,与真实数据推断的网络高度重合

三模态整合

在 TEA-seq 骨髓数据集上的评估:

  • 成功整合 RNA、ATAC 和蛋白质三种模态
  • 生成的三模态数据能够揭示三种模态之间的复杂关系
  • 发现了新的跨模态生物学关联

可扩展性

scPairing 在计算效率上表现良好:

  • 训练时间:在 10,000 个细胞的数据集上训练约 30 分钟(使用单个 GPU)
  • 推理时间:投影 100,000 个细胞到嵌入空间约 5 分钟
  • 内存占用:适中,可在标准工作站上运行

安装和使用

安装方法

从 GitHub 安装:

1
2
3
4
5
# 基础安装
pip install git+https://github.com/Ding-Group/scPairing.git

# 包含教程依赖的安装
pip install "scPairing[tutorials]@git+https://github.com/Ding-Group/scPairing.git"

基本使用

步骤 1:准备数据

1
2
3
4
5
6
7
8
9
10
import scanpy as sc
import anndata as ad

# 加载配对的多组学数据(桥接数据)
rna_bridge = sc.read_h5ad('rna_bridge.h5ad')
atac_bridge = sc.read_h5ad('atac_bridge.h5ad')

# 加载单模态数据
rna_query = sc.read_h5ad('rna_query.h5ad')
atac_query = sc.read_h5ad('atac_query.h5ad')

步骤 2:训练 scPairing 模型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from scPairing import scPairing

# 初始化模型
model = scPairing(
rna_bridge,
atac_bridge,
latent_dim=20,
hidden_dim=256,
n_layers=2
)

# 训练模型
model.train(
n_epochs=100,
lr=1e-3,
batch_size=128
)

步骤 3:投影单模态数据到嵌入空间

1
2
3
4
5
# 投影 RNA 数据
_, rna_latents = model.get_cross_modality_expression(True, rna_query)

# 投影 ATAC 数据
_, atac_latents = model.get_cross_modality_expression(False, atac_query)

步骤 4:执行桥接整合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from sklearn.metrics.pairwise import cosine_similarity
from scipy.optimize import linear_sum_assignment

# 计算相似度矩阵
sim_matrix = cosine_similarity(rna_latents, atac_latents)

# 设置相似度阈值
CUTOFF = 0.8
sim_matrix[sim_matrix < CUTOFF] = 0

# 最大权重二部图匹配
rna_ind, atac_ind = linear_sum_assignment(sim_matrix, maximize=True)

# 过滤低相似度配对
use = sim_matrix[rna_ind, atac_ind] != 0

# 生成配对数据
paired_rna = rna_query[rna_ind[use]]
paired_atac = atac_query[atac_ind[use]]

步骤 5:下游分析

1
2
# 使用生成的多组学数据进行下游分析
# 例如:细胞类型注释、调控网络推断等

三模态使用

1
2
3
4
5
6
7
8
9
10
11
12
from scPairing import triscPairing

# 初始化三模态模型
model = triscPairing(
rna_bridge,
atac_bridge,
protein_bridge,
latent_dim=20
)

# 训练和使用方法与双模态类似
model.train(n_epochs=100)

应用案例

案例 1:视网膜细胞多组学数据生成

研究团队使用 scPairing 从大规模的视网膜 scRNA-seq 和 scATAC-seq 数据生成了人工多组学数据:

  • 使用少量 SHARE-seq 视网膜数据作为桥接
  • 整合了超过 100,000 个细胞的单模态数据
  • 生成的数据揭示了视网膜细胞类型特异性的基因调控网络
  • 发现了新的转录因子-靶基因关系

案例 2:免疫细胞三模态数据生成

使用 TEA-seq 骨髓数据作为桥接,生成了大规模的三模态免疫细胞数据:

  • 整合了 RNA、ATAC 和表面蛋白质三种模态
  • 揭示了免疫细胞分化过程中的多层次调控机制
  • 发现了表面标记物、基因表达和染色质状态之间的关联

案例 3:肾脏细胞跨物种整合

使用 scPairing 整合了人类和小鼠的肾脏单细胞数据:

  • 识别了保守的细胞类型和调控程序
  • 发现了物种特异性的基因调控差异
  • 为肾脏疾病研究提供了跨物种比较的基础

优势与局限

优势

  1. 数据效率高:只需少量配对数据即可生成大规模人工多组学数据
  2. 生成质量好:生成的数据在多个评估指标上接近真实多组学数据
  3. 灵活性强:支持双模态和三模态数据,可适应不同的数据类型
  4. 计算效率高:训练和推理速度快,可在标准硬件上运行
  5. 易于使用:提供了清晰的 API 和详细的教程

局限

  1. 依赖桥接数据质量:如果桥接数据质量差或代表性不足,生成的数据质量会受影响
  2. 相似度阈值选择:需要手动设置相似度阈值,可能影响配对结果
  3. 批次效应:如果单模态数据存在严重的批次效应,可能影响整合效果
  4. 模态特异性:不同模态的数据特性差异较大时,整合难度增加
  5. 验证困难:生成的人工数据难以与真实数据完全对应,验证其生物学准确性具有挑战性

与其他方法的比较

特性 scPairing Seurat v4 Harmony scVI MOFA+
多组学整合 支持 支持 有限 支持 支持
数据生成 支持 不支持 不支持 有限 不支持
三模态支持 支持 有限 不支持 不支持 支持
桥接整合 支持 不支持 不支持 不支持 不支持
计算效率 高 中 高 中 低
易用性 高 高 高 中 中

scPairing 的独特优势在于其桥接整合能力,能够利用少量配对数据生成大规模人工多组学数据,这是其他方法所不具备的。


代码可用性

scPairing 的代码已在 GitHub 上开源:

代码结构:

  • src/scPairing/:核心代码
  • docs/:API 文档
  • tutorials/:使用教程
  • pyproject.toml 和 setup.cfg:安装配置文件

总结

scPairing 是一个创新的单细胞多组学数据整合与生成框架,通过桥接整合方法解决了多组学数据稀缺和成本高昂的问题。其主要创新点包括:

  1. 桥接整合策略:利用少量配对数据作为桥接,生成大规模人工多组学数据
  2. 增强的 VAE 架构:将不同模态映射到共同的超球面嵌入空间,保持生物学结构
  3. 对比学习:受 CLIP 启发,使用对比损失对齐不同模态的嵌入
  4. 对抗性训练:
    • 模态判别器:确保 RNA 和 ATAC 嵌入无法被区分,增强模态对齐
    • 批次判别器:消除嵌入中的批次效应,防止细胞按批次过度分离
  5. 低维表示输入:接受来自 PCA、LSI、scVI、scGPT 等方法的低维表示,提高计算效率
  6. 三模态扩展:支持同时整合三种模态的数据
  7. 高质量生成:生成的数据在多个评估指标上接近真实多组学数据

scPairing 为单细胞多组学研究提供了一个实用的工具,特别适合以下场景:

  • 缺乏大规模多组学数据但有丰富的单模态数据
  • 需要探索跨模态的生物学关系
  • 希望降低多组学实验成本
  • 需要验证生物学假设但缺乏实验数据
  • 需要消除批次效应同时保持生物学结构

随着单细胞技术的发展,scPairing 有望在多组学数据整合和生成领域发挥重要作用。


个人点评

和我的方法不能说是高度相似,简直可以说是英雄所见略同啊!但不同的地方有以下几点:

  1. 最重要的:scPairing必须需要配对数据
  2. scPairing 的编码器的输入也是低维嵌入,解码器的输出是高维的原始数据,这使得它可以具有生成能力
  3. 在使用单细胞多组学数据作为“桥梁”训练后,使用二部图匹配,能够生成人工配对多组学数据(artificially paired multiomics data)
  4. 引入了批次判别器+模态判别器,以更好地混合批次与模态。但我个人觉得可能会引入过矫正的问题
  5. 额外引入了余弦相似度对齐损失,据称可以提高细胞配对成功率
  6. 实现了三组学整合和生成
  7. 在图谱级数据上做了实验,这个工作量确实不小。
  8. 感觉它做的也还是比较全面的,图也不错,个人认为值得更好的期刊,最后发了个CRM,我也不亏0.0
  9. 补充一点:它利用金标准的配对数据进行学习,不存在 ATAC-RNA 时空不匹配的问题,避免了纯算法配对的这一硬伤局限性。

相关链接