DNA扩散
使用扩散概率模型对调控DNA序列进行生成建模。
文档: https://pinellolab.github.io/DNA-Diffusion
源代码: https://github.com/pinellolab/DNA-Diffusion
摘要
人类基因组计划已经揭示了整个人类基因组的DNA序列,揭示了涉及众多生物过程和途径的数万个基因的蓝图。 除了人类基因组的这一(编码)部分外,DNA还包含数百万个参与上述基因调控的非编码元件。
这些调控元件控制基因的表达水平,其方式至少部分编码在它们的初级基因组序列中。 许多人类疾病和障碍都是基因调控不当的结果。 因此,能够控制这些元件的行为及其对基因表达的影响,为纠正与疾病相关的错误调控提供了诱人的机会。
虽然通过改变调控元件的序列原则上应该可以进行这种细胞编程,但这样做的规则在很大程度上仍然未知。 一些实验努力受到了关于什么构成调控元件的先入为主的观念和假设的指导,本质上导致了一种"试错"方法。
在这里,我们建议使用大规模的数据驱动方法来学习和应用调控元件序列背后的规则,应用最新的生成建模技术。
引言和前期工作
本项目的目标是研究最新扩散模型在基因组学数据中的应用和改编(有关不错的介绍和参考文献,请参阅https://lilianweng.github.io/posts/2021-07-11-diffusion-models/)。扩散模型是强大的模型,已被用于图像生成(例如稳定扩散、DALL-E)、音乐生成(Magenta项目的最新版本),取得了出色的结果。 一种名为"引导"扩散的特殊模型公式允许在训练过程中提供文本或连续/离散标签的情况下,将生成过程偏向特定方向。这使得创建"AI艺术家"成为可能,它们可以根据文本提示创建美丽而复杂的图像(这里有很多例子:https://www.reddit.com/r/StableDiffusion/)。
一些研究小组报告了在上下文依赖系统中生成合成DNA调控元件的可能性,例如,细胞特异性增强子。 (https://elifesciences.org/articles/41279, https://www.biorxiv.org/content/10.1101/2022.07.26.501466v1)
第1步:生成模型
我们提议开发能够根据输入文本提示生成具有某些调控特性的细胞类型特异性或上下文特异性DNA序列的模型。 例如:
-
"在细胞类型X中对应于开放(或闭合)染色质的序列"
-
"在细胞类型X中将基因激活到其最大表达水平的序列"
-
"在细胞类型X中活跃并包含转录因子Y结合位点的序列"
-
"在肝脏和心脏中激活基因但在大脑中不激活的序列"
第2步:扩展和改进
除了单个调控元件外,所谓的"位点控制区域"已知在特定配置中包含多个调控元件,协同工作以产生更复杂的调控规则集。与"拼贴"方法有相似之处,其中多个稳定扩散步骤被组合成一个最终(图形)输出,我们希望将这一概念应用于DNA序列,目标是设计更大的调控位点。这是一个特别令人兴奋的方向,据我们所知,迄今为止尚未被探索。
除了合成DNA创作外,扩散模型还可以帮助理解和解释调控序列元件组分,例如,成为研究单核苷酸变异的有价值工具(https://www.biorxiv.org/content/10.1101/2022.08.22.504706v1)和进化(https://genomebiology.biomedcentral.com/articles/10.1186/s13059-018-1502-5)。
总的来说,我们相信我们的工作可以加速我们对正常发育和不同疾病中DNA调控序列固有特性的理解。
提议的框架
对于这项工作,我们提议基于Chen、Zhang和Hinton提出的公式构建一个位扩散模型https://arxiv.org/abs/2208.04202。这个模型是一种使用连续扩散模型生成离散数据的通用方法。这种方法的实现已经存在,这是一个可以在其基础上构建的潜在代码库: https://github.com/lucidrains/bit-diffusion
任务和潜在路线图:
- 收集基因组数据集
- 基于代码库实现引导扩散
- 思考生物信息在引导扩散中的最佳编码方式(例如细胞类型:K562,染色质强激活序列,或细胞类型:GM12878,非常开放的染色质)
- 基于现有数据集制定验证计划,或考虑如何进行新的生物学实验(我们需要考虑潜在的主动学习策略)
交付成果
-
数据集: 编译并提供一个完整的细胞特异性调控区域(DNase实验)数据库,使科学家能够基于调控序列训练和生成不同的扩散模型。
-
模型: 提供一个模型,可以根据特定的细胞类型和基因组背景生成调控序列。
-
API: 提供一个API,使操作DNA调控模型成为可能,并提供一个视觉化的playground来生成合成的上下文序列。
数据集
DHS索引:
活跃参与基因调控的染色质(DNA及其相关蛋白质)通常对DNA结合蛋白(如转录因子)是可及的(综述,相关论文)。 通过使用DNase-seq技术,我们测量了733个人类生物样本中基因组的可及性部分,涵盖了438种细胞和组织类型及状态,识别出超过350万个DNase高敏感位点(DHSs)。 使用非负矩阵分解,我们将这些数据总结为16个组分,每个组分对应一个不同的细胞环境(如"心脏"、"神经"、"淋巴")。
作为本提案描述的工作的一部分,以及Wouter Meuleman研究小组早期正在进行的项目的一部分,我们整理了这些数据的较小子集,可用于训练模型为每个NMF组分生成合成序列。
这些数据及其数据字典可在此处找到。
其他潜在数据集:
-
对应于注释调控序列的DNA序列数据,如基因启动子或远端调控序列(如增强子),这些序列是由NHGRI资助的项目(如ENCODE或Roadmap Epigenomics)根据数百种细胞的染色质标记或可及性进行注释的。
-
来自MPRA实验的数据,这些实验可以并行测试数百个DNA序列的调控潜力(https://elifesciences.org/articles/69479.pdf,https://www.nature.com/articles/s41588-021-01009-4,...)
-
MIAA实验,测试给定细胞类型中开放染色质的能力。
模型
输入模式:
A) 细胞类型 + 调控元件 例:脑肿瘤细胞弱增强子
B) 细胞类型 + 调控元件 + 转录因子组合(存在或缺失)例:前列腺细胞,增强子,AR(存在),TAFP2a(存在)和ER(缺失)
C) 细胞类型 + 转录因子组合 + 转录因子位置 例:血液干细胞 GATA2(存在)和ER(缺失)+ GATA1(100-108)
D) 具有遗传变异的测序 -> 低数量扩散步骤 = 核苷酸重要性预测
输出:
DNA序列
模型大小:
增强子和生物序列的数量不超过Lion数据集中可用的图像数量。我们生成的DNA输出的维度不应超过4个碱基[A,C,T,G] X 1kb。最终模型应大于2 GB。
模型: 可以根据总序列长度创建不同的模型。
API
根据兴趣待定
论文
这个项目能否转化为论文?这样一篇论文的评估过程是怎样的?我们的目标会议是哪些?我们能否同时发布博客文章和论文?
是的,我们打算将体内生成和实验验证相结合,以研究我们的模型在经典调控系统(例如:镰状细胞和癌症)上的表现。 我们的团队和合作者在学术界有相当的声誉,并在高影响力期刊(如Nature和Cell)上发表过多篇文章。
资源需求
完成这个项目需要哪些资源(例如GPU小时数、内存、存储)?
我们的初始模型可以在约3小时内(~500个epoch)使用小型数据集(~1k序列)在Colab PRO(24GB内存)单GPU Tesla K80上训练。基于此,我们预计要在上述大型数据集(~300万序列(4x200))上训练这个或类似的模型,我们需要几个高性能GPU,持续约3个月。(欢迎提供优化建议!)
时间线
这个项目的(大致)时间线是什么?
6个月到1年。
更广泛的影响
这个项目预计将如何积极影响整个生物学研究?
我们相信这个项目将有助于更好地理解基因组调控序列:它们的组成以及在不同生物背景下可能作用于它们的潜在调节因子,并有可能基于这些知识创造治疗方法。
可重复性
我们将使用最佳实践来确保我们的代码是可重复的,并进行版本控制。我们将发布数据处理脚本和conda环境/docker,以确保其他研究人员可以轻松运行。
我们有几种测试方法和技术,可以基于CRISPR基因组编辑或大规模并行报告基因测定(MPRA)来大规模测试这些模型生成的合成序列。
失败情况
无论最终模型的性能如何,我们认为在新领域测试扩散模型很重要,其他团队可以在我们的研究基础上进行深入探索。
初步发现
使用Bit Diffusion模型,我们能够重构200 bp序列,这些序列呈现出与训练序列非常相似的基序组成。计划是在模型中添加细胞条件变量,以检查不同调控区域如何依赖于细胞特异性环境。
下一步
扩展模型长度以生成完整的调控区域(增强子 + 基因启动子对) 在体内模型上使用我们的合成增强子,并检查它们如何在生物情景中调节转录动态(除了MPRA阵列之外)。
如何贡献
如果这个项目让你感兴趣,请加入我们! 加入OpenBioML的Discord:https://discord.gg/Y9CN2dUzQJ,我们在**dna-diffusion**频道讨论这个项目,我们会提供如何参与的指导。
已知贡献者
你可以在这里查看贡献者列表。
开发
设置环境
我们使用hatch来管理开发环境和生产构建。通常使用pipx安装hatch会比较方便。
运行单元测试
你可以通过以下命令运行所有测试:
hatch run test
格式化代码
执行以下命令来应用代码lint和检查类型:
hatch run lint
发布新版本
你可以通过以下命令检查当前版本:
hatch version
你可以使用hatch version dev
或patch
、minor
、major
等命令来升级版本。或者编辑src/dnadiffusion/__about__.py
文件。更改版本后,当你推送到GitHub时,Test Release工作流会自动在Test-PyPI上发布,并创建一个GitHub发布草稿。
提供文档
你可以通过以下命令提供mkdocs文档:
hatch run docs-serve
这将自动监视你代码的变化。
贡献者 ✨
感谢这些优秀的人(表情符号键):
(贡献者列表和图片保持原样)
本项目遵循all-contributors规范。欢迎任何形式的贡献!