SpliceBERT(원고, 사전 인쇄)는 2백만 개 이상의 척추동물 RNA 서열에 대해 사전 훈련된 기본 RNA 서열 언어 모델입니다. 이는 RNA 접합 및 RNA 서열과 관련된 기타 생물학적 문제를 연구하는 데 사용할 수 있습니다.
SpliceBERT의 추가 벤치마크 및 애플리케이션(예: SpliceAI 및 DeepSTARR의 데이터 세트)은 SpliceBERT 분석을 참조하세요.
데이터 가용성
SpliceBERT를 어떻게 사용하나요?
분석 재현
연락하다
소환
분석을 위한 모델 가중치 및 데이터는 zenodo:7995778에서 확인할 수 있습니다.
SpliceBERT는 PyTorch의 Huggingface transformers
및 FlashAttention으로 구현됩니다. SpliceBERT 모델을 로드하려면 사용자가 pytorch, 변환기 및 FlashAttention(선택 사항)을 설치해야 합니다.
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 다운로드
SpliceBERT의 가중치는 zenodo에서 다운로드할 수 있습니다: https://zenodo.org/record/7995778/files/models.tar.gz?download=1
시스템 요구사항
최소 4GB 메모리의 NVIDIA GPU가 있는 Linux 시스템에서 SpliceBERT를 실행하는 것이 좋습니다. (CPU만으로 모델을 실행하는 것은 가능하지만 속도가 매우 느립니다.)
예
다음 코드 블록의 첫 번째 부분에서는 Huggingface 변환기의 공식 API를 통해 SpliceBERT를 사용하는 방법을 보여주는 데모 스크립트를 제공합니다.
사용자는 다음 코드 블록의 두 번째 부분에 표시된 대로 공식 API를 사용자 정의 API로 대체하여 FlashAttention과 함께 SpliceBERT를 사용할 수도 있습니다. 플래시 주의는 자동 혼합 정밀도(amp) 모드를 활성화해야 하며 현재는 attention_mask
지원하지 않습니다.
Huggingface 변환기의 공식 API를 통해 SpliceBERT를 사용하세요.
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # 사전 훈련된 SpliceBERTimport 폴더에 대한 경로 설정 torchfrom Transformers import AutoTokenizer, AutoModel, AutoModelForMaskedLM, AutoModelForTokenClassification# load tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# 입력 시퀀스 준비 = "ACGUACGuacguaCGu" ## 경고: 이것은 단지 데모일 뿐입니다. SpliceBERT는 lengthseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - 64-1024nt 시퀀스에 대해 훈련되었기 때문에 64nt보다 짧은 시퀀스에서는 작동하지 않을 수 있습니다. > 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) # Python 목록을 Tensorinput_ids = input_ids.unsqueeze(0) # 배치 추가의 시작과 끝에 추가됩니다. 차원, 모양: (batch_size, 시퀀스_길이)# SpliceBERT를 사용하려면 Huggerface의 공식 API를 사용합니다# 뉴클레오티드 임베딩을 가져옵니다(숨겨짐) states)model = AutoModel.from_pretrained(SPLICEBERT_PATH) # 모델 로드last_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) # 로드 모델logits = model(input_ids).logits # 모양: (batch_size, 시퀀스_길이, vocab_size)# 토큰 분류 작업을 위한 SpliceBERT 미세 조정model = AutoModelForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # 클래스 번호가 3이라고 가정하고 모양은 다음과 같습니다. (batch_size, 시퀀스_길이, num_labels)# 시퀀스 분류를 위한 SpliceBERT 미세 조정 taskmodel = AutoModelForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # 클래스 번호가 3이라고 가정, 모양: (batch_size, 시퀀스_길이, num_labels)
또는 공식 API를 사용자 정의 API로 대체하여 FlashAttention과 함께 SpliceBERT를 사용합니다. (현재 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)))from 변환기 import AutoTokenizerfrom splicebert_model import BertModel, BertForMaskedLM, BertForTokenClassification# load tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# 입력 시퀀스 준비seq = "ACGUACGuacguaCGu" ## 경고: 이것은 단지 데모일 뿐입니다. SpliceBERT는 lengthseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - 64-1024nt 시퀀스에 대해 훈련되었기 때문에 64nt보다 짧은 시퀀스에서는 작동하지 않을 수 있습니다. > 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) # Python 목록을 Tensorinput_ids = input_ids.unsqueeze(0) # 배치 추가의 시작과 끝에 추가됩니다. 차원, 모양: (batch_size, 시퀀스_길이)# 또는 FlashAttention과 함께 사용자 정의 BertModel을 사용합니다# 뉴클레오티드 임베딩(숨겨진 상태) 가져오기모델 = BertModel.from_pretrained(SPLICEBERT_PATH) # autocast()를 사용하여 모델 로드: last_hidden_state = model(input_ids).last_hidden_state # 마지막 레이어에서 숨겨진 상태를 가져옵니다. Embedding) 및 6개의 변환기 인코더 레이어#는 뉴클레오티드 유형을 얻습니다. 마스크된 언어 모델링의 로지트model = BertForMaskedLM.from_pretrained(SPLICEBERT_PATH) # 로드 모델 with autocast(): logits = model(input_ids).logits # 모양: (batch_size, 시퀀스_길이, vocab_size)# 미세 조정 SpliceBERT for 토큰 분류 작업with autocast(): model = BertForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # 클래스 번호가 3이라고 가정합니다. 모양: (batch_size, 시퀀스_길이, num_labels)# 시퀀스 분류 작업을 위한 SpliceBERT 미세 조정 with autocast(): model = BertForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # 클래스 번호는 다음과 같다고 가정합니다. 3, 모양: (batch_size, 시퀀스_길이, num_labels)
환경을 구성합니다.
Linux 시스템(Ubuntu 20.04.3 LTS)에서 Python 3.9.7을 사용하는 conda 환경에서 스크립트를 실행합니다. 필수 패키지는 다음과 같습니다.
참고: 버전 번호는 연구에 사용된 소프트웨어 버전을 설명하기 위해서만 사용됩니다. 대부분의 경우 사용자는 코드를 실행하기 위해 버전이 우리 버전과 완전히 동일한지 확인할 필요가 없습니다.
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)
Python 패키지:
명령줄 도구(선택 사항):
이 저장소를 복제하고 데이터 및 설정 스크립트를 다운로드하세요.
git clone [email protected]:biomed-AI/SpliceBERT.gitcd SpliceBERT bash download.sh # 모델 가중치 및 데이터를 다운로드하거나 [zenodo](https://doi.org/10.5281/zenodo.7995778)에서 수동으로 다운로드합니다.cd 예제 bash setup.sh # selene utils 컴파일, cython이 필요합니다
(선택사항) 섹션 1-4에 대해 미리 계산된 결과를 Google 드라이브에서 다운로드하고 examples
폴더에 압축을 풉니다.
# 사용자는 `pre-computed_results.tar.gz`를 수동으로 다운로드하여 `./examples` 폴더에 넣은 후 다음 명령을 실행하여 ittar -zxvf pre-computed_results.tar.gz의 압축을 풀어야 합니다.
미리 계산된 결과가 올바르게 다운로드되고 압축이 풀린 경우 사용자는 섹션 1-4의 jupyter 노트북에서 pipeline.sh
실행을 건너뛸 수 있습니다.
jupyter 노트북(섹션 1-4) 또는 bash 스크립트 pipeline.sh
(섹션 5-6)를 실행합니다.
진화적 보존 분석(그림 1 관련)
뉴클레오티드 삽입 분석(그림 2 관련)
주의 가중치 분석(그림 3 관련)
변형 효과 분석(그림 4 관련)
분기점 예측(그림 5 관련)
접속 위치 예측(그림 6 관련)
스크립트와 관련된 문제의 경우 https://github.com/biomed-AI/SpliceBERT/issues에서 문제를 생성하세요.
다른 질문이 있으시면 언제든지 chenkenbio {at} gmail.com에 문의하세요.
@article{첸2023.01.31.526427, 저자 = {Chen, Ken 및 Zhou, Yue 및 Ding, Maolin 및 Wang, Yu 및 Ren, Zhixiang 및 Yang, Yuedong}, title = {72종 척추동물의 수백만 개의 일차 RNA 서열에 대한 자기 지도 학습으로 서열 기반 RNA 스플라이싱 예측이 향상됨}, 연도 = {2024}, doi = {10.1093/bib/bbae163}, 출판사 = {Oxford University Press}, URL = {https://doi.org/10.1093/bib/bbae163}, 저널 = {생물정보학 브리핑} }