SpliceBERT (manuskrip, pracetak) adalah model bahasa urutan RNA utama yang telah dilatih sebelumnya pada lebih dari 2 juta urutan RNA vertebrata. Ini dapat digunakan untuk mempelajari penyambungan RNA dan masalah biologis lainnya yang terkait dengan urutan RNA.
Untuk tolok ukur tambahan dan penerapan SpliceBERT (misalnya, pada kumpulan data SpliceAI dan DeepSTARR), lihat Analisis SpliceBERT.
Ketersediaan data
Bagaimana cara menggunakan SpliceBERT?
Reproduksi analisisnya
Kontak
Kutipan
Bobot model dan data untuk analisis tersedia di zenodo:7995778.
SpliceBERT diimplementasikan dengan transformers
Huggingface dan FlashAttention di PyTorch. Pengguna harus menginstal pytorch, transformer, dan FlashAttention (opsional) untuk memuat model SpliceBERT.
Instal PyTorch: https://pytorch.org/get-started/locally/
Instal transformator Huggingface: https://huggingface.co/docs/transformers/installation
Instal FlashAttention (opsional): https://github.com/Dao-AILab/flash-attention
SpliceBERT dapat dengan mudah digunakan untuk serangkaian tugas hilir melalui API resmi. Lihat panduan resmi untuk lebih jelasnya.
Unduh SpliceBERT
Bobot SpliceBERT dapat diunduh dari zenodo: https://zenodo.org/record/7995778/files/models.tar.gz?download=1
Persyaratan sistem
Kami merekomendasikan menjalankan SpliceBERT pada sistem Linux dengan GPU NVIDIA dengan memori minimal 4GB. (Menjalankan model kita hanya dengan CPU dimungkinkan, tetapi akan sangat lambat.)
Contoh
Kami menyediakan skrip demo untuk menunjukkan cara menggunakan SpliceBERT melalui API resmi transformator Huggingface di bagian pertama blok kode berikut.
Pengguna juga dapat menggunakan SpliceBERT dengan FlashAttention dengan mengganti API resmi dengan API khusus, seperti yang ditunjukkan pada bagian kedua dari blok kode berikut. Perhatikan bahwa perhatian kilat memerlukan mode presisi campuran otomatis (amp) untuk diaktifkan dan saat ini tidak mendukung attention_mask
Gunakan SpliceBERT melalui API resmi transformator Huggingface:
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # setel jalur ke folder obor SpliceBERTimport terlatih dari transformator impor AutoTokenizer, AutoModel, AutoModelForMaskedLM, AutoModelForTokenClassification# muat tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# siapkan urutan inputseq = "ACGUACGuacguaCGu" ## PERINGATAN: ini hanya demo. SpliceBERT mungkin tidak berfungsi pada urutan yang lebih pendek dari 64nt karena telah dilatih pada urutan 64-1024nt dalam lengthseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T dan tambahkan whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. CATATAN: token [CLS] dan [SEP] akan ditambahkan ke awal dan akhir seqinput_ids = torch.as_tensor(input_ids) # konversi daftar python ke Tensorinput_ids = input_ids.unsqueeze(0) # tambahkan dimensi batch, bentuk: (batch_size , sequence_length)# gunakan API resmi Huggerface untuk menggunakan SpliceBERT# dapatkan penyematan nukleotida (status tersembunyi)model = AutoModel.from_pretrained(SPLICEBERT_PATH) # memuat modellast_hidden_state = model(input_ids).last_hidden_state # mendapatkan status tersembunyi dari lapisan terakhirhiddens_states = model(input_ids, output_hidden_states=True).hidden_states # status tersembunyi dari lapisan penyematan (nn.Embedding) dan 6 transformator lapisan encoder# dapatkan logit tipe nukleotida dalam bahasa yang disamarkan modelingmodel = AutoModelForMaskedLM.from_pretrained(SPLICEBERT_PATH) # memuat modellogits = model(input_ids).logits # bentuk: (batch_size, sequence_length, vocab_size)# menyempurnakan SpliceBERT untuk tugas klasifikasi token model = AutoModelForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # mengambil kelas nomornya 3, bentuk: (batch_size, sequence_length, num_labels)# menyempurnakan SpliceBERT untuk tugas klasifikasi sequencemodel = AutoModelForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # asumsikan nomor kelas adalah 3, bentuk: (batch_size, sequence_length, num_labels)
Atau gunakan SpliceBERT dengan FlashAttention dengan mengganti API resmi dengan API khusus (Saat ini flash-attention tidak mendukung Attention_mask. Akibatnya, panjang urutan di setiap batch harus sama)
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # atur jalur ke folder SpliceBERTimport torchimport syssys.path.append(os.path.dirname(os.path.abspath(SPICEBERT_PATH)))from yang telah dilatih sebelumnya transformator mengimpor AutoTokenizerdari splicebert_model impor BertModel, BertForMaskedLM, BertForTokenClassification# muat tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# siapkan urutan inputseq = "ACGUACGuacguaCGu" ## PERINGATAN: ini hanya demo. SpliceBERT mungkin tidak bekerja pada urutan yang lebih pendek dari 64nt karena dilatih pada urutan 64-1024nt dalam lengthseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T dan tambahkan whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. CATATAN: token [CLS] dan [SEP] akan ditambahkan ke awal dan akhir seqinput_ids = torch.as_tensor(input_ids) # konversi daftar python ke Tensorinput_ids = input_ids.unsqueeze(0) # tambahkan dimensi batch, bentuk: (batch_size , sequence_length)# Atau gunakan BertModel khusus dengan FlashAttention# dapatkan penyematan nukleotida (status tersembunyi)model = BertModel.from_pretrained(SPLICEBERT_PATH) # memuat model dengan autocast(): last_hidden_state = model(input_ids).last_hidden_state # mendapatkan status tersembunyi dari lapisan terakhir Hiddens_states = model(input_ids, output_hidden_states=True).hidden_states # status tersembunyi dari lapisan penyematan (nn. Penyematan) dan 6 lapisan encoder transformator# mendapatkan logit tipe nukleotida dalam bahasa bertopeng modelingmodel = BertForMaskedLM.from_pretrained(SPLICEBERT_PATH) # memuat model dengan autocast(): logits = model(input_ids).logits # bentuk: (batch_size, sequence_length, vocab_size)# menyempurnakan SpliceBERT untuk tugas klasifikasi token dengan autocast(): model = BertForTokenClassification .from_pretrained(SPLICEBERT_PATH, num_labels=3) # asumsikan nomor kelas adalah 3, bentuk: (batch_size, sequence_length, num_labels)# menyempurnakan SpliceBERT untuk tugas klasifikasi urutan dengan autocast(): model = BertForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # asumsikan nomor kelas adalah 3, bentuk: (batch_size, sequence_length, num_labels)
Konfigurasikan lingkungan.
Kami menjalankan skrip di lingkungan conda dengan python 3.9.7 pada sistem Linux (Ubuntu 20.04.3 LTS). Paket yang dibutuhkan adalah:
Catatan: nomor versi hanya digunakan untuk menggambarkan versi perangkat lunak yang digunakan dalam penelitian kami. Dalam kebanyakan kasus, pengguna tidak perlu memastikan bahwa versinya benar-benar sama dengan versi kami untuk menjalankan kodenya
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)
Paket python:
Alat baris perintah (opsional):
Kloning repositori ini, unduh data dan skrip pengaturan.
git clone [email protected]:biomed-AI/SpliceBERT.gitcd SpliceBERT bash download.sh # unduh bobot dan data model, atau unduh secara manual dari [zenodo](https://doi.org/10.5281/zenodo.7995778)cd contoh bash setup.sh # kompilasi utilitas selene, cython diperlukan
(Opsional) Unduh hasil yang telah dihitung sebelumnya untuk bagian 1-4 dari Google Drive dan dekompresi hasil tersebut di folder examples
.
# pengguna harus mengunduh `pre-computed_results.tar.gz` secara manual dan meletakkannya di folder `./examples` dan menjalankan perintah berikut untuk mendekompresi ittar -zxvf pre-computed_results.tar.gz
Jika hasil yang dihitung sebelumnya telah diunduh dan didekompresi dengan benar, pengguna dapat melewati proses pipeline.sh
di buku catatan jupyter di bagian 1-4.
Jalankan notebook jupyter (bagian 1-4) atau skrip bash pipeline.sh
(bagian 5-6):
analisis konservasi evolusioner (terkait dengan Gambar 1)
analisis penyisipan nukleotida (terkait dengan Gambar 2)
analisis bobot perhatian (terkait Gambar 3)
analisis efek varian (terkait dengan Gambar 4)
prediksi titik cabang (terkait dengan Gambar 5)
prediksi lokasi sambungan (terkait dengan Gambar 6)
Untuk masalah terkait skrip, buat masalah di https://github.com/biomed-AI/SpliceBERT/issues.
Untuk pertanyaan lainnya, jangan ragu untuk menghubungi chenkenbio {at} gmail.com.
@artikel{Chen2023.01.31.526427, penulis = {Chen, Ken dan Zhou, Yue dan Ding, Maolin dan Wang, Yu dan Ren, Zhixiang dan Yang, Yuedong}, title = {Pembelajaran mandiri pada jutaan rangkaian RNA primer dari 72 vertebrata meningkatkan prediksi penyambungan RNA berbasis rangkaian}, tahun = {2024}, doi = {10.1093/bib/bbae163}, penerbit = {Oxford University Press}, URL = {https://doi.org/10.1093/bib/bbae163}, journal = {Briefing bidang bioinformatika} }