SpliceBERT (原稿、プレプリント) は、200 万を超える脊椎動物の RNA 配列で事前トレーニングされた主要な RNA 配列言語モデルです。 RNA スプライシングや RNA 配列に関連するその他の生物学的問題の研究に使用できます。
SpliceBERT の追加のベンチマークとアプリケーション (SpliceAI や DeepSTARR のデータセットなど) については、SpliceBERT 分析を参照してください。
データの可用性
SpliceBERTの使い方は?
分析を再現する
接触
引用
モデルの重みと解析用のデータは、zenodo:7995778 で入手できます。
SpliceBERT は、PyTorch の Huggingface transformers
と FlashAttend を使用して実装されています。ユーザーは、SpliceBERT モデルをロードするために、pytorch、トランスフォーマー、および FlashAttendant (オプション) をインストールする必要があります。
PyTorch をインストールします: https://pytorch.org/get-started/locally/
Huggingface トランスフォーマーをインストールします: https://huggingface.co/docs/transformers/installation
FlashAttend のインストール (オプション): https://github.com/Dao-AILab/flash-attention
SpliceBERTは、公式APIを通じて一連のダウンストリームタスクに簡単に使用できます。詳細については公式ガイドを参照してください。
SpliceBERTをダウンロード
SpliceBERT の重みは zenodo からダウンロードできます: https://zenodo.org/record/7995778/files/models.tar.gz?download=1
システム要件
SpliceBERT は、少なくとも 4GB メモリの NVIDIA GPU を搭載した Linux システムで実行することをお勧めします。 (CPU のみでモデルを実行することも可能ですが、非常に遅くなります。)
例
次のコード ブロックの最初の部分で、Huggingface トランスフォーマーの公式 API を通じて SpliceBERT を使用する方法を示すデモ スクリプトを提供します。
次のコード ブロックの 2 番目の部分に示すように、ユーザーは公式 API をカスタム API に置き換えることによって、FlashAttendant で SpliceBERT を使用することもできます。 flash-attention には自動混合精度 (amp) モードを有効にする必要があり、現在、 attention_mask
はサポートされていないことに注意してください。
Huggingface トランスフォーマーの公式 API を通じて SpliceBERT を使用します。
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # 事前トレーニング済みの SpliceBERTimport torchfrom トランスフォーマーのフォルダーへのパスを設定 import AutoTokenizer, AutoModel, AutoModelForMaskedLM, AutoModelForTokenClassification# load tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# prepare input sequenceseq = "ACGUACGuacguaCGu" ## 警告: これは単なるデモです。 SpliceBERT は、長さ 64 ~ 1024nt のシーケンスでトレーニングされたため、64nt より短いシーケンスでは機能しない可能性がありますseq = ' '.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) の先頭と末尾に追加されます # Python リストを Tensorinput_ids = input_ids.unsqueeze に変換します(0) # バッチのディメンション、形状を追加: (batch_size, sequence_length)# 使用するには、huggerface の公式 API を使用しますSpliceBERT# ヌクレオチドの埋め込み (隠れ状態) を取得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 = AutoModelForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # クラス番号が 3 であると仮定します。shape: (batch_size, sequence_length, num_labels)# シーケンス分類タスク用の SpliceBERT の微調整model = AutoModelForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # クラス番号を仮定します。は 3、形状: (バッチサイズ、シーケンス長、ラベル数)
または、公式 API をカスタム API に置き換えて、SpliceBERT を FlashAttendant とともに使用します (現在、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)# prepare input sequenceseq = "ACGUACGuacguaCGu" ## 警告: これは単なるデモです。 SpliceBERT は、長さ 64 ~ 1024nt のシーケンスでトレーニングされたため、64nt より短いシーケンスでは機能しない可能性がありますseq = ' '.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) の先頭と末尾に追加されます # Python リストを Tensorinput_ids = input_ids.unsqueeze に変換します(0) # バッチのディメンション、形状を追加します: (batch_size, sequence_length)# または、FlashAttendant でカスタム BertModel を使用します# getヌクレオチドの埋め込み (隠れ状態)model = BertModel.from_pretrained(SPLICEBERT_PATH) # autocast() でモデルをロード: last_hidden_state = model(input_ids).last_hidden_state # 最後の層から隠れ状態を取得 hiddens_states = model(input_ids, Output_hidden_states=True).hidden_states # hidden埋め込み層からの状態(nn.Embedding) と 6 つのトランスフォーマー エンコーダー レイヤー# マスクされた言語でヌクレオチド タイプのロジットを取得します。model = BertForMaskedLM.from_pretrained(SPLICEBERT_PATH) # autocast() でモデルをロードします: logits = model(input_ids).logits # 形状: (batch_size, sequence_length, vocab_size)# autocast() を使用してトークン分類タスク用の SpliceBERT を微調整する: model = BertForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # クラス番号が 3 であると仮定します。shape: (batch_size, sequence_length, num_labels)# autocast() を使用してシーケンス分類タスク用に SpliceBERT を微調整します: model = BertForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # クラス番号を仮定しますは 3、形状: (batch_size、sequence_length、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{Chen2023.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}, 出版社 = {オックスフォード大学出版局}、 URL = {https://doi.org/10.1093/bib/bbae163}、 ジャーナル = {バイオインフォマティクスのブリーフィング} }