このリポジトリには、「ゲノムのDNA言語のためのトランスフォーマーモデルからのdnabert:事前に訓練された双方向エンコーダー表現」の実装が含まれます。モデルまたはコードを使用する場合は、私たちの論文を引用してください。リポジトリはまだ積極的に開発中ですので、問題が発生した場合は、親切に報告してください。
このパッケージでは、DNABERTモデルのソースコード、使用例、事前に訓練されたモデル、微調整されたモデル、visulizationツールなどのリソースを提供します。より多くの機能が徐々に含まれるため、このパッケージはまだ開発中です。 DNABERTのトレーニングは、一般的なトレーニング前およびタスク固有の微調整で構成されています。プロジェクトの貢献として、このリポジトリで事前に訓練されたモデルをリリースしました。 Huggingfaceからコードを拡張し、それらをDNAシナリオに適合させました。
Dnabert-2という名前のDnabertの第2世代は、https://github.com/zhihan1996/dnabert_2で公開されています。 DNABERT-2は、複数種のゲノムについて訓練されており、第1世代よりも効率的で強力で使いやすいです。また、新しいパッケージで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を使用してPython仮想環境を構築することをお勧めします。また、Linux x86_64ドライバーバージョンを備えた少なくとも1つのNVIDIA GPUがあることを確認してください(CUDA 10.0と互換性があります)。 11 GBのグラフィックメモリを備えた8 NVIDIA GeForce RTX 2080 Tiに分散トレーニングを適用しましたが、バッチサイズはそれに対応しています。他の仕様やメモリサイズで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
(オプション、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提供します。
次の例では、例としてkmer = 6でdnabertを使用します。
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タグを追加します。 (最初にソースから「頂点」をインストールする必要があります)。
/example/sample_data/ft/のテンプレートデータをご覧ください。 Dnabertを独自のデータで微調整しようとしている場合は、データと同じ形式にデータを処理してください。シーケンスはKMER形式であるため、シーケンスをそれに変換する必要があることに注意してください。また、この変換のためにmotif/motif_utils.pyのカスタム関数seq2kmer提供します。
dnabert3
dnabert4
dnabert5
dnabert6
事前に訓練されたモデルをディレクトリにダウンロードします。 (次の例を再現したい場合は、DNABERT 6をダウンロードしてください)。次に、実行してパッケージを解凍します。
unzip 6-new-12w-0.zip
また、予測/訪問/Motif_analysisのためにサンプルデータセットで微調整されたKMER=6のモデルを提供します。モデルを自分で微調整する代わりに微調整されたモデルを使用する場合は、微調整されたものをダウンロードして、 examples/ft/6の下に置いてください。
微調整されたモデル
次の例では、例としてkmer = 6でdnabertを使用します。例として、2クラスの分類タスクで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タグを追加します。 (最初にソースから「頂点」をインストールする必要があります)。
また、予測/訪問/Motif_analysisのためにサンプルデータセットで微調整されたKMER=6のモデルを提供します。モデルを自分で微調整する代わりに微調整されたモデルを使用する場合は、微調整されたものをダウンロードして、 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からロードされ、 DATA_PATHに保存され、 PREDICTION_PATHで予測結果を保存するdev.tsvファイルで予測を行います。
混合精度を実行する場合は、-FP16タグを追加します。 (最初にソースから「頂点」をインストールする必要があります)。
Dnabertの視覚化は2つのステップで構成されています。注意スコアとプロットを計算します。
1つのモデルのみで計算します(たとえば、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からロードされ、 DATA_PATHに保存され、 PREDICTION_PATHで結果を保存するdev.tsvファイルの注意スコアを計算します。
混合精度を実行する場合は、-FP16タグを追加します。 (最初にソースから「頂点」をインストールする必要があります)。
#### 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など)を実行するには、まずシーケンスの予測が生成されたことを確認する必要があります。次に、 dev.tsvのどのシーケンスを指定し、突然変異を実行する必要があるインデックスを開始および終了するファイル( SNP/example_mut_file.txtのテンプレート)を作成します。最初の列は、変異するdev.tsvのシーケンスのインデックスを示します。 2番目と3番目の列は開始インデックスとエンドインデックスであり、4番目の列は突然変異のターゲットです(置換、挿入、削除など)
そのようなファイルが作成されたら、シーケンスで突然変異を実行できます。
cd ../SNP
python mutate_seqs.py ./../examples/sample_data/ft/6/dev.tsv ./examples/ --mut_file ./example_mut_file.txt --k 6
あるいは、すべてのシーケンスに対して、プログラムがすべての塩基( 'a'、 't'、 'c'、または 'g')にすべての塩基の置換を実行しようとする--mut_file引数を空白のままにすることを選択できます。これは、論文に含まれる突然変異ヒートマップをプロットするのに役立ちます。 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
これにより、 save_file_dirの下にあるmutations.tsvファイルが保存されます。これには、元のシーケンス(元のdev.tsv )のインデックス、元のシーケンスと予測、変異シーケンスと予測、およびすべての場合の変化の差スコアとログオッズ比が含まれます。
DNABERTのすべてのシステム要件を満たし、Conda環境が適切にセットアップされていることを確認してください。最近、Amazon EC2 Deep Learning Ami(Ubuntu 18.04)でパイプラインをテストしました。オプションとして、システム/環境のセットアップをこのAMIと比較できます。