语言: rna
标签:
- 生物学
- RNA
许可证: agpl-3.0
数据集:
- multimolecule/rnacentral
- multimolecule/rfam
- multimolecule/ensembl-genome-browser
- multimolecule/nucleotide
库名称: multimolecule
管道标签: fill-mask
掩码标记: ""
小部件:
- 示例标题: "HIV-1"
文本: "GGUCCUCUGGUUAGACCAGAUCUGAGCCU"
输出:
- 标签: "A"
分数: 0.3932918310165405
- 标签: "U"
分数: 0.2897723913192749
- 标签: "X"
分数: 0.15423105657100677
- 标签: "C"
分数: 0.12160095572471619
- 标签: "G"
分数: 0.0408296100795269
- 示例标题: "microRNA-21"
文本: "UAGCUAUCAGACUGAUGUUGA"
输出:
- 标签: "A"
分数: 0.2931748032569885
- 标签: "U"
分数: 0.2710167169570923
- 标签: "X"
分数: 0.18341825902462006
- 标签: "C"
分数: 0.16714636981487274
- 标签: "G"
分数: 0.08522326499223709
RiNALMo
使用掩码语言建模(MLM)目标在非编码RNA(ncRNA)上预训练的模型。
免责声明
这是Rafael Josip Penić等人的RiNALMo: General-Purpose RNA Language Models Can Generalize Well on Structure Prediction Tasks的非官方实现。
RiNALMo的官方代码库位于lbcb-sci/RiNALMo。
[!提示]
MultiMolecule团队已确认提供的模型和检查点与原始实现产生的中间表示相同。
发布RiNALMo的团队未为此模型编写模型卡,因此本模型卡由MultiMolecule团队编写。
模型详情
RiNALMo是一个bert风格的模型,通过自监督方式在大量非编码RNA序列上进行了预训练。这意味着模型仅基于RNA序列的原始核苷酸进行训练,通过自动过程从这些文本生成输入和标签。有关训练过程的更多信息,请参阅训练详情部分。
模型规格
层数 |
隐藏大小 |
头数 |
中间大小 |
参数数量(百万) |
FLOPs(十亿) |
MACs(十亿) |
最大标记数 |
33 |
1280 |
20 |
5120 |
650.88 |
168.92 |
84.43 |
1022 |
链接
使用方法
模型文件依赖于multimolecule
库。您可以使用pip安装:
pip install multimolecule
直接使用
您可以直接使用此模型进行掩码语言建模:
>>> import multimolecule
>>> from transformers import pipeline
>>> unmasker = pipeline("fill-mask", model="multimolecule/rinalmo")
>>> unmasker("gguc<mask>cucugguuagaccagaucugagccu")
[{'score': 0.3932918310165405,
'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'},
{'score': 0.2897723913192749,
'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.15423105657100677,
'token': 22,
'token_str': 'X',
'sequence': 'G G U C X 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.12160095572471619,
'token': 7,
'token_str': 'C',
'sequence': 'G G U C 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.0408296100795269,
'token': 8,
'token_str': 'G',
'sequence': 'G G U C G 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'}]
下游使用
提取特征
以下是如何在PyTorch中使用此模型获取给定序列的特征:
from multimolecule import RnaTokenizer, RiNALMoModel
tokenizer = RnaTokenizer.from_pretrained("multimolecule/rinalmo")
model = RiNALMoModel.from_pretrained("multimolecule/rinalmo")
text = "UAGCUUAUCAGACUGAUGUUGA"
input = tokenizer(text, return_tensors="pt")
output = model(**input)
序列分类/回归
注意: 此模型未针对任何特定任务进行微调。您需要在下游任务上微调模型以用于序列分类或回归。
以下是如何在PyTorch中使用此模型作为主干进行序列级任务的微调:
import torch
from multimolecule import RnaTokenizer, RiNALMoForSequencePrediction
tokenizer = RnaTokenizer.from_pretrained("multimolecule/rinalmo")
model = RiNALMoForSequencePrediction.from_pretrained("multimolecule/rinalmo")
text = "UAGCUUAUCAGACUGAUGUUGA"
input = tokenizer(text, return_tensors="pt")
label = torch.tensor([1])
output = model(**input, labels=label)
标记分类/回归
注意: 此模型未针对任何特定任务进行微调。您需要在下游任务上微调模型以用于核苷酸分类或回归。
以下是如何在PyTorch中使用此模型作为主干进行核苷酸级任务的微调:
import torch
from multimolecule import RnaTokenizer, RiNALMoForTokenPrediction
tokenizer = RnaTokenizer.from_pretrained("multimolecule/rinalmo")
model = RiNALMoForTokenPrediction.from_pretrained("multimolecule/rinalmo")
text = "UAGCUUAUCAGACUGAUGUUGA"
input = tokenizer(text, return_tensors="pt")
label = torch.randint(2, (len(text), ))
output = model(**input, labels=label)
接触分类/回归
注意: 此模型未针对任何特定任务进行微调。您需要在下游任务上微调模型以用于接触分类或回归。
以下是如何在PyTorch中使用此模型作为主干进行接触级任务的微调:
import torch
from multimolecule import RnaTokenizer, RiNALMoForContactPrediction
tokenizer = RnaTokenizer.from_pretrained("multimolecule/rinalmo")
model = RiNALMoForContactPrediction.from_pretrained("multimolecule/rinalmo")
text = "UAGCUUAUCAGACUGAUGUUGA"
input = tokenizer(text, return_tensors="pt")
label = torch.randint(2, (len(text), len(text)))
output = model(**input, labels=label)
训练详情
RiNALMo使用掩码语言建模(MLM)作为预训练目标:取一个序列,模型随机掩码输入中15%的标记,然后通过模型运行整个掩码句子,并预测掩码标记。这与语言建模中的Cloze任务类似。
训练数据
RiNALMo模型在包括RNAcentral、Rfam、Ensembl Genome Browser和Nucleotide在内的数据库混合上进行了预训练。训练数据包含3600万个独特的ncRNA序列。
为确保每个训练批次中的序列多样性,RiNALMo使用MMSeqs2将序列聚类为1700万个簇,然后从不同簇中采样每个批次的序列。
RiNALMo预处理所有标记,将“U”替换为“T”。
注意,在模型转换过程中,“T”被替换为“U”。[RnaTokenizer
][multimolecule.RnaTokenizer]将为您将“T”转换为“U”,您可以通过传递replace_T_with_U=False
来禁用此行为。
训练过程
预处理
RiNALMo使用掩码语言建模(MLM)作为预训练目标。掩码过程与BERT中使用的类似:
- 15%的标记被掩码。
- 在80%的情况下,掩码标记被替换为
<mask>
。
- 在10%的情况下,掩码标记被替换为随机标记(不同于它们替换的标记)。
- 在剩余的10%情况下,掩码标记保持不变。
预训练
模型在7个NVIDIA A100 GPU(80GiB内存)上训练。
- 学习率: 5e-5
- 学习率调度器: 余弦
- 学习率预热: 2000步
- 最小学习率: 1e-5
- 训练轮数: 6
- 批次大小: 1344
- Dropout: 0.1
引用
BibTeX:
@article{penic2024rinalmo,
title={RiNALMo: General-Purpose RNA Language Models Can Generalize Well on Structure Prediction Tasks},
author={Penić, Rafael Josip and Vlašić, Tin and Huber, Roland G. and Wan, Yue and Šikić, Mile},
journal={arXiv preprint arXiv:2403.00043},
year={2024}
}
联系
有关模型卡的任何问题或评论,请使用MultiMolecule的GitHub问题。
有关论文/模型的问题或评论,请联系RiNALMo论文的作者。
许可证
此模型根据AGPL-3.0许可证许可。
SPDX-License-Identifier: AGPL-3.0-or-later