模型简介
模型特点
模型能力
使用案例
🚀 RNA-FM
RNA-FM 是一个基于非编码 RNA(ncRNA)进行预训练的模型,采用掩码语言建模(MLM)目标。该模型能够为 RNA 结构和功能的预测提供有力支持,在生物领域具有重要的应用价值。
🚀 快速开始
本模型文件依赖于 multimolecule
库。你可以使用 pip 进行安装:
pip install multimolecule
✨ 主要特性
- 预训练模型:基于非编码 RNA 序列进行预训练,可用于多种 RNA 相关任务。
- 多任务支持:支持掩码语言建模、RNA 二级结构预测、特征提取、序列分类/回归、标记分类/回归、接触分类/回归等任务。
- 模型变体:提供基于非编码 RNA 序列和信使 RNA 序列预训练的不同变体。
📦 安装指南
模型依赖于 multimolecule
库,使用以下命令进行安装:
pip install multimolecule
💻 使用示例
基础用法
掩码语言建模
你可以直接使用该模型进行掩码语言建模:
>>> import multimolecule # 必须导入 multimolecule 以注册模型
>>> from transformers import pipeline
>>> unmasker = pipeline("fill-mask", model="multimolecule/rnafm")
>>> unmasker("gguc<mask>cucugguuagaccagaucugagccu")
[{'score': 0.2752501964569092,
'token': 21,
'token_str': '.',
'sequence': 'G G U C. C U C U G G U U A G A C C A G A U C U G A G C C U'},
{'score': 0.22108642756938934,
'token': 23,
'token_str': '*',
'sequence': 'G G U C * C U C U G G U U A G A C C A G A U C U G A G C C U'},
{'score': 0.18201279640197754,
'token': 25,
'token_str': 'I',
'sequence': 'G G U C I C U C U G G U U A G A C C A G A U C U G A G C C U'},
{'score': 0.10875876247882843,
'token': 9,
'token_str': 'U',
'sequence': 'G G U C U C U C U G G U U A G A C C A G A U C U G A G C C U'},
{'score': 0.08898332715034485,
'token': 6,
'token_str': 'A',
'sequence': 'G G U C A C U C U G G U U A G A C C A G A U C U G A G C C U'}]
RNA 二级结构预测
你可以直接使用该模型进行 RNA 二级结构预测:
>>> import multimolecule # 必须导入 multimolecule 以注册模型
>>> from transformers import pipeline
>>> predictor = pipeline("rna-secondary-structure", model="multimolecule/rnafm")
>>> predictor("ggucuc")
{'sequence': 'G G U C U C',
'secondary_structure': '([(].)',
'contact_map': [[0.5174561142921448, 0.49224206805229187, 0.5099285244941711, 0.4873944818973541, 0.4782561957836151, 0.49956777691841125],
[0.49224206805229187, 0.5018295645713806, 0.4795883297920227, 0.5186688303947449, 0.4944656491279602, 0.4980457127094269],
[0.5099285244941711, 0.4795883297920227, 0.5018683671951294, 0.4938940703868866, 0.4913065433502197, 0.5082612633705139],
[0.4873944818973541, 0.5186688303947449, 0.4938940703868866, 0.4948427081108093, 0.479320764541626, 0.5107203722000122],
[0.4782561957836151, 0.4944656491279602, 0.4913065433502197, 0.479320764541626, 0.5626780986785889, 0.47851765155792236],
[0.49956777691841125, 0.4980457127094269, 0.5082612633705139, 0.5107203722000122, 0.47851765155792236, 0.48973602056503296]]}
高级用法
提取特征
以下是在 PyTorch 中使用该模型提取给定序列特征的示例:
from multimolecule import RnaTokenizer, RnaFmModel
tokenizer = RnaTokenizer.from_pretrained("multimolecule/rnafm")
model = RnaFmModel.from_pretrained("multimolecule/rnafm")
text = "UAGCUUAUCAGACUGAUGUUG"
input = tokenizer(text, return_tensors="pt")
output = model(**input)
序列分类 / 回归
⚠️ 重要提示
该模型未针对任何特定任务进行微调。你需要在下游任务上对模型进行微调,才能将其用于序列分类或回归。
以下是在 PyTorch 中使用该模型作为骨干进行序列级任务微调的示例:
import torch
from multimolecule import RnaTokenizer, RnaFmForSequencePrediction
tokenizer = RnaTokenizer.from_pretrained("multimolecule/rnafm")
model = RnaFmForSequencePrediction.from_pretrained("multimolecule/rnafm")
text = "UAGCUUAUCAGACUGAUGUUG"
input = tokenizer(text, return_tensors="pt")
label = torch.tensor([1])
output = model(**input, labels=label)
标记分类 / 回归
⚠️ 重要提示
该模型未针对任何特定任务进行微调。你需要在下游任务上对模型进行微调,才能将其用于标记分类或回归。
以下是在 PyTorch 中使用该模型作为骨干进行核苷酸级任务微调的示例:
import torch
from multimolecule import RnaTokenizer, RnaFmForTokenPrediction
tokenizer = RnaTokenizer.from_pretrained("multimolecule/rnafm")
model = RnaFmForTokenPrediction.from_pretrained("multimolecule/rnafm")
text = "UAGCUUAUCAGACUGAUGUUG"
input = tokenizer(text, return_tensors="pt")
label = torch.randint(2, (len(text), ))
output = model(**input, labels=label)
接触分类 / 回归
⚠️ 重要提示
该模型未针对任何特定任务进行微调。你需要在下游任务上对模型进行微调,才能将其用于接触分类或回归。
以下是在 PyTorch 中使用该模型作为骨干进行接触级任务微调的示例:
import torch
from multimolecule import RnaTokenizer, RnaFmForContactPrediction
tokenizer = RnaTokenizer.from_pretrained("multimolecule/rnafm")
model = RnaFmForContactPrediction.from_pretrained("multimolecule/rnafm")
text = "UAGCUUAUCAGACUGAUGUUG"
input = tokenizer(text, return_tensors="pt")
label = torch.randint(2, (len(text), len(text)))
output = model(**input, labels=label)
📚 详细文档
模型详情
变体
multimolecule/rnafm
:基于非编码 RNA 序列预训练的 RNA-FM 模型。multimolecule/mrnafm
:基于信使 RNA 序列预训练的 RNA-FM 模型。
模型规格
变体 | 层数 | 隐藏层大小 | 头数 | 中间层大小 | 参数数量(M) | 浮点运算次数(G) | 内存访问次数(G) | 最大标记数 |
---|---|---|---|---|---|---|---|---|
RNA-FM | 12 | 640 | 20 | 5120 | 99.52 | 25.68 | 12.83 | 1024 |
mRNA-FM | 12 | 1280 | 20 | 5120 | 239.25 | 61.43 | 30.7 | 1024 |
链接
- 代码:multimolecule.rnafm
- 数据:RNAcentral
- 论文:Interpretable RNA Foundation Model from Unannotated Data for Highly Accurate RNA Structure and Function Predictions
- 开发者:Jiayang Chen, Zhihang Hu, Siqi Sun, Qingxiong Tan, Yixuan Wang, Qinze Yu, Licheng Zong, Liang Hong, Jin Xiao, Tao Shen, Irwin King, Yu Li
- 模型类型:BERT - ESM
- 原始仓库:ml4bio/RNA-FM
训练详情
训练数据
RNA-FM 模型在 RNAcentral 上进行预训练。RNAcentral 是一个免费的公共资源,提供对一组全面且最新的非编码 RNA 序列的集成访问,这些序列由一组 专家数据库 提供,涵盖了广泛的生物和 RNA 类型。
RNA-FM 应用 CD-HIT (CD-HIT-EST) 以 100% 的序列同一性为阈值去除 RNAcentral 中的冗余序列。最终数据集包含 2370 万个非冗余 RNA 序列。
RNA-FM 对所有标记进行预处理,将 "U" 替换为 "T"。
请注意,在模型转换期间,"T" 会被替换为 "U"。[RnaTokenizer
][multimolecule.RnaTokenizer] 会为你将 "T" 转换为 "U",你可以通过传递 replace_T_with_U=False
来禁用此行为。
训练过程
预处理
RNA-FM 使用掩码语言建模(MLM)作为预训练目标。掩码过程与 BERT 中使用的过程类似:
- 15% 的标记被掩码。
- 在 80% 的情况下,被掩码的标记被
<mask>
替换。 - 在 10% 的情况下,被掩码的标记被一个与它们替换的标记不同的随机标记替换。
- 在剩下的 10% 的情况下,被掩码的标记保持不变。
预训练
该模型在 8 个具有 80GiB 内存的 NVIDIA A100 GPU 上进行训练。
- 学习率:1e-4
- 权重衰减:0.01
- 学习率调度器:逆平方根
- 学习率预热:10,000 步
🔧 技术细节
RNA-FM 采用掩码语言建模(MLM)作为预训练目标,通过随机掩码输入序列中的部分标记,让模型预测这些被掩码的标记。这种方法类似于语言建模中的完形填空任务,能够让模型学习到 RNA 序列的内在结构和语义信息。
在训练过程中,模型使用了一系列的优化策略,如在 8 个 NVIDIA A100 GPU 上进行分布式训练,采用逆平方根学习率调度器和 10,000 步的学习率预热,以提高模型的训练效率和性能。
📄 许可证
本模型采用 AGPL-3.0 许可证。
SPDX-License-Identifier: AGPL-3.0-or-later
引用
BibTeX:
@article{chen2022interpretable,
title={Interpretable rna foundation model from unannotated data for highly accurate rna structure and function predictions},
author={Chen, Jiayang and Hu, Zhihang and Sun, Siqi and Tan, Qingxiong and Wang, Yixuan and Yu, Qinze and Zong, Licheng and Hong, Liang and Xiao, Jin and King, Irwin and others},
journal={arXiv preprint arXiv:2204.00300},
year={2022}
}
联系信息
如果你对本模型卡片有任何问题或建议,请使用 MultiMolecule 的 GitHub 问题。
如果你对论文或模型有任何问题或建议,请联系 RNA-FM 论文 的作者。











