首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >SATURN:跨物种的单细胞数据集整合

SATURN:跨物种的单细胞数据集整合

作者头像
生信菜鸟团
发布2025-11-19 19:30:03
发布2025-11-19 19:30:03
220
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团

Toward universal cell embeddings: integrating single-cell RNA-seq datasets across species with SATURN 刊登日期:16 February 2024 发表杂志:nature methods IF:32.1

跨物种整合的主要挑战在于不同数据集包含不同的基因,而这些基因之间可能不存在一一对应的同源关系。如果仅将每个物种的基因集合限制为共有的“一对一”同源基因,将导致大量生物学相关信息的丢失。SATURN 通过把“蛋白嵌入 + RNA 表达”耦合,提出了宏基因"macrogene"的概念,从而克服了这一问题。

SATURN模型原理

1. 输入与宏基因初始化

首先,模型的输入是:

  • 多个物种的 scRNA-seq 原始 count 数据集,每个数据集都需要带有细胞类型标签(本身自带的或者可以通过聚类获得);
  • 蛋白质序列信息:每个基因对应的氨基酸序列。

然后使用蛋白质语言模型 ESM2 处理每个基因的蛋白质序列,为每个基因生成一个 5120 维的高维向量,这个向量可以捕捉蛋白质的结构和功能特性,具体实现细节可以看https://www.science.org/doi/10.1126/science.ade2574这篇论文。

接下来,SATURN 将所有物种的所有基因的蛋白质嵌入向量聚集在一起,使用 k-means 聚类算法将这些向量划分为 M 个簇,每个簇的中心点,把它定义为一个宏基因,宏基因代表的是一组在蛋白质嵌入空间中相近,所以功能可能相关的基因。

对于每个基因 和每个宏基因 计算它们的欧式距离排秩,SATURN 可以通过距离的秩次计算得到一个初始权重 ,距离越近则权重越大,这个权重可以进行训练,且始终是个正值,确保每个基因都对与它功能相似的宏基因有正向贡献。

2. 预训练

(1)编码过程

对一个细胞的基因表达 ,通过基因-宏基因权重矩阵 聚合,从而计算宏基因的基因表达 ,将不同物种、不同名称但功能相似的基因的表达信号汇总到共享的宏基因上。然后,宏基因表达向量 通过一个编码器神经网络,生成一个低维的细胞嵌入 。

(2)解码过程

解码过程的目标是从低维细胞嵌入 重建原始的基因表达向量 。与编码过程相反,解码器需要将压缩的细胞信息"解压缩"回原始的基因表达空间。解码器包含三个并行的神经网络头,每个头负责生成零膨胀负二项分布(ZINB)的一个参数:均值参数 、分散度参数 和零膨胀参数 。

重构损失用于衡量解码器重建原始基因表达数据的能力,采用零膨胀负二项分布的负对数似然作为损失函数。为了防止训练过程中丢失蛋白质功能信息,SATURN 增加了一个正则化损失项,确保学习到的宏基因空间始终锚定在生物学功能上。

3. 微调

这一阶段通过弱监督学习来实现跨物种的细胞类型对齐。SATURN 使用三重边际损失,主要方法是:当前嵌入空间中,为一个物种(如青蛙)的某个细胞(锚点)寻找它在另一个物种(如斑马鱼)中的最近邻,然后检查这个最近邻细胞在其自身物种中的最近邻是否与原始锚点细胞属于同一细胞类型。如果是,则构成一个有效的正样本对,负样本则从不是正样本的细胞里随机选择。三重边际损失的目标是将锚点细胞与正样本细胞之间的距离拉近,同时将锚点细胞与负样本细胞之间的距离推远。

4. 输出与应用

经过上面的步骤,SATURN 最终生成了一个物种共享的、低维的细胞嵌入空间,这个空间中细胞之间的距离仅由它们的生物学类型和状态决定,而与它们来自哪个物种无关。这个通用的细胞嵌入可以用于跨物种的细胞标签转移、多物种联合的可视化、在宏基因层面进行差异表达分析、细胞类型重注释等等。

5. 限制

  • 需要物种有高质量的参考蛋白质组数据,对于许多非模式生物而言,这种参考数据可能不存在或者不完整,整合就会受到限制;
  • SATURN 的微调阶段严重依赖每个数据集内部预先提供的细胞类型标签,这些标签的质量将直接影响跨物种细胞类型对齐的效果;
  • 对于细胞数量极少的稀有细胞类型难以进行对齐。

蛋白嵌入向量的生成

使用 SATURN 进行跨物种整合之前首先需要利用 ESM2 模型将各个物种的蛋白质序列信息转换为蛋白嵌入向量,这里我整合的数据集是人和小鼠的。

先下载 FASTA 格式的人和小鼠蛋白序列数据:

代码语言:javascript
复制
mkdir proteome
cd proteome/
wget http://ftp.ensembl.org/pub/release-115/fasta/homo_sapiens/pep/Homo_sapiens.GRCh38.pep.all.fa.gz
wget http://ftp.ensembl.org/pub/release-115/fasta/mus_musculus/pep/Mus_musculus.GRCm39.pep.all.fa.gz
gunzip Homo_sapiens.GRCh38.pep.all.fa.gz
gunzip Mus_musculus.GRCm39.pep.all.fa.gz

接下来通过 clean_fasta.py 脚本去除包含终止密码子的序列,以便用于 ESM 模型:

代码语言:javascript
复制
python ../../../SATURN-main/protein_embeddings/clean_fasta.py --data_path Homo_sapiens.GRCh38.pep.all.fa --save_path Homo_sapiens.GRCh38.pep.all_clean.fa
代码语言:javascript
复制
Number of original sequences = 245,535
100%|███████████████████████████████████████████████████| 245535/245535 [00:01<00:00, 148168.20it/s]
Number of cleaned sequences = 245,383
代码语言:javascript
复制
python ../../../SATURN-main/protein_embeddings/clean_fasta.py --data_path Mus_musculus.GRCm39.pep.all.fa --save_path Mus_musculus.GRCm39.pep.all_clean.fa
代码语言:javascript
复制
Number of original sequences = 66,668
100%|███████████████████████████████████████████████████| 66668/66668 [00:00<00:00, 193554.76it/s]
Number of cleaned sequences = 66,565

指定一下 Torch hub 缓存目录:

代码语言:javascript
复制
export TORCH_HOME="$PWD"

然后使用 ESM2 来生成蛋白嵌入向量,具体见https://github.com/facebookresearch/esm

代码语言:javascript
复制
#!/bin/bash
#SBATCH --job-name=human_embedding
#SBATCH --partition=gpu
#SBATCH --gres=gpu:2
#SBATCH --cpus-per-task=8
#SBATCH --mem=200G
#SBATCH --output=logs/human_embedding_%j.log
#SBATCH --error=logs/human_embedding_%j.err

export PYTHONUNBUFFERED=1

python esm-main/scripts/extract.py \
        esm1b_t33_650M_UR50S \
        proteome/Homo_sapiens.GRCh38.pep.all_clean.fa \
        embedding/Homo_sapiens.GRCh38.pep.all_clean.fa_esm1b \
        --include mean

其中 esm1b_t33_650M_UR50S 指的是旧版 ESM 模型的权重文件,esm1b 表示模型第一代b版,t33 表示 Transformer 层数为 33 层,650M 表示可训练参数量约 650 million,UR50S 表示训练语料。模型会将每一个蛋白序列的嵌入向量生成一个单独的 .pt 文件并存储在embedding/Homo_sapiens.GRCh38.pep.all_clean.fa_esm1b 文件夹下。下面是运行时的部分输出:

代码语言:javascript
复制
Transferred model to GPU
Read proteome/Homo_sapiens.GRCh38.pep.all_clean.fa with 245383 sequences
Processing 1 of 31819 batches (372 sequences)
Processing 2 of 31819 batches (273 sequences)
Processing 3 of 31819 batches (227 sequences)
Processing 4 of 31819 batches (195 sequences)
Processing 5 of 31819 batches (178 sequences)
Processing 6 of 31819 batches (170 sequences)
Processing 7 of 31819 batches (157 sequences)
Processing 8 of 31819 batches (151 sequences)
Processing 9 of 31819 batches (141 sequences)

接下来按照类似的步骤对小鼠的蛋白序列生成嵌入向量:

代码语言:javascript
复制
#!/bin/bash
#SBATCH --job-name=mouse_embedding
#SBATCH --partition=gpu
#SBATCH --gres=gpu:2
#SBATCH --cpus-per-task=8
#SBATCH --mem=200G
#SBATCH --output=logs/mouse_embedding_%j.log
#SBATCH --error=logs/mouse_embedding_%j.err

export PYTHONUNBUFFERED=1

python esm-main/scripts/extract.py \
        esm1b_t33_650M_UR50S \
        proteome/Mus_musculus.GRCm39.pep.all_clean.fa \
        embedding/Mus_musculus.GRCm39.pep.all_clean.fa_esm1b \
        --include mean

这里的结果还需要等一段时间,今天先到这里,其他部分下次再分享~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SATURN模型原理
    • 1. 输入与宏基因初始化
    • 2. 预训练
      • (1)编码过程
      • (2)解码过程
    • 3. 微调
    • 4. 输出与应用
    • 5. 限制
  • 蛋白嵌入向量的生成
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档