细胞注释:基于人工智能

· Analysis Notes

细胞注释:基于人工智能

Cell Annotation: AI-based

细胞注释:基于人工智能的方法

TL;DR: 使用基础模型(如 scGPT)或大型语言模型(如 GPT-4)进行自动化的细胞类型注释。scGPT 直接从单细胞数据中学习;GPTcelltype 使用标记基因列表作为提示。两者均可与 Seurat 集成,并减少手动注释时间。


为何使用人工智能进行细胞注释?

传统的注释方法依赖于手动查找标记基因和专家知识。基于人工智能的方法提供:

  • 速度: 数秒内注释数千个细胞簇
  • 一致性: 在不同数据集间可重复
  • 可扩展性: 处理稀有细胞类型和新组织
  • 知识整合: 利用数百万个已注释细胞或生物医学文献

方法比较

方法 类型 输入 训练数据 最佳适用场景
scGPT 基础模型 基因表达 3300 万个细胞 新型细胞类型、跨物种
GPTcelltype 大型语言模型 (GPT-4) 标记基因列表 生物医学文本 标准组织、快速注释
scimilarity 细胞嵌入 表达谱 参考图谱 已知细胞类型

方法一:scGPT(基础模型)

scGPT 是一个在 3300 万个细胞上预训练的 Transformer 模型。它直接从基因表达中学习细胞类型表征。

何时使用

  • ✅ 新型或特征不明确的细胞类型
  • ✅ 跨物种注释
  • ✅ 与扰动分析集成
  • ⚠️ 需要 GPU 和 Python 环境

安装

# 创建 conda 环境(需要 Python 3.7-3.10)
conda create -n scGPT python=3.10 r-base
conda activate scGPT

# 安装稳定版本
pip install scgpt

# 或使用 Poetry 安装开发版本
curl -sSL https://install.python-poetry.org | python3 -
poetry install  # 在 scGPT 仓库目录中

注意: scGPT 在 GPU 上运行效果最佳。如果仅使用 CPU,请在推理调用中设置 device='cpu'。

基本用法

import scgpt

# 加载预训练模型
model = scgpt.load_model("scGPT_human")

# 注释 Scanpy AnnData 对象
adata = sc.read_h5ad("pbmc.h5ad")
predictions = scgpt.tasks.cell_type_annotation(model, adata)

# 将预测结果添加到元数据
adata.obs['scGPT_celltype'] = predictions

与 R/Seurat 集成

使用 reticulate 从 R 调用 scGPT:

library(reticulate)
library(Seurat)

# 转换到 scGPT 的 conda 环境
sc <- use_condaenv("scGPT")
scgpt <- import("scgpt")
anndata <- import("anndata")

# 导出 Seurat 对象
SaveH5Seurat(pbmc, "pbmc.h5seurat")
Convert("pbmc.h5seurat", dest = "h5ad")

# 运行 scGPT 注释(在 Python 中)
adata <- anndata$read_h5ad("pbmc.h5ad")
predictions <- scgpt$tasks$cell_type_annotation(model, adata)

# 将结果导入回 Seurat
pbmc$scGPT_celltype <- predictions

方法二:GPTcelltype(基于大型语言模型)

GPTcelltype 使用 OpenAI 的 GPT-4 从标记基因列表推断细胞类型。它与 Seurat 工作流无缝集成。

何时使用

  • ✅ 标准组织(PBMC、脑、肺等)
  • ✅ 无需复杂设置即可快速注释
  • ✅ 基于 Seurat 的工作流
  • ⚠️ 需要 OpenAI API 密钥(需付费)
  • ⚠️ 存在 AI 幻觉风险

安装

# 从 GitHub 安装
if (!requireNamespace("devtools")) install.packages("devtools")
devtools::install_github("Winnie09/GPTCelltype")

library(GPTCelltype)

设置 API 密钥

从 platform.openai.com/api-keys 获取您的 API 密钥:

# 设置 API 密钥(或添加到 .Renviron 文件)
Sys.setenv(OPENAI_API_KEY = "sk-...")

# 验证
Sys.getenv("OPENAI_API_KEY")

与 Seurat 结合的基本用法

library(Seurat)
library(GPTCelltype)

# 加载 PBMC 数据
pbmc <- readRDS("pbmc_clustered.rds")

# 为所有簇寻找标记基因
all.markers <- FindAllMarkers(pbmc, only.pos = TRUE)

# 使用 GPT-4 进行注释
celltypes <- gptcelltype(
  input = all.markers,
  tissuename = "human PBMC",
  model = "gpt-4",
  topgenenumber = 10
)

# 将注释添加到 Seurat 对象
names(celltypes) <- levels(pbmc$seurat_clusters)
pbmc$GPT_celltype <- celltypes[pbmc$seurat_clusters]

自定义基因列表

# 手动定义标记基因集
markers <- list(
  cluster0 = c("CD3D", "CD3E", "CD4"),
  cluster1 = c("CD14", "LYZ", "S100A8"),
  cluster2 = c("CD79A", "MS4A1", "CD19")
)

# 注释
celltypes <- gptcelltype(
  input = markers,
  tissuename = "PBMC",
  model = "gpt-4"
)

成本考量

GPTcelltype 使用 OpenAI API:

  • GPT-4: 每次注释运行约 $0.03(30 个簇)
  • GPT-3.5-turbo: 更便宜但准确性较低
# 使用 GPT-3.5 以节省成本
celltypes <- gptcelltype(all.markers, model = "gpt-3.5-turbo")

方法三:scimilarity(基于参考)

scimilarity 使用来自参考图谱的预计算细胞嵌入。

快速开始

from scimilarity import CellAnnotation

# 使用 CellTypist 模型加载注释器
annotator = CellAnnotation(model="human_immune")

# 注释
predictions = annotator.predict(adata)
adata.obs['scimilarity_celltype'] = predictions

最佳适用场景: 当参考图谱与您的组织匹配时,进行快速注释。


比较与建议

选择 scGPT 如果:

  • 研究稀有/新型细胞类型
  • 处理非人类物种
  • 需要嵌入用于下游任务

选择 GPTcelltype 如果:

  • 分析标准组织(PBMC、肿瘤、脑)
  • 希望无需 Python 设置即可快速注释
  • 已在使用 Seurat

选择 scimilarity 如果:

  • 您的组织在参考数据中有良好代表性
  • 需要快速、轻量级的注释
  • 在 Python(Scanpy)环境中工作

验证最佳实践

务必验证 AI 预测结果:

  1. 检查已知标记基因

    # 经典标记基因的小提琴图
    VlnPlot(pbmc, features = c("CD3D", "CD14", "MS4A1"), 
            group.by = "GPT_celltype")
    
  2. 与手动注释比较

    # 混淆矩阵
    table(Manual = pbmc$manual_celltype, 
          AI = pbmc$GPT_celltype)
    
  3. 审查低置信度预测

    • scGPT:检查预测概率
    • GPTcelltype:检查提示中使用的标记基因
  4. 使用多种方法

    # 共识注释
    pbmc$consensus <- ifelse(
      pbmc$scGPT_celltype == pbmc$GPT_celltype,
      pbmc$scGPT_celltype,
      "Ambiguous"
    )
    

故障排除

GPTcelltype API 错误

错误: "Rate limit exceeded"
修复: 在请求间添加延迟或升级 API 计划

scGPT 内存错误

错误: CUDA 内存不足
修复: 减小批次大小或使用 CPU 模式:

predictions = scgpt.tasks.cell_type_annotation(
    model, adata, device='cpu', batch_size=32
)

预测结果不一致

原因: 标记基因不足或聚类效果不佳
修复: 增加 topgenenumber 或优化聚类分辨率


资源


另请参阅:

Cell Annotation