ที่เก็บนี้รวมถึงการใช้งาน 'DNABERT: การเป็นตัวแทนของการเข้ารหัสแบบสองทิศทางที่ผ่านการฝึกอบรมล่วงหน้าจากโมเดล Transformers สำหรับ DNA-Language ในจีโนม' โปรดอ้างอิงกระดาษของเราหากคุณใช้โมเดลหรือรหัส repo ยังคงอยู่ระหว่างการพัฒนาอย่างแข็งขันดังนั้นโปรดรายงานกรุณาหากมีปัญหาใด ๆ
ในแพ็คเกจนี้เราให้บริการทรัพยากรรวมถึง: ซอร์สโค้ดของโมเดล DNABERT ตัวอย่างการใช้งานโมเดลที่ผ่านการฝึกอบรมมาล่วงหน้าโมเดลที่ปรับจูนและเครื่องมือ VisuLization แพ็คเกจนี้ยังอยู่ระหว่างการพัฒนาเนื่องจากคุณสมบัติเพิ่มเติมจะถูกรวมไว้อย่างค่อยเป็นค่อยไป การฝึกอบรม DNABERT ประกอบด้วยการฝึกอบรมก่อนการฝึกอบรมทั่วไปและการปรับแต่งเฉพาะงาน ในฐานะที่เป็นผลงานของโครงการของเราเราได้เปิดตัวโมเดลที่ผ่านการฝึกอบรมมาแล้วในที่เก็บนี้ เราขยายรหัสจาก HuggingFace และปรับให้เข้ากับสถานการณ์ 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}
}
เราขอแนะนำให้คุณสร้างสภาพแวดล้อมเสมือนจริงของ Python ด้วย Anaconda นอกจากนี้โปรดตรวจสอบให้แน่ใจว่าคุณมี Nvidia GPU อย่างน้อยหนึ่งตัวพร้อม Linux X86_64 เวอร์ชันไดรเวอร์> = 410.48 (เข้ากันได้กับ 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 ดังนั้นคุณจะต้องแปลงลำดับของคุณเป็นนั้น นอกจากนี้เรายังมีฟังก์ชั่นที่กำหนดเอง 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 หากคุณต้องการผสมความแม่นยำผสม (คุณต้องติดตั้ง 'Apex' จากแหล่งที่มาก่อน)
โปรดดูข้อมูลเทมเพลตที่ /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 ซึ่งเป็นงานการจำแนกประเภท 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 ที่ได้รับการปรับแต่งในชุดข้อมูลตัวอย่างสำหรับการทำนาย/การตรวจสอบ/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 หากคุณต้องการผสมความแม่นยำผสม (คุณต้องติดตั้ง 'Apex' จากแหล่งที่มาก่อน)
Visualiazation ของ 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 หากคุณต้องการผสมความแม่นยำผสม (คุณต้องติดตั้ง 'Apex' จากแหล่งที่มาก่อน)
#### 5.2 เครื่องมือการวางแผน
เมื่อคะแนนความสนใจถูกสร้างขึ้นเราสามารถดำเนินการต่อไปเพื่อทำการวิเคราะห์ motif โดยใช้ 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 ภายใต้ MOTIF_PATH
ในการดำเนินการวิเคราะห์ตัวแปรจีโนม (เช่น SNPs) เราต้องตรวจสอบให้แน่ใจว่ามีการคาดการณ์ลำดับก่อน จากนั้นสร้างไฟล์ (เทมเพลตใน 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 นี้