SpliceBERT (ต้นฉบับ, พิมพ์ล่วงหน้า) คือแบบจำลองภาษาลำดับ RNA หลักที่ได้รับการฝึกอบรมล่วงหน้ากับลำดับ RNA ของสัตว์มีกระดูกสันหลังมากกว่า 2 ล้านลำดับ สามารถใช้ในการศึกษาการประกบ RNA และปัญหาทางชีวภาพอื่น ๆ ที่เกี่ยวข้องกับลำดับ RNA
สำหรับการวัดประสิทธิภาพเพิ่มเติมและการใช้งานของ SpliceBERT (เช่น บนชุดข้อมูลของ SpliceAI และ DeepSTARR) โปรดดูการวิเคราะห์ของ SpliceBERT
ความพร้อมใช้งานของข้อมูล
วิธีการใช้งาน SpliceBERT
ทำซ้ำการวิเคราะห์
ติดต่อ
การอ้างอิง
น้ำหนักโมเดลและข้อมูลสำหรับการวิเคราะห์มีอยู่ที่ zenodo:7995778
SpliceBERT ถูกนำไปใช้กับ transformers
Huggingface และ FlashAttention ใน PyTorch ผู้ใช้ควรติดตั้ง pytorch, Transformers และ FlashAttention (เป็นทางเลือก) เพื่อโหลดโมเดล SpliceBERT
ติดตั้ง PyTorch: https://pytorch.org/get-started/locally/
ติดตั้งหม้อแปลง Huggingface: https://huggingface.co/docs/transformers/installation
ติดตั้ง FlashAttention (ไม่บังคับ): https://github.com/Dao-AILab/flash-attention
SpliceBERT สามารถนำไปใช้งานดาวน์สตรีมต่างๆ ได้อย่างง่ายดายผ่าน API อย่างเป็นทางการ ดูคู่มืออย่างเป็นทางการสำหรับรายละเอียดเพิ่มเติม
ดาวน์โหลด SpliceBERT.dll
สามารถดาวน์โหลดน้ำหนักของ SpliceBERT ได้จาก zenodo: https://zenodo.org/record/7995778/files/models.tar.gz?download=1
ความต้องการของระบบ
เราขอแนะนำให้ใช้งาน SpliceBERT บนระบบ Linux ที่มี NVIDIA GPU ที่มีหน่วยความจำอย่างน้อย 4GB (การรันโมเดลของเราด้วย CPU เพียงอย่างเดียวนั้นเป็นไปได้ แต่จะช้ามาก)
ตัวอย่าง
เรามีสคริปต์สาธิตเพื่อแสดงวิธีใช้ SpliceBERT ผ่าน API อย่างเป็นทางการของ Transformers Huggingface ในส่วนแรกของบล็อกโค้ดต่อไปนี้
ผู้ใช้ยังสามารถใช้ SpliceBERT กับ FlashAttention ได้โดยแทนที่ API อย่างเป็นทางการด้วย API แบบกำหนดเอง ดังที่แสดงในส่วนที่สองของบล็อคโค้ดต่อไปนี้ โปรดทราบว่าการเน้นแฟลชจำเป็นต้องเปิดใช้งานโหมดความแม่นยำผสมอัตโนมัติ (แอมป์) และในปัจจุบันยังไม่รองรับ attention_mask
ใช้ SpliceBERT ผ่าน API อย่างเป็นทางการของหม้อแปลง Huggingface:
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # กำหนดเส้นทางไปยังโฟลเดอร์ของ SpliceBERTimport torchfrom ที่ผ่านการฝึกอบรมมาแล้ว นำเข้า AutoTokenizer, AutoModel, AutoModelForMaskedLM, AutoModelForTokenClassification# load tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# เตรียมลำดับอินพุต = "ACGUACGuacguaCGu" ## คำเตือน: นี่เป็นเพียงการสาธิต SpliceBERT อาจไม่ทำงานในลำดับที่สั้นกว่า 64nt เนื่องจากได้รับการฝึกฝนเกี่ยวกับลำดับ 64-1024nt ใน lengthseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T และเพิ่ม whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. หมายเหตุ: โทเค็น [CLS] และ [SEP] จะถูกเพิ่มที่จุดเริ่มต้นและจุดสิ้นสุดของ seqinput_ids = torch.as_tensor(input_ids) # แปลงรายการหลามเป็น Tensorinput_ids = input_ids.unsqueeze(0 ) # เพิ่มขนาดแบทช์ รูปร่าง: (batch_size, sequence_length)# ใช้ API อย่างเป็นทางการของ Huggerface เพื่อใช้ SpliceBERT# รับการฝังนิวคลีโอไทด์ (สถานะที่ซ่อนอยู่)model = AutoModel.from_pretrained(SPLICEBERT_PATH) # load modellast_hidden_state = model(input_ids).last_hidden_state # รับสถานะที่ซ่อนอยู่จากเลเยอร์สุดท้ายhiddens_states = model(input_ids, output_hidden_states=True).hidden_states # สถานะที่ซ่อนอยู่จากเลเยอร์ที่ฝัง (nn.Embedding) และหม้อแปลงไฟฟ้า 6 ตัว เลเยอร์ตัวเข้ารหัส# รับบันทึกประเภทนิวคลีโอไทด์ในการสร้างแบบจำลองภาษามาสก์model = AutoModelForMaskedLM.from_pretrained(SPLICEBERT_PATH) # โหลด modellogits = model(input_ids).logits # รูปร่าง: (batch_size, sequence_length, vocab_size)# การปรับแต่ง SpliceBERT สำหรับงานจำแนกโทเค็นmodel = AutoModelForTokenClassification.from_pretrained( SPLICEBERT_PATH num_labels=3) # ถือว่าหมายเลขคลาสคือ 3 รูปร่าง: (batch_size, sequence_length, num_labels)# การปรับแต่ง SpliceBERT สำหรับงานจำแนกลำดับ model = AutoModelForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # ถือว่าหมายเลขคลาสคือ 3 รูปร่าง: ( ชุด_ขนาด, ลำดับ_ความยาว, num_labels)
หรือใช้ SpliceBERT กับ FlashAttention โดยแทนที่ API อย่างเป็นทางการด้วย API แบบกำหนดเอง (ปัจจุบัน flash-attention ไม่รองรับ Attention_mask ด้วยเหตุนี้ ความยาวของลำดับในแต่ละชุดจึงควรเท่ากัน)
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # ตั้งค่าพาธไปยังโฟลเดอร์ของ SpliceBERTimport ที่ได้รับการฝึกล่วงหน้าแล้ว torchimport syssys.path.append(os.path.dirname(os.path.abspath(SPICEBERT_PATH)))จาก หม้อแปลงนำเข้า AutoTokenizer จาก splicebert_model นำเข้า BertModel, BertForMaskedLM, BertForTokenClassification# load tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# เตรียมลำดับอินพุต seq = "ACGUACGuacguaCGu" ## คำเตือน: นี่เป็นเพียงการสาธิต SpliceBERT อาจไม่ทำงานในลำดับที่สั้นกว่า 64nt เนื่องจากได้รับการฝึกฝนเกี่ยวกับลำดับ 64-1024nt ใน lengthseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T และเพิ่ม whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. หมายเหตุ: โทเค็น [CLS] และ [SEP] จะถูกเพิ่มที่จุดเริ่มต้นและจุดสิ้นสุดของ seqinput_ids = torch.as_tensor(input_ids) # แปลงรายการหลามเป็น Tensorinput_ids = input_ids.unsqueeze(0 ) # เพิ่มขนาดแบทช์ รูปร่าง: (batch_size, sequence_length)# หรือใช้ BertModel แบบกำหนดเองพร้อม FlashAttention# รับ การฝังนิวคลีโอไทด์ (สถานะที่ซ่อนอยู่) model = BertModel.from_pretrained (SPLICEBERT_PATH) # load modelwith autocast (): Last_hidden_state = model (input_ids).last_hidden_state # รับสถานะที่ซ่อนอยู่จากเลเยอร์สุดท้าย Hiddens_states = model (input_ids, output_hidden_states=True).hidden_states # ซ่อนเร้น รัฐจากชั้นการฝัง (nn.Embedding) และ เลเยอร์ตัวเข้ารหัสหม้อแปลง 6 ชั้น# รับบันทึกประเภทนิวคลีโอไทด์ในการสร้างแบบจำลองภาษามาสก์model = BertForMaskedLM.from_pretrained(SPLICEBERT_PATH) # โหลดโมเดลด้วย autocast(): logits = model(input_ids).logits # รูปร่าง: (batch_size, sequence_length, vocab_size)# การปรับแต่ง SpliceBERT สำหรับ งานการจำแนกโทเค็นด้วย autocast (): model = BertForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # ถือว่าหมายเลขคลาสคือ 3 รูปร่าง: (batch_size, sequence_length, num_labels)# การปรับแต่ง SpliceBERT สำหรับงานจำแนกลำดับด้วย autocast(): model = BertForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # สมมติว่าหมายเลขชั้นเรียนคือ 3 รูปร่าง: (batch_size, sequence_length, num_labels)
กำหนดค่าสภาพแวดล้อม
เรารันสคริปต์ในสภาพแวดล้อม conda ด้วย python 3.9.7 บนระบบ Linux (Ubuntu 20.04.3 LTS) แพ็คเกจที่ต้องการคือ:
หมายเหตุ: หมายเลขเวอร์ชันใช้เพื่อแสดงเวอร์ชันของซอฟต์แวร์ที่ใช้ในการศึกษาของเราเท่านั้น ในกรณีส่วนใหญ่ ผู้ใช้ไม่จำเป็นต้องตรวจสอบให้แน่ใจว่าเวอร์ชันนั้นเหมือนกับเวอร์ชันของเราอย่างเคร่งครัดในการรันโค้ด
bedtools (2.30.0)
MaxEntScan (2004)
gtfToGenePred (v377)
Python (3.9.7)
transformers (4.24.0)
pytorch (1.12.1)
h5py (3.2.1)
numpy (1.23.3)
scipy (1.8.0)
scikit-learn (1.1.1)
scanpy (1.8.2)
matplotlib (3.5.1)
seaborn (0.11.2)
tqdm (4.64.0)
pyBigWig (0.3.18)
cython (0.29.28)
แพ็คเกจหลาม:
เครื่องมือบรรทัดคำสั่ง (ไม่จำเป็น):
โคลนพื้นที่เก็บข้อมูลนี้ ดาวน์โหลดข้อมูล และสคริปต์การตั้งค่า
git clone [email protected]:biomed-AI/SpliceBERT.gitcd SpliceBERT bash download.sh # ดาวน์โหลดน้ำหนักและข้อมูลของโมเดล หรือดาวน์โหลดด้วยตนเองจาก [zenodo](https://doi.org/10.5281/zenodo.7995778)ตัวอย่างซีดี bash setup.sh # คอมไพล์ selene utils ต้องใช้ cython
(ไม่บังคับ) ดาวน์โหลดผลลัพธ์ที่คำนวณไว้ล่วงหน้าสำหรับส่วนที่ 1-4 จาก Google Drive และขยายขนาดในโฟลเดอร์ examples
ผู้ใช้ # รายควรดาวน์โหลด `pre-computed_results.tar.gz` ด้วยตนเอง และวางไว้ในโฟลเดอร์ `./examples` และเรียกใช้คำสั่งต่อไปนี้เพื่อขยาย ittar -zxvf pre-computed_results.tar.gz
หากมีการดาวน์โหลดและขยายผลลัพธ์ที่คำนวณไว้ล่วงหน้าอย่างถูกต้อง ผู้ใช้สามารถข้ามการรัน pipeline.sh
ในสมุดบันทึก jupyter ของส่วนที่ 1-4 ได้
เรียกใช้สมุดบันทึก jupyter (ส่วนที่ 1-4) หรือสคริปต์ทุบตีไปป์ pipeline.sh
(ส่วนที่ 5-6):
การวิเคราะห์การอนุรักษ์เชิงวิวัฒนาการ (เกี่ยวข้องกับรูปที่ 1)
การวิเคราะห์การฝังนิวคลีโอไทด์ (เกี่ยวข้องกับรูปที่ 2)
การวิเคราะห์น้ำหนักความสนใจ (เกี่ยวข้องกับรูปที่ 3)
การวิเคราะห์ผลกระทบของตัวแปร (เกี่ยวข้องกับรูปที่ 4)
การทำนายจุดสาขา (เกี่ยวข้องกับรูปที่ 5)
การคาดการณ์ไซต์ประกบกัน (เกี่ยวข้องกับรูปที่ 6)
สำหรับปัญหาที่เกี่ยวข้องกับสคริปต์ ให้สร้างปัญหาที่ https://github.com/biomed-AI/SpliceBERT/issues
หากมีคำถามอื่นๆ โปรดติดต่อ chenkenbio {at} gmail.com
@บทความ{Chen2023.01.31.526427, ผู้แต่ง = {เฉิน, เคนและโจว, เยว่และติง, เม่าหลินและหวัง, หยูและเหริน, จี้เซียงและหยาง, เยว่ตง}, title = {การเรียนรู้ด้วยตนเองเกี่ยวกับลำดับ RNA หลักหลายล้านลำดับจากสัตว์มีกระดูกสันหลัง 72 ตัวช่วยปรับปรุงการทำนายการประกบ RNA ตามลำดับ}, ปี = {2024}, ดอย = {10.1093/bib/bbae163}, ผู้จัดพิมพ์ = {สำนักพิมพ์มหาวิทยาลัยออกซ์ฟอร์ด} URL = {https://doi.org/10.1093/bib/bbae163}, วารสาร = {การบรรยายสรุปทางชีวสารสนเทศศาสตร์} -