SpliceBERT (manuscrito, pré-impressão) é um modelo primário de linguagem de sequência de RNA pré-treinado em mais de 2 milhões de sequências de RNA de vertebrados. Pode ser usado para estudar o splicing de RNA e outros problemas biológicos relacionados à sequência de RNA.
Para benchmarks e aplicações adicionais de SpliceBERT (por exemplo, nos conjuntos de dados SpliceAI e DeepSTARR), consulte Análise SpliceBERT.
Disponibilidade de dados
Como usar o SpliceBERT?
Reproduzir a análise
Contato
Citação
Os pesos do modelo e os dados para análise estão disponíveis em zenodo:7995778.
SpliceBERT é implementado com transformers
Huggingface e FlashAttention em PyTorch. Os usuários devem instalar pytorch, transformadores e FlashAttention (opcional) para carregar o modelo SpliceBERT.
Instale o PyTorch: https://pytorch.org/get-started/locally/
Instale os transformadores Huggingface: https://huggingface.co/docs/transformers/installation
Instale FlashAttention (opcional): https://github.com/Dao-AILab/flash-attention
SpliceBERT pode ser facilmente usado para uma série de tarefas posteriores por meio da API oficial. Consulte o guia oficial para mais detalhes.
Baixar SpliceBERT
Os pesos do SpliceBERT podem ser baixados do zenodo: https://zenodo.org/record/7995778/files/models.tar.gz?download=1
Requisitos do sistema
Recomendamos executar o SpliceBERT em um sistema Linux com uma GPU NVIDIA de pelo menos 4 GB de memória. (É possível executar nosso modelo apenas com CPU, mas será muito lento.)
Exemplos
Fornecemos um script de demonstração para mostrar como usar o SpliceBERT por meio da API oficial dos transformadores Huggingface na primeira parte do bloco de código a seguir.
Os usuários também podem usar SpliceBERT com FlashAttention substituindo a API oficial pela API personalizada, conforme mostrado na segunda parte do bloco de código a seguir. Observe que a atenção do flash requer que o modo automático de precisão mista (amp) seja ativado e atualmente não suporta attention_mask
Use SpliceBERT através da API oficial dos transformadores Huggingface:
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # define o caminho para a pasta do SpliceBERTimport pré-treinado torchfrom transformers import AutoTokenizer, AutoModel, AutoModelForMaskedLM, AutoModelForTokenClassification# load tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# prepare input sequenceseq = "ACGUACGuacguaCGu" ## AVISO: esta é apenas uma demonstração. SpliceBERT pode não funcionar em sequências menores que 64nt, pois foi treinado em sequências de 64-1024nt em comprimentoseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T e adicione whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. NOTA: um token [CLS] e um [SEP] serão adicionados ao início e ao final de seqinput_ids = torch.as_tensor(input_ids) # converte lista python em Tensorinput_ids = input_ids.unsqueeze(0) # adiciona dimensão de lote, forma: (batch_size ,sequence_length)# use a API oficial do huggerface para usar SpliceBERT# obtenha embeddings de nucleotídeos (estados ocultos)model = AutoModel.from_pretrained(SPLICEBERT_PATH) # carrega modellast_hidden_state = model(input_ids).last_hidden_state # obtém estados ocultos da última camadahiddens_states = model(input_ids, output_hidden_states=True).hidden_states # estados ocultos da camada de incorporação (nn.Embedding) e do transformador 6 camadas codificadoras # obtêm logits do tipo nucleotídeo em linguagem mascarada modelagemmodel = AutoModelForMaskedLM.from_pretrained(SPLICEBERT_PATH) # carregar modellogits = model(input_ids).logits # shape: (batch_size, sequence_length, vocab_size)# ajuste fino SpliceBERT para tarefas de classificação de tokenmodel = AutoModelForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # assume a classe o número é 3, forma: (batch_size,sequence_length, num_labels)# ajuste fino SpliceBERT para tarefas de classificação de sequênciamodel = AutoModelForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # assume que o número da classe é 3, forma: (batch_size,sequence_length, num_labels)
Ou use SpliceBERT com FlashAttention substituindo a API oficial pela API personalizada (atualmente flash-attention não oferece suporte a atenção_mask. Como resultado, o comprimento das sequências em cada lote deve ser o mesmo)
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # define o caminho para a pasta do SpliceBERTimport pré-treinado torchimport syssys.path.append(os.path.dirname(os.path.abspath(SPICEBERT_PATH)))from transformadores importam AutoTokenizer de splicebert_model import BertModel, BertForMaskedLM, BertForTokenClassification# load tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# prepare a sequência de entradaseq = "ACGUACGuacguaCGu" ## AVISO: esta é apenas uma demonstração. SpliceBERT pode não funcionar em sequências menores que 64nt, pois foi treinado em sequências de 64-1024nt em comprimentoseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T e adicione whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. NOTA: um token [CLS] e um [SEP] serão adicionados ao início e ao final de seqinput_ids = torch.as_tensor(input_ids) # converte lista python em Tensorinput_ids = input_ids.unsqueeze(0) # adiciona dimensão de lote, forma: (batch_size ,sequence_length)# Ou use BertModel personalizado com FlashAttention# obtenha embeddings de nucleotídeos (estados ocultos)model = BertModel.from_pretrained(SPLICEBERT_PATH) # carrega modelwith autocast(): last_hidden_state = model(input_ids).last_hidden_state # obtém estados ocultos da última camada hiddens_states = model(input_ids, output_hidden_states=True).hidden_states # estados ocultos da camada de incorporação (nn. Incorporação) e as 6 camadas do codificador do transformador # obtêm logits do tipo nucleotídeo modelagem de linguagem mascaradamodel = BertForMaskedLM.from_pretrained(SPLICEBERT_PATH) # carregar modelo com autocast(): logits = model(input_ids).logits # shape: (batch_size, sequence_length, vocab_size)# ajuste fino SpliceBERT para tarefas de classificação de token com autocast(): model = BertForTokenClassification. from_pretrained(SPLICEBERT_PATH, num_labels=3) # assume a classe o número é 3, forma: (tamanho do lote, comprimento da sequência, num_labels) # ajuste fino SpliceBERT para tarefas de classificação de sequência com autocast (): model = BertForSequenceClassification.from_pretrained (SPLICEBERT_PATH, num_labels = 3) # assume que o número da classe é 3, forma: (tamanho do lote, comprimento da sequência , num_rótulos)
Configure o ambiente.
Executamos os scripts em ambiente conda com python 3.9.7 em sistema Linux (Ubuntu 20.04.3 LTS). Os pacotes necessários são:
Nota: o número da versão é utilizado apenas para ilustrar a versão dos softwares utilizados em nosso estudo. Na maioria dos casos, os usuários não precisam garantir que as versões sejam estritamente iguais às nossas para executar os códigos
bedtools (2.30.0)
MaxEntScan (2004)
gtfToGenePred (v377)
Python (3.9.7)
transformers (4.24.0)
pytorch (1.12.1)
h5py (3.2.1)
numpy (1.23.3)
scipy (1.8.0)
scikit-learn (1.1.1)
scanpy (1.8.2)
matplotlib (3.5.1)
seaborn (0.11.2)
tqdm (4.64.0)
pyBigWig (0.3.18)
cython (0.29.28)
Pacotes Python:
Ferramentas de linha de comando (opcional):
Clone este repositório, baixe dados e configure scripts.
git clone [email protected]:biomed-AI/SpliceBERT.gitcd SpliceBERT bash download.sh # baixe pesos e dados do modelo ou baixe-os manualmente em [zenodo](https://doi.org/10.5281/zenodo.7995778)exemplos de cd bash setup.sh # compila utilitários selene, cython é necessário
(Opcional) Baixe os resultados pré-calculados para a seção 1-4 do Google Drive e descompacte-os na pasta de examples
.
# os usuários devem baixar manualmente `pre-computed_results.tar.gz` e colocá-lo na pasta `./examples` e executar o seguinte comando para descompactar ittar -zxvf pre-computed_results.tar.gz
Se os resultados pré-calculados tiverem sido baixados e descompactados corretamente, os usuários poderão pular a execução de pipeline.sh
nos notebooks jupyter da seção 1-4.
Execute notebooks jupyter (seção 1-4) ou scripts bash pipeline.sh
(seção 5-6):
análise de conservação evolutiva (relacionada à Figura 1)
análise de incorporação de nucleotídeos (relacionada à Figura 2)
análise de peso de atenção (relacionada à Figura 3)
análise de efeito variante (relacionada à Figura 4)
previsão de branchpoint (relacionada à Figura 5)
previsão do site de emenda (relacionada à Figura 6)
Para problemas relacionados aos scripts, crie um problema em https://github.com/biomed-AI/SpliceBERT/issues.
Para qualquer outra dúvida, não hesite em entrar em contato com chenkenbio {at} gmail.com.
@artigo{Chen2023.01.31.526427, autor = {Chen, Ken e Zhou, Yue e Ding, Maolin e Wang, Yu e Ren, Zhixiang e Yang, Yuedong}, title = {Aprendizado auto-supervisionado em milhões de sequências primárias de RNA de 72 vertebrados melhora a previsão de splicing de RNA baseado em sequência}, ano = {2024}, doi = {10.1093/bib/bbae163}, editor = {Oxford University Press}, URL = {https://doi.org/10.1093/bib/bbae163}, diário = {Briefings em bioinformática} }