AICelltype | 79個(gè)當(dāng)中表現(xiàn)最佳的大模型用于細(xì)胞類型注釋

單細(xì)胞RNA測序極大地豐富了我們對(duì)細(xì)胞異質(zhì)性的認(rèn)識(shí)。然而,準(zhǔn)確的細(xì)胞類型標(biāo)注仍然是下游分析中的一個(gè)主要瓶頸。人工標(biāo)注耗時(shí)費(fèi)力,很大程度上依賴于專業(yè)的背景知識(shí),并且缺乏可重復(fù)性。為此,人們開發(fā)了各種自動(dòng)化方法,但這些方法在可擴(kuò)展性、對(duì)不同生物系統(tǒng)的適應(yīng)性或跨平臺(tái)兼容性方面往往存在不足。

AICelltype 是一款由前沿大型語言模型“Claude 3.5 Sonnet”驅(qū)動(dòng)的智能細(xì)胞類型標(biāo)注工具。在對(duì)79個(gè)領(lǐng)先模型進(jìn)行了全面的測試后,最終選取表現(xiàn)最佳的模型 (Claude 3.5 Sonnet),作為此工具的模型用于細(xì)胞類型注釋。

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

前期數(shù)據(jù)處理到這就可以進(jìn)行細(xì)胞類型注釋了,注釋過程很簡單一行代碼搞定:

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"

但不出意外的話意外就該出現(xiàn)了,估計(jì)還是會(huì)遇到如下所示的錯(cuò)誤:

[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.

錯(cuò)誤提醒已經(jīng)挺明顯了,稍微懂點(diǎn)英語的人應(yīng)該就可以理解,網(wǎng)絡(luò)訪問發(fā)生了錯(cuò)誤。引發(fā)網(wǎng)絡(luò)錯(cuò)誤的原因很多,例如API網(wǎng)址或者api_key無法正常使用了,具體原因這里就不討論了。

上面的方式比較簡單,一鍵式注釋,其中內(nèi)置了差異基因的步驟,使用默認(rèn)參數(shù)來尋找差異基因,然后每個(gè)分組的差異基因選取前10個(gè)基因作為marker用于注釋細(xì)胞類型。

那么,如果想精細(xì)控制差異基因的尋找過程及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)

從前面的錯(cuò)誤提示可知,軟件自帶的API是無法使用了。如果還繼續(xù)想用這個(gè)軟件需要提供自己使用的大模型API網(wǎng)址和api_key,也就是自定義設(shè)置AnnotateCelltype或者GetCellType函數(shù)的參數(shù),代碼類似如下:

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

如果想自定義模型的參數(shù),建議還是用GetCellType這個(gè)過程,因?yàn)?code>AnnotateCelltype函數(shù)有BUG (這里使用軟件的版本為1.0.0),內(nèi)部把base_url、api_key兩個(gè)參數(shù)寫死了,自定義無效。

除了軟件外,還有配套一個(gè)在線注釋網(wǎng)站,昨天還可以正常使用,今天網(wǎng)站卻沒法訪問了:

用大模型做細(xì)胞類型注釋,核心過程是API調(diào)用,其實(shí)也是網(wǎng)絡(luò)訪問,不論是軟件還是網(wǎng)站,最核心的過程代碼類似如下:

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)}))

作者居然測試了溫度對(duì)模型的影響,使用軟件時(shí)可以設(shè)置temperature參數(shù)。經(jīng)測試AICellType對(duì)溫度變化具有極高的穩(wěn)定性,在0.1-0.3范圍內(nèi)保持100%一致。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容