Repositori ini mencakup implementasi 'DNABERT: representasi enkoder dua arah pra-terlatih dari model Transformers untuk bahasa DNA dalam genom'. Harap kutip kertas kami jika Anda menggunakan model atau kode. Repo masih aktif dalam pengembangan, jadi silakan laporkan jika ada masalah yang ditemui.
Dalam paket ini, kami menyediakan sumber daya termasuk: kode sumber model DNABERT, contoh penggunaan, model pra-terlatih, model yang disesuaikan dan alat visulisasi. Paket ini masih dalam pengembangan, karena lebih banyak fitur akan dimasukkan secara bertahap. Pelatihan DNABERT terdiri dari pra-pelatihan umum dan penyempurnaan khusus tugas. Sebagai kontribusi dari proyek kami, kami merilis model pra-terlatih di repositori ini. Kami memperluas kode dari permukaan pelukan dan mengadaptasi mereka dengan skenario DNA.
Generasi kedua DNABERT, bernama DNABERT-2, tersedia secara publik di https://github.com/zhihan1996/dnabert_2. DNABERT-2 dilatih pada genom multi-spesies dan lebih efisien, kuat, dan mudah digunakan daripada generasi pertama. Kami juga memberikan penggunaan DNABERT yang lebih sederhana dalam paket baru. Evaluasi Pemahaman Genom Benchmark Komprehensif (GUE), yang berisi
Jika Anda telah menggunakan DNABERT dalam penelitian Anda, silakan mengutip publikasi berikut:
@article{ji2021dnabert,
author = {Ji, Yanrong and Zhou, Zhihan and Liu, Han and Davuluri, Ramana V},
title = "{DNABERT: pre-trained Bidirectional Encoder Representations from Transformers model for DNA-language in genome}",
journal = {Bioinformatics},
volume = {37},
number = {15},
pages = {2112-2120},
year = {2021},
month = {02},
issn = {1367-4803},
doi = {10.1093/bioinformatics/btab083},
url = {https://doi.org/10.1093/bioinformatics/btab083},
eprint = {https://academic.oup.com/bioinformatics/article-pdf/37/15/2112/50578892/btab083.pdf},
}
@misc{zhou2023dnabert2,
title={DNABERT-2: Efficient Foundation Model and Benchmark For Multi-Species Genome},
author={Zhihan Zhou and Yanrong Ji and Weijian Li and Pratik Dutta and Ramana Davuluri and Han Liu},
year={2023},
eprint={2306.15006},
archivePrefix={arXiv},
primaryClass={q-bio.GN}
}
Kami menyarankan Anda untuk membangun lingkungan virtual Python dengan Anaconda. Juga, pastikan Anda memiliki setidaknya satu GPU NVIDIA dengan Linux X86_64 Versi Driver> = 410.48 (kompatibel dengan CUDA 10.0). Kami menerapkan pelatihan terdistribusi pada 8 NVIDIA GeForce RTX 2080 Ti dengan memori grafis 11 GB, dan ukuran batch sesuai dengan itu. Jika Anda menggunakan GPU dengan spesifikasi dan ukuran memori lain, pertimbangkan untuk menyesuaikan ukuran batch Anda.
conda create -n dnabert python=3.6
conda activate dnabert
(Diperlukan)
conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
git clone https://github.com/jerryji1993/DNABERT
cd DNABERT
python3 -m pip install --editable .
cd examples
python3 -m pip install -r requirements.txt
(Opsional, Instal Apex untuk Pelatihan FP16)
Ubah ke direktori yang diinginkan oleh cd PATH_NAME
git clone https://github.com/NVIDIA/apex
cd apex
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
Silakan lihat data template di /example/sample_data/pre . Jika Anda mencoba untuk melakukan pra-pelatihan DNABERT dengan data Anda sendiri, silakan memproses data Anda ke dalam format yang sama seperti itu. Perhatikan bahwa urutannya dalam format KMER, jadi Anda perlu mengubah urutan Anda menjadi itu. Kami juga menyediakan fungsi khusus seq2kmer dalam motif/motif_utils.py untuk konversi ini.
Dalam contoh berikut, kami menggunakan DNABERT dengan KMER = 6 sebagai contoh.
cd examples
export KMER=6
export TRAIN_FILE=sample_data/pre/6_3k.txt
export TEST_FILE=sample_data/pre/6_3k.txt
export SOURCE=PATH_TO_DNABERT_REPO
export OUTPUT_PATH=output$KMER
python run_pretrain.py
--output_dir $OUTPUT_PATH
--model_type=dna
--tokenizer_name=dna$KMER
--config_name=$SOURCE/src/transformers/dnabert-config/bert-config-$KMER/config.json
--do_train
--train_data_file=$TRAIN_FILE
--do_eval
--eval_data_file=$TEST_FILE
--mlm
--gradient_accumulation_steps 25
--per_gpu_train_batch_size 10
--per_gpu_eval_batch_size 6
--save_steps 500
--save_total_limit 20
--max_steps 200000
--evaluate_during_training
--logging_steps 500
--line_by_line
--learning_rate 4e-4
--block_size 512
--adam_epsilon 1e-6
--weight_decay 0.01
--beta1 0.9
--beta2 0.98
--mlm_probability 0.025
--warmup_steps 10000
--overwrite_output_dir
--n_process 24
Tambahkan tag --fp16 jika Anda ingin menyempurnakan presisi campuran. (Anda harus menginstal 'apex' dari sumber pertama).
Silakan lihat data template di /example/sample_data/ft/ . Jika Anda mencoba menyempurnakan DNABERT dengan data Anda sendiri, silakan memproses data Anda ke dalam format yang sama seperti itu. Perhatikan bahwa urutannya dalam format KMER, jadi Anda perlu mengubah urutan Anda menjadi itu. Kami juga menyediakan fungsi khusus seq2kmer dalam motif/motif_utils.py untuk konversi ini.
DNABERT3
Dnabert4
Dnabert5
Dnabert6
Unduh model pra-terlatih ke dalam direktori. (Jika Anda ingin meniru contoh -contoh berikut, silakan unduh DNABERT 6). Kemudian unzip paket dengan menjalankan:
unzip 6-new-12w-0.zip
Kami juga menyediakan model dengan KMER=6 yang disesuaikan dengan dataset sampel untuk prediksi/visulisisasi/motif_analysis. Jika Anda menggunakan model fine-tuned alih-alih menyempurnakan model sendiri, silakan unduh fine-tuned dan letakkan di bawah examples/ft/6 .
Model yang disesuaikan
Dalam contoh berikut, kami menggunakan DNABERT dengan KMER = 6 sebagai contoh. Kami menggunakan prom-core , tugas klasifikasi 2 kelas sebagai contoh.
cd examples
export KMER=6
export MODEL_PATH=PATH_TO_THE_PRETRAINED_MODEL
export DATA_PATH=sample_data/ft/$KMER
export OUTPUT_PATH=./ft/$KMER
python run_finetune.py
--model_type dna
--tokenizer_name=dna$KMER
--model_name_or_path $MODEL_PATH
--task_name dnaprom
--do_train
--do_eval
--data_dir $DATA_PATH
--max_seq_length 100
--per_gpu_eval_batch_size=32
--per_gpu_train_batch_size=32
--learning_rate 2e-4
--num_train_epochs 5.0
--output_dir $OUTPUT_PATH
--evaluate_during_training
--logging_steps 100
--save_steps 4000
--warmup_percent 0.1
--hidden_dropout_prob 0.1
--overwrite_output
--weight_decay 0.01
--n_process 8
Tambahkan tag --fp16 jika Anda ingin menyempurnakan presisi campuran. (Anda harus menginstal 'apex' dari sumber pertama).
Kami juga menyediakan model dengan KMER=6 yang disesuaikan dengan dataset sampel untuk prediksi/visulisisasi/motif_analysis. Jika Anda menggunakan model fine-tuned alih-alih menyempurnakan model sendiri, silakan unduh fine-tuned dan letakkan di bawah examples/ft/6 .
Model yang disesuaikan
Setelah model disesuaikan, kita bisa mendapatkan prediksi dengan berlari
export KMER=6
export MODEL_PATH=./ft/$KMER
export DATA_PATH=sample_data/ft/$KMER
export PREDICTION_PATH=./result/$KMER
python run_finetune.py
--model_type dna
--tokenizer_name=dna$KMER
--model_name_or_path $MODEL_PATH
--task_name dnaprom
--do_predict
--data_dir $DATA_PATH
--max_seq_length 75
--per_gpu_pred_batch_size=128
--output_dir $MODEL_PATH
--predict_dir $PREDICTION_PATH
--n_process 48
Dengan perintah di atas, model DNABERT yang disempurnakan akan dimuat dari MODEL_PATH , dan membuat prediksi pada file dev.tsv yang disimpan dalam DATA_PATH dan menyimpan hasil prediksi di PREDICTION_PATH .
Tambahkan tag --fp16 jika Anda ingin menyempurnakan presisi campuran. (Anda harus menginstal 'apex' dari sumber pertama).
Visualizasi Dnabert terdiri dari 2 langkah. Skor dan plot perhatian kalualate.
Hitung dengan hanya satu model (misalnya, dnabert6)
export KMER=6
export MODEL_PATH=./ft/$KMER
export DATA_PATH=sample_data/ft/$KMER
export PREDICTION_PATH=./result/$KMER
python run_finetune.py
--model_type dna
--tokenizer_name=dna$KMER
--model_name_or_path $MODEL_PATH
--task_name dnaprom
--do_visualize
--visualize_data_dir $DATA_PATH
--visualize_models $KMER
--data_dir $DATA_PATH
--max_seq_length 81
--per_gpu_pred_batch_size=16
--output_dir $MODEL_PATH
--predict_dir $PREDICTION_PATH
--n_process 96
Dengan perintah di atas, model DNABERT yang disempurnakan akan dimuat dari MODEL_PATH , dan menghitung skor perhatian pada file dev.tsv yang disimpan dalam DATA_PATH dan menyimpan hasilnya di PREDICTION_PATH .
Tambahkan tag --fp16 jika Anda ingin menyempurnakan presisi campuran. (Anda harus menginstal 'apex' dari sumber pertama).
#### 5.2 Alat Plotting
Setelah skor perhatian dihasilkan, kita dapat melanjutkan lebih jauh untuk melakukan analisis motif menggunakan motif/find_motifs.py :
cd ../motif
export KMER=6
export DATA_PATH=../examples/sample_data/ft/$KMER
export PREDICTION_PATH=../examples/result/$KMER
export MOTIF_PATH=./result/$KMER
python find_motifs.py
--data_dir $DATA_PATH
--predict_dir $PREDICTION_PATH
--window_size 24
--min_len 5
--pval_cutoff 0.005
--min_n_motif 3
--align_all_ties
--save_file_dir $MOTIF_PATH
--verbose
Script akan menghasilkan file .txt dan file weblogo .png untuk setiap motif di bawah MOTIF_PATH .
Untuk melakukan analisis varian genomik (misalnya SNP), kita harus terlebih dahulu memastikan prediksi untuk urutan dihasilkan. Kemudian, buat file (template dalam SNP/example_mut_file.txt ) yang menentukan untuk urutan di dev.tsv dan mulai dan mengakhiri indeks di mana kita perlu melakukan mutasi. Kolom pertama menunjukkan indeks urutan dalam dev.tsv untuk bermutasi. Kolom kedua dan ketiga adalah indeks awal dan akhir sedangkan kolom keempat adalah target mutasi (dapat berupa substitusi, penyisipan, penghapusan, dll.)
Setelah file seperti itu dibuat, kita dapat melakukan mutasi pada urutan:
cd ../SNP
python mutate_seqs.py ./../examples/sample_data/ft/6/dev.tsv ./examples/ --mut_file ./example_mut_file.txt --k 6
Sebagai alternatif, kita dapat memilih untuk meninggalkan argumen --mut_file kosong, di mana program akan mencoba melakukan penggantian semua pangkalan ke empat nukleotida yang mungkin ('a', 't', 'c', atau 'g') untuk semua urutan. Ini akan berguna untuk merencanakan mutasi panas seperti yang termasuk dalam kertas. Perhatikan bahwa ini akan lambat jika dev.tsv berisi banyak urutan atau urutan input sangat panjang, karena perintah akan mencoba melakukan mutasi pada semua lokasi yang mungkin .
cd ../SNP
python mutate_seqs.py ./../examples/sample_data/ft/6/dev.tsv ./examples/ --k 6
Setelah itu, kita dapat lagi memprediksi urutan yang dihasilkan. Catatan: Jika Anda memiliki penyisipan/penghapusan di mut_file.txt Anda, pertimbangkan untuk mengubah max_seq_length yang kami gunakan saat membuat prediksi.
export KMER=6
export MODEL_PATH=../examples/ft/$KMER
export DATA_PATH=examples
export PREDICTION_PATH=examples
python ../examples/run_finetune.py
--model_type dna
--tokenizer_name=dna$KMER
--model_name_or_path $MODEL_PATH
--task_name dnaprom
--do_predict
--data_dir $DATA_PATH
--max_seq_length 75
--per_gpu_pred_batch_size=128
--output_dir $MODEL_PATH
--predict_dir $PREDICTION_PATH
--n_process 48
Ini lagi akan membuat file pred_results.npy di bawah $PREDICTION_PATH . Setelah kami memiliki semua hal di atas, kami dapat menghitung efek mutasi ini dengan:
python SNP.py
--orig_seq_file ../examples/sample_data/ft/6/dev.tsv
--orig_pred_file ../examples/result/6/pred_results.npy
--mut_seq_file examples/dev.tsv
--mut_pred_file examples/pred_results.npy
--save_file_dir examples
Ini akan menyimpan file mutations.tsv di bawah save_file_dir , yang berisi indeks urutan asli (dalam dev.tsv asli), urutan dan prediksi asli, urutan dan prediksi bermutasi, serta skor perbedaan dan rasio odds log dari perubahan dalam setiap kasus.
Harap pastikan bahwa Anda memenuhi semua persyaratan sistem untuk DNABERT, dan bahwa Anda memiliki lingkungan Conda dengan benar. Kami baru -baru ini berhasil menguji pipa kami di Amazon EC2 Deep Learning AMI (Ubuntu 18.04). Sebagai opsi, Anda dapat membandingkan pengaturan sistem/lingkungan Anda dengan AMI ini.