AICelltype | 79个当中表现最佳的大模型用于细胞类型注释

单细胞RNA测序极大地丰富了我们对细胞异质性的认识。然而,准确的细胞类型标注仍然是下游分析中的一个主要瓶颈。人工标注耗时费力,很大程度上依赖于专业的背景知识,并且缺乏可重复性。为此,人们开发了各种自动化方法,但这些方法在可扩展性、对不同生物系统的适应性或跨平台兼容性方面往往存在不足。

AICelltype 是一款由前沿大型语言模型“Claude 3.5 Sonnet”驱动的智能细胞类型标注工具。在对79个领先模型进行了全面的测试后,最终选取表现最佳的模型 (Claude 3.5 Sonnet),作为此工具的模型用于细胞类型注释。

pacman::p_load(dplyr, Seurat, AICellType)

pbmc.data <- Read10X(data.dir = "filtered_gene_bc_matrices/hg19")
pbmc <- CreateSeuratObject(counts = pbmc.data, project = "pbmc3k", min.cells = 3, min.features = 200)
pbmc
An object of class Seurat
13714 features across 2700 samples within 1 assay
Active assay: RNA (13714 features, 0 variable features)
 1 layer present: counts

pbmc[["percent.mt"]] <- PercentageFeatureSet(pbmc, pattern = "^MT-")
pbmc <- subset(pbmc, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5)
pbmc <- NormalizeData(pbmc)
pbmc <- FindVariableFeatures(pbmc, selection.method = "vst", nfeatures = 2000)
all.genes <- rownames(pbmc)
pbmc <- ScaleData(pbmc, features = all.genes)
pbmc <- RunPCA(pbmc, features = VariableFeatures(object = pbmc))
pbmc <- FindNeighbors(pbmc, dims = 1:10)
pbmc <- FindClusters(pbmc, resolution = 0.5)
pbmc
An object of class Seurat
13714 features across 2638 samples within 1 assay
Active assay: RNA (13714 features, 2000 variable features)
 3 layers present: counts, data, scale.data
 1 dimensional reduction calculated: pca

前期数据处理到这就可以进行细胞类型注释了,注释过程很简单一行代码搞定:

pbmc <- AnnotateCelltype(scRNA=pbmc, tissuename="PBMC")
Calculating cluster 0
Calculating cluster 1
Calculating cluster 2
Calculating cluster 3
Calculating cluster 4
Calculating cluster 5
Calculating cluster 6
Calculating cluster 7
Calculating cluster 8
[1] "claude-3-5-sonnet-20240620"

但不出意外的话意外就该出现了,估计还是会遇到如下所示的错误:

[1] "httr2 API call error: Failed to perform HTTP request. \n"
Error in resp_body_json():
! resp must be an HTTP response object, not a function.
Run rlang::last_trace() to see where the error occurred.

错误提醒已经挺明显了,稍微懂点英语的人应该就可以理解,网络访问发生了错误。引发网络错误的原因很多,例如API网址或者api_key无法正常使用了,具体原因这里就不讨论了。

上面的方式比较简单,一键式注释,其中内置了差异基因的步骤,使用默认参数来寻找差异基因,然后每个分组的差异基因选取前10个基因作为marker用于注释细胞类型。

那么,如果想精细控制差异基因的寻找过程及marker基因,可以用下面的过程:

pbmc.markers <- FindAllMarkers(pbmc, only.pos = TRUE)
top10 <- pbmc.markers %>% group_by(cluster) %>% dplyr::filter(avg_log2FC > 1) %>% slice_head(n = 10) %>% ungroup()
markergenes<- SeuratMarkerGeneToStr(top10)
celltype <- GetCellType(markergenes=markergenes, tissuename="PBMC")
new.cluster.ids <- sapply(celltypes$content, `[[`, 1)
names(new.cluster.ids) <- levels(pbmc)
pbmc <- RenameIdents(pbmc, new.cluster.ids)

从前面的错误提示可知,软件自带的API是无法使用了。如果还继续想用这个软件需要提供自己使用的大模型API网址和api_key,也就是自定义设置AnnotateCelltype或者GetCellType函数的参数,代码类似如下:

pbmc <- AnnotateCelltype(scRNA = pbmc, tissuename = "PBMC", model = "openai/gpt-4", base_url = "https://openrouter.ai/api/v1/chat/completions", api_key ="your-key")

如果想自定义模型的参数,建议还是用GetCellType这个过程,因为AnnotateCelltype函数有BUG (这里使用软件的版本为1.0.0),内部把base_urlapi_key两个参数写死了,自定义无效。

除了软件外,还有配套一个在线注释网站,昨天还可以正常使用,今天网站却没法访问了:

用大模型做细胞类型注释,核心过程是API调用,其实也是网络访问,不论是软件还是网站,最核心的过程代码类似如下:

request_body <- list(tissue = "PBMC", markergenes = markergenes, temperature = 0.1)
response <- request(base_url) %>% req_headers(`Content-Type` = "application/json") %>% req_timeout(seconds = 200) %>% req_body_json(request_body) %>% req_perform()
result <- bind_rows(lapply(resp_body_json(response), function(x) {if(is.null(x$basis)){x$basis <- NA}; as_tibble(x)}))

作者居然测试了温度对模型的影响,使用软件时可以设置temperature参数。经测试AICellType对温度变化具有极高的稳定性,在0.1-0.3范围内保持100%一致。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容