Dieses Repository enthält die Implementierung von 'DNABERT: Vor-aus-bidirektionale Encoder-Repräsentationen aus Transformatorenmodell für DNA-Sprache im Genom'. Bitte zitieren Sie unser Papier, wenn Sie die Modelle oder Codes verwenden. Das Repo befindet sich noch aktiv in der Entwicklung. Bitte melden Sie sich bitte, wenn Probleme auftreten.
In diesem Paket bieten wir Ressourcen, darunter: Quellcodes des DNABERT-Modells, Verwendungsbeispiele, vorgebildete Modelle, fein abgestimmte Modelle und Visulalisierungstool. Dieses Paket befindet sich noch in der Entwicklung, da weitere Funktionen schrittweise aufgenommen werden. Das Training von DNABERT besteht aus allgemeiner vorliegerischer und aufgabenspezifischer Feinabstimmung. Als Beitrag unseres Projekts haben wir die vorgeborenen Modelle in diesem Repository veröffentlicht. Wir erweiterten Codes von Umarmungen und adaptierten sie an das DNA -Szenario.
Die zweite Generation von DNABERT namens Dnabert-2 ist öffentlich unter https://github.com/zhihan1996/dnabert_2 erhältlich. DNABERT-2 ist auf Genomen mit mehreren Arten ausgebildet und ist effizienter, leistungsfähiger und einfach zu bedienen als die erste Generation. Wir bieten auch eine einfachere Verwendung von Dnabert im neuen Paket. Eine umfassende Bewertung des Benchmark -Genomverständnisses (GUE), die enthält
Wenn Sie DNABERT in Ihrer Forschung verwendet haben, zitieren Sie bitte die folgenden Veröffentlichungen:
@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}
}
Wir empfehlen Ihnen, eine virtuelle Python -Umgebung mit Anaconda aufzubauen. Bitte stellen Sie außerdem sicher, dass Sie mindestens eine NVIDIA -GPU mit Linux x86_64 Treiberversion> = 410.48 (kompatibel mit CUDA 10.0) haben. Wir haben ein verteiltes Training auf 8 Nvidia Geforce RTX 2080 TI mit 11 GB Grafikspeicher angelegt, und die Chargengröße entspricht ihm. Wenn Sie GPU mit anderen Spezifikationen und Speichergrößen verwenden, sollten Sie Ihre Chargengröße entsprechend einstellen.
conda create -n dnabert python=3.6
conda activate dnabert
(Erforderlich)
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
(Optional, Apex für FP16 -Training installieren)
Wechseln Sie nach cd PATH_NAME in ein gewünschtes Verzeichnis
git clone https://github.com/NVIDIA/apex
cd apex
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
Bitte beachten Sie die Vorlagendaten unter /example/sample_data/pre . Wenn Sie versuchen, die DNABTT mit Ihren eigenen Daten vorzubeugen, verarbeiten Sie bitte Ihre Daten in dasselbe Format wie diese. Beachten Sie, dass sich die Sequenzen im KMER -Format befinden, sodass Sie Ihre Sequenzen in diese umwandeln müssen. Wir bieten auch eine benutzerdefinierte Funktion seq2kmer in motif/motif_utils.py für diese Konvertierung.
Im folgenden Beispiel verwenden wir Dnabert mit Kmer = 6 als Beispiel.
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
Fügen Sie -FP16 -Tag hinzu, wenn Sie gemischte Präzision herausgeben möchten. (Sie müssen zuerst die 'Apex' von Quelle installieren).
Bitte beachten Sie die Vorlagendaten unter /example/sample_data/ft/ . Wenn Sie versuchen, Dnabert mit Ihren eigenen Daten zu optimieren, verarbeiten Sie bitte Ihre Daten in dasselbe Format wie diese. Beachten Sie, dass sich die Sequenzen im KMER -Format befinden, sodass Sie Ihre Sequenzen in diese umwandeln müssen. Wir bieten auch eine benutzerdefinierte Funktion seq2kmer in motif/motif_utils.py für diese Konvertierung.
Dnabert3
Dnabert4
Dnabert5
Dnabert6
Laden Sie das vorgebildete Modell in ein Verzeichnis herunter. (Wenn Sie die folgenden Beispiele replizieren möchten, laden Sie Dnabert 6 bitte herunter). Dann entpacken Sie das Paket, indem Sie ausführen:
unzip 6-new-12w-0.zip
Wir stellen auch ein Modell mit KMER=6 zur Verfügung, das auf dem Beispieldatensatz für Vorhersage/Visulalisierung/motif_analysis fein abgestimmt ist. Wenn Sie das feinabstimmige Modell verwenden, anstatt ein Modell selbst zu finden, laden Sie die Feinabstimmung herunter und setzen Sie es unter examples/ft/6 .
Feinabstimmungsmodell
Im folgenden Beispiel verwenden wir Dnabert mit Kmer = 6 als Beispiel. Wir verwenden prom-core , eine 2-Klasse-Klassifizierungsaufgabe als Beispiel.
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
Fügen Sie -FP16 -Tag hinzu, wenn Sie gemischte Präzision herausgeben möchten. (Sie müssen zuerst die 'Apex' von Quelle installieren).
Wir stellen auch ein Modell mit KMER=6 zur Verfügung, das auf dem Beispieldatensatz für Vorhersage/Visulalisierung/motif_analysis fein abgestimmt ist. Wenn Sie das feinabstimmige Modell verwenden, anstatt ein Modell selbst zu finden, laden Sie die Feinabstimmung herunter und setzen Sie es unter examples/ft/6 .
Feinabstimmungsmodell
Nachdem das Modell fein abgestimmt ist, können wir durch Laufen Vorhersagen erhalten
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
Mit dem obigen Befehl wird das fein abgestimmte DNABERT-Modell aus MODEL_PATH geladen und stellt die Vorhersage in der dev.tsv Datei vor, die in DATA_PATH gespeichert ist und das Vorhersageergebnis bei PREDICTION_PATH speichert.
Fügen Sie -FP16 -Tag hinzu, wenn Sie gemischte Präzision herausgeben möchten. (Sie müssen zuerst die 'Apex' von Quelle installieren).
Die Visualiazation von Dnabert besteht aus 2 Schritten. Berechnung der Aufmerksamkeitswerte und des Diagramms.
Berechnen Sie mit nur einem Modell (z. B. 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
Mit dem obigen Befehl wird das fein abgestimmte DNABERT-Modell aus MODEL_PATH geladen und berechnet die Aufmerksamkeitswerte in der dev.tsv Datei, die in DATA_PATH gespeichert ist und das Ergebnis bei PREDICTION_PATH speichert.
Fügen Sie -FP16 -Tag hinzu, wenn Sie gemischte Präzision herausgeben möchten. (Sie müssen zuerst die 'Apex' von Quelle installieren).
#### 5.2 Plott -Tool
Sobald die Aufmerksamkeitsbewertungen generiert sind, können wir mithilfe von motif/find_motifs.py weiter die Motivanalyse durchführen:
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
Das Skript generiert eine .txt -Datei und eine Weblogo .png -Datei für jedes Motiv unter MOTIF_PATH .
Um eine genomische Variantenanalyse (z. B. SNPs) durchzuführen, müssen wir zunächst sicherstellen, dass die Vorhersagen für die Sequenzen erzeugt wurden. Erstellen Sie dann eine Datei (Vorlage in SNP/example_mut_file.txt ) an, für welche Sequenzen in dev.tsv und Start- und Endindizes, in denen wir die Mutation ausführen müssen. Die erste Spalte zeigt den in dev.tsv mutierten Sequenzindex an. Zweite und dritte Spalten sind die Start- und Endindizes, während die vierte Spalte das Ziel der Mutation ist (kann Substitution, Insertion, Löschung usw. sein)
Sobald eine solche Datei erstellt wurde, können wir Mutation in den Sequenzen durchführen:
cd ../SNP
python mutate_seqs.py ./../examples/sample_data/ft/6/dev.tsv ./examples/ --mut_file ./example_mut_file.txt --k 6
Alternativ können wir das Argument --mut_file leer lassen, in dem das Programm versuchen würde, die vier möglichen Nukleotide ('A', 'T', 'C' oder 'G') für alle Sequenzen zu ersetzen. Dies wäre nützlich, um eine Mutations -Wärmemap zu zeichnen, wie im Papier enthalten. Beachten Sie, dass dies langsam wäre, wenn der dev.tsv viele Sequenzen oder die Eingangssequenzen sehr lang ist, da der Befehl versuchen würde, Mutation an allen möglichen Stellen durchzuführen .
cd ../SNP
python mutate_seqs.py ./../examples/sample_data/ft/6/dev.tsv ./examples/ --k 6
Danach können wir die generierten Sequenzen erneut vorhersagen. Hinweis: Wenn Sie Insertion/Deletions in Ihrem mut_file.txt haben, sollten Sie die max_seq_length ändern, die wir bei Vorhersagen verwenden.
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
Dadurch wird erneut die Datei pred_results.npy unter der $PREDICTION_PATH erstellt. Sobald wir alle oben genannten haben, können wir die Wirkung dieser Mutationen berechnen, um:
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
Dies würde eine mutations.tsv -Datei unter save_file_dir speichern, die den Index der ursprünglichen Sequenz (in Original dev.tsv ), die ursprüngliche Sequenz und Vorhersagen, mutierte Sequenz und Vorhersagen sowie das Differenzwert und das Log -Odds -Verhältnis der Änderung in jedem Fall enthält.
Bitte stellen Sie bitte sicher, dass Sie alle Systemanforderungen für DNABERT erfüllen und eine ordnungsgemäße Konda -Umgebung eingerichtet haben. Wir haben unsere Pipeline kürzlich auf Amazon EC2 Deep Learning AMI (Ubuntu 18.04) erfolgreich getestet. Optional können Sie Ihr System-/Umgebungs -Setup mit diesem AMI vergleichen.