【论文分享】CellWhisperer-基于自然语言的单细胞数据探索工具
个人推荐指数:⭐️⭐️⭐️⭐️
CellWhisperer 简介
CellWhisperer 是一个多模态 AI 模型,它将转录组数据与自然语言相结合,使用户能够通过自然语言对话的方式探索单细胞 RNA 测序(scRNA-seq)数据。该工具发表于 Nature Biotechnology(2025年11月)。
CellWhisperer 的核心功能包括:
- 自由文本搜索:例如”Show me tissue-resident T cells in the intestine”
- 回答关于细胞的各种问题:例如”What are these selected cells?”、”Which genes are highly expressed in these cells?”
- 基于转录组数据和 LLM 的生物学知识生成回答
CellWhisperer 由两个相互关联的 AI 模型组成:
CellWhisperer Embedding Model(嵌入模型):通过多模态对比学习,将 RNA 表达谱与其文本注释整合到一个联合嵌入空间中。训练数据包含超过 100 万个转录组及其自然语言描述,来源于 GEO 和 CELLxGENE Census 两个大型数据库。
CellWhisperer Chat Model(对话模型):基于 Mistral 7B 开源 LLM 进行微调,能够在考虑用户提供的转录组数据的同时回答自由文本问题。
方法原理
训练数据准备
CellWhisperer 的训练数据包含 1,082,413 对人类 RNA-seq 表达谱及其匹配的文本注释:
- 从 GEO 数据库获取 705,430 个bulk RNA-seq 转录组数据,使用 ARCHS4 统一重处理的数据
- 从 CELLxGENE Census 获取 376,983 个scRNA-seq 衍生的伪批量谱(pseudo-bulk)转录组
- 使用 LLM 辅助策划,将上述转录组样本或细胞组附带的原始、分散的元数据(如细胞类型、组织、疾病、实验方法等)浓缩并转换为简洁、连贯且具有生物学信息量的自然语言描述(即文本注释)。
- 例子:
- 原始分散的元数据:“疾病:肾细胞癌”,“阶段:2”,“性别:男性”
- 整合后的自然语言描述:“Renal cell carcinoma tissue sample taken from a male individual at stage 2, with no metastasis, preserved in formalin-fixed paraffin-embedded blocks”
嵌入模型架构
CellWhisperer 采用 CLIP(对比语言图像预训练)架构:
- 转录组编码器:使用 Geneformer 模型处理基因表达数据
- 文本编码器:使用 BioBERT 模型处理生物医学文本
- 两个编码器的输出通过前馈神经网络映射到 2,048 维的多模态嵌入空间
- 通过对比学习训练,使匹配的转录组-文本对在嵌入空间中靠近
对话模型
数据来源
- 从用于嵌入模型训练的 1,082,413 对人类 RNA-seq 表达谱及其匹配的文本注释中,优先选取低覆盖区域的 106,610 个转录组-文本对。
- 随后,对于这些文本对,使用 LLM 生成对话。结合以下三种信息作为输入语境:
- 50 个表达最高的基因(基于数据集上的归一化表达)。
- 50 个通过 GSVA(基因集变异分析)衍生的基因集。
- 转录组的文本注释(之前通过 AI 辅助策展生成)
- 生成的 106,610 个对话分为四种类型:
- 会话型对话 (Conversational chats, 81,610 个): 使用 Mixtral 8x7b 通过少样本提示(few-shot prompt)生成,模拟研究人员和 AI 助手之间包含多个问题和答案的自然对话。
- 简单对话 (Simple chats, 10,000 个): 使用通用问题(例如“这个样本代表什么?”),并使用转录组的文本注释作为指定答案。
- 详细对话 (Detailed chats, 10,000 个): 使用 GPT-4 通过零样本提示(zero-shot prompting)生成,答案比简单的文本注释更广泛。
- 复杂对话 (Complex chats, 5,000 个): 使用 GPT-4 通过少样本提示和预行动推理(pre-action reasoning)来生成更深入的问答对。
模型训练
- 第一阶段
- 目的:让模型学会如何将 CellWhisperer 多模态嵌入(transcriptome embeddings)转换为 LLM(Mistral 7B)能够理解的 token 嵌入。
- 保持 Mistral 7B LLM 冻结,只使用 “简单对话” (simple chats) 的扩展版本训练用于连接嵌入和 LLM 的两层转换模块(adapter layers)
这个转换模块(adapter layers)将 2,048 维的 CellWhisperer 多模态嵌入转换为 8 个 4,096 维的嵌入,这 8 个嵌入对应于 Mistral 7B LLM 中的 8 个 token 嵌入
- 第二阶段
- 目的:利用复杂、真实感的对话数据,让整个 LLM 体系能够进行连贯的、具有生物学洞察力的聊天。
- 解冻 Mistral LLM,并使用 106,610 个生成的训练对话对 LLM 和转换层进行微调。
性能评估
CellWhisperer 在多个基准测试中表现出色:
- 在 Tabula Sapiens 数据集上,区分 20 种常见细胞类型的 AUROC 达到 0.94
- 在 ImmGen 免疫细胞数据集上,AUROC 超过 0.99
- 零样本预测性能优于基于标记基因的方法,与经过微调的单细胞基础模型相当
安装和使用
环境安装
1 | # 克隆仓库(包含所有子模块) |
Docker 安装(可选)
1 | # 构建 Docker 镜像 |
分析自己的数据
步骤 1:准备数据集
将数据集放置在 <PROJECT_ROOT>/resources/<dataset_name>/read_count_table.h5ad
数据要求:
- 原始读数计数(int32 格式)存储在
.X或.layers["counts"]中 .var必须有唯一索引(如 Ensembl ID)和gene_name字段- 计数矩阵中不能有 NaN 值
- 建议过滤表达基因数少于 100 的细胞
步骤 2:处理数据集
1 | cd <PROJECT_ROOT>/src/cellxgene_preprocessing |
处理时间:在 CPU 上约 2 小时/10,000 细胞,GPU 可显著加速。
如需使用 GPT-4 生成聚类标签(推荐),设置:
1 | export OPENAI_API_KEY=sk-your-key |
步骤 3:启动 CellWhisperer
1 | conda activate cellwhisperer |
访问 http://localhost:5005 即可开始使用自然语言查询探索数据。
本地部署 AI 模型(可选)
默认情况下,Web 应用访问 https://cellwhisperer.bocklab.org 托管的 CellWhisperer API。如需本地运行:
嵌入模型(需要 4GB 显存)
在 cellxgene launch 命令中添加:
1 | --cellwhisperer-clip-model <PROJECT_ROOT>/results/models/jointemb/cellwhisperer_clip_v1.ckpt |
对话模型(需要 20GB 显存)
启动控制器:
1 | conda activate llava |
启动模型工作器:
1 | conda activate llava |
相关链接
- 官方网站:https://cellwhisperer.bocklab.org
- GitHub 仓库:https://github.com/epigen/cellwhisperer
- Nature Biotechnology 文章:https://www.nature.com/articles/s41587-025-02857-9
- 训练数据和模型权重:http://medical-epigenomics.org/papers/schaefer2025cellwhisperer/
- GEO/ARCHS4 训练数据:https://medical-epigenomics.org/papers/schaefer2025cellwhisperer/data/datasets/archs4_geo/full_data.h5ad
- CELLxGENE Census 训练数据:https://medical-epigenomics.org/papers/schaefer2025cellwhisperer/data/datasets/cellxgene_census/full_data.h5ad