🚀 ESM2 タンパク質機能予測器
本プロジェクトは、遺伝子オントロジー(GO)に基づき、進化尺度モデル(ESM)を利用して、アミノ酸配列からタンパク質の機能を予測します。このモデルは ESM2 Transformer アーキテクチャに基づいており、UniRef50 で事前学習され、AmiGO データセットで微調整されています。特定のタンパク質配列の GO サブグラフを予測し、タンパク質の分子機能、生物学的プロセス、および細胞内での活動位置について詳細な理解を提供します。
⚠️ 重要提示
このバージョンは、遺伝子オントロジーの 分子機能
サブグラフのみをモデリングしています。
🚀 クイックスタート
このモデルは、進化尺度モデル(ESM)を使用し、遺伝子オントロジー(GO)に基づいて、アミノ酸配列からタンパク質の機能を予測します。ESM2 Transformer アーキテクチャに基づいており、UniRef50 で事前学習され、AmiGO データセットで微調整されています。特定のタンパク質配列の GO サブグラフを予測することができます。
✨ 主な機能
- ESM2 アーキテクチャに基づく:最先端の Transformer アーキテクチャを利用して、タンパク質の機能を予測します。
- 複数のデータセットでの学習:UniRef50 で事前学習され、AmiGO データセットで微調整されています。
- 特定のサブグラフのモデリング:現在のバージョンは、遺伝子オントロジーの
分子機能
サブグラフに焦点を当てています。
📚 ドキュメント
何が GO 用語ですか?
"遺伝子オントロジー(GO)は、遺伝子と遺伝子産物の生物学的機能をさまざまな抽象レベルで記述する概念の階層構造です(Ashburner ら、2000)。これは、タンパク質機能の多面性を記述する優れたモデルです。"
"GO は有向非巡回グラフです。グラフのノードは機能記述子(用語またはカテゴリ)であり、それらは関係(is_a、part_of など)で接続されています。例えば、用語 'タンパク質結合活性' と '結合活性' は is_a 関係で接続されています。ただし、グラフのエッジは通常、結合からタンパク質結合に向かって逆方向になっています。このグラフには、分子機能(MF)、生物学的プロセス(BP)、細胞成分(CC)の 3 つのサブグラフ(サブ本体)が含まれており、それらはそれぞれのルートノードで定義されています。生物学的には、各サブグラフはタンパク質機能の異なる側面を表しています:分子レベルでの作用(MF)、関与する生物学的プロセス(BP)、および細胞内での位置(CC)です。"
引用元 CAFA 5 タンパク質機能予測
コードリポジトリ
https://github.com/andrewdalpino/esm2-function-classifier
モデル仕様
属性 |
詳細 |
語彙サイズ |
33 |
埋め込み次元 |
640 |
アテンションヘッド |
20 |
エンコーダ層数 |
30 |
コンテキスト長 |
1026 |
💻 使用例
基本的な使用法
基本的なデモでは、特定の配列の GO 用語を並べ替えることができます。より高度な例については、predict-subgraph.py ソースコードファイルを参照してください。
import torch
from transformers import EsmTokenizer, EsmForSequenceClassification
model_name = "andrewdalpino/ESM2-35M-Protein-Molecular-Function"
tokenizer = EsmTokenizer.from_pretrained(model_name)
model = EsmForSequenceClassification.from_pretrained(model_name)
model.eval()
sequence = "MCNAWYISVDFEKNREDKSKCIHTRRNSGPKLLEHVMYEVLRDWYCLEGENVYMM"
top_k = 10
out = tokenizer(sequence)
input_ids = out["input_ids"]
input_ids = torch.tensor(input_ids, dtype=torch.int64).unsqueeze(0)
with torch.no_grad():
outputs = model.forward(input_ids)
probabilities = torch.sigmoid(outputs.logits.squeeze(0))
probabilities, indices = torch.topk(probabilities, top_k)
probabilities = probabilities.tolist()
terms = [model.config.id2label[index] for index in indices.tolist()]
print(f"Top {top_k} GO Terms:")
for term, probability in zip(terms, probabilities):
print(f"{probability:.4f}: {term}")
🔧 技術詳細
参考文献
- A. Rives, et al. Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences, 2021.
- Z. Lin, et al. Evolutionary-scale prediction of atomic level protein structure with a language model, 2022.
- G. A. Merino, et al. Hierarchical deep learning for predicting GO annotations by integrating protein knowledge, 2022.
- M. Ashburner, et al. Gene Ontology: tool for the unification of biology, 2000.