يتضمن هذا المستودع تنفيذ "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}
}
نوصيك ببناء بيئة افتراضية بيثون مع أناكوندا. أيضا ، يرجى التأكد من أن لديك على الأقل GPU NVIDIA مع Linux X86_64 إصدار برنامج التشغيل> = 410.48 (متوافق مع CUDA 10.0). قمنا بتطبيق التدريب الموزع على 8 Nvidia Geforce RTX 2080 Ti مع ذاكرة رسومية 11 جيجابايت ، وحجم الدُفعة يتوافق معه. إذا كنت تستخدم 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 يتم ضبطه بشكل جيد على مجموعة بيانات العينة للتنبؤ/اللدغة/التحليل. إذا كنت تستخدم النموذج الذي تم ضبطه بدلاً من صياغة نموذج من خلال نفسك ، فيرجى تنزيل المضبوطات الدقيقة ووضعه تحت 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 علامة إذا كنت تريد دقة مختلطة. (يجب عليك تثبيت "Apex" من المصدر أولاً).
نوفر أيضًا نموذجًا مع 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 ، ويجعل التنبؤ على ملف dev.tsv الذي تم حفظه في DATA_PATH وحفظ نتيجة التنبؤ في PREDICTION_PATH .
إضافة -FP16 علامة إذا كنت تريد دقة مختلطة. (يجب عليك تثبيت "Apex" من المصدر أولاً).
البصرية من 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/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 وملف .png weblogo لكل عزر تحت MOTIF_PATH .
لإجراء تحليل المتغيرات الجينية (EG 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 ، وأن لديك بيئة كوندا التي تم إعدادها بشكل صحيح. لقد نجحنا مؤخرًا في اختبار خط أنابيبنا على Amazon EC2 Deep Learning AMI (Ubuntu 18.04). كخيار ، يمكنك مقارنة إعداد النظام/البيئة مع AMI هذا.