scDeepSort
ZJUFanLab/scDeepSort加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
一个真实的场景:某医院实验室用10X Genomics平台对肿瘤组织进行了单细胞RNA测序(scRNA-seq),获得了 5,000 个细胞的基因表达矩阵。测序公司交付了原始数据,生物信息学工程师开始分析——但摆在面前的第一个问题,不是差异基因分析,不是轨迹推断,而是:这 5,000 个细胞里,有哪些是T细胞,哪些是巨噬细胞,哪些是肿瘤细胞?它们各自的比例是多少?
传统方法是查文献、手动注释——用已知的标记基因(marker genes)去对照每个细胞。比如"T细胞通常高表达CD3D、CD3E","巨噬细胞高表达CD68"。但当一个组织包含几十种细胞类型,且某些细胞处于过渡状态时,这种"查字典"式的方法不仅耗时耗力,而且高度依赖经验,同一张图不同人可能标出截然不同的结果。
这就是 scDeepSort 试图解决的问题。它是一个预训练的单细胞细胞类型自动注释工具,由浙江大学研究团队开发,基于**加权图神经网络(Weighted Graph Neural Network, Weighted GNN)**对细胞进行分类。在 764,741 个真实细胞、覆盖人和小鼠 88 种组织的大规模数据上预训练后,可以对新的单细胞数据进行自动细胞类型注释——无需重新训练,开箱即用。
单细胞RNA测序技术(scRNA-seq)在2010年代迅速崛起,改变了生物医学研究的格局。与传统Bulk RNA测序不同,scRNA-seq 可以解析每个细胞独立的转录组,使研究者能够发现组织中此前未知的细胞类型、揭示细胞分化轨迹、理解肿瘤微环境异质性。2019年,10X Genomics Chromium平台的普及更是让单细胞测序从"奢侈品"变成"常规武器"。
然而,技术的进步带来了新的瓶颈:数据注释的效率问题。一个典型的人类组织单细胞数据集可能包含上万个细胞、涉及数十种细胞类型。手动注释不仅耗时数天,而且结果的可重复性差——不同实验室、不同分析师可能给出不一致的结论。
学术界的应对策略分为两派:
scDeepSort 走的是第三条路——预训练深度学习模型 + 图神经网络。研究团队的思路是:既然 scRNA-seq 数据天然具有图结构(细胞之间通过基因表达相似性相连),用图神经网络来建模这种关系,再在海量标注数据上训练一个通用的细胞分类器,就能实现既准确、又可迁移的细胞类型注释。
scDeepSort 的核心创新在于将单细胞数据建模为异构图(Heterogeneous Graph)。
在 scDeepSort 中,图的节点分为两类:
边也分为三类:
这种建模方式的优势在于:传统的深度学习方法(如CNN/RNN)需要将细胞表达向量展平成一维后处理,但 GNN 可以保留细胞之间的拓扑关系,让模型学习到"哪些细胞群在图上紧密相连"这一结构信息。
scDeepSort 最重要的技术创新是可学习的边权重机制(Weighted GNN)。在消息传递(Message Passing)阶段,每条边的重要性不是固定的,而是由一个可学习参数 alpha 动态决定的:
h = edges.src['h'] * alpha[edge_type] * edge_weight
其中 alpha 是一个可学习的向量,对三种边类型(细胞→基因、基因→细胞、基因→基因)分别学习最优权重。这使得模型可以自适应地决定"我应该更信任细胞→基因的信号,还是基因→基因的共表达信号"。
从模型架构看,核心代码只有约200行Python(PyTorch + DGL),但每个组件都经过精心设计:
NodeUpdate 类:实现图卷积中的节点更新操作,使用 Xavier 初始化GNN 类:封装多层图卷积、注意力权重学习和最终分类层message_func:自定义消息函数,实现加权消息传递scDeepSort 在两个大规模数据集上预训练:
预训练完成后,对于新的单细胞数据,用户只需要:
DeepSortPredictor 加载预训练模型整个过程不需要GPU从头训练,CPU即可完成推理。
scDeepSort/
├── models/
│ └── gnn.py # 核心 GNN 模型定义
├── utils/
│ ├── preprocess.py # 数据预处理(建图、归一化)
│ └── preprocess_internal.py
├── train.py # 自定义训练脚本
├── predict.py # 推理脚本(CLI入口)
└── pre-process.R # R语言数据预处理(Seurat依赖)
| 组件 | 版本 | 作用 |
|---|---|---|
| PyTorch | 1.6.0 | 深度学习框架 |
| DGL (Deep Graph Library) | 0.4.3 | 图神经网络实现 |
| scipy | 1.3.1 | 稀疏矩阵运算 |
| pandas/numpy | - | 数据处理 |
| Seurat (R) | >3.6 | 原始数据标准化 |
原始CSV (单细胞表达矩阵)
→ pre-process.R (Seurat LogNormalize 标准化)
→ Python 预处理 (构建异构图)
→ GNN 推理 (DeepSortPredictor)
→ 细胞类型标签输出
值得注意的是,项目提供了预训练模型(从 Releases 下载),用户无需从头训练即可使用。对于需要在自己数据上微调的进阶用户,也提供了 train.py 进行自定义训练。
从代码结构来看,这是一个典型的学术原型项目,而非生产级软件:
scDeepSort 代表了单细胞生物信息学领域的一个明确趋势:从"手工查字典"向"智能预训练模型"的转变。2021年发表在Nucleic Acids Research上以来,它已被多个单细胞研究项目作为基准工具使用。
对于AI领域的研究者和开发者来说,scDeepSort 的价值在于提供了一个跨学科融合的范本:图神经网络这一深度学习技术,在生物信息学领域找到了天然的应用场景(单细胞数据的图结构天然适合GNN建模)。如果你对GNN的应用边界感兴趣,这个项目是一个很好的切入点——它展示了GNN在非自然语言、非图像领域的成功实践。
对于湿实验背景的生物学家,scDeepSort 的门槛需要客观看待:R语言的预处理流程是绕不过去的坎。建议从官方文档(https://scdeepsort.readthedocs.io)开始,按照"安装→预处理→推理"的三步流程逐步尝试。如果在R环境配置上遇到困难,可以寻求实验室的生物信息学同事帮助。
总的来说,scDeepSort 是一个有明确应用场景、核心技术扎实、但工程化程度有限的科研工具。它不是解决所有单细胞注释问题的银弹,但在处理人类和小鼠常见组织的scRNA-seq数据时,确实是一个值得纳入工具箱的选择。