🚀 Ankh3タンパク質言語モデル
Ankh3はタンパク質言語モデルで、2つの目標に対して同時に最適化されています。特徴抽出に使用でき、タンパク質関連の研究を支援します。
🚀 クイックスタート
モデル情報
属性 |
詳細 |
ライブラリ名 |
transformers |
ライセンス |
cc - by - nc - sa - 4.0 |
タスクタイプ |
特徴抽出 |
モデルタイプ |
タンパク質言語モデル |
学習データ |
UniRef50 |
モデルの詳細
Ankh3はタンパク質言語モデルで、2つの目標に対して同時に最適化されています。
- 様々なマスク確率を持つマスク言語モデリング
- タンパク質配列の補完
1. マスク言語モデリング
- このタスクの考え方は、入力されたタンパク質配列の一定割合(X%)の単一トークン(アミノ酸)をマスク処理することで、入力のタンパク質配列を意図的に「損傷」させ、その後モデルを訓練して元の配列を再構築することです。
- 以下は、タンパク質配列が損傷する前後の例です。
- 元のタンパク質配列:MKAYVLINSRGP
- この配列は、以下のようにセンチネルトークンを使用してマスク/損傷されます。
損傷後の配列:M <extra_id_0> A Y <extra_id_1> L I <extra_id_2> S R G <extra_id_3>
- デコーダは、各センチネルトークンをマスクされた実際のアミノ酸に対応付けるように学習します。この例では、<extra_id_0> K は <extra_id_0> が「K」アミノ酸に対応することを意味し、以下同様です。
- デコーダの出力:<extra_id_0> K <extra_id_1> V <extra_id_2> N <extra_id_3> P
2. タンパク質配列の補完
- このタスクの考え方は、入力配列を2つの部分に分割し、最初の部分をエンコーダに入力し、デコーダのタスクは、エンコーダが出力した最初の部分の表現に基づいて、2番目の部分を自己回帰的に生成することです。
- 以下は、タンパク質配列の補完の例です。
- 元の配列:MKAYVLINSRGP
- 「MKAYVL」をエンコーダに入力し、デコーダは、エンコーダが提供する最初の部分の表現を与えられた場合、2番目の部分「INSRGP」を出力するように訓練されます。
💻 使用例
基本的な使用法 - 埋め込み抽出
from transformers import T5ForConditionalGeneration, T5Tokenizer, T5EncoderModel
import torch
sequence = "MDTAYPREDTRAPTPSKAGAHTALTLGAPHPPPRDHLIWSVFSTLYLNLCCLGFLALAYSIKARDQKVVGDLEAARRFGSKAKCYNILAAMWTLVPPLLLLGLVVTGALHLARLAKDSAAFFSTKFDDADYD"
ckpt = "ElnaggarLab/ankh3-xl"
tokenizer = T5Tokenizer.from_pretrained(ckpt)
encoder_model = T5EncoderModel.from_pretrained(ckpt).eval()
nlu_sequence = "[NLU]" + sequence
encoded_nlu_sequence = tokenizer(nlu_sequence, add_special_tokens=True, return_tensors="pt", is_split_into_words=False)
with torch.no_grad():
embedding = encoder_model(**encoded_nlu_sequence)
高度な使用法 - 配列補完
from transformers import T5ForConditionalGeneration, T5Tokenizer
from transformers.generation import GenerationConfig
import torch
sequence = "MDTAYPREDTRAPTPSKAGAHTALTLGAPHPPPRDHLIWSVFSTLYLNLCCLGFLALAYSIKARDQKVVGDLEAARRFGSKAKCYNILAAMWTLVPPLLLLGLVVTGALHLARLAKDSAAFFSTKFDDADYD"
ckpt = "ElnaggarLab/ankh3-xl"
tokenizer = T5Tokenizer.from_pretrained(ckpt)
model = T5ForConditionalGeneration.from_pretrained(ckpt).eval()
half_length = int(len(sequence) * 0.5)
s2s_sequence = "[S2S]" + sequence[:half_length]
encoded_s2s_sequence = tokenizer(s2s_sequence, add_special_tokens=True, return_tensors="pt", is_split_into_words=False)
gen_config = GenerationConfig(min_length=half_length + 1, max_length=half_length + 1, do_sample=False, num_beams=1)
generated_sequence = model.generate(encoded_s2s_sequence["input_ids"], gen_config, )
predicted_sequence = sequence[:half_length] + tokenizer.batch_decode(generated_sequence)[0]
📄 ライセンス
このプロジェクトはcc - by - nc - sa - 4.0ライセンスの下で提供されています。