Este repositorio incluye la implementación de 'Dnabert: representaciones de codificadores bidireccionales previamente capacitados del modelo de transformadores para el idioma de ADN en el genoma'. Cite nuestro documento si usa los modelos o códigos. El repositorio todavía está activamente en desarrollo, así que por favor informa amablemente si hay algún problema encontrado.
En este paquete, proporcionamos recursos que incluyen: códigos de origen del modelo DNABERT, ejemplos de uso, modelos previamente capacitados, modelos ajustados y herramienta de visulización. Este paquete aún está en desarrollo, ya que se incluirán más características gradualmente. La capacitación de Dnabert consiste en pretruamiento en general y ajuste fino específico de tareas. Como contribución de nuestro proyecto, lanzamos los modelos previamente capacitados en este repositorio. Extendimos códigos de Huggingface y los adaptamos al escenario de ADN.
La segunda generación de Dnabert, llamada Dnabert-2, está disponible públicamente en https://github.com/zhihan1996/dnabert_2. Dnabert-2 está entrenado en genomas de múltiples especies y es más eficiente, potente y fácil de usar que su primera generación. También proporcionamos un uso más simple de Dnabert en el nuevo paquete. Una evaluación integral de comprensión del genoma de referencia (GUE), que contiene
Si ha usado Dnabert en su investigación, por favor cita las siguientes publicaciones:
@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}
}
Le recomendamos que construya un entorno virtual de Python con Anaconda. Además, asegúrese de tener al menos una GPU NVIDIA con la versión del controlador Linux X86_64> = 410.48 (compatible con CUDA 10.0). Aplicamos capacitación distribuida en 8 Nvidia GeForce RTX 2080 Ti con memoria gráfica de 11 GB, y el tamaño de lote corresponde a él. Si usa GPU con otras especificaciones y tamaños de memoria, considere ajustar el tamaño de su lote en consecuencia.
conda create -n dnabert python=3.6
conda activate dnabert
(Requerido)
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
(Opcional, instale APEX para capacitación FP16)
Cambiar a un directorio deseado por 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" ./
Consulte los datos de la plantilla en /example/sample_data/pre . Si está intentando pre-entrenar a Dnabert con sus propios datos, procese sus datos en el mismo formato que. Tenga en cuenta que las secuencias están en formato KMER, por lo que deberá convertir sus secuencias en eso. También proporcionamos una función personalizada seq2kmer en motif/motif_utils.py para esta conversión.
En el siguiente ejemplo, usamos Dnabert con kmer = 6 como ejemplo.
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
Agregue -FP16 Etiqueta Si desea obtener una precisión mixta. (Debe instalar primero el 'APEX' desde la fuente).
Consulte los datos de la plantilla en /example/sample_data/ft/ . Si está tratando de ajustar a Dnabert con sus propios datos, procese sus datos en el mismo formato que. Tenga en cuenta que las secuencias están en formato KMER, por lo que deberá convertir sus secuencias en eso. También proporcionamos una función personalizada seq2kmer en motif/motif_utils.py para esta conversión.
Dnabert3
Dnabert4
Dnabert5
Dnabert6
Descargue el modelo previamente capacitado en un directorio. (Si desea replicar los siguientes ejemplos, descargue Dnabert 6). Luego descomprima el paquete ejecutando:
unzip 6-new-12w-0.zip
También proporcionamos un modelo con KMER=6 que está ajustado en el conjunto de datos de muestra para predicción/visulación/motif_analysis. Si usa el modelo ajustado en lugar de ajustar un modelo por ti mismo, descargue el ajuste y colóquelo bajo examples/ft/6 .
Modelo afinado
En el siguiente ejemplo, usamos Dnabert con kmer = 6 como ejemplo. Usamos prom-core , una tarea de clasificación de 2 clases como ejemplo.
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
Agregue -FP16 Etiqueta Si desea obtener una precisión mixta. (Debe instalar primero el 'APEX' desde la fuente).
También proporcionamos un modelo con KMER=6 que está ajustado en el conjunto de datos de muestra para predicción/visulación/motif_analysis. Si usa el modelo ajustado en lugar de ajustar un modelo por ti mismo, descargue el ajuste y colóquelo bajo examples/ft/6 .
Modelo afinado
Después de que el modelo se ajuste, podemos obtener predicciones ejecutando
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
Con el comando anterior, el modelo Dnabert ajustado se cargará desde MODEL_PATH , y realiza predicción en el archivo dev.tsv que guardó DATA_PATH y guardar el resultado de la predicción en PREDICTION_PATH .
Agregue -FP16 Etiqueta Si desea obtener una precisión mixta. (Debe instalar primero el 'APEX' desde la fuente).
La visualiazación de Dnabert consta de 2 pasos. Calcualizar puntajes de atención y gráfica.
Calcule con solo un modelo (por ejemplo, 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
Con el comando anterior, el modelo Dnabert ajustado se cargará desde MODEL_PATH , y calcula los puntajes de atención en el archivo dev.tsv que guardó DATA_PATH y guardar el resultado en PREDICTION_PATH .
Agregue -FP16 Etiqueta Si desea obtener una precisión mixta. (Debe instalar primero el 'APEX' desde la fuente).
#### 5.2 Herramienta de trazado
Una vez que se generan los puntajes de atención, podemos proceder a realizar un análisis de motivos utilizando 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
El script generará un archivo .txt y un archivo Weblogo .png para cada motivo en MOTIF_PATH .
Para realizar el análisis de variantes genómicas (por ejemplo, SNP), primero debemos garantizar que se generen las predicciones para las secuencias. Luego, cree un archivo (plantilla en SNP/example_mut_file.txt ) especificando para qué secuencias en dev.tsv e iniciar y finalizar índices donde necesitamos realizar la mutación. La primera columna indica que el índice de secuencia en dev.tsv está mutado. La segunda y tercera columna son los índices de inicio y finalización, mientras que la cuarta columna es el objetivo de la mutación (puede ser sustitución, inserción, deleción, etc.)
Una vez que se crea dicho archivo, podemos realizar la mutación en las secuencias:
cd ../SNP
python mutate_seqs.py ./../examples/sample_data/ft/6/dev.tsv ./examples/ --mut_file ./example_mut_file.txt --k 6
Alternativamente, podemos optar por dejar el argumento --mut_file en blanco, donde el programa intentaría realizar la sustitución de todas las bases a los cuatro nucleótidos posibles ('a', 't', 'c' o 'g') para todas las secuencias. Esto sería útil para trazar un mapa de calor de mutación como se incluye en el papel. Tenga en cuenta que esto sería lento si el dev.tsv contiene muchas secuencias o las secuencias de entrada son muy largas, ya que el comando intentaría realizar la mutación en todas las ubicaciones posibles de ellas .
cd ../SNP
python mutate_seqs.py ./../examples/sample_data/ft/6/dev.tsv ./examples/ --k 6
Después de eso, podemos predecir nuevamente en las secuencias generadas. Nota: Si tiene inserción/deleciones en su mut_file.txt , considere cambiar la max_seq_length que usamos al hacer predicciones.
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
Esto volverá a crear el archivo pred_results.npy bajo el $PREDICTION_PATH . Una vez que tenemos todo lo anterior, podemos calcular el efecto de estas mutaciones por:
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
Esto guardaría un archivo mutations.tsv en save_file_dir , que contiene un índice de secuencia original (en dev.tsv original), secuencia original y predicciones, secuencia mutada y predicciones, así como la puntuación de diferencia y la relación de probabilidades de registro del cambio en todos los casos.
Por favor, asegúrese de satisfacer todos los requisitos del sistema para Dnabert, y que tenga un entorno de condena correctamente configurado. Recientemente hemos probado con éxito nuestra tubería en Amazon EC2 Deep Learning AMI (Ubuntu 18.04). Como opción, puede comparar su configuración de sistema/entorno con este AMI.