SpliceBERT (Manuskript, Vorabdruck) ist ein primäres RNA-Sequenzsprachenmodell, das auf über 2 Millionen Wirbeltier-RNA-Sequenzen vorab trainiert wurde. Es kann zur Untersuchung des RNA-Spleißens und anderer biologischer Probleme im Zusammenhang mit der RNA-Sequenz verwendet werden.
Weitere Benchmarks und Anwendungen von SpliceBERT (z. B. für die Datensätze von SpliceAI und DeepSTARR) finden Sie unter SpliceBERT-Analyse.
Datenverfügbarkeit
Wie verwende ich SpliceBERT?
Reproduzieren Sie die Analyse
Kontakt
Zitat
Die Modellgewichte und Daten zur Analyse sind unter zenodo:7995778 verfügbar.
SpliceBERT wird mit Huggingface transformers
und FlashAttention in PyTorch implementiert. Benutzer sollten Pytorch, Transformers und FlashAttention (optional) installieren, um das SpliceBERT-Modell zu laden.
PyTorch installieren: https://pytorch.org/get-started/locally/
Installieren Sie Huggingface-Transformatoren: https://huggingface.co/docs/transformers/installation
Installieren Sie FlashAttention (optional): https://github.com/Dao-AILab/flash-attention
SpliceBERT kann über die offizielle API problemlos für eine Reihe nachgelagerter Aufgaben verwendet werden. Weitere Einzelheiten finden Sie im offiziellen Leitfaden.
Laden Sie SpliceBERT herunter
Die Gewichte von SpliceBERT können von zenodo heruntergeladen werden: https://zenodo.org/record/7995778/files/models.tar.gz?download=1
Systemanforderungen
Wir empfehlen, SpliceBERT auf einem Linux-System mit einer NVIDIA-GPU mit mindestens 4 GB Speicher auszuführen. (Es ist möglich, unser Modell nur mit der CPU auszuführen, aber es wird sehr langsam sein.)
Beispiele
Im ersten Teil des folgenden Codeblocks stellen wir ein Demoskript zur Verfügung, um zu zeigen, wie SpliceBERT über die offizielle API der Huggingface-Transformatoren verwendet wird.
Benutzer können SpliceBERT auch mit FlashAttention verwenden, indem sie die offizielle API durch die benutzerdefinierte API ersetzen, wie im zweiten Teil des folgenden Codeblocks gezeigt. Beachten Sie, dass für Flash-Attention die Aktivierung des automatischen Mixed-Precision-Modus (Amp) erforderlich ist und attention_mask
derzeit nicht unterstützt wird
Verwenden Sie SpliceBERT über die offizielle API der Huggingface-Transformatoren:
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # den Pfad zum Ordner des vorab trainierten SpliceBERTimport Torchfrom Transformers festlegen, AutoTokenizer, AutoModel, AutoModelForMaskedLM, AutoModelForTokenClassification importieren# tokenizertokenizer laden = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# Eingabesequenzen vorbereiten = „ACGUACGuacguaCGu“ ## WARNUNG: Dies ist nur eine Demo. SpliceBERT funktioniert möglicherweise nicht bei Sequenzen, die kürzer als 64nt sind, da es auf Sequenzen von 64-1024nt in der Länge trainiert wurdeseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T und füge whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, hinzu T(U) -> 9. HINWEIS: Ein [CLS]- und ein [SEP]-Token werden am Anfang und am Ende von seqinput_ids = Torch.as_tensor(input_ids) # Python-Liste in Tensorinput_ids = input_ids.unsqueeze(0 konvertieren) hinzugefügt ) # Batch-Dimension hinzufügen, Form: (batch_size, sequence_length)# Verwenden Sie zur Verwendung die offizielle API von Huggerface SpliceBERT# Nukleotideinbettungen (verborgene Zustände) abrufenmodel = AutoModel.from_pretrained(SPLICEBERT_PATH) # model ladenlast_hidden_state = model(input_ids).last_hidden_state # versteckte Zustände von der letzten Ebene abrufenhiddens_states = model(input_ids, output_hidden_states=True).hidden_states # versteckte Zustände von der Einbettungsschicht (nn.Embedding) und die 6 Transformer-Encoder-Schichten# erhalten Logits vom Nukleotidtyp in maskierter Sprache modelingmodel = AutoModelForMaskedLM.from_pretrained(SPLICEBERT_PATH) # Load modellogits = model(input_ids).logits # Shape: (batch_size, sequence_length, vocab_size)# Feinabstimmung von SpliceBERT für Token-Klassifizierungsaufgabenmodel = AutoModelForTokenClassification .from_pretrained(SPLICEBERT_PATH, num_labels=3) # Angenommen, die Klassennummer ist 3, Form: (batch_size, sequence_length, num_labels)# Feinabstimmung von SpliceBERT für Sequenzklassifizierungsaufgabenmodel = AutoModelForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # Angenommen, die Klassennummer ist 3, Form: ( (batch_size, sequence_length, num_labels)
Oder verwenden Sie SpliceBERT mit FlashAttention, indem Sie die offizielle API durch die benutzerdefinierte API ersetzen (derzeit unterstützt flash-attention Attention_mask nicht. Daher sollte die Länge der Sequenzen in jedem Stapel gleich sein.)
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # legt den Pfad zum Ordner des vorab trainierten SpliceBERTimport Torchimport syssys.path.append(os.path.dirname(os.path.abspath(SPICEBERT_PATH))) fest Transformatoren importieren AutoTokenizerfrom splicebert_model import BertModel, BertForMaskedLM, BertForTokenClassification# Load tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# Prepare Input Sequenceseq = "ACGUACGuacguaCGu" ## WARNUNG: Dies ist nur eine Demo. SpliceBERT funktioniert möglicherweise nicht bei Sequenzen, die kürzer als 64nt sind, da es auf Sequenzen von 64-1024nt in der Länge trainiert wurdeseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T und füge whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, hinzu T(U) -> 9. HINWEIS: Ein [CLS]- und ein [SEP]-Token werden am Anfang und am Ende von seqinput_ids = Torch.as_tensor(input_ids) # Python-Liste in Tensorinput_ids = input_ids.unsqueeze(0 konvertieren) hinzugefügt ) # Batch-Dimension hinzufügen, Form: (batch_size, sequence_length)# Oder benutzerdefiniertes BertModel mit FlashAttention verwenden# Nukleotid abrufen Embeddings (hidden states)model = BertModel.from_pretrained(SPLICEBERT_PATH) # modelwith autocast() laden: last_hidden_state = model(input_ids).last_hidden_state # versteckte Zustände aus der letzten Ebene abrufen Hiddens_states = model(input_ids, output_hidden_states=True).hidden_states # versteckte Zustände aus der Einbettungsschicht (nn.Embedding) und dem 6-Transformator-Encoder Schichten# Logits vom Nukleotidtyp in maskierter Sprache abrufen modelingmodel = BertForMaskedLM.from_pretrained(SPLICEBERT_PATH) # Modell mit Autocast laden(): logits = model(input_ids).logits # Form: (batch_size, sequence_length, vocab_size)# Feinabstimmung von SpliceBERT für Token-Klassifizierungsaufgaben mit Autocast (): Modell = BertForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # Angenommen, die Klassennummer ist 3, Form: (batch_size, sequence_length, num_labels)# Feinabstimmung von SpliceBERT für Sequenzklassifizierungsaufgaben mit autocast(): model = BertForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # Angenommen, die Klassennummer ist 3, Form: (batch_size, sequence_length, num_labels)
Konfigurieren Sie die Umgebung.
Wir führen die Skripte in einer Conda-Umgebung mit Python 3.9.7 auf einem Linux-System (Ubuntu 20.04.3 LTS) aus. Die erforderlichen Pakete sind:
Hinweis: Die Versionsnummer dient nur zur Veranschaulichung der in unserer Studie verwendeten Softwareversionen. In den meisten Fällen müssen Benutzer nicht sicherstellen, dass die Versionen genau mit unseren übereinstimmen, um die Codes auszuführen
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)
Python-Pakete:
Befehlszeilentools (optional):
Klonen Sie dieses Repository, laden Sie Daten herunter und richten Sie Skripts ein.
git clone [email protected]:biomed-AI/SpliceBERT.gitcd SpliceBERT bash download.sh # Modellgewichte und -daten herunterladen oder manuell von [zenodo](https://doi.org/10.5281/zenodo.7995778)cd-Beispiele herunterladen bash setup.sh # Selene-Utils kompilieren, Cython ist erforderlich
(Optional) Laden Sie vorberechnete Ergebnisse für Abschnitt 1–4 von Google Drive herunter und entpacken Sie sie im examples
.
# Benutzer sollten „pre-computed_results.tar.gz“ manuell herunterladen und im Ordner „./examples“ ablegen und den folgenden Befehl ausführen, um ittar -zxvf pre-computed_results.tar.gz zu dekomprimieren
Wenn vorberechnete Ergebnisse korrekt heruntergeladen und dekomprimiert wurden, können Benutzer die Ausführung pipeline.sh
in den Jupyter-Notebooks von Abschnitt 1–4 überspringen.
Führen Sie Jupyter-Notebooks (Abschnitt 1–4) oder Bash-Skripte pipeline.sh
(Abschnitt 5–6) aus:
Evolutionäre Erhaltungsanalyse (im Zusammenhang mit Abbildung 1)
Nukleotideinbettungsanalyse (im Zusammenhang mit Abbildung 2)
Aufmerksamkeitsgewichtsanalyse (bezogen auf Abbildung 3)
Varianteneffektanalyse (bezogen auf Abbildung 4)
Verzweigungspunktvorhersage (im Zusammenhang mit Abbildung 5)
Vorhersage der Spleißstelle (im Zusammenhang mit Abbildung 6)
Bei Problemen im Zusammenhang mit den Skripten erstellen Sie ein Problem unter https://github.com/biomed-AI/SpliceBERT/issues.
Bei weiteren Fragen wenden Sie sich bitte an chenkenbio {at} gmail.com.
@article{Chen2023.01.31.526427, Autor = {Chen, Ken und Zhou, Yue und Ding, Maolin und Wang, Yu und Ren, Zhixiang und Yang, Yuedong}, title = {Selbstüberwachtes Lernen an Millionen primärer RNA-Sequenzen von 72 Wirbeltieren verbessert die sequenzbasierte RNA-Splicing-Vorhersage}, Jahr = {2024}, doi = {10.1093/bib/bbae163}, Herausgeber = {Oxford University Press}, URL = {https://doi.org/10.1093/bib/bbae163}, Journal = {Briefings in der Bioinformatik} }