加载页面中...
暑假后 | lwstkhyl

暑假后

暑假后新项目和之前项目的推进

full-length HERV transcripts

Systematic characterization of the disease-relevant regulation of putatively full-length HERV transcripts in Alzheimer’s cortex

  • 收集尽可能多的数据(AD的单细胞数据,不同脑区,有没有配套SNP的)
  • 定义“全长转录本”和“嵌合转录本”(“它为什么表达变化、它和gene是什么关系”)
    • 嵌合转录本:HERV被纳入宿主基因转录本中,作为alternative promoter、new exon、internal exon、3’UTR或terminator
    • putatively full-length:不用特别标准的拼接方法,稍微简单一点,去掉只在其中一端有reads的,要求在LTR/exon都有reads(和嵌合区分,嵌合可能是只剪接了其中一段)
    • (regional表观驱动型:所在区域在AD中变得更开放(通过表观遗传标记识别),导致HERV表达上升)
    • (复杂调控型:同时受到邻近gene转录读穿、局部开放、TF结合、遗传变异、细胞状态变化等多因素影响)
  • 选出值得研究的转录本
  • 共表达网络+GO看功能,参考2024 NC–Integrating human endogenous retroviruses into transcriptome-wide association studies highlights novel risk factors for major psychiatric conditions
    • 前述分类中各类别是否有功能偏好?比如嵌合转录本型更容易和邻近基因表达有关、表观驱动型更多受炎症、抗病毒等细胞通路激活影响、复杂调控型更能体现细胞状态?
  • 挖掘上游调控因素
  • 与AD疾病作相关:
    • (可以先算一下)如果找不到有基因型的数据,可以用别人做好的HERV-QTL+cortex AD GWAS summary做SMR:SNP → HERV表达 → AD风险,参考2024 NC–Single-cell eQTL mapping of human endogenous retroviruses reveals cell type-specific genetic regulation in autoimmune diseases
      • HERV~SNP的QTL:某个SNP是否调控某个HERV表达
      • AD~SNP的GWAS summary:某个SNP是否影响AD风险
    • 用自己的HERV~gene关系+公开gene eQTL,间接推断AD状态下HERV~SNP关系
      • 自己的表达矩阵:HERV表达≈β₁×gene表达
      • 公开cortex gene eQTL:gene表达≈β₂×SNP
      • 上述两个结合:SNP对HERV的间接影响≈β₂×β₁

      优点是可以利用自己在AD cortex中得到的HERV-gene关系,所以更贴近AD状态;缺点是HERV~gene相关性不一定代表gene调控HERV,也可能是共同受细胞状态、表观调控等的影响

    • 把两条证据合并:直接遗传证据公开HERV-eQTL+AD GWAS→SMR+间接遗传证据自己的HERV-gene关系+公开gene eQTL→推断HERV调控SNP

      如果某个HERV同时在AD中差异表达(或者还有细胞类型特异性)+判明转录本类别(邻近gene也和AD机制有关)+有共表达功能解释+有HERV-eQTL/SMR或推断SNP支持,那么它就可以作为更高可信的AD疾病相关HERV候选

数据

碱基编辑

基础概念

碱基编辑(base editing, BE):传统Cas9通常造成DNA双链断裂,然后细胞修复时产生indel(核苷酸片段的插入或缺失)。碱基编辑器一般是把Cas9 nickase和一个脱氨酶deaminase融合起来,让它在不造成双链断裂的情况下,把某个碱基改成另一个碱基。常见几类是:

  • ABE(adenine base editor):把A•T改成G•C
  • CBE(cytosine base editor):把C•G改成T•A
  • CGBE(C•G to G•C base editor):把C•G改成G•C

可以把CRISPR系统想象成“定位器+编辑器”:

  • sgRNA是定位器,它里面有一段通常20个核苷酸(20nt)长的序列,叫spacer,这段序列和目标DNA互补配对,DNA上被它识别的那段互补序列叫protospacer

    很多模型说“输入20nt protospacer”,本质上就是输入目标DNA序列附近的信息

  • PAM是Cas9识别目标时需要的短序列,比如经典SpCas9常见PAM是NGG。没有合适PAM,即使sgRNA和DNA能配对,Cas9也不一定能稳定结合。所以PAM会影响一个位点能不能编辑,也会影响目标碱基落在编辑窗口的哪个位置
  • scaffold是sgRNA中不与DNA配对、负责和Cas9结合的结构部分

暑假后_1

↑以CBE的工作原理为例,参考文章

编辑任务里有三个层次

  • 第一,能不能编辑,也就是效率高不高

    编辑效率(editing efficiency):在某个位点,有多少比例的测序reads发生了目标类型的碱基转换

    • 比如某个ABE实验中,一个目标A位点测到1000条reads,其中300条A变成G,那么这个位置的A-to-G编辑效率可以理解为30%
    • 不同论文的具体定义有细微差别,有的看总编辑效率,有的看某个位点的编辑频率,有的看所有编辑产物中某种产物的比例
  • 第二,编辑哪里,也就是窗口在哪些位置

    编辑窗口(editing window):在sgRNA对应的protospacer中,哪些位置最容易被碱基编辑器改到

    • 例如经典ABE可能在protospacer的第4-8位附近编辑比较高。假设第5位和第7位都有A,那么ABE可能不只改你想要的第5位,也会顺手改第7位。这个“顺手改掉的附近碱基”就是bystander edit
  • 第三,是否精准,也就是只改目标碱基,还是把旁边的A/C也改掉

bystander和off-target

  • Bystander edit:同一靶点内部的不精准——发生在同一个目标位点附近。比如你想改protospacer第5位的A,但第6位、第7位也有A,ABE也把它们改了
  • Off-target edit:靶点外编辑——发生在基因组其他位置。也就是sgRNA本来应该去A位点,但它跑到相似序列的B位点也发生结合和编辑

R-loop可以理解为Cas9-sgRNA识别DNA后形成的“打开状态”。正常DNA是双链配对的。Cas9带着sgRNA来到目标位点后,sgRNA会和DNA中的一条链配对,另一条DNA链被挤开,于是局部DNA双链被打开,这个结构就叫R-loop

  • 碱基编辑器里的脱氨酶要接触到目标碱基,DNA必须在局部处于比较可接近的状态。或者说,某个位置DNA双链打开得越充分,脱氨酶越可能接触到那个碱基,编辑效率可能越高
  • distance就是DNA两条链之间的距离(三维结构里的空间距离)

    C1-C1 pdb Cas9 absolute:大概率指的是在结构中计算两条DNA链对应碱基的C1’原子之间的距离,C1’是核糖/脱氧核糖上的一个原子。正常双链DNA中,互补碱基靠得很近;当R-loop打开后,两条链距离变大

短sgRNA

  • 短sgRNA形成的R-loop可能不那么稳定,可能让编辑窗口变窄、bystander减少,编辑更精准(18-nt或16-nt sgRNA能减少bystander)

    标准sgRNA一般是20nt,短sgRNA比如18nt或16nt,和DNA互补配对的长度变短,R-loop可能变短或不稳定;如果R-loop打开范围变小,那么脱氨酶能接触到的DNA区域可能也变窄,可能减少不想要的bystander

  • 短sgRNA也可能降低整体on-target效率,因为定位和结合变弱
  • 是否会降低脱靶:
    • R-loop稳定性降低后,非目标位点不容易被Cas9打开,会降低脱靶
    • 匹配核苷酸更少,可能反而更容易匹配到其他位置
    • 后续需要数据支持

AF3:AlphaFold3。这里不是直接用AF3预测编辑效率,而是用AF3预测Cas蛋白+sgRNA+DNA复合体的三维结构

  • 在这里,20-nt真实结构只有两个,18-nt、16-nt这些只能用AF3预测;他们把Cas蛋白、RNA、DNA复合体拿去AF3预测,然后从结构中提取DNA双链distance

空间构象转移映射:不是标准名词,按聊天内容理解,它大概是

  • 先在20-nt条件下建立关系:20-nt R-loop distance → 20-nt真实编辑效率/窗口
  • 然后把这个关系迁移到18-nt条件:18-nt R-loop distance → 预测18-nt编辑效率/窗口
  • 它假设“distance和编辑效率之间的关系”在不同sgRNA长度之间可以部分复用。这个思路直观,但有一个关键假设:18-nt和20-nt的主要差别可以由R-loop distance解释

    distance是否只和长度有关?还是也和target sequence本身有关?目前只试了一个位点的不同长度,所以这个假设还不能算稳

论文主要思路

2020Cell_Determinants of Base Editing Outcomes from Target Library Analysis and Machine Learning:比较早、比较经典的碱基编辑预测工作。在哺乳动物细胞中分析了38,538个整合到基因组中的靶点

  • BE-Hive包含两个主要部分:
    • efficiency model,预测这个靶点总体编辑效率高不高。它用到的特征包括sgRNA melting temperature、G/C比例、dinucleotide motif、activity window等
    • bystander editing model,预测具体会产生哪些编辑产物。比如第5位A被改、第7位A被改、两个都改,分别占多少比例。这个部分用了deep conditional autoregressive model,可以预测bystander pattern
  • 关心“编辑效率+旁观者编辑+精准性”,非常适合拿来理解短sgRNA如何减少bystander。但它原始输入主要还是序列,不是R-loop三维结构

2023NBT_Deep learning models to predict the editing efficiencies and outcomes of diverse base editors:编辑器和Cas9变体太多了,怎么选最合适的组合。系统比较了7种base editor和9种Cas9变体,开发了两个模型

  • DeepCas9variants:预测不同Cas9变体在某个目标序列上的活性。也就是先判断“哪种Cas9更适合这个PAM/这个序列”
  • DeepBE:进一步预测63种BE的编辑效率和结果。63来自7种base-converting domain×9种Cas9 nickase变体
  • 这篇文章是“选择编辑器/选择Cas9变体/选择sgRNA”的工具,重点是PAM和Cas9变体带来的差异。也说明了一个概念:sgRNA设计和效率预测是两件事,但常常被集成在一个工具里

2025Genome Biology_Predicting adenine base editing efficiencies in different cellular contexts by deep learning:主要研究adenine base editing,也就是ABE,而且特别关注不同细胞环境和递送方式,比如HEK293T细胞、mRNA-LNP、AAV、小鼠肝脏等。有两个输出层面的模型

  • Efficiency Model:预测总编辑效率
  • Proportion Model:预测编辑产物在edited reads中的分布
  • 两个模型的输出结合起来得到最终编辑效率预测
  • 对我们的研究价值比较高:
    • 是ABE方向,和ABE8e、短sgRNA窗口比较贴近
    • 有比较丰富的实验数据,可以拿来训练“distance→编辑窗口”的简化模型
  • 它本身的主要创新点不是sgRNA长度,而是不同细胞/递送环境下ABE预测,尤其是mRNA递送数据更能保持in vivo预测准确性

2025NC_Deep learning models simultaneously trained on multiple datasets improve base-editing activity prediction:“效果最好”的模型。把多个来源的数据一起训练,并且保留每条数据来自哪个dataset的信息。整合了ABE7.10、ABE8e、BE4等多个数据集,开发了CRISPRon-ABE和CRISPRon-CBE,用于预测gRNA编辑效率和outcome frequency

  • 输入不只是20nt protospacer,还包括
    • 30nt target sequence = 20nt protospacer + PAM + 两侧flanking sequence
    • gRNA-DNA binding energy ΔGB
    • predicted Cas9 efficiency
    • target nucleotide editing position
    • dataset one-hot encoding:告诉模型这条数据来自SURRO-seq、Song、Arbab、Kissling ABE7.10还是Kissling ABE8e。让模型可以学习不同数据集之间的共性和差异;预测时还可以给不同dataset设置权重
模型/论文 主要解决什么 输入主要是什么 输出是什么 和现任务的关系
2020Cell BE-Hive 预测BE效率和bystander pattern target sequence、sgRNA特征、base editor、cell type等 编辑效率、编辑产物分布 经典、相对早、适合理解bystander和precision
2023NBT DeepBE 在很多Cas9/BE组合里选最合适的 序列、PAM、Cas9变体、BE类型 63种BE的效率和outcome 适合理解“sgRNA设计”和“BE选择”
2025Genome Biology BEDICT2.0 预测ABE在不同细胞/递送环境中的效率 protospacer+PAM等序列输入 ABE效率和产物比例 A已用其数据做初步尝试,适合短期推进
2025NC CRISPRon-ABE/CBE 多数据集联合训练,提高ABE/CBE预测 30nt序列、ΔGB、Cas9效率、dataset标签等 gRNA效率和outcome frequency 更像当前最强参考框架,适合后续做严肃模型

“sgRNA设计工具”和“efficiency预测工具”是什么关系:概念上是两件事,实际工具里经常合在一起

  • sgRNA设计是先找候选项。例如给你一个想编辑的A,程序会找附近有没有合适PAM,设计哪些sgRNA能让这个A落在编辑窗口里
  • efficiency预测是给这些候选sgRNA打分。例如sgRNA1预测效率30%,sgRNA2预测效率5%,sgRNA3虽然效率高但bystander很多
  • 实际应用时一般是:先生成候选sgRNA → 再预测每条sgRNA的效率和bystander → 排序选择最优方案

如果只是把sgRNA长度加进模型sequence特征 + sgRNA长度 → 编辑效率,那创新性比较弱,因为长度只是一个普通条件变量,更完整的模型是sgRNA长度改变 → R-loop结构改变 → DNA打开程度改变 → 编辑窗口改变 → bystander减少、精准性提高

  • 新特征不是“18”或“20”这个数字,而是18-nt/20-nt条件下每个位置的R-loop distance曲线
  • 比较可创新的地方是把结构信息引入碱基编辑预测模型。过去这些模型主要用序列、PAM、编辑器类型、Cas9活性、binding energy、dataset来源等特征,没有显式用三维结构信息

R-loop distance到底是主要由sgRNA长度决定,还是也受target sequence影响:

  • 如果distance只和长度有关,那么18-nt所有位点都用同一条distance曲线,这更像是一个“全局窗口校正因子”
  • 如果distance和每条sgRNA/target sequence都有关,那么就需要给每条sgRNA都预测结构,再提取position-specific distance,这样才是真正的结构增强模型

四篇论文已经能根据序列、PAM、编辑器类型、Cas9活性、数据集来源预测20-nt sgRNA下的碱基编辑效率和产物分布,现在想加入的是sgRNA变短R-loop三维构象变化产生的DNA双链distance特征,用它把模型从20-nt条件扩展到18-nt/16-nt条件,并重点解释为什么短sgRNA可能让编辑窗口变窄、bystander减少、精准性提高

2025NC crispron-BE

crispron-BE github

module load miniconda3/base
conda activate crispronbe
conda create -n crispronbe python=3.10 tensorflow=2.10.0 biopython=1.79 viennarna=2.5.1 pandas=2.2.2 matplotlib openpyxl gemmi scikit-learn -y
cd ~
git clone https://github.com/RTH-tools/crispron-BE.git
cd crispron-BE
bash bin/download_and_test.sh

大致流程

  • 输入一段DNA序列
  • 找出符合NGG PAM的30nt target
  • 计算一些辅助特征
  • 枚举可能的碱基编辑产物
  • 把这些东西转成神经网络能读的矩阵
  • 加载训练好的模型
  • 输出编辑效率和各编辑产物频率
项目结构
  • bin/CRISPRonBE.sh:总入口,负责串联全部步骤
  • bin/get_30mers_from_fa.py:从输入FASTA中找30mer和23mer
  • bin/CRISPRspec_CRISPRoff_pipeline.py:计算CRISPRoff特征
  • bin/DeepCRISPRon_eval.py:预测Cas9活性,生成crispron.csv
  • bin/DeepCRISPRonBE_eval.py:主预测脚本,加载CRISPRon-BE模型(控制“预测时”怎么构建输入特征)
  • bin/DeepCRISPRonBE_train.py:训练脚本,定义模型结构(控制“训练时”模型结构是什么)
  • data/CRISPRonBE_models/ABE/:训练好的ABE模型
  • data/CRISPRonBE_models/CBE/:训练好的CBE模型

总入口:./bin/CRISPRonBE.sh ABE input.fa outdir weight

  • ABE/CBE:选择碱基编辑器类型
  • input.fa:输入DNA序列
  • outdir:输出目录
  • weight:可选,dataset权重

先生成30mers.fa23mers.fa,然后用CRISPRoff生成CRISPRparams.tsv,然后用DeepCRISPRon生成crispron.csv,最后用DeepCRISPRonBE_eval.py生成最终预测结果

get_30mers_from_fa.py生成模式需要输入的FASTA4nt upstream + 20nt protospacer + 3nt PAM + 3nt downstream格式

  • 扫描输入序列
  • 找到符合NGG PAM的位置
  • 取这个位置附近的30nt
  • 同时输出23nt guide+PAM
PRE_GUIDE=4
GUIDE=20
PRE_PAM=1
PAM='GG'
POST_PAM=3
TOTAL=30
  • PAM实际是NGG:其中PRE_PAM=1代表PAM第一个任意碱基N,PAM='GG'代表后两个碱基必须是GG
  • 后续所有模型输入都围绕这个30nt target展开

get_30mers_from_fa.py-CRISPRparams.tsv:给每个target加一个“gRNA-DNA结合/结构稳定性相关”的数值特征,包含RNA-DNA hybridisation energy、DNA-DNA opening energy、spacer self-folding energy和CRISPRoff score等特征,但实际上CRISPRon-BE主模型实际只取了CRISPRoff_score这一列(从30mer中截取20nt protospacer + 3nt PAM,然后用这个23mer去这个文件里查对应的CRISPRoff_score)

DeepCRISPRon_eval.py-crispron.csv:Cas9活性预测(也是模型的输入特征),包含30nt序列和CRISPRon预测的Cas9 indel frequency。读取30mer和CRISPRoff特征,构建两个输入30nt one-hot序列+CRISPRoff相关数值,然后加载CRISPRon模型预测Cas9活性,输出ID,30mer,CRISPRon

one-hot编码:神经网络不能直接读A/T/G/C这些字符,所以要把序列转成数字矩阵

  • 一条简化的4nt序列ATGC会变成

    A  [1,0,0,0]
    T  [0,1,0,0]
    G  [0,0,1,0]
    C  [0,0,0,1]
    

    这样的4×4二维矩阵

  • 实际的模型输入:one_hot: (None,30,4),None表示样本数量可以变化,比如预测10个outcome,shape就是10 × 30 × 4

outcome_properties:CRISPRon-BE不是只预测“某条gRNA总体效率是多少”,它还预测不同编辑产物的频率

  • 同一个target可能产生多个outcome:例如ABE编辑窗口内有2个A,会有3种编辑产物
    • 第1个A被编辑
    • 第2个A被编辑
    • 两个A都被编辑
  • outcome_properties是一个8维向量,表示编辑窗口内每个位置是否被编辑:比如窗口长度是8,如果第2和第5个位置被编辑,就可以表示成[0,1,0,0,1,0,0,0]

模型的输入是所有target的所有possible outcomes数量:假设有一条target窗口里有3个A,那么可能outcome有7种,程序会生成一个dataframe

seq_id   target   outcome1   outcome_feature1
seq_id   target   outcome2   outcome_feature2
seq_id   target   outcome3   outcome_feature3
...
seq_id   target   outcome7   outcome_feature7
输入名 形状 内容 来源
one_hot n × 30 × 4 30nt target序列 30mers.fa
outcome_properties n × 8 编辑窗口中哪些位点被编辑 程序枚举outcome
energy_properties n × 1 CRISPRoff score CRISPRparams.tsv
cas9 n × 1 CRISPRon预测Cas9活性 crispron.csv
dataset ABE:n × 5; CBE:n × 3 数据集权重 命令行weight
  • dataset weight:该模型不是把所有数据混在一起当成同一种实验
    • ABE需要5个weight,依次代表SURRO-seq、Song、Arbab、Kissling ABEmax、Kissling ABE8e;CBE需要3个weight,依次代表SURRO-seq、Song、Arbab

    0-0-0-0-1代表完全按Kissling ABE8e数据集来做dataset条件,0.5-0.5-0-0-0就是SURRO-seq和Song数据集各占50%

    • 如果gRNA是为ABE8e设计的,建议给Kissling ABE8e数据集100%权重;如果是ABE7.10或BE4且平台不清楚,则根据scaffold和实验平台选择不同权重

模型结构:以ABE模型为例。ABE模型的one_hot输入先进入三个卷积分支Conv1_1D/Conv2_1D/Conv3_1D;它们分别输出不同长度和filter数量的序列特征,然后经过pooling、flatten,拼接成一个6140维向量,再进入Dense层

one_hot输入
→ Conv1D分支1
→ Conv1D分支2
→ Conv1D分支3
→ Flatten
→ 拼接
→ Dense1
→ 拼接outcome/energy/cas9/dataset
→ Dense2
→ Dense3
→ Output:2个数
  • 卷积分支Conv1_1D/Conv2_1D/Conv3_1D:相当于用三种不同的“扫描器”看同一条30nt序列
    • Conv1_1D → 输出(None,28,240)
    • Conv2_1D → 输出(None,26,140)
    • Conv3_1D → 输出(None,24,80)

    输出长度不同,通常意味着卷积核大小不同。卷积核越大,一次看的序列片段越长;卷积核越小,更关注短motif。然后模型把这些不同尺度的信息拼起来

  • Dense层和拼接层:分两步处理信息
    • 只用30nt序列提取序列特征:one_hot → CNN → Dense1
    • 把序列特征和其它非序列特征拼起来:Dense1结果 + outcome + CRISPRoff + CRISPRon + dataset weight → Dense2/Dense3 → 输出(后面加特征可以加在这里)
  • 输出的两个数
    • pred_eff:这条gRNA的总体编辑效率,同一个target的不同outcome会共享一个最终pred_eff。程序会在normalize_dataset()中对同一个seq_id下的pred_eff取平均
    • pred_freq:当前这个outcome的预测频率
  • 结果表
    • 一行 = 一个target的一种可能编辑产物
    • pred_eff = 这条target/gRNA总体有多少比例会被编辑
    • pred_freq = 具体变成这一种产物的比例

关键组成部分

  • 训练脚本DeepCRISPRonBE_train.py:负责读取训练数据、定义模型结构、把输入X和真实标签y喂给模型、不断调整模型参数、保存表现最好的模型
    • model.fit(tx,ty,validation_data=(vx,vy),...):训练过程。ty/vy是真实实验值,代表真实editing efficiency和真实outcome frequency
    • ModelCheckpoint(args.m,save_best_only=True):保存最佳模型
  • 预测脚本DeepCRISPRonBE_eval.py:加载已经训练好的模型、准备输入X、预测、输出预测结果
    • keras.models.load_model(path)model.predict(X):预测
    • 为什么有很多模型model_1_1/model_1_2/...:用多个模型分别预测,取平均作为最终预测。这样通常比单个模型更稳定
  • 训练数据格式
    • refs:20nt gRNA sequence
    • outcomes:20nt outcome sequence
    • editingeff:gRNA editing efficiency
    • outcomefreq:outcome frequency
    • surro_target:30nt target DNA sequence
    • source:数据来源
    • partition:分区

总结

阶段 文件/函数 输入 输出 作用
找靶点 get_30mers_from_fa.py 任意FASTA 30mers.fa,23mers.fa 找NGG PAM并提取固定长度序列
算能量 CRISPRspec_CRISPRoff_pipeline.py 23mers.fa CRISPRparams.tsv 计算CRISPRoff相关特征
算Cas9活性 DeepCRISPRon_eval.py 30mers.fa,CRISPRparams.tsv crispron.csv 预测Cas9 indel/活性
枚举outcome DeepCRISPRonBE_eval.py 30mers.fa 内部df 生成所有可能编辑产物
构建模型输入 create_feature_X() df+两个特征表 X=[5类输入] 转成神经网络能读的矩阵
预测 predict_X() X+SavedModel pred_eff,pred_freq 预测编辑效率和产物频率
归一化输出 normalize_dataset() 原始预测 crispronABE_prediction.tsv 保证outcome频率加和合理
plan

sgRNA变短后R-loop三维构象变化产生的DNA双链distance特征,并把模型从20-nt条件扩展到18-nt/16-nt条件

  • 先跑原模型ABE8e baseline:直接用CRISPRon-BE原模型批量预测一批候选序列(论文中的2025Genome Biology_Predicting adenine base editing efficienc.xlsx,得到“原模型在20-nt sgRNA条件下的预测结果”,作为后续所有改进的对照(后续加入distance特征时可以以此判断有无提升)
  • 构建输入:把真实编辑效率和R-loop distance整理到同一张表中,每行表示一个sgRNA的一个编辑窗口位置
    • 真实编辑效率:在上述xlsx中有SpRY-ABE8e相关的真实编辑效率(需筛选PAM为NGG的数据)
    • 还需要20-nt/18-nt/16-nt sgRNA对应的R-loop distance
    • 还需要18-nt真实编辑效率
  • 真正修改CRISPRon-BE模型结构:修改DeepCRISPRonBE_train.py和DeepCRISPRonBE_eval.py,把distance作为第6类输入加入神经网络,然后重新训练模型
    • 需要原CRISPRon-BE训练数据,且每条训练样本都要补上distance特征,最好还要有18-nt/16-nt真实编辑结果,否则模型只能学习20-nt条件下distance和编辑效率的关系,再外推到短sgRNA
    • 可能需要AF3在线预测distance
    • cross-attention transformer
已有数据

2025Genome Biology_Predicting adenine base editing efficienc.xlsx:提供大规模真实ABE8e编辑效率数据

  • 筛选ABE8e+NGG
  • 构建CRISPRon-BE输入30mer
  • 运行原模型得到baseline预测
  • 用absolute_editing_efficiency和A1-A20_efficiency作为真实值对照
类别 sheet 含义
实验说明 Oligos & BE 高通量测序引物、oligo pool设计、ABEmax/ABE8e相关表达载体序列
数据总览 Overview_Datasets 每个实验条件的replicate名称、初始library size、过滤后library size、合并后的数据sheet名称
编辑效率数据 其余26个sheet 不同Cas9变体、ABE版本、递送方式/时间条件下的逐sgRNA编辑效率数据
  • 对baseline最重要的是ABE8e相关sheet
  • 每个编辑效率数据sheet的列结构一致
  • rname:目标突变/疾病位点名称,通常包含转录本编号、基因名、突变形式和蛋白改变。例如类似NM_000021.4(PSEN1)c.1141CtoT...
  • refSeq:与该sgRNA/目标位点相关的20nt序列字段
  • PAM:该sgRNA对应的PAM序列,可选出NGG的来跑baseline
  • Target-Sequence:较长的目标序列上下文,需要整理出30nt序列作为输入
  • Position:目标编辑碱基在protospacer中的位置,用于确认目标A对应哪个窗口位置
  • absolute_editing_efficiency:实验真实值,该sgRNA的总体编辑效率,作为和原模型预测结果比较的真实值
  • A1_efficiency-A20_efficiency:实验真实值,20nt protospacer每个位置的A-to-G编辑效率。如果某个位置不是A,表格中会写noA;如果是A,则给出该位置的编辑百分比

ABE8e summary V2.xlsx:短sgRNA实验总结和结构预测准备文件

  • Sheet1:每个小块对应一个实验靶点(ABE8、ABE25、HPE6等),每个靶点下面按A位点列出编辑效率,横向分成不同sgRNA长度(每个长度通常有3个重复值,ABE8e 20nt、ABE8e 18nt/19nt、ABE8e 16nt/17nt、ABE8e 14nt/15nt),表示某个靶点 在不同sgRNA长度下 各个A位置的ABE8e编辑效率
  • Cas9:Cas9蛋白序列,给AF3或其它结构预测准备蛋白输入
    • Cas9蛋白序列 + sgRNA序列 + DNA双链序列AF3预测Cas9-sgRNA-DNA复合物提取R-loop distance
  • sgRNA DNA:每个靶点在不同长度下的spacer/sgRNA序列,以及对应的DNA双链序列,
    • spacer行是短sgRNA的靶向序列
    • sgRNA行是在spacer后面接上scaffold后的完整sgRNA序列
    • DNA1和DNA2是用于AF3输入的双链DNA序列

    也是用于构建AF3输入

    • 短sgRNA真实编辑窗口 + 提供AF3结构预测所需Cas9/sgRNA/DNA输入后续整理distance验证distance模型能否反映短sgRNA窗口收缩

总体编辑效率、位置编辑效率和outcome:假设某条20nt序列在编辑窗口内只有A5和A7两个A,实验可能观察到4种结果

outcome 含义 频率示例
A5、A7都未编辑 未编辑序列 40%
只编辑A5 A5→G 20%
只编辑A7 A7→G 10%
A5和A7同时编辑 A5、A7→G 30%
  • 总体编辑效率=20%+10%+30%=60%
  • A5位置效率=20%+30%=50%
  • A7位置效率=10%+30%=40%

具体到模型的输入输出:

  • pred_eff:至少发生一次编辑的概率,即总体编辑效率
  • pred_freq:某一种具体组合outcome的频率
  • A5_efficiency:所有包含A5→G的outcome频率之和
  • 原模型输出的是pred_eff+多个pred_freq,需要把多个outcome重新汇总成位置3–10的边际编辑效率

我们现在有的标签:某个target × 某种sgRNA长度 × 某个A位置该位置的A-to-G效率,所以新模型最自然的输出是position_efficiency_mean

baseline

baseline和数据准备使用的代码

bash scripts/run_abe8e_baseline.sh

准备baseline输入

  • CRISPRon-ABE使用的目标DNA:4nt上游+20nt protospacer+3nt PAM+3nt下游
  • 其中30mer第5–24位=20nt protospacer第25–27位=PAM

整理baseline结果并计算指标预览 | 下载

项目 数量
原始记录 11,402
非NGG PAM排除 10,239
编辑窗口3–10位无A排除 58
PAM无效排除 13
最终保留 1,092
唯一30mer 1,091

总体编辑效率预测结果

暑假后_2

  • 横轴为真实总体编辑效率,纵轴为原模型预测总体效率,虚线表示理想情况预测值=真实值
指标 数值 含义
样本数 1,092 -
Pearson 0.728 衡量预测值和真实值之间的线性关系
Spearman 0.795 衡量排序关系
MAE(平均绝对误差) 5.26 每条记录预测误差绝对值的平均值
RMSE(均方根误差) 9.88 对大误差给予更高惩罚
RMSE为9.88,明显高于MAE,说明大部分点比较准确,但存在少数误差很大的离群点
  • 图中间和右上方的大部分点靠近虚线,说明中高效率位点预测较好;但真实效率接近0的部分点,模型仍给出40%–70%的预测,说明原模型存在向数据平均值收缩的现象
  • Kissling ABE8e训练数据本身主要集中在60%–80%高效率区域,因此模型不擅长输出极低值是可以理解的
  • 需要注意的是,这批数据与CRISPRon-ABE训练使用的Kissling ABE8e数据存在重合,不是严格的独立外部测试结果

编辑窗口预测结果:全部位置合并相关性、各位置内部相关性、平均编辑窗口曲线三类结果都没有异常

暑假后_3

  • 横轴为protospacer位置3–10,纵轴为该位置所有可编辑A的平均效率
指标 数值
可编辑A位点数 2,687
Pearson 0.893
Spearman 0.872
MAE 6.98
RMSE 11.15
位置 n 真实均值 预测均值 差值
A3 317 46.68 46.43 −0.25
A4 335 61.69 60.53 −1.16
A5 345 62.21 62.15 −0.07
A6 389 63.82 63.69 −0.13
A7 330 62.18 62.12 −0.06
A8 339 52.69 53.83 +1.14
A9 352 36.92 37.62 +0.70
A10 280 20.42 20.42 +0.00
位置 Pearson Spearman MAE
A3 0.864 0.862 8.78
A4 0.738 0.758 6.99
A5 0.741 0.779 6.80
A6 0.740 0.780 6.28
A7 0.745 0.775 6.51
A8 0.883 0.890 6.91
A9 0.921 0.906 6.92
A10 0.880 0.819 6.88
  • 说明原模型正确恢复了ABE8e的平均位置偏好
数据准备

ABE8e summary V2.xlsx整理成标准长表预览 | 下载

  • target_length.tsv:每个target×sgRNA长度一行
  • position_long_all.tsv:保留所有实验位置,包括负位置、A11、A12等
  • position_long_pos3_10.tsv:仅保留原CRISPRon-ABE编辑窗口3–10位(后续第一版模型使用这个文件)
python scripts/prepare_abe8e_short_dataset.py \
    --xlsx "data/ABE8e summary V2.xlsx" \
    --outdir data/ABE8e_short_sgRNA
项目 结果
target数量 12
target×长度条件 48(12个target×4组长度)
全部位置记录 424
位置3–10记录 208
缺失重复值 0
重复记录 0
非NGG条件 0
  • 长度不一致记录:

    ABE25 18nt:序列19nt,开头有小写g
    ABE25 14nt:序列15nt,开头有小写a
    PT14 20nt:序列21nt,开头有小写g
    PT13 20nt:序列21nt,开头有小写g
    S16 15nt:序列实际14nt
    S12 15nt:序列实际14nt
    

    去掉开头的小写碱基后,所有序列都能正确匹配对应20nt protospacer的PAM近端后缀(小写g/a很可能是额外添加的5′端碱基,不属于主要的target-complementary spacer)。S16和S12标为15nt,但实际只有14nt,而且没有额外小写碱基,不过暂时不使用短的,所以不会影响

  • ABE8的A2不一致:ABE8的20mer为GTAAACAAAGCATAGACTGA,第2位是T,但原始实验表标为A2,不过A2不在将使用的3–10位窗口内
  • 三组平均位置编辑效率分别为:

    20nt:76.18%
    18/19nt:59.49%
    16/17nt:34.41%
    

    随着sgRNA缩短,编辑效率明显下降,说明当前数据提取符合实验的整体变化趋势

生成标准化建模表和distance模板

  • 统一处理小写5′附加碱基和target-matching spacer
  • 生成后续填写R-loop distance的标准模板

    有些sgRNA序列开头带额外小写g或a,例如g+18nt真正互补序列,这个额外碱基可能用于转录启动或实验构建,但不与目标DNA互补。因此我们同时保存了raw_spacer_dnaextra_5p_dnatarget_matching_spacer_dnatarget_matching_length,模型中的“长度”采用真正与target互补的长度(20nt、18nt、16nt)

python scripts/prepare_abe8e_distance_inputs.py \
    --target-length \
    data/ABE8e_short_sgRNA/abe8e_short_target_length.tsv \
    --position \
    data/ABE8e_short_sgRNA/abe8e_short_position_long_pos3_10.tsv \
    --outdir \
    data/ABE8e_short_sgRNA/distance_input

预览 | 下载

检查项 结果
target数量 12
全部target×长度条件 48
第一轮20/18/16组条件 36
第一轮位置级记录 156
每组位置记录 52(三组完全一致)
缺失重复值 0
非A位置 0
非NGG PAM 0
30mer长度错误 0
DNA双链不互补 0
重复af3_id 0
未解决长度条件 2(仅位于未使用的14/15nt组)
  • 三种长度使用同样的12个target和同样的A位置,因此组间差异不是因为“20nt组恰好测了更多容易编辑的位置”,而更可能来自sgRNA长度变化,提高了长度比较的可解释性
  • 每条位置记录有rep1-rep3,我们保存position_efficiency_meanposition_efficiency_sd,训练时目前用平均值作为标签,SD用于判断实验不确定性

使用AlphaFold网页版进行距离预测上传的json文件 | 预测结果

  • 输入:Cas9蛋白、完整sgRNA=spacer+scaffold、DNA1、DNA2

    20nt、18nt、16nt任务中,Cas9、DNA双链和scaffold相同,只改变sgRNA与DNA互补的spacer长度

  • distance:互补DNA碱基之间C1′原子到C1′原子的欧氏距离

    使用C1′的优点是每种DNA碱基都有该原子,并且可以较稳定地表示两条DNA糖环之间的间隔

    • 约10–11Å:两条DNA仍接近正常双链配对状态
    • 20Å以上:两条DNA明显分离
    • 30–40Å:R-loop区域高度开放

    (这里的20Å只是解释结构时的经验参考,不是已经通过实验确定的真实阈值)

  • 最后对AF给出的5个可能模型的distance求均值和SD,作为新模型的输入

python scripts/prepare_all_abe8e_af3_server_jobs.py \
    --xlsx "data/ABE8e summary V2.xlsx" \
    --manifest \
    data/ABE8e_short_sgRNA/distance_input/abe8e_af3_manifest_first_round.tsv \
    --outdir \
    data/ABE8e_short_sgRNA/af3_all_jobs \
    --batch-size 6 \
    --exclude-af3-ids \
    ABE8_L20,ABE8_L18_19,ABE8_L16_17

以ABE8这个target为例:因为distance方差较大,所以又对16nt重新运行了两次以判断是不是AF的问题

  • 15条distance曲线:

    暑假后_4

    图中每一条线代表一次AF3候选结构中的位置3–10距离

    • 位置3–7大多数模型约10Å,比较闭合
    • 位置8–10开始分叉
    • 部分模型在位置8后迅速打开
    • 部分模型到位置10仍接近闭合
    • 还有少数模型在位置5–7出现异常中间状态,说明AF3对16nt条件下R-loop边界没有给出唯一答案
  • 但这不是说“AF3预测失败”,因为:
    • 模型整体ipTM约0.78–0.84
    • 链和碱基映射正确
    • 不同预测轮次反复出现相似的开放型和闭合型构象
  • 结论:16nt条件下,R-loop远端区域的相对构象不确定性高于20nt和18nt。这并不是由AF运行错误导致的,所以后续都使用运行一次、产生5个模型取均值的方法

    但不能进一步直接断言真实分子一定在这些状态之间动态转换,因为AF3候选分布不等同于真实热力学构象分布

结果汇总:预览 | 下载

对12条target运行原始CRISPRon-ABE:获得每个target的CRISPRoff能量特征、CRISPRon活性分数、原模型总体效率预测、原模型位置3–10效率预测

  • 原始CRISPRon-BE不包含sgRNA长度输入和distance,因此同一个target的20nt、18nt、16nt输出相同,只需运行12条唯一30mer
bash scripts/run_abe8e_short_original_model.sh

结果汇总:预览 | 下载

  • CRISPRparams.tsv:包含CRISPRoff相关能量(RNA_DNA_eng、RNA_DNA_eng_weighted、DNA_DNA_opening、spacer_self_fold、CRISPRoff_score)
    • 这里的DNA_DNA_opening是CRISPRoff热力学模型中的双链打开能量,不是我们从AF3结构中测得的几何distance
  • crispron.csv:包含CRISPRon预测的Cas9活性分数,是说“这条20nt目标序列在标准Cas9系统中,本身是否容易被Cas9识别并发挥活性”
  • crispronABE_prediction.tsv:包含pred_eff、每种outcome的pred_freq,再通过outcome汇总获得位置3–10预测编辑效率

合并上述结果构建新模型输入

  • 样本身份:表示这行是哪一个target、哪一种长度、哪一个A位置(record_idtarget_idlength_group_idreported_position
  • 实验标签:真实实验结果(rep1rep2rep3position_efficiency_meanposition_efficiency_sd
  • 序列信息:表示目标序列、PAM和sgRNA(target_20mertarget_23mertarget_30merPAMfull_sgRNA_rna
  • 长度信息:明确20nt、18nt、16nt条件(target_matching_lengthsgRNA_length_numericlength_group_id
  • 结构特征
    • distance_pos3–10:整条8维结构曲线
    • distance_at_position:当前这行对应A位置的局部distance
    • distance_sd:AF3候选模型间不确定性
  • 原模型特征和预测:CRISPRoff_score、CRISPRon_score、original_pred_total_eff、original_pred_position_efficiency
python scripts/extract_all_abe8e_target_distances.py \
    --manifest \
    data/ABE8e_short_sgRNA/distance_input/abe8e_af3_manifest_first_round.tsv \
    --zip-dir \
    data/ABE8e_short_sgRNA/af3_target_zips/primary \
    --outdir \
    data/ABE8e_short_sgRNA/af3_target_distance

结果汇总:预览 | 下载

  • abe8e_short_complete_model_table.tsv:后续训练直接使用
  • abe8e_short_original_baseline_metrics.tsv:分别给出all_lengths、L20、L18_19、L16_17对应的Pearson、Spearman、MAE和RMSE
长度 Pearson Spearman MAE 真实均值 预测均值
全部长度 0.512 0.523 24.01 56.69% 45.40%
20nt 0.787 0.862 31.35 76.18% 45.40%
18nt 0.707 0.723 18.74 59.49% 45.40%
16nt 0.378 0.358 21.95 34.41% 45.40%

可以看到,同一个target、同一个位置在3种长度下的原模型预测完全相同,最大差值为0:因为原模型输入只有30nt目标序列、编辑位置、CRISPRoff、CRISPRon和dataset信息,并没有sgRNA长度或R-loop distance

  • 20nt:明显低估,平均低估30.77
  • 18nt:平均低估14.08
  • 16nt:平均高估11.00

先做一个小规模、按target分组的机器学习检查,确认distance是否提供可用信号:比较4组结果

  • 使用了带标准化和L2正则化的Ridge回归,并采用按target留一交叉验证(每次把1个完整target作为测试集、另外11个target训练、重复12次)
  • original_crispron:原CRISPRon-ABE直接给出的预测
  • base:输入不包含长度
    • 30mer one-hot:30×4=120个特征
    • 位置3–10 one-hot:8个特征
    • CRISPRoff:1个
    • CRISPRon:1个
  • length:base+sgRNA长度,即20、18、16
  • distance:base+8维distance(3-10位置的distance)+当前位点distance
python scripts/replace_group_with_target_specific_distances.py \
    --complete-table \
    data/ABE8e_short_sgRNA/complete_model_input/abe8e_short_complete_model_table.tsv \
    --distance-table \
    data/ABE8e_short_sgRNA/af3_target_distance/abe8e_target_specific_distance_table.tsv \
    --outdir \
    data/ABE8e_short_sgRNA/complete_model_input_target_distance

结果汇总:预览 | 下载

结果图:每个点是该长度下、该位置所有可用target的平均效率,不是某一条sgRNA的单独窗口,而且各位置样本数不同

  • 暑假后_6
    • 原模型在pos3–10几乎全部低估,说明原模型与当前短sgRNA实验数据的绝对效率尺度不一致
    • length模型在20nt中整体表现最好,但pos3–4低估、pos8–10高估,pos4–6比length低估更多
    • distance模型pos3比length更接近真实值,pos8–10的高估程度小于length
  • 暑假后_7
    • 原模型pos3–4相对接近,pos5–8明显低估,pos9–10严重低估
    • length模型能较好表现出pos3–7逐渐升高、os8–10下降,但对真实的pos6–7峰值估计不足、pos10又偏高
    • distance模型在窗口中部表现较好,但pos4高估、pos10高估
  • 暑假后_8
    • 与20nt相比,整体效率明显下降、编辑窗口变窄、高效率平台消失、pos3–4受到明显抑制,这与16nt条件下R-loop缩短、PAM远端开放程度下降的结构预期一致
    • 原模型无法感知长度变化,仍然输出与20nt相同的窗口形状
    • length模型明显改善了整体尺度,但它在pos4–6仍然高估
    • distance模型更接近真实值,但在部分位置还有高估低估的情况

模型平均参数(20/18/16nt混合):

模型 Pearson Spearman MAE RMSE
原CRISPRon-ABE 0.512 0.523 24.01 28.29
base 0.267 0.305 24.04 28.81
length 0.621 0.667 18.69 23.41
distance 0.634 0.668 18.73 23.12

按20/18/16nt统计模型MAE:

模型 20nt MAE 18nt MAE 16nt MAE
length 13.69 19.95 22.42
distance 15.22 20.51 20.44
  • base模型只用12个target来训练,且同一输入对应多个效率(没有distance作区分),所以准确度很低
  • 加入长度或distance后,整体性能明显优于没有长度信息的模型
  • distance模型与length模型整体性能非常接近;distance在相关性和RMSE上略好,length在MAE上略好
    • 20nt时length模型更好,18nt时length模型略好,16nt时distance模型明显更好
    • distance最主要的价值出现在16nt短sgRNA条件下

具体到target层面:

  • MAE改善最明显的target为:

    target length MAE distance MAE 改善
    ABS4 15.96 9.95 6.01
    HPE6 15.15 11.67 3.47
    PT13 25.03 21.85 3.18
  • distance与length接近的包括:sgANGPTL3-A6、S7、CS1P、S16
  • distance明显变差的主要是:

    target length MAE distance MAE 变化
    S12 20.03 25.52 变差5.49
    S18 26.33 28.62 变差2.29
    PT14 21.60 22.57 变差0.97
  • 总体上,distance对5/12个target有改善,对7/12个target没有改善。这说明目前的结构特征存在真实的target-specific信号,但其稳定性还不足

总结:

  • 原CRISPRon-ABE流程已经正确跑通
  • 原模型能恢复标准ABE8e的平均编辑窗口
  • 短sgRNA实验显示20nt→18nt→16nt时,位置编辑效率整体下降
  • AF3预测显示sgRNA缩短时,R-loop远端区域开放程度下降
  • 加入length或distance后,简单模型能够更好地区分20nt、18nt和16nt
  • distance模型的整体结果略优于length模型,主要优势集中在16nt sgRNA条件,值得继续进入神经网络阶段
  • 还不能证明AF3候选构象代表真实分子的动态构象比例
  • 还没有直接预测bystander减少或脱靶降低
  • 只有12个target,样本量很小,且16nt组AF结果不确定性较高;每个位置的target数量不一致,例如pos10只有3个target

新模型构建

问题:目前真正带有真实短sgRNA效率+target-specific AF3 distance的数据只有12个target×20/18/16nt×位置3–10中的可编辑A=156条position-level记录。但是原CRISPRon-ABE的训练规模完全不是这个量级,论文整合后的ABE模型涉及17,941条gRNA,而且原模型还是30nt CNN+多输入+双输出架构

  • 如果直接把原模型所有参数重新随机初始化,只拿156条记录训练,CNN要重新学习sequence/position规律以及distance规律,几乎一定严重过拟合

GPT首先推荐了一个方案:基于预训练结果的adapter

  • 假设原CRISPRon-ABE对某个target的A6预测:序列+编辑位置+CRISPRoff+CRISPRon+datasetA6预测效率=50%
  • 现在我们知道

    20nt时distance=35Å
    18nt时distance=25Å
    16nt时distance=13Å
    

    真实实验值是

    20nt:A6=75%
    18nt:A6=60%
    16nt:A6=30%
    

    原模型不知道sgRNA长度,所以不管20/18/16nt,它永远还是输出50%

  • adapter的做法不是修改原模型,而是

      原CRISPRon-ABE
            ↓
          50%
            │
            ├──────────────┐
            │              │
    sgRNA长度         R-loop distance
            │              │
            └──────┬───────┘
                  ↓
              adapter网络
                  ↓
            学习一个修正值
    

    例如它可能学出来

    20nt:correction=+23
    18nt:correction=+8
    16nt:correction=-18
    

    即:ynew ​= yCRISPRon ​+ f(distance,length,position)

    20nt:50+23=73%
    18nt:50+8=58%
    16nt:50-18=32%
    

    这里真正训练的只有后面的f()

之后问了GPT这种方法是否是前述的“真正修改模型”,又给出了一版新的方案:真正改结构,但冻结原模型

  • 真的把distance加入CRISPRon-BE,同时不要求156条数据重新训练整个CRISPRon-BE

                      原CRISPRon-ABE
              ┌─────────────────────────────┐
    30mer ───→│ CNN                         │
    outcome ─→│                             │
    energy ──→│ 原有hidden representation   │
    CRISPRon →│                             │
    dataset ─→│                             │
              └──────────────┬──────────────┘
                            │
                      pretrained hidden
                            │
                            ├───────────┐
                            │           │
                            │       distance_pos3-10
                            │           ↓
                            │        Dense层
                            │           │
                            └─────concat┘
                                  ↓
                            新prediction head
    
  • 关键区别在于我们使用的不是“原模型最终预测结果”,而是原模型内部已经学好的hidden features
  • 第一阶段:冻结CRISPRon-ABE原有参数,只训练distance branch+最后prediction head

    如果效果正常,再尝试解冻最后1–2个Dense层进行fine-tuning

  • cross-attention:相当于把新输入融合进前面的参数,比如探究“sequence第6位应该重点看distance第几位”、“sequence不同碱基和R-loop不同位置之间有没有特异性交互”

    理论上更漂亮,但现在数据的distance只有8个值、target只有12个,现在上attention基本没有必要


总结来说,GPT给出的最终方案是:保留CRISPRon-ABE的预训练backbone,把distance真正作为第6类输入加入网络;第一版冻结原有backbone,只训练新增distance branch和输出层

                   ┌─ sequence CNN(原权重)
                   │
                   ├─ outcome/position
                   │
CRISPRon-ABE ──────┼─ CRISPRoff
                   │
                   ├─ CRISPRon
                   │
                   └─ dataset
                           │
                    原hidden layer
                           │
                           ├──── distance branch ← 新增
                           │
                           ↓
                      fusion Dense
                           ↓
                 position efficiency

如果这个版本有效,再考虑解冻最后Dense层小学习率fine-tuning比较是否进一步改善