Nat.C|RiNALMo:通用 RNA 语言模型新突破,3600 万序列预训练,跨家族结构预测、剪接识别与功能注释全能泛化

发布于:2025-07-08 ⋅ 阅读:(20) ⋅ 点赞:(0)

今天分享一个结构预测的该模型可自动学习序列中的隐藏结构特征,在多个下游任务中均表现优越,特别在RNA二级结构预测中展现出对未知家族的强泛化能力,显著超越传统深度学习方法,为推动RNA结构解析与靶点发现提供了全新工具。

  • 标题:RiNALMo:通用 RNA 语言模型,在结构预测任务上表现良好
  • DOI:https://doi.org/10.1038/s41467-025-60872-5

摘要

尽管RNA作为小分子药物靶点的研究逐渐升温,但其结构复杂性仍带来诸多挑战,亟需深化对其结构与功能的系统理解。受蛋白质语言模型成功经验启发,研究团队构建了目前规模最大的RNA语言模型 RiNALMo,包含6.5亿参数,并在3600万个非编码RNA序列上完成预训练。RiNALMo能够从序列中自动提取潜在结构特征,在多个任务中实现最先进性能,特别是在RNA二级结构预测中展现出对未知RNA家族的卓越泛化能力,突破了传统模型的局限,为RNA功能解析与靶点开发提供了有力工具。

结果

通用RNA语言模型

RiNALMo 是一种专为RNA设计的通用语言模型,基于 Transformer编码器架构,采用掩码语言模型(MLM)进行预训练,在33层模块中利用自注意力机制有效捕捉RNA序列中的局部与全局上下文。模型在多个数据库的非标注RNA序列上进行训练,随机遮蔽15%的核苷酸作为目标,以重建丢失信息并学习高维序列嵌入。RiNALMo输出的嵌入向量可广泛应用于RNA二级结构、多物种剪接位点、翻译效率(TE)、表达水平(EL)及核糖体负载(MRL)等任务,均显著提升预测性能和泛化能力。

可解释性分析:嵌入空间反映RNA结构与功能特征

为验证模型的可解释性,研究者对 RiNALMo 的序列嵌入进行了 t-SNE 可视化,结果显示来自不同功能与结构背景的 RNA 在嵌入空间中呈现出明确的家族聚类,与 RNA-FM 相比,RiNALMo 更能根据 RNA 的结构与功能特性实现精准区分与归类。这一现象在 ncRNA 功能家族分类数据中尤为显著,表明模型不仅编码了一级序列信息,还学习了隐藏的结构与功能特征。此外,在 Rfam 家族分类和跨家族二级结构预测任务中表现出的优越性能进一步验证了其嵌入空间蕴含结构信息、具备良好泛化能力。

微调RiNALMo以提升RNA二级结构预测性能

RNA二级结构中碱基对的形成对于其空间构象与功能至关重要,是三级结构预测的重要基础。研究团队在bpRNA等标准数据集上对 RiNALMo 进行了微调,将其应用于核苷酸配对的二分类任务,并与多种传统与深度学习方法(如RNA-FMSPOT-RNAUFoldMXfold2)进行了系统比较。结果表明,RiNALMo在准确率、召回率和F1得分等关键指标上均优于现有模型,尤其在家族内数据上表现最优。此外,模型还在结构显著不同于训练集的 TestSetB 上进行了泛化能力验证,F1得分依然领先,显示出其在跨家族结构预测中的强大适应性,为RNA结构建模提供了更稳健的工具基础。

跨家族泛化能力:RiNALMo突破深度学习结构预测瓶颈

尽管现有深度学习模型在训练家族内表现出色,但其在 新RNA家族 上普遍存在推广能力不足的问题。为评估这一关键挑战,研究者采用 ArchiveII 基准数据集RiNALMo 进行了逐家族留一验证,并与 RNA-FMRNAstructureCONTRAfoldUFoldMXfold2 等主流工具进行了对比。结果显示,RiNALMo 是首个在大多数RNA家族中显著优于传统方法的语言模型,表现出卓越的跨家族泛化能力,仅在 端粒酶RNA 上存在性能下降。进一步嵌入可视化分析揭示该类RNA在序列长度上显著偏长,可能影响模型识别效果。

功能分类任务微调:剪接位点与ncRNA家族预测

研究团队进一步将 RiNALMo 微调应用于RNA功能分类任务,包括 剪接位点识别ncRNA家族分类。在剪接位点预测中,RiNALMo通过对供体与受体位点分别建模,实现了对外显子/内含子边界的高精度定位,并在包含148种真核生物序列的跨物种数据集上,显著优于RNA-FM、Uni-RNA以及专门构建的SpliceBERT等模型,展现出强泛化能力。在 ncRNA 多分类任务中,RiNALMo基于Rfam构建的88类短ncRNA数据集进行预测,无论在边界无噪声(0%)或高噪声(200%)情况下,其对真实功能家族的识别能力均优于CNN模型及其他语言模型,验证了其对进化与结构特征的鲁棒捕捉能力,强化其在多物种功能注释中的应用潜力。

mRNA翻译任务微调:RiNALMo跨类型泛化能力验证

为评估 RiNALMo 在编码RNA以外任务中的适应性,研究者将其微调用于 mRNA翻译相关的三个回归任务:核糖体平均负载(MRL)、翻译效率(TE)与表达水平(EL)。输入为5’ UTR序列,输出通过6层ResNet预测模块进行回归建模。RiNALMo在Random7600、Human7600以及三个人类细胞系数据集上均显著优于RNA-FM、UTR-LM与Optimus 5-prime等专用模型,MRL预测以R²衡量,TE与EL预测以Spearman相关系数评价,RiNALMo在所有指标上均领先。尽管该模型仅在非编码RNA(ncRNA)上预训练,但其在mRNA任务中的出色表现表明其嵌入捕捉了高度通用的序列—结构—功能模式,验证了其跨RNA类型的广泛泛化潜力。

开源代码

  • Github:https://github.com/lbcb-sci/RiNALMo

官网的快速入门

#### 环境要求
# - Python ≥ 3.8
# - CUDA ≥ 11.8

# ========= 安装步骤 =========

# 方法一:使用 pip 安装
git clone https://github.com/lbcb-sci/RiNALMo
cd RiNALMo
pip install .
pip install flash-attn==2.3.2

# 方法二:使用 conda 安装
git clone https://github.com/lbcb-sci/RiNALMo
cd RiNALMo
conda env create -f environment.yml
conda activate rinalmo

# ========= 下载模型权重(预训练与微调)=========

mkdir weights && cd weights

# ---- 预训练模型 ----
wget https://zenodo.org/records/15043668/files/rinalmo_giga_pretrained.pt     # 650M 参数
wget https://zenodo.org/records/15043668/files/rinalmo_mega_pretrained.pt     # 150M 参数
wget https://zenodo.org/records/15043668/files/rinalmo_micro_pretrained.pt    # 35M 参数

# ---- 二级结构预测微调模型 ----
wget https://zenodo.org/records/15043668/files/rinalmo_giga_ss_bprna_ft.pt
wget https://zenodo.org/records/15043668/files/rinalmo_giga_ss_archiveII-5s_ft.pt
# (可根据需要补充其它结构模型)

# ---- 剪接位点预测微调模型 ----
wget https://zenodo.org/records/15043668/files/rinalmo_giga_splice_acceptor_ft.pt
wget https://zenodo.org/records/15043668/files/rinalmo_giga_splice_donor_ft.pt

# ---- 平均核糖体负载预测微调模型 ----
wget https://zenodo.org/records/15043668/files/rinalmo_giga_mrl_ft.pt

# ---- ncRNA 功能分类微调模型(含不同噪声设置)----
wget https://zenodo.org/records/15043668/files/rinalmo_giga_ncrna_class_0_noise_ft.pt
wget https://zenodo.org/records/15043668/files/rinalmo_giga_ncrna_class_200_noise_ft.pt

cd ..

# ========= 使用示例:获取 RNA 序列嵌入 =========

import torch
from rinalmo.pretrained import get_pretrained_model

DEVICE = "cuda:0"
model, alphabet = get_pretrained_model(model_name="giga-v1")
model = model.to(device=DEVICE)
model.eval()

seqs = ["ACUUUGGCCA", "CCCGGU"]
tokens = torch.tensor(alphabet.batch_tokenize(seqs), dtype=torch.int64, device=DEVICE)

with torch.no_grad(), torch.cuda.amp.autocast():
    outputs = model(tokens)

print(outputs["representation"])  # 输出序列嵌入表示

# ========= 下游任务评估(以结构预测为例)=========

# 参数说明:
# --test_only       # 仅评估,无训练
# --init_params     # 指定模型权重路径(.pt)
# --dataset         # 使用的数据集名
# --prepare_data    # 是否自动准备数据
# --output_dir      # 输出目录路径
# --accelerator     # 使用GPU
# --devices         # 指定GPU数量

# 示例:评估二级结构预测模型(5S rRNA)
python train_sec_struct_prediction.py ./ss_data \
  --test_only \
  --init_params ./weights/rinalmo_giga_ss_archiveII-5s_ft.pt \
  --dataset archiveII_5s \
  --prepare_data \
  --output_dir ./outputs/archiveII/5s/ \
  --accelerator gpu --devices 1

自定义权重

RiNALMo 的模型权重文件已在 Zenodo 平台发布,支持多种参数规模与下游任务,具体文件说明如下

  • 网址:https://zenodo.org/search?q=parent.id%3A10725748&f=allversions%3Atrue&l=list&p=1&s=10&sort=version

作者发布了V1和V2,v1 是最初版本,仅包含 giga 规模下的核心权重文件,适用于论文引用场景;v2 为扩展版本,新增了 micro/mega 配置与 ncRNA 分类任务,覆盖更全面,适合用户使用与任务匹配。

  • 预训练模型权重(用于通用嵌入提取)

    • rinalmo_micro_pretrained.pt:33M 参数,轻量级模型
    • rinalmo_mega_pretrained.pt:150M 参数,中等规模
    • rinalmo_giga_pretrained.pt:650M 参数,完整版预训练模型
  • 二级结构预测微调权重(含预测头)

    • 文件名格式:rinalmo_giga_ss_<train_dataset>_ft.pt
    • 示例:rinalmo_giga_ss_bprna_ft.pt 用于 bpRNA 数据集结构预测任务
  • 剪接位点预测微调权重

    • rinalmo_giga_splice_donor_ft.pt:供体位点预测
    • rinalmo_giga_splice_acceptor_ft.pt:受体位点预测
  • 平均核糖体负载(MRL)预测微调权重

    • rinalmo_giga_mrl_ft.pt:基于5’ UTR 预测翻译活性指标 MRL
  • ncRNA 功能家族分类微调权重

    • rinalmo_giga_ncrna_class_0_noise_ft.pt:无边界扰动设置(0%噪声)
    • rinalmo_giga_ncrna_class_200_noise_ft.pt:高边界扰动设置(200%噪声)

这是环境配置:

name: rinalmo
channels:
  - pytorch
  - nvidia
  - bioconda
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=conda_forge
  - _openmp_mutex=4.5=2_kmp_llvm
  - appdirs=1.4.4=pyh9f0ad1d_0
  - biopython=1.81=py311h459d7ec_1
  - blas=2.116=mkl
  - blas-devel=3.9.0=16_linux64_mkl
  - bleach=6.1.0=pyhd8ed1ab_0
  - brotli-python=1.1.0=py311hb755f60_1
  - bzip2=1.0.8=h7f98852_4
  - ca-certificates=2024.2.2=hbcca054_0
  - cd-hit=4.8.1=h43eeafb_9
  - certifi=2024.2.2=pyhd8ed1ab_0
  - charset-normalizer=3.3.0=pyhd8ed1ab_0
  - click=8.1.7=unix_pyh707e725_0
  - colorama=0.4.6=pyhd8ed1ab_0
  - cuda-cudart=11.8.89=0
  - cuda-cupti=11.8.87=0
  - cuda-libraries=11.8.0=0
  - cuda-nvrtc=11.8.89=0
  - cuda-nvtx=11.8.86=0
  - cuda-runtime=11.8.0=0
  - docker-pycreds=0.4.0=py_0
  - filelock=3.12.4=pyhd8ed1ab_0
  - fsspec=2023.9.2=pyh1a96a4e_0
  - gitdb=4.0.10=pyhd8ed1ab_0
  - gitpython=3.1.40=pyhd8ed1ab_0
  - gmp=6.2.1=h58526e2_0
  - gmpy2=2.1.2=py311h6a5fa03_1
  - icu=73.2=h59595ed_0
  - idna=3.4=pyhd8ed1ab_0
  - jinja2=3.1.2=pyhd8ed1ab_1
  - kaggle=1.5.16=pyhd8ed1ab_0
  - ld_impl_linux-64=2.40=h41732ed_0
  - libabseil=20230802.1=cxx17_h59595ed_0
  - libblas=3.9.0=16_linux64_mkl
  - libcblas=3.9.0=16_linux64_mkl
  - libcublas=11.11.3.6=0
  - libcufft=10.9.0.58=0
  - libcufile=1.8.0.34=0
  - libcurand=10.3.4.52=0
  - libcusolver=11.4.1.48=0
  - libcusparse=11.7.5.86=0
  - libexpat=2.5.0=hcb278e6_1
  - libffi=3.4.2=h7f98852_5
  - libgcc-ng=13.2.0=h807b86a_2
  - libgfortran-ng=13.2.0=h69a702a_2
  - libgfortran5=13.2.0=ha4646dd_2
  - libgomp=13.2.0=h807b86a_2
  - libhwloc=2.9.3=default_h554bfaf_1009
  - libiconv=1.17=h166bdaf_0
  - liblapack=3.9.0=16_linux64_mkl
  - liblapacke=3.9.0=16_linux64_mkl
  - libnpp=11.8.0.86=0
  - libnsl=2.0.1=hd590300_0
  - libnvjpeg=11.9.0.86=0
  - libprotobuf=4.24.4=hf27288f_0
  - libsqlite=3.43.2=h2797004_0
  - libstdcxx-ng=13.2.0=h7e041cc_2
  - libuuid=2.38.1=h0b41bf4_0
  - libxml2=2.11.5=h232c23b_1
  - libzlib=1.2.13=hd590300_5
  - lightning=2.2.0.post0=pyhd8ed1ab_0
  - lightning-utilities=0.10.1=pyhd8ed1ab_0
  - llvm-openmp=15.0.7=h0cdce71_0
  - markupsafe=2.1.3=py311h459d7ec_1
  - mkl=2022.1.0=h84fe81f_915
  - mkl-devel=2022.1.0=ha770c72_916
  - mkl-include=2022.1.0=h84fe81f_915
  - mpc=1.3.1=hfe3b2da_0
  - mpfr=4.2.0=hb012696_0
  - mpmath=1.3.0=pyhd8ed1ab_0
  - ncurses=6.4=hcb278e6_0
  - networkx=3.2=pyhd8ed1ab_1
  - numpy=1.26.0=py311h64a7726_0
  - openssl=3.2.1=hd590300_0
  - packaging=23.2=pyhd8ed1ab_0
  - pathtools=0.1.2=py_1
  - pip=23.3=pyhd8ed1ab_0
  - protobuf=4.24.4=py311h46cbc50_0
  - psutil=5.9.5=py311h459d7ec_1
  - pysocks=1.7.1=pyha2e5f31_6
  - python=3.11.5=hab00c5b_0_cpython
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python-lmdb=1.4.1=py311h8731a88_1
  - python-slugify=8.0.1=pyhd8ed1ab_2
  - python_abi=3.11=4_cp311
  - pytorch=2.1.0=py3.11_cuda11.8_cudnn8.7.0_0
  - pytorch-cuda=11.8=h7e8668a_5
  - pytorch-lightning=2.1.3=pyhd8ed1ab_0
  - pytorch-mutex=1.0=cuda
  - pyyaml=6.0.1=py311h459d7ec_1
  - readline=8.2=h8228510_1
  - requests=2.31.0=pyhd8ed1ab_0
  - sentry-sdk=1.32.0=pyhd8ed1ab_0
  - seqkit=2.5.1=h9ee0642_0
  - setproctitle=1.3.3=py311h459d7ec_0
  - setuptools=68.2.2=pyhd8ed1ab_0
  - six=1.16.0=pyh6c4a22f_0
  - smmap=3.0.5=pyh44b312d_0
  - sympy=1.12=pypyh9d50eac_103
  - tbb=2021.10.0=h00ab1b0_2
  - text-unidecode=1.3=pyhd8ed1ab_1
  - tk=8.6.13=h2797004_0
  - torchmetrics=1.2.1=pyhd8ed1ab_0
  - torchtriton=2.1.0=py311
  - tqdm=4.66.1=pyhd8ed1ab_0
  - typing-extensions=4.8.0=hd8ed1ab_0
  - typing_extensions=4.8.0=pyha770c72_0
  - urllib3=2.0.7=pyhd8ed1ab_0
  - wandb=0.15.12=pyhd8ed1ab_0
  - webencodings=0.5.1=pyhd8ed1ab_2
  - wheel=0.41.2=pyhd8ed1ab_0
  - xz=5.2.6=h166bdaf_0
  - yaml=0.2.5=h7f98852_2
  - zlib=1.2.13=hd590300_5
  - pip:
      - absl-py==2.0.0
      - contextlib2==21.6.0
      - einops==0.7.0
      - flash-attn==2.3.2
      - joblib==1.3.2
      - ml-collections==0.1.1
      - ninja==1.11.1.1
      - pandas==2.1.1
      - pytz==2023.3.post1
      - scikit-learn==1.3.1
      - scipy==1.11.3
      - threadpoolctl==3.2.0
      - tzdata==2023.3
      - gdown==5.2.0

说到底其实,RiNALMo 主要应用于 RNA生物信息学结构功能预测 相关学科,属于“类蛋白语言模型”在核酸领域的延伸,主要是专注于非编码RNA的结构建模、功能注释、序列分类与剪接调控预测,在RNA生物学、癌症转录组学、RNA药物开发与高通量功能筛选等方向具有重要应用潜力,属于前期工具小众方向,不适在数据挖掘里大家明确


文章无高低贵贱之分,各有所需,能发出去就是好东西,此外有做单细胞测序临床数据分析课题设计中文核心/SCI意愿的老师后台联系小编


网站公告

今日签到

点亮在社区的每一天
去签到