該存儲庫包括“ DNABERT:來自Transformers Model的DNABERT:基因組DNA語言”的預訓練的雙向編碼器的實現。如果您使用型號或代碼,請引用我們的論文。存儲庫仍在積極開發中,因此,如果遇到任何問題,請友好地報告。
在此軟件包中,我們提供了資源,包括:DNABERT模型的源代碼,使用示例,預訓練模型,微調模型和可吸引工具。該軟件包仍在開發中,因為將逐漸包含更多功能。 DNABERT的培訓包括通用預培訓和特定於任務的微調。作為我們項目的貢獻,我們在此存儲庫中發布了預培訓的模型。我們將密碼從擁抱面擴展到了DNA場景。
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}
}
我們建議您使用Anaconda構建一個虛擬環境。另外,請確保您至少有一個具有Linux X86_64驅動程序版本> = 410.48的NVIDIA GPU(與CUDA 10.0兼容)。我們在8個NVIDIA GEFORCE RTX 2080 Ti上應用了分佈式培訓,具有11 GB圖形存儲器,批次大小與之相對應。如果您將GPU與其他規格和內存大小一起使用,請考慮相應地調整批次尺寸。
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" ./
請在/example/sample_data/pre中查看模板數據。如果您試圖用自己的數據預先培訓DNABERT,請將數據處理與其相同的格式。請注意,這些序列是以kmer格式的,因此您需要將序列轉換為其中。我們還為此轉換提供了一個自motif/motif_utils.py函數seq2kmer 。
在下面的示例中,我們將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標籤如果要完善混合精度。 (您必須先從源安裝“ Apex”)。
請在/example/sample_data/ft/中查看模板數據。如果您試圖用自己的數據對DNABERT進行微調,請將數據處理與其相同的格式。請注意,這些序列是以kmer格式的,因此您需要將序列轉換為其中。我們還為此轉換提供了一個自motif/motif_utils.py函數seq2kmer 。
DNABERT3
DNABERT4
dnabert5
DNABERT6
將預訓練的模型下載到目錄中。 (如果您想複製以下示例,請下載DNABERT 6)。然後通過運行解壓縮包:
unzip 6-new-12w-0.zip
我們還提供了一個具有KMER=6的模型,該模型在樣本數據集上進行了微調,以進行預測/swulization/motif_analysis。如果您使用微調模型而不是通過自我微調模型,請下載微調並將其放在examples/ft/6下。
微調模型
在下面的示例中,我們將DNABERT與kmer = 6一起使用。我們使用prom-core ,一個2級分類任務為例。
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標籤如果要完善混合精度。 (您必須先從源安裝“ Apex”)。
我們還提供了一個具有KMER=6的模型,該模型在樣本數據集上進行了微調,以進行預測/swulization/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
使用上述命令,將從MODEL_PATH加載微調的DNABERT模型,並在保存在DATA_PATH中的dev.tsv文件上進行預測,並在PREDICTION_PATH上保存預測結果。
添加-FP16標籤如果要完善混合精度。 (您必須先從源安裝“ Apex”)。
DNABERT的Visualiazation由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
使用上述命令,將從MODEL_PATH加載微調的DNABERT模型,併計算出保存在DATA_PATH中的dev.tsv文件上的注意力分數,並將結果保存在PREDICTION_PATH 。
添加-FP16標籤如果要完善混合精度。 (您必須先從源安裝“ Apex”)。
#### 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
該腳本將在MOTIF_PATH下為每個主題生成.txt文件和Weblogo .png文件。
要執行基因組變體分析(例如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
這將再次在$PREDICTION_PATH下創建pred_results.npy文件。一旦擁有以上所有內容,我們就可以通過以下方式計算這些突變的效果:
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
這將保存dev.tsv mutations.tsv save_file_dir
請確保您滿足DNABERT的所有系統要求,並設置一個Conda環境。我們最近成功地測試了Amazon EC2深度學習AMI(Ubuntu 18.04)的管道。作為選擇,您可以將系統/環境設置與此AMI進行比較。