Этот репозиторий включает в себя реализацию «dnabert: предварительно обученные двунаправленные представления энкодера из модели трансформаторов для языка ДНК в геноме». Пожалуйста, цитируйте нашу статью, если вы используете модели или коды. Репо все еще активно находится в стадии разработки, поэтому, пожалуйста, сообщите, если возникает какая -либо проблема.
В этом пакете мы предоставляем ресурсы, в том числе: исходные коды модели DNAbert, примеры использования, предварительно обученные модели, тонкие модели и инструмент визулизации. Этот пакет все еще находится в стадии разработки, так как все больше функций будут включены постепенно. Обучение DNABERT состоит из общего предварительного обучения и точной настройки, специфичной для задачи. В качестве вклада нашего проекта мы выпустили предварительно обученные модели в этом репозитории. Мы расширили коды от HuggingFace и адаптировали их к сценарию ДНК.
Второе поколение DNABERT, названное DNABERT-2, публично доступно по адресу https://github.com/zhihan1996/dnabert_2. DNABERT-2 обучается на мультиспецифиальных геномах и является более эффективным, мощным и простым в использовании, чем его первое поколение. Мы также предоставляем более простое использование DNabert в новом пакете. Комплексная оценка оценки понимания генома (GUE), которая содержит
Если вы использовали DNABERT в своем исследовании, пожалуйста, цитируйте следующие публикации:
@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}
}
Мы рекомендуем вам построить виртуальную среду Python с Anaconda. Кроме того, убедитесь, что у вас есть хотя бы один графический процессор NVIDIA с версией драйвера Linux x86_64> = 410.48 (совместим с CUDA 10.0). Мы применили распределенное обучение на 8 NVIDIA GeForce RTX 2080 TI с графической памятью 11 ГБ, и размер партии соответствует этому. Если вы используете графический процессор с другими спецификациями и размерами памяти, рассмотрите возможность соответствующей корректировки размера партии.
conda create -n dnabert python=3.6
conda activate dnabert
(Необходимый)
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
(Необязательно, установите Apex для обучения FP16)
переход на желаемый каталог 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" ./
Пожалуйста, смотрите данные шаблона AT /example/sample_data/pre . Если вы пытаетесь предварительно обучать DNABERT с помощью своих собственных данных, обработайте данные в тот же формат, что и он. Обратите внимание, что последовательности находятся в формате KMER, поэтому вам нужно будет преобразовать свои последовательности в это. Мы также предоставляем пользовательскую функцию seq2kmer в motif/motif_utils.py для этого преобразования.
В следующем примере мы используем dnabert с kmer = 6 в качестве примера.
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
Добавить -FP16 TAG, если хотите, чтобы Perfrom смешанная точность. (Сначала вы должны установить «вершину» из источника).
Пожалуйста, смотрите данные шаблона AT /example/sample_data/ft/ . Если вы пытаетесь точно настроить DNABERT с помощью своих собственных данных, обработайте данные в тот же формат, что и он. Обратите внимание, что последовательности находятся в формате KMER, поэтому вам нужно будет преобразовать свои последовательности в это. Мы также предоставляем пользовательскую функцию seq2kmer в motif/motif_utils.py для этого преобразования.
Dnabert3
Dnabert4
Dnabert5
Dnabert6
Загрузите предварительно обученную модель в каталог. (Если вы хотите повторить следующие примеры, пожалуйста, загрузите Dnabert 6). Затем расстегнут пакет, работая:
unzip 6-new-12w-0.zip
Мы также предоставляем модель с KMER=6 , которая настраивается в наборе образцов для прогнозирования/визулизации/Motif_Analysis. Если вы используете модель с тонкой настройкой вместо точной настройки модели самостоятельно, пожалуйста, загрузите тонкую настройку и поместите ее под examples/ft/6 .
Тонкая настраиваемая модель
В следующем примере мы используем dnabert с kmer = 6 в качестве примера. Мы используем prom-core , задачу классификации с двумя классами в качестве примера.
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
Добавить -FP16 TAG, если хотите, чтобы Perfrom смешанная точность. (Сначала вы должны установить «вершину» из источника).
Мы также предоставляем модель с KMER=6 , которая настраивается в наборе образцов для прогнозирования/визулизации/Motif_Analysis. Если вы используете модель с тонкой настройкой вместо точной настройки модели самостоятельно, пожалуйста, загрузите тонкую настройку и поместите ее под examples/ft/6 .
Тонкая настраиваемая модель
После того, как модель будет точно настроена, мы можем получить прогнозы, работая
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
С помощью вышеуказанной команды модель с тонкой настройкой DNABERT будет загружена из MODEL_PATH и делает прогноз в файле dev.tsv , который сохранялся в DATA_PATH и сохраняет результат прогнозирования на PREDICTION_PATH .
Добавить -FP16 TAG, если хотите, чтобы Perfrom смешанная точность. (Сначала вы должны установить «вершину» из источника).
Визуализация dnabert состоит из 2 шагов. Расчеты внимания и график.
Рассчитайте только с одной моделью (например, 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
С помощью вышеуказанной команды модель с тонкой настройкой DNABERT будет загружена из MODEL_PATH и вычисляет оценки внимания в файле dev.tsv , который сохранял в DATA_PATH и сохраняет результат на PREDICTION_PATH .
Добавить -FP16 TAG, если хотите, чтобы Perfrom смешанная точность. (Сначала вы должны установить «вершину» из источника).
#### 5.2 Инструмент построения
После того, как оценки внимания генерируются, мы можем продолжить выполнение анализа мотива, используя 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
Скрипт будет генерировать файл .txt и файл weblogo .png для каждого мотива в MOTIF_PATH .
Чтобы провести анализ геномных вариантов (например, SNP), нам необходимо сначала обеспечить получение прогнозов для последовательностей. Затем создайте файл (шаблон в SNP/example_mut_file.txt ), указанный для каких последовательностей в dev.tsv и начала и конечных показателей, где нам нужно выполнить мутацию. Первый столбец указывает индекс последовательности в dev.tsv , который должен быть мутирован. Вторые и третьи столбцы являются начальными и конечными показателями, в то время как четвертый столбец является мишенью мутации (может быть замена, вставка, делеция и т. Д.)
Как только такой файл создается, мы можем выполнить мутацию на последовательностях:
cd ../SNP
python mutate_seqs.py ./../examples/sample_data/ft/6/dev.tsv ./examples/ --mut_file ./example_mut_file.txt --k 6
В качестве альтернативы, мы можем выбрать оставить аргумент --mut_file , где программа будет пытаться выполнить замену всех оснований на четыре возможных нуклеотида ('A', 'T', 'C' или 'G') для всех последовательностей. Это было бы полезно для построения тепловой карты мутации, как включено в статью. Обратите внимание, что это было бы медленно, если бы dev.tsv содержит много последовательностей, или входные последовательности очень длинные, так как команда попыталась бы выполнить мутацию во всех возможных местах их .
cd ../SNP
python mutate_seqs.py ./../examples/sample_data/ft/6/dev.tsv ./examples/ --k 6
После этого мы можем снова предсказать на сгенерированных последовательностях. ПРИМЕЧАНИЕ. Если у вас есть вставка/делеции в ваш mut_file.txt , рассмотрите возможность изменения max_seq_length , который мы используем при создании прогнозов.
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
Это снова создаст файл pred_results.npy в соответствии с $PREDICTION_PATH . Как только у нас есть все вышеперечисленное, мы можем вычислить влияние этих мутаций:
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
Это сохранит файл mutations.tsv в save_file_dir , который содержит индекс исходной последовательности (в исходной dev.tsv ), исходную последовательность и прогнозы, мутированные последовательности и прогнозы, а также оценку различий и коэффициент изменений в каждом случае.
Пожалуйста, убедитесь, что вы удовлетворили все системные требования для DNAbert, и что у вас есть среда Conda должным образом. Недавно мы успешно протестировали наш трубопровод на Amazon EC2 Deep Learning AMI (Ubuntu 18.04). В качестве варианта вы можете сравнить свою систему/настройку среды с этим AMI.