SpliceBERT (manuscrit, préimpression) est un modèle de langage de séquence d'ARN primaire pré-entraîné sur plus de 2 millions de séquences d'ARN de vertébrés. Il peut être utilisé pour étudier l’épissage de l’ARN et d’autres problèmes biologiques liés à la séquence d’ARN.
Pour des références et des applications supplémentaires de SpliceBERT (par exemple, sur les ensembles de données de SpliceAI et DeepSTARR), voir l'analyse SpliceBERT.
Disponibilité des données
Comment utiliser SpliceBERT ?
Reproduire l'analyse
Contact
Citation
Les poids du modèle et les données à analyser sont disponibles sur zenodo : 7995778.
SpliceBERT est implémenté avec transformers
Huggingface et FlashAttention dans PyTorch. Les utilisateurs doivent installer pytorch, Transformers et FlashAttention (facultatif) pour charger le modèle SpliceBERT.
Installez PyTorch : https://pytorch.org/get-started/locally/
Installez les transformateurs Huggingface : https://huggingface.co/docs/transformers/installation
Installez FlashAttention (facultatif) : https://github.com/Dao-AILab/flash-attention
SpliceBERT peut être facilement utilisé pour une série de tâches en aval via l'API officielle. Voir le guide officiel pour plus de détails.
Télécharger SpliceBERT
Les poids de SpliceBERT peuvent être téléchargés depuis zenodo : https://zenodo.org/record/7995778/files/models.tar.gz?download=1
Configuration système requise
Nous vous recommandons d'exécuter SpliceBERT sur un système Linux avec un GPU NVIDIA d'au moins 4 Go de mémoire. (Exécuter notre modèle avec uniquement un processeur est possible, mais ce sera très lent.)
Exemples
Nous fournissons un script de démonstration pour montrer comment utiliser SpliceBERT via l'API officielle des transformateurs Huggingface dans la première partie du bloc de code suivant.
Les utilisateurs peuvent également utiliser SpliceBERT avec FlashAttention en remplaçant l'API officielle par l'API personnalisée, comme indiqué dans la deuxième partie du bloc de code suivant. Notez que flash-attention nécessite que le mode automatique de précision mixte (amp) soit activé et qu'il ne prend actuellement pas en charge attention_mask
Utilisez SpliceBERT via l'API officielle des transformateurs Huggingface :
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # définir le chemin d'accès au dossier de SpliceBERTimport torchfrom transformateurs import AutoTokenizer, AutoModel, AutoModelForMaskedLM, AutoModelForTokenClassification# charger tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# préparer la séquence d'entrée seq = "ACGUACGuacguaCGu" ## ATTENTION : ceci n'est qu'une démo. SpliceBERT peut ne pas fonctionner sur des séquences inférieures à 64 nt car il a été formé sur des séquences de 64 à 1 024 nt dans lengthseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T et ajoutez whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. REMARQUE : un jeton [CLS] et un [SEP] seront ajoutés au début et à la fin de seqinput_ids = torch.as_tensor(input_ids) # convertir la liste python en Tensorinput_ids = input_ids.unsqueeze(0) # ajouter un lot dimension, forme : (batch_size, séquence_length)# utilisez l'API officielle de huggerface pour utiliser SpliceBERT# obtenez des intégrations de nucléotides (états cachés)model = AutoModel.from_pretrained(SPLICEBERT_PATH) # charger modellast_hidden_state = model(input_ids).last_hidden_state # obtenir les états cachés de la dernière couchehiddens_states = model(input_ids, output_hidden_states=True).hidden_states # états cachés de la couche d'intégration (nn. Embedding) et les 6 couches d'encodeur de transformateur # obtiennent le type de nucléotide logits en langage masqué modelingmodel = AutoModelForMaskedLM.from_pretrained(SPLICEBERT_PATH) # charger modellogits = model(input_ids).logits # shape: (batch_size, séquence_length, vocab_size)# réglage fin de SpliceBERT pour les tâches de classification de jetonsmodel = AutoModelForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # supposons que le numéro de classe est 3, forme : (batch_size, séquence_longueur, num_labels)# réglage fin de SpliceBERT pour les tâches de classification de séquencemodel = AutoModelForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # suppose que le numéro de classe est 3, forme : (batch_size, séquence_length, num_labels)
Ou utilisez SpliceBERT avec FlashAttention en remplaçant l'API officielle par l'API personnalisée (actuellement, flash-attention ne prend pas en charge attention_mask. Par conséquent, la longueur des séquences dans chaque lot doit être la même)
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # définit le chemin d'accès au dossier de SpliceBERTimport torchimport pré-entraîné syssys.path.append(os.path.dirname(os.path.abspath(SPICEBERT_PATH)))from transformateurs importer AutoTokenizerfrom splicebert_model importer BertModel, BertForMaskedLM, BertForTokenClassification# charger tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# préparer l'entrée séquenceseq = "ACGUACGuacguaCGu" ## AVERTISSEMENT : ceci n'est qu'une démo. SpliceBERT peut ne pas fonctionner sur des séquences inférieures à 64 nt car il a été formé sur des séquences de 64 à 1 024 nt dans lengthseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T et ajoutez whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. REMARQUE : un jeton [CLS] et un [SEP] seront ajoutés au début et à la fin de seqinput_ids = torch.as_tensor(input_ids) # convertir la liste python en Tensorinput_ids = input_ids.unsqueeze(0) # ajouter un lot dimension, forme : (batch_size, séquence_length)# Ou utilisez BertModel personnalisé avec FlashAttention# pour obtenir des intégrations de nucléotides (cachées states)model = BertModel.from_pretrained(SPLICEBERT_PATH) # charger le modèle avec autocast() : last_hidden_state = model(input_ids).last_hidden_state # obtenir les états cachés de la dernière couche Hiddens_states = model(input_ids, output_hidden_states=True).hidden_states # états cachés de l'intégration couche (nn.Embedding) et les 6 couches d'encodeur de transformateur # obtiennent le nucléotide tapez logits dans la modélisation en langage masquémodel = BertForMaskedLM.from_pretrained(SPLICEBERT_PATH) # charger le modèle avec autocast() : logits = model(input_ids).logits # shape: (batch_size, séquence_length, vocab_size)# réglage fin de SpliceBERT pour les tâches de classification de jetons avec autocast() : model = BertForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # suppose que le numéro de classe est 3, forme : (batch_size, séquence_length, num_labels)# réglage fin de SpliceBERT pour les tâches de classification de séquence avec autocast() : model = BertForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # suppose que le numéro de classe est 3, forme : (batch_size, séquence_length, num_labels)
Configurez l'environnement.
Nous exécutons les scripts dans un environnement conda avec python 3.9.7 sur un système Linux (Ubuntu 20.04.3 LTS). Les packages requis sont :
Remarque : le numéro de version sert uniquement à illustrer la version des logiciels utilisés dans notre étude. Dans la plupart des cas, les utilisateurs n'ont pas besoin de s'assurer que les versions sont strictement les mêmes que les nôtres pour exécuter les codes
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)
Paquets Python :
Outils de ligne de commande (facultatif) :
Clonez ce référentiel, téléchargez les données et configurez les scripts.
git clone [email protected]:biomed-AI/SpliceBERT.gitcd SpliceBERT bash download.sh # télécharger les poids et les données du modèle, ou les télécharger manuellement à partir d'exemples de [zenodo](https://doi.org/10.5281/zenodo.7995778)cd bash setup.sh # compile les utilitaires Selene, Cython est requis
(Facultatif) Téléchargez les résultats précalculés pour les sections 1 à 4 à partir de Google Drive et décompressez-les dans le dossier examples
.
# Les utilisateurs doivent télécharger manuellement `pre-computed_results.tar.gz` et le placer dans le dossier `./examples` et exécuter la commande suivante pour décompresser ittar -zxvf pre-computed_results.tar.gz
Si les résultats précalculés ont été téléchargés et décompressés correctement, les utilisateurs peuvent ignorer l'exécution pipeline.sh
dans les notebooks Jupyter de la section 1-4.
Exécutez les notebooks jupyter (section 1-4) ou les scripts bash pipeline.sh
(section 5-6) :
analyse de conservation évolutive (liée à la figure 1)
analyse d'incorporation de nucléotides (liée à la figure 2)
analyse du poids de l'attention (liée à la figure 3)
analyse des effets variables (liée à la figure 4)
prédiction de point de branchement (liée à la figure 5)
prédiction du site d'épissage (liée à la figure 6)
Pour les problèmes liés aux scripts, créez un problème sur https://github.com/biomed-AI/SpliceBERT/issues.
Pour toute autre question, n'hésitez pas à contacter chenkenbio {at} gmail.com.
@article{Chen2023.01.31.526427, auteur = {Chen, Ken et Zhou, Yue et Ding, Maolin et Wang, Yu et Ren, Zhixiang et Yang, Yuedong}, title = {L'apprentissage auto-supervisé sur des millions de séquences d'ARN primaires de 72 vertébrés améliore la prédiction de l'épissage d'ARN basée sur les séquences}, année = {2024}, est ce que je = {10.1093/bib/bbae163}, éditeur = {Oxford University Press}, URL = {https://doi.org/10.1093/bib/bbae163}, journal = {Briefings en bioinformatique} }