Cell2Sentence:为LLM传输生物语言

像GPT这样的LLM在自然语言任务上表现出了令人印象深刻的性能。这里介绍一种新的方法,通过将基因表达数据表示为文本,让这些预训练的模型直接适应生物背景,特别是单细胞转录组学。具体来说,Cell2Sentence将每个细胞的基因表达谱转换为按表达水平排序的基因名称序列。实验证明,这些基因序列,称之为“cell sentences-细胞句子”,可以用来微调GPT-2等语言模型。至关重要的是,作者发现自然语言预训练可以提高模型在细胞句子任务中的性能。当对细胞句子进行微调时,GPT-2在提示细胞类型时会生成生物学合理的细胞。相反,当提示使用细胞句子时,它也可以准确预测细胞类型标签。这表明,使用Cell2Sentence微调的语言模型可以获得对单细胞数据的生物学理解,同时保留其生成文本的能力。该方法使用现有的模型和库将自然语言和转录组学结合起来。

来自:Cell2Sentence: Teaching Large Language Models the Language of Biology, ICML, 2024

fig1

  • 图1:Cell2Sentence框架概述。输入的单细胞数据(包括元数据)被转换为单细胞句子,用于语言模型微调。
  • 在推理时,新的细胞句子被生成,并且可以被转换回基因表达空间。

目录

  • 背景概述
    • 相关工作
  • 方法
    • 数据转换
    • 任务
  • 实验
    • 微调数据集
    • 训练的相关内容
      • 方式1:C2S预训练
      • 方式2:NL+C2S微调
    • 实验1:条件细胞生成

背景概述

将LLM应用于生物学等其他领域仍然是一个悬而未决的挑战。目前该领域的方法依然依赖于专门设计的神经网络,难以直接利用来自自然语言的LLM知识。

现在目标是将LLM的能力扩展到转录组学领域。关键思想是通过一种称为Cell2Sentence(C2S)的方法,以符合LLM的文本格式表示单细胞数据。C2S将每个细胞的基因表达谱转换为按表达水平排序的基因名称(也称为gene symbols)的序列。这允许任何预训练的因果语言模型在细胞序列上被进一步微调。其次,自然语言预训练结合C2S训练显著提高了转录组任务的模型性能,并且性能还随模型大小而扩展(scaling law)。我们不仅可以生成和解释转录组学数据,还可以用自然语言进行交互。

潜在的应用包括推断基因表达在扰动下的变化,生成罕见的细胞类型,识别marker,以及通过自然语言解释转录组学。这种能力可以协助我们推进单细胞研究。便利性包括两方面:

  • Easy to use:任何用户都可以使用流行的第三方库(如Hugging Face Transformer)轻松利用任何可用的预训练语言模型,这些库具有简化的模型部署和微调功能。唯一需要的额外步骤是将原始单细胞数据预处理为C2S格式,并将生成的文本后处理回基因表达向量,这两个步骤都是使用GitHub存储库中提供的模块化数据转换管道无缝完成的。
  • Easy to modify:训练管道的简单性意味着用户可以根据自己的喜好塑造预处理和训练步骤,例如通过添加更多元数据或特定提示。

fig2

  • 图2:Cell2Sentence框架的详细概述。通过基因名称的表达排序,将单细胞基因表达谱转化为细胞句子。这些细胞句子可以用生物学元数据进行注释,包括细胞类型、组织或疾病。随后,使用细胞句子对语言模型进行微调。在推理中,细胞句子是有条件地(例如,给定细胞类型或组织类型)和无条件地生成的。生成的细胞句子可以转换回基因表达谱。

相关工作

LLM
LLM已适用于自然语言处理领域中关于文本数据的广泛任务。一些关键任务和示例架构包括文本分类(LSTM、BERT、RoBERTa)、问答(LlaMA-2、Falcon)和文本生成(T5、GPT-3、BART)。

单细胞基础模型
目前已经存在了几个任务的体系结构,包括:细胞注释–根据细胞的生物学特性为其分配标签(ACTINN、scVI),批次整合–去除技术引起的转录物丰度差异(scVI、scGen、SAUCIE),以及插补–推断缺失的转录物丰度数据(scVI,DeepImpute、SAUCIE)。最近,GEO和人类细胞图谱(HCA)等努力集中并标准化了数百个单细胞实验在广泛组织中的数据,包括数亿次测量。目前已经根据这些数据设计和训练了几个模型(例如scGPT、scFoundation、Geneformer),目的是为单细胞转录组数据创建一个基础模型,类似于自然语言处理中的基础模型。

提示微调
自GPT-2引入以来,提示已成为从大模型中引出有意义行为的常见方法。最近,公开可用的数据集,如Alpaca,和数据集生成器,如FLAN,以及参数有效的微调PEFT,使训练自定义大语言模型成为可能。

方法

数据转换

Cell2Sentence转换的核心是将细胞表达矩阵重组为降序排列转录物丰度的基因名称序列。令 C C C表示具有 n n n k k k个基因的计数矩阵, C i , j C_{i,j} Ci,j表示在细胞 i i i中观察到的基因 j j j的RNA分子的数量。作者遵循scRNA-seq数据的标准预处理步骤:过滤表达少于200个基因的细胞和过滤在少于200个细胞中表达的基因。然后使用Scanpy Python库计算质量控制指标,并过滤出含有2500个计数以上或线粒体基因转录物计数超过20%的低质量细胞。计数矩阵然后被row-标准化(每个细胞的转录求和为10,000),再被log-标准化,得到处理后的矩阵 C ′ C' C,总结了标准化步骤为: C i , j ′ = l o g 10 ( 1 + 1 0 4 × C i , j ∑ j = 1 k C i , j ) C'_{i,j}=log_{10}(1+10^{4}\times \frac{C_{i,j}}{\sum_{j=1}^{k}C_{i,j}}) Ci,j=log10(1+104×j=1kCi,jCi,j)然后将rank-order应用在 C ′ C' C上得到 S S S,将 S ( C i ) S(C_{i}) S(Ci)产生的基因名称序列表示为细胞 i i i的细胞句子。在实践中,预处理和rank-order被应用在每个独立的数据集,为细胞句子生成提供了灵活性。

虽然基因在转录物基质中不是内在有序的,但它们的表达模式已被证明遵循rank频率模式(Furusawa&Kaneko,2003;邱等人,2013),因此,细胞内基因的表达水平与在该细胞中的基因rank之间建立了稳定的关系。作者用对数线性分布对这种rank关系进行建模,并使用线性回归在对数-对数空间中对其进行近似。

给定经过rank变换 S S S的单细胞数据集,设 r i r_i ri表示基因 i i i C ′ C^′ C中的rank的对数, e i e_i ei表示基因 i i i的原始表达。然后拟合线性模型,以在初始转换为细胞语句格式期间从 r i r_i ri预测 e i e_i ei,从而得到拟合的斜率和截距,并为每个转换的数据集保存(见图7)。对于给定的数据集 d d d,线性模型的参数 { a d , b d } ∈ R 2 \left\{a_{d},b_{d}\right\}\in\R^{2} {ad,bd}R2和形式为: e i = a d × r i + b i e_{i}=a_{d}\times r_{i}+b_{i} ei=ad×ri+bi
fig7

  • 图7:rank与expression之间的关系。

通过忽略无效基因名称并平均重复基因的rank来对生成的细胞句子进行后处理。然后将拟合的线性模型应用于生成的基因的log-rank,以转换回表达。任何不存在于细胞句子中的基因都被认为是零表达的。作者将属于一组独特基因 G U ⊆ S G_U⊆S GUS的生成基因 g i g e n g^{gen}_{i} gigen的平均rank定义如下: r i g e n = 1 ∣ G ∣ ∑ j = 1 ∣ G ∣ r a n k ( g j g e n ) r_{i}^{gen}=\frac{1}{|G|}\sum_{j=1}^{|G|}rank(g_{j}^{gen}) rigen=G1j=1Grank(gjgen)其中, G = { g 1 g e n , . . . , g n g e n } ⊆ S G=\left\{g_{1}^{gen},...,g_{n}^{gen}\right\}⊆S G={g1gen,...,gngen}S g i g e n g_{i}^{gen} gigen的重复生成基因的集合。

因此,生成细胞的基因表达为:
eq3

在实践中,考虑单细胞数据集中所有基因名称的全局字典,它决定了细胞的最终基因表达载体的大小。由于线性模型只需要基因的log-rank来近似其表达水平,因此任何基因序列都可以转换为表达,包括那些生成的细胞句子。

任务

C2S包括3个任务:

  • 生成细胞句子:C2S模型被训练为根据提示生成基因序列,可选地以额外的元数据为条件;
  • 预测细胞标签:生物实验通常涉及组合标签(例如,患者和样本的元数据),C2S模型可以直接从文本中的细胞句子中学习预测这些标签;
  • 衍生自然语言的见解:C2S分析单细胞数据,通过将相关自然语言与细胞句子配对,提取基因表达相关的人类可交互信息。

每个任务的提示和响应示例如图5所示。对于细胞生成和自然语言任务,使用标准因果语言建模损失来训练模型: L ( x ) = − 1 N ∑ i = 1 N l o g ( e x p ( z i v i ) ∑ v ∈ V e x p ( z i v ) ) L(x)=-\frac{1}{N}\sum_{i=1}^{N}log(\frac{exp(z_{i_{v_{i}}})}{\sum_{v\in V}exp(z_{i_{v}})}) L(x)=N1i=1Nlog(vVexp(ziv)exp(zivi))其中 x = { x 0 , . . . , x N } x=\left\{x_{0},...,x_{N}\right\} x={x0,...,xN}是input sentence( N + 1 N+1 N+1个tokens),模型在位置 i i i输出 z i ∈ R ∣ V ∣ z_{i}\in\R^{|V|} ziRV V V V是语言模型的词汇表, v i v_i vi x x x的标记化中位置 i i i处的GT token。损失在每个批次上取平均值。

fig5

  • 图5:Cell2Sentence的提示和响应示例,用于从文本生成细胞句子、预测复杂的自然语言标签以及从单个细胞句子生成生物学见解。

实验

实验是使用免疫组织数据集(Dom´ınguez-Conde-2022)或大规模多组织数据集(Megill-2021)进行微调的模型进行的。在这两种情况下,由于资源限制,使用截断为100个基因的细胞句子来微调GPT-2(小型、中型和大型)。还微调了Pythia-16m,它基于GPT NeoX架构,并使用旋转嵌入(rotary embeddings)。对于后者,在微调期间将模型的最大输入序列长度设置为9200个token,允许操作full cell sentence。首先在大型单细胞数据集上微调语言模型,然后再可选地在指定数据集继续训练以评估。

微调数据集

作者将实验重点放在三个具有广泛自然语言元数据和标签的数据集上,从而能够利用基本模型的功能。

Immune tissue
免疫组织(Dom´ınguez-Conde-2022)提出了一个具有细胞类型注释的大型人类免疫组织单细胞数据集。数据转换后,可以获得273,502个细胞句子,每个句子与35个细胞类型标签中的一个配对。作者保留了20%的细胞句子用于验证(10%)和测试(10%)。该数据集有三个任务:

  • 无条件细胞生成(生成一个没有任何指定细胞标签的随机细胞)
  • 细胞类型生成(生成给定特定细胞类型的细胞句子)
  • 细胞类型预测(在给定细胞句子提示的情况下,用自然语言预测细胞类型)

作者创建了20个提示模板,用于在自然语言中嵌入细胞句子和标签。

Cytokine stimulation
细胞因子刺激(Dong-2023)是一个单细胞数据集,将9种细胞因子刺激组合应用于免疫组织,并有2种不同的exposure。将细胞分成7种细胞类型,总共140个组合labels,包括未刺激的对照细胞。此数据集用于两个任务:

  • 扰动细胞生成(仅在给定文本格式标签的情况下生成扰动细胞)
  • 细胞标签分类(根据输入细胞对细胞类型、扰动和exposure进行分类)

在扰动细胞生成任务中,140个组合标签中的10个在训练期间被保留,以便在测试时使用。对于细胞标签分类,所有组合都在训练期间使用,但在训练期间只使用了有限的数据量。

Multi-tissue
多组织(Megill-2021)提供了对数百个人类和小鼠单细胞数据集的访问。作者选择了99个人类单细胞数据集,并将每个数据集转换为细胞句子,共产生3700万个细胞(包括19项已完成的研究,占所有细胞句子的2.7%)。每个细胞句子都与来自研究元数据的组织标签配对(例如,包含“大脑”和“肝脏”细胞的数据集的组织标签将为“大脑,肝脏”)。作者在这个数据集中总共发现了11种独特的组织和42种独特的结构组合。作者为这个多组织数据集推导出以下任务:

  • 组织类型预测和条件生成(类似于之前的细胞类型预测和有条件生成提示)
  • 从细胞句子生成摘要(由细胞句子提示,模型为相应的研究生成摘要)
  • 生成一个给定摘要的细胞句子(类似于从组织或细胞类型生成,但这里利用摘要中的自然语言)

训练的相关内容

作者将自然语言称为“NL”,将Cell2Sentence称为“C2S”,并将仅在细胞句子上训练的模型称为“C2S”,与称之为“NL+C2S”的在细胞句子中微调的预训练模型形成对比。作者对GPT-2使用1024的序列长度,对Pythia-16m使用9200的序列长度并在所有token上进行训练。作者使用AdamW优化器和flash attention。作者发现,C2S模型在很大程度上受益于自然语言预训练,而不是从随机初始化的权重开始训练(由于C2S其实不要求自然语言上预训练,所以模型embedding size可以设置小一点,从而减少参数)。

方式1:C2S预训练

GPT-2小模型初始化为12层和768个hidden维度,中模型初始化为24层和1024个hidden维度。

作者在full cell sentence数据集上训练字节对编码(BPE)标记器,包括NL提示和细胞类型标签,产生9609个token的词汇表。训练集包含大约3000万个tokens,平均每个example有740个tokens。由于可以选择较小的嵌入空间,初始化的模型包含的参数比在50257个tokens的词汇表上预训练的对应模型略少(小模型93M,中等模型313M)。

损失是根据提示和相关标签(即细胞类型)计算的。不这样做将会削弱模型学习提示token和标签token之间的条件关系的能力。

方式2:NL+C2S微调

使用Hugging Face的预训练权重对模型进行初始化。我们采用余弦调度器。作者尝试过应用有效的微调技术(例如LoRA),完全微调的模型优于LoRA微调。值得注意的是,LoRA产生了高度可变的生成模式,生成句子中基因的唯一性低至70%。与预训练设置不同,这里以经典的方式应用指令微调任务,只计算标签上的损失。

实验1:条件细胞生成

细胞类型生成
在来自(Dom´ınguez-Conde-2022)的免疫组织数据集上训练C2S。细胞句子被附加到指示其细胞类型的文本提示中,以便模型学习细胞类型生成(图5)。C2S与几种已建立的生成单细胞方法进行了比较,包括scVI、scGen、scDiffusion和scGPT。

扰动细胞生成
使用来自(Dong-2023)的细胞因子刺激数据集。提示的构建类似于细胞类型生成任务,除了具有额外的细胞因子刺激和exposure标签,每个细胞句子总共有3个标签。使用scanpy对标准过滤后剩余的21710个基因进行C2S和scGen模型的训练。传统的扰动细胞生成是:

  • 给定对照样本的基因表达,以元数据为条件,生成扰动后的基因表达
  • 在C2S中,由于没有基因表达,而是细胞句子,所以选择了一个粗略的表示方法,即根据元数据生成细胞句子
  • 或许有更合适的改进方法:给定对照细胞的细胞句子,结合元数据,生成新的细胞句子

后续实验其实与之类似,关键在于模板的获取,比如对于摘要生成,模板就应该是摘要+细胞句子。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小学数学蝴蝶模型详解

蝴蝶模型 1.蝴蝶模型仅存在于梯形中,是连接梯形两条对角线而形成的,如下图: 2.蝴蝶模型有几条公式 (1) (2) S△AODS△BOC 等等......

多商户零售外卖超市外卖商品系统源码

构建你的数字化零售王国 一、引言:数字化零售的崛起 在数字化浪潮的推动下,零售业务正经历着前所未有的变革。多商户零售外卖超市商品系统源码应运而生,为商户们提供了一个全新的数字化零售解决方案。通过该系统源码,商户们可以…

BFS:解决拓扑排序问题

文章目录 什么是拓扑排序?关于拓扑排序的题1.课程表2.课程表Ⅱ3.火星词典 总结 什么是拓扑排序? 要知道什么拓扑排序我们首先要知道什么是有向无环图,有向无环图我们看名字其实就很容易理解,有向就是有方向,无环就是没…

028基于SSM+Jsp的电影售票系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

梅雨季要祛湿!分不清寒湿和湿热,小心越祛越湿!4个方法,助你温和排湿热与寒湿

梅雨季又又又又到了,苏州的雨已经连下3天了,到处都湿哒哒、黏糊糊!胃口不好、身体酸重、心情不好……湿气太重了! 中医有一句话说“湿气在,百病害,湿气除,百病无”,意思是“湿”为万…

编写一个可复用且使用方式简单的部署脚本

只需一行命令就可使用应用部署或重新部署 当我们部署Java项目时,一般有两种部署方式: 使用java -jar命令来运行jar包将应用打成jar包以容器的方式进行部署 本篇文章主要讲解第二种方式,以部署xxl-job-admin为例 1.编写restart.sh脚本&…

IDEA启动项目Error:java: JDK isn‘t specified for module ‘test‘

错误原因: idea自带JDK不匹配导致项目启动失败 解决方法: 修改idea自带JDK为自己安装的JDK 调整步骤:

《编译原理》阅读笔记:p18

《编译原理》学习第 3 天,p18总结,总计 14页。 一、技术总结 1.assembler (1)计算机结构 要想学习汇编的时候更好的理解,要先了解计算机的结构,以下是本人学习汇编时总结的一张图,每当学习汇编时,看到“…

线上OOM问题排查总结

自己搭建了一个小博客,该文章与博客文章同步。 一般情况下,出现OOM主要有一下三种原因。 一次性申请对象的太多。更改申请对象数量。内存资源耗尽未释放。找到未释放的对象进行释放。本身资源不够。jmap -heap 查看堆信息。 分几种情况解决&#xff1…

多模态-大模型:MLLM综述(适用初学)

文章目录 前言一、多模态模型基础知识二、多模态指令调优(M-IT)1.MLLM基础2.模态对齐3.数据获取4.模态桥接 三、多模态上下文学习(M-ICL)三、多模态思维链 (M-CoT)四、LLM辅助视觉推理1.训练范式2. LLM功能 五、一些思考总结 前言…

OS中断机制-外部中断触发

中断函数都定义在中断向量表中,外部中断通过中断跳转指令触发中断向量表中的中断服务函数,中断指令可以理解为由某个中断寄存器的状态切换触发的汇编指令,这个汇编指令就是中断跳转指令外部中断通过在初始化的时候使能对应的中断服务函数如何判断外部中断被触发的条件根据Da…

关于ONLYOFFICE8.1版本桌面编辑器测评——AI时代的领跑者

关于作者:个人主页 目录 一.产品介绍 1.关于ONLYOFFICE 2.关于产品的多元化功能 二.关于产品体验方式 1.关于套件的使用网页版登录 2.关于ONLYOFFICE本地版 三.关于产品界面设计 四.关于产品文字处理器(Document Editor) 1.电子表格&a…

昇思25天学习打卡营第6天 | 函数式自动微分

神经网络的训练主要使用反向传播算法, 模型预测值(logits)与正确标签(label)送入损失函数(loss function)获得loss, 然后进行反向传播计算,求得梯度(gradie…

数据中心 250KW 水冷负载组概述

该负载专为数据中心冷水机组调试和测试应用而设计, 是一款紧凑的便携式产品,具有无限功率和水流控制功能,可实现精确的温升设置与施加的功率。鹦鹉螺是完全可联网的,可以从远程站控制单个或多个单元。 使用带有触摸屏 HMI 的 PLC,…

Navicat连接Oracle出现Oracle library is not loaded的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 使用Navicat链接Oracle的时候,出现如下提示:Oracle library is not loaded. 截图如下所示: 2. 原理分析 通常是由于缺少必需的 Oracle 客户端库或环境变量未正确配置所致 还有一种情况是 32位与64位的不匹配:Navica…

基于Langchain-chatchat搭建本地智能知识问答系统

基于Langchain-chatchat搭建本地智能 搭建本地智能知识问答系统:基于Langchain-chatchat的实践指南引言项目概述环境安装Anacondapip 项目安装步骤大语言模型(LLM)的重要性结语 搭建本地智能知识问答系统:基于Langchain-chatchat的…

记错医院预约的日期,选择加号还是回去?

记错了去医院的日期,起了个大早,用了 90 分钟才到医院,取号时提示没有预约的号,才发现记错时间了。这个时候是选择找医生加号还是直接回去呢?如果是你怎么选择? 如果选择找医生加号,号会排到最后…

STM32 ---- F1系列内核和芯片系统架构 || 存储器映像 || 寄存器映射

一,存储器映像 STM32 寻址范围:2^32 4 * 2^10 *2^10 K 4 * 2^10 M 4G 地址所访问的存储单元是按字节编址的。 0x0000 0000 ~ 0xFFFF FFFF 什么是存储器映射? 存储器本身不具有地址信息,给存储器分配地址的…

STM32单片机WDG看门狗详解

文章目录 1. WDG简介 2. IWDG框图 3. IWDG键寄存器 4. IWDG超时时间 5. WWDG框图 6. WWDG工作特性 7. WWDG超时时间 8. IWDG和WWDG对比 9. 代码示例 1. WDG简介 WDG(Watchdog)看门狗 看门狗可以监控程序的运行状态,当程序因为设计…

Docker Compose--安装Nginx--方法/实例

原文网址:Docker Compose--安装Nginx--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Docker Compose如何安装Nginx。 目录结构 ├── config │ ├── cert │ │ ├── xxx_bundle.pem │ │ └── xxx.key │ ├── conf.d │ …