この記事では、EvoProtGradというツールを通して、タンパク質言語モデルを利用した指向性進化について紹介します。この記事を読むことで、コンピュータ上でタンパク質のアミノ酸配列に変異加えて、より高機能な変異体を探索する方法を学べます。ぜひトライしてみてください!
macOS Ventura(13.2.1), Google Colaboratory
自宅でできるin silico創薬の技術書を販売中
新薬探索を試したい方必読!
ITエンジニアである著者の視点から、wetな研究者からもdryの創薬研究をわかりやすく身近に感じられるように解説しています
宣伝
こちらの記事は合成生物学大会iGEMの強豪校であるiGEM-Wasedaさん協力のもと執筆されました。ご協力誠にありがとうございます!
【iGEM-Waseda】は合成生物学の研究を行う早稲田大学の学術サークルです。iGEMと呼ばれる合成生物学の世界大会の世界大会に出場するために日々研究に励んでいらっしゃいます。
本記事では、iGEM2024で日本Undergrad部門で史上初のTOP10に選ばれたプロジェクトの一環として、特にIn Silicoシミュレーションに関わる部分のツールの一部を紹介しています。プロジェクトの詳細については、iGEM-Wasedaの成果報告サイトをご覧いただければ幸いです。
タンパク質言語モデルとは
タンパク質言語モデルとは、自然言語処理(NLP)の技術をタンパク質のアミノ酸配列に応用し、タンパク質の機能や構造を予測するためのAIモデルです。
自然言語の文章が単語の連なりとして意味を持つのと同様に、タンパク質のアミノ酸配列も特定のパターンが機能や形状に関与しています。これを「言語」と見なし、モデルが配列データを解析することで、未知のタンパク質の構造や機能を予測することが可能です。
タンパク質の折りたたみ方、活性部位、さらには突然変異がどのように機能に影響を与えるかなどを理解できるため、新薬の開発や病気の治療、バイオテクノロジー分野での応用が期待されています。この技術により、生命科学分野での研究効率が飛躍的に向上すると考えられています。
MCMCとは
MCMC(マルコフ連鎖モンテカルロ法)は、複雑な確率分布からサンプルを得る手法です。これを理解するために、まず「マルコフ連鎖」と「モンテカルロ法」を説明します。
マルコフ連鎖は、現在の状態のみを基に次の状態が決まる一連の遷移過程です。例として迷路探索を考えると、現在いる部屋(状態)から次に移動する部屋は、現在の部屋に依存し、以前の部屋は関係ありません。
モンテカルロ法は、確率的な試行を繰り返し、問題の近似解を求める方法です。ランダムな試行を繰り返すことで、全体の傾向を統計的に推測します。サイコロを多数振ってその平均を計算するのがその例です。
MCMCはこれらを組み合わせ、ランダムに状態を移動しながら確率分布に従ったサンプルを収集します。例えば、高い確率(山の高い部分)では多くのサンプルを取り、低い確率では少なく取ります。
指向性進化とは
指向性進化法(Directed Evolution)は、自然界で見られる進化や淘汰の仕組みを模倣し、タンパク質の機能を人為的に向上させるための実験的な手法です。ここで言う機能は、酵素活性、熱安定性、基質特異性などを指します。
指向性進化では、ランダムに変異を導入し、遺伝子発現を行い、目的とする機能が向上した変異体をスクリーニングで絞り込み、再度変異を導入するようなサイクルを繰り返します。
変異導入と評価実験を繰り返すため、多くの時間やコストがかかるという課題があります。そこで、近年では機械学習を指向性進化に取り入れた MLDE (Machine-learning-guided Directed Evolution) が提案されています。
EvoProtGradとは
EvoProtGradは、コンピュータ上で指向性進化を行うことを可能にするPythonベースのフレームワークです。EvoProtGradでは、Hugging Faceなどで公開されている事前学習済み機械学習モデルをExperts(専門家)として扱い、その出力をスコアとして利用します。
変異導入を繰り返しては、Expertsでスコアを評価し、”山を登る”ようなイメージで、スコアが高い方向に配列を変異していきます。
今回のチュートリアルでは扱いませんが、EvoProtGradでは複数のExpertsのスコアの積を利用できます。例えば、教師ありモデルとタンパク質言語モデルを組み合わせるような、複数のモデルのいいとこ取りができます。
教師ありモデルは、特定の機能や特性を予測するために使用され、タンパク質言語モデルは、進化的に観察される配列の「自然さ」を学習しています。この2つを組み合わせることで、特定の機能を持ちながらも進化的に妥当な、高性能なタンパク質を探索することが可能になります。
詳しくは以下のアニメーションをご覧ください。参考
EvoProtGradを利用したタンパク質の進化
早速EvoProtGradを用いてタンパク質の指向性進化を行ってみましょう!
こちらからGoogle Colaboratoryのページに飛んでください。
今回はExpertとしてESMと呼ばれるタンパク質言語モデルを利用し、黄緑色蛍光タンパク質のGFP_AEQVIの変異体を設計します。今回はタンパク質言語モデルのみを使っているので、ご注意ください。上記のF(x)とG(x)のF(x)のみを行っています。
GPUの設定
まずは、GPUを使えるようにしましょう。
1. Google Colaboratory(以下Colab)の上部メニューから 「Runtime」(ランタイム)をクリックし、「Change runtime type」(ランタイムのタイプを変更)を選択します。
2. GPUの選択 「Change runtime type」のダイアログボックスが表示されたら、 「Hardware accelerator」から 「v2-8 TPU」 を選びます。(「v2-8 TPU」を設定し、実行中にクラッシュする場合は、T4 GPUに変更してみてください。) 設定を確認したら、「Save」(保存)をクリックします。
エラーの解決
では、コードを実行していきましょう。
コードのセルをCtrl
+Enter
で上から実行していってください。
Protein Language Model expert selectorの箇所でエラー発生すると思います。これはget_expert()
に渡す引数に必須のscoring_strategy
が渡されていないことが原因です。
コードの表示をクリックし、 以下のコード置き換えてください。
変更前:
#@title <b><font color='#56b4e9'> Protein Language Model expert selector </font></b>
protein_language_model_expert = 'bert' # @param ["esm", "bert", "causallm"] {allow-input: true}
変更後:
#@title <b><font color='#56b4e9'> Protein Language Model expert selector </font></b>
protein_language_model_expert = 'esm' # @param ["esm", "bert", "causallm"] {allow-input: true}
# 変更点
expert = evo_prot_grad.get_expert(
expert_name=protein_language_model_expert,
scoring_strategy='mutant_marginal', # 追加部分
temperature=1.0
)
また、protein_language_model_expert
の部分を’bert’
から’esm’
に変更しています。これは’esm’
の方がより少ないGPU資源でも実行できるためです。
再度実行すると、以下のように表示されます。
最終的な実行結果は以下のように、変異配列とスコアが表示されます。赤色の部分が変異を加えた箇所です。
コードの詳細な説明
先ほど実行したコードを詳しく解説していきます。
1. ライブラリのインストール
PRELIMINARY OPERATIONS: Setup environment and dependencies
のパートではEvoprotgradライブラリのインストールを行なっています。Colablatory特有の記法が使われてややわかりにくいですが、解説していきます。
#@title <b><font color='#56b4e9'>PRELIMINARY OPERATIONS</font>: Setup enviroment and dependencies</b>
#@markdown Run this cell to install the required enviroment and dependencies
#@markdown **N.B: This cell should be run only ONCE at the START of the notebook.**
! rm -r sample_data
# install dependencies present in pip
! pip install evo_prot_grad &> /dev/null
#@title
と#@markdown
の行について- Colab特有のタグで、セルのタイトルや注釈(マークダウン表示)を定義しています。
PRELIMINARY OPERATIONS: Setup environment and dependencies
というタイトルと、その下の説明文がマークダウンとして表示されるようになっています。- 「Run this cell to install the required environment and dependencies」は利用者への注意書きで、「最初に一度だけセルを実行してね」という意図を伝えています。
! rm -r sample_data
!
を先頭につけることで、Pythonコードではなくシェルコマンドを実行できます。- ここでは、Colab のデフォルトで含まれている
sample_data
フォルダを再帰的に削除(r
)しています。 - 不要なサンプルデータを削除することで、クリーンな環境を確保し、不要ファイルによる混乱を防止しています。
! pip install evo_prot_grad &> /dev/null
- 同じくシェルコマンドを利用し、Pythonのパッケージ管理ツール
pip
でevo_prot_grad
をインストールしています。 &> /dev/null
は標準出力やエラー出力をすべて捨てる(表示しない)ためのリダイレクトです。- インストールログや警告文が表示されるのを抑制し、ノートブックの可読性を保ちたい場合に用いられる書き方です。
- 実際にエラーが出ても見逃してしまう可能性があるため、トラブルシュートのときは取り外して実行することをおすすめします。
- 同じくシェルコマンドを利用し、Pythonのパッケージ管理ツール
2. ライブラリのインポート
PRELIMINARY OPERATIONS: Import python library
のパートではEvoprotgradライブラリのインポートを行なっています。Colablatory特有の記法が使われてややわかりにくいですが、解説していきます。
#@title <b><font color='#56b4e9'>PRELIMINARY OPERATIONS</font>: Import python library</b>
#@markdown **N.B: This cell only needs to be run ONCE at the START of the notebook.**
import evo_prot_grad
#@title
と#@markdown
- これらはColabに特有の注釈やタイトル設定用のタグです。
- “PRELIMINARY OPERATIONS” というタイトルと “このセルはノートブックの最初に一度だけ実行すればよい” という注意書き(マークダウン文)を表示しています。
import evo_prot_grad
- 先ほどインストールした EvoProtGrad ライブラリをPython環境に読み込みます。
- これによって、ノートブック内で
evo_prot_grad
の関数やクラスを自由に呼び出せるようになります。
コードのポイント
#@title <b><font color='#56b4e9'> Wildtype protein sequence upload</font></b>
- Colab特有の形式で、セルに**見出し(タイトル)**を付けるためのタグです。
- セルを展開・折りたたみしたり、わかりやすく整理するために使用されます。
wildtype_sequence = 'SKGEELF...
- ここで、単一文字表記のアミノ酸配列を Python の文字列として
wildtype_sequence
変数に格納しています。 - 例:
S
はセリン (Ser),K
はリシン (Lys),G
はグリシン (Gly) のように、アルファベット一文字で各アミノ酸を表します。
- ここで、単一文字表記のアミノ酸配列を Python の文字列として
3. タンパク質言語モデルの選択
**Protein Language Model expert selector
**のパートでは使用するタンパク質言語モデルの設定を行います。ここはエラーが起こった箇所なので、詳しく解説していきます。
#@title <b><font color='#56b4e9'> Protein Language Model expert selector </font></b>
protein_language_model_expert = 'esm' # @param ["esm", "bert", "causallm"] {allow-input: true}
- 使用するタンパク質言語モデルの種類を選択する変数です。
'esm'
,'bert'
,'causallm'
の中から選択可能です'esm'
はFacebookの提供するESM(Evolutionary Scale Modeling)シリーズのモデルを使用します(デフォルトはfacebook/esm2_t6_8M_UR50D
)。'bert’
はRostLabの提供するBERTモデル(デフォルトはRostlab/prot_bert
)。'causallm'
はLightOn AIの提供する因果推論言語モデル(デフォルトはlightonai/RITA_s
)- 今回はGPU資源が比較的に少ない
'esm'
を使用しました - より詳しい引数の設定に関してはこちらのドキュメントをご覧ください。
expert = evo_prot_grad.get_expert(
expert_name=protein_language_model_expert,
scoring_strategy='mutant_marginal', # 追加部分
temperature=1.0
)
- EvoProtGradで提供されている関数
get_expert()
を使って、タンパク質言語モデルを「Expert」として呼び出す部分です。いかにその引数の説明を行います。
expert_name=protein_language_model_expert,
- EvoProtGradで使用するタンパク質言語モデルの種類を指定しています。
'esm'
,'bert'
,'causallm'
の中から選択可能で、先ほど定義したprotein_language_model_expert
を渡しています。
scoring_strategy='mutant_marginal'
- アミノ酸配列をどのように評価(スコアリング)するかを決めるオプションです。
attribute_value
、pseudolikelihood_ratio
、mutant_marginal
から選択できます。詳しくはこちらのソースコードをご覧ください。 mutant_marginal
は、変異部位をマスクした際に、タンパク質言語モデルが変異配列の残基を予測する確率 $P_{mt}$ と野生型配列の残基を予測する確率 $P_{wt}$の対数尤度の差 $log{P_{mt}}-log{P_{mt}}$ をスコアとして利用しているものです。これによって変異がどれくらい「自然か」を評価できます。
- アミノ酸配列をどのように評価(スコアリング)するかを決めるオプションです。
temperature=1.0
- スコアリングの際に用いる「確率分布の鋭さ」を調節するパラメータです。
- この値が大きいほど分布が広がり、変異の多様性が増す(大胆な変異が入りやすくなる)反面、あまりにも大きいとノイズが増えすぎる可能性があります。
4. サンプラーの設定と実行
Pipeline SAMPLER
のパートでは、先ほど設定したExpertとアミノ酸配列に対して、指向性進化を実施していきます。以下でコードを詳しく解説します。
variants, scores = evo_prot_grad.DirectedEvolution(
wt_protein = wildtype_sequence, # 野生型配列
output = 'best', # 出力形式(最良の結果を取得)
experts = [expert], # モデル(Expert)のリスト
parallel_chains = 2, # 並列チェーンの数
n_steps = 100, # MCMCのステップ数
max_mutations = -1, # 最大変異数(-1は無制限)
preserved_regions = None, # 保護領域(指定なし)
verbose = False # デバッグ情報の表示有無
)
wt_protein
: 野生型タンパク質配列を指定します。ここではwildtype_sequence
に格納された配列が使用されています。output
: 結果の出力形式を指定します。'best'
では最良の結果のみを返します。他に'all'
や'last'
を指定することも可能です。experts
: タンパク質言語モデル(Expert)のリストです。事前に設定されたexpert
変数が渡されています。parallel_chains
: 並列実行するMCMCチェーンの数です。ここでは2本を指定しています。n_steps
: MCMCのステップ数を指定します。ここでは100ステップで変異を生成します。max_mutations
: 1ステップで導入できる変異数の上限を指定します。-1
は無制限を意味します。preserved_regions
: 配列の保護領域(変異させたくない部分)を指定します。None
の場合、すべての領域が変異対象になります。verbose
: デバッグ情報の表示オプションです。False
に設定されているため、冗長な出力は抑制されます。
wtseq = ''.join(wildtype_sequence.strip())
for v, s in zip(variants, scores):
evo_prot_grad.common.utils.print_variant_in_color(v, wtseq)
print(s)
wtseq
: 野生型配列を文字列形式に整形しています。for v, s in zip(variants, scores):
: 変異配列(variants
)とスコア(scores
)を1つずつ取り出して処理します。print_variant_in_color()
: 野生型配列と変異配列の違いを色付きで表示する関数です。print(s)
: それぞれの変異配列に対応するスコアを出力します。
最後に
今回は、Expertとしてタンパク質言語モデルを活用しましたが、Evoprogradの真価は、Hugging Faceを通じて提供される複数の機械学習モデルを自由に組み合わせられる点にあります。お好きなタンパク質とタンパク質の機能を評価できる機械学習モデルを選べば、その機能を進化させることができるかもしれません。ぜひトライしてみてください!
参考文献
EvoProtGrad (github) https://github.com/NREL/EvoProtGrad
Plug & play directed evolution of proteins with gradient-based discrete MCMC (EvoProtGrad論文) https://iopscience.iop.org/article/10.1088/2632-2153/accacd
自宅でできるin silico創薬の技術書を販売中
新薬探索を試したい方必読!
ITエンジニアである著者の視点から、wetな研究者からもdryの創薬研究をわかりやすく身近に感じられるように解説しています