この記事ではESM3を利用したタンパク質の設計を扱います。この記事を理解することでコンピュータ上でタンパク質の変異体設計が可能になります。ぜひトライしてみてください!
macOS Ventura(13.2.1), Windows 11 version 23H2, Google Colaboratory
自宅でできるin silico創薬の技術書を販売中
新薬探索を試したい方必読!
ITエンジニアである著者の視点から、wetな研究者からもdryの創薬研究をわかりやすく身近に感じられるように解説しています
宣伝
こちらの記事は合成生物学大会iGEMの強豪校であるiGEM-Wasedaさん協力のもと執筆されました。ご協力誠にありがとうございます!
【iGEM-Waseda】は合成生物学の研究を行う早稲田大学の学術サークルです。iGEMと呼ばれる合成生物学の世界大会の世界大会に出場するために日々研究に励んでいらっしゃいます。
本記事では、iGEM2024で日本Undergrad部門で史上初のTOP10に選ばれたプロジェクトの一環として、特にIn Silicoシミュレーションに関わる部分のツールの一部を紹介しています。プロジェクトの詳細については、iGEM-Wasedaの成果報告サイトをご覧いただければ幸いです。
タンパク質言語モデルとは
タンパク質言語モデルとは、自然言語処理(NLP)の技術をタンパク質のアミノ酸配列に応用し、タンパク質の機能や構造を予測するためのAIモデルです。
自然言語の文章が単語の連なりとして意味を持つのと同様に、タンパク質のアミノ酸配列も特定のパターンが機能や形状に関与しています。これを「言語」と見なし、モデルが配列データを解析することで、未知のタンパク質の構造や機能を予測することが可能です。
タンパク質の折りたたみ方、活性部位、さらには突然変異がどのように機能に影響を与えるかなどを理解できるため、新薬の開発や病気の治療、バイオテクノロジー分野での応用が期待されています。この技術により、生命科学分野での研究効率が飛躍的に向上すると考えられています。
ESM3とは
ESM3(Evolutionary Scale Modeling 3)は、EvolutionaryScale社が開発したタンパク質言語モデルの一種で、アミノ酸配列からタンパク質の構造や機能を高精度に予測するためのAIモデルです。ESM3は、従来の手法よりも多くの進化的情報を取り込むことで、タンパク質の配列データを深く理解し、進化的類似性を活用して機能や構造の予測精度を向上させています。このモデルは、数億のアミノ酸配列を訓練データとして使用し、未知のタンパク質の機能予測や新しい生物学的発見に貢献します。
特に、ESM3はタンパク質の折りたたみや変異解析において優れた性能を発揮し、新薬の開発や病気の原因解明など、多くのバイオメディカル応用が期待されています。進化的スケールでのデータを解析する能力により、ESM3は生命科学分野における強力なツールとして注目されています。
ESM3を利用したタンパク質の設計
早速 ESM3を利用したタンパク質の設計をやっていきましょう!
まずはこちらからGoogle Colaboratoryのページに飛んでください。
この記事ではLet’s construct a prompt for ESM3, focusing on the task of scaffolding a motif from a natural proteinの箇所を解説します。
次に、Google ColaboratoryでGPUを使えるようにしておきましょう。ランタイム→ランタイムのタイプを変更→T4 GPUで設定できます。
コードのセルはCtrl
+Enter
で上から実行していってください。
Tokenの取得
以下のセルではエラーになると思います。
これを解決するために、まず今回使用するモデルの以下のサイト行き、利用規約に同意してください。
EvolutionaryScale/esm3-sm-open-v1 · Hugging Face
その後、
your Hugging Face tokens page
からhuggingfaceのサイトに行き、tokenを取得し、再度実行してみてください。
以下のサイトにアクセスして、hugging face tokenを生成
https://huggingface.co/settings/tokens
Token Nameを作成し、チェックボックスは入れない。例ではesm-tokenとしていています。
「Repositories permissions」の項目で「esm3-sm-open-v1」を選択し、「Read access to contents of selected repos」にチェックを入れてください。
Create Tokenをクリックしてください。
Copyをクリックし、トークンをコピーしてください。
エラー箇所のTokenのところに貼り付けて、loginを押してください。(背景の黒色は関係ないので、無視してください)
これらの操作を行い、再度実行するとうまくできると思います!
DPP IV変異体の設計
今回は例として血糖値を調節するために関与するヒトの酵素「ジペプチジルペプチダーゼ4(DPP IV)」の変異体を設計します。タンパク質中の一部のアミノ酸配列を変更して新しい変異体を設計してみます。
このタンパク質のPDB IDである2I78
をpdb_id
に代入します。今回はBの鎖を用いるので鎖IDであるBをchain_id
に代入します。その後ProteinChainクラスのfrom_rcsb()
関数を用いてrenal_dipep_chain
にタンパク質の情報を渡しています。または、ProteinChain.from_pdb()
関数の引数に自分で用意したPDBファイル名を指定することでrenal_dipep_chain
にタンパク質の情報を渡します。
ProteinChainクラスは、タンパク質の構造を簡単に扱うためのクラスです。
ここで、生成したタンパク質をpy3Dmolライブラリを使って視覚化する方法を紹介します。
表示する範囲をwidth, heightで指定します。あとはここにあるコードのままで大丈夫です。
これを実行すれば、以下のようにタンパク質の立体構造が可視化されます。
それでは早速ESM3を使ってジペプチジルペプチダーゼ4の変異体のアミノ酸配列とその立体構造を生成させてみましょう。
Google Colaboratoryのページに飛んだ時に表示されているサンプルコードでは、motif_inds
にア変異を加えたくない箇所を、アミノ酸番号から1を引いた値で指定しています。
しかし、今回は少し違った方法でやってみます。
変異を加えたい箇所をアミノ酸番号から1を引いた値で指定します。ここではジペプチジルペプチダーゼ4の615-630番のアミノ酸に対して変異を加えようとしています。motif_ids = np.arrange(614, 630)
と変更してみてください。
なお、アミノ酸番号から-1する理由は、アミノ酸番号は1から始まりますがnumpy配列は0から始まるためです。
これは配列を変えた場所をpy3Dmolでわかりやすく視覚化するためのコードです。今回の例では変更されない箇所を灰色、変更される箇所を青で色付けしています。
次に、ESMProteinクラスを使って、ESM3に変異体設計を指示するプロンプトを作成します。
元々以下のコードだった箇所を変更しています。
以下のように変更してください。
prompt_length = len(renal_dipep_chain.sequence)
mask_length = len(motif_sequence)
sequence_prompt = renal_dipep_chain.sequence
sequence_prompt = sequence_prompt.replace(motif_sequence, mask_length*"_")
sequence_prompt = "".join(sequence_prompt)
print("Sequence prompt: ", sequence_prompt)
print("Length of sequence prompt: ", len(sequence_prompt))
structure_prompt = torch.from_numpy(renal_dipep_chain.atom37_positions).clone()
structure_prompt[614:614+mask_length] = torch.full((mask_length, 37, 3), torch.nan)
print("Structure prompt shape: ", structure_prompt.shape)
print("Indices with structure conditioning: ", torch.where(torch.isnan(structure_prompt).any(dim=-1).all(dim=-1))[0].tolist())
# Finally, we can use the ESMProtein class to compose the sequence and structure prompts into a single prompt that can be passed to ESM3
protein_prompt = ESMProtein(sequence=sequence_prompt, coordinates=structure_prompt)
prompt_length
にプロンプトとして用いるアミノ酸配列の長さを指定します。mask_length
に変異を加えたいアミノ酸配列の長さを指定します。
今回はprompt_length
にlen(renal_dipep_chain.sequence)
を指定し、プロンプトをジペプチジルペプチダーゼ4のB鎖全体としました。
そして11行目のstructure_prompt
の[]
内に変異を加えたい箇所のスタート地点をアミノ酸番号-1
で指定します。今回変異を加えたいのは615番からなのでそれを-1して614としています。
これを実行すると変異を加えたい箇所が_で、変異を加えたくない箇所はアミノ酸配列を表すアルファベットになっている配列が出力されます。
このような出力が表示されます。
変異を加えたい箇所が_で、変異を加えたくない箇所はアミノ酸配列を表すアルファベットになっている配列が出力されました!
次にこのコードを実行するとESM3が先ほど_となっていた箇所に変異を加えた配列を生成します。
このコードの出力結果です。プロンプト(元々の配列)と生成された配列が両方とも表示されています。
変異を加えたかった箇所に対してESM3がアミノ酸配列を生成していることが確認できます。
そしてこのコードを実行すればESM3がタンパク質の立体構造を生成します。
最後にこのコードを実行することで生成されたタンパク質の変異体がpy3Dmolで可視化されます。
右が生成されたタンパク質で左が元のタンパク質です。水色で示されているのが変異を加えた箇所です。
このようにしてESM3でタンパク質の変異体を生成することができました!
最後に
このGoogleColabでは他にもSecondary Structure Editing Example: Helix ShorteningやSASA Editing Example: Exposing a buried helixもあります。これらを用いることでタンパク質二次構造の編集や同じタンパク質二次構造を持つような変異設計など、より高度なことができるようになります。ぜひトライしてみてください!
参考文献
Evolutionary Scale · ESM3: Simulating 500 million years of evolution with a language model