Hugging Face Spacesでタンパク質を可視化する
'Hugging Face Spacesでタンパク質の可視化'
この投稿では、Hugging Face Spacesでタンパク質を可視化する方法について見ていきます。
動機 🤗
タンパク質は、医薬品から洗剤まで私たちの生活に大きな影響を与えています。タンパク質の機械学習は、新しい興味深いタンパク質の設計を支援するための急速に成長している分野です。タンパク質は、主にアミノ酸と呼ばれる一連の構成要素を3D空間に配列して、タンパク質の機能を与える複雑な3Dオブジェクトです。機械学習の目的で、タンパク質は、例えば座標、グラフ、またはタンパク質言語モデルで使用するための1次元の文字列として表現することができます。
タンパク質の有名な機械学習モデルの一つにAlphaFold2があります。AlphaFold2は、類似のタンパク質の多重配列と構造モジュールを使用してタンパク質配列の構造を予測します。
AlphaFold2が登場して以来、OmegaFold、OpenFoldなど、さまざまなモデルが登場しました(詳細はこのリストやこのリストを参照)。
見ることは信じること
タンパク質の構造は、タンパク質の機能を理解する上で重要な要素です。現在、mol*や3dmol.jsなどのブラウザで直接タンパク質を可視化するためのツールがいくつか利用可能です。この投稿では、3Dmol.jsとHTMLブロックを使用して、Hugging Face Spaceに構造可視化を統合する方法を学びます。
必要条件
すでにgradio
Pythonパッケージがインストールされていること、およびJavascript / JQueryの基本的な知識を持っていることを確認してください。
コードの概要
3Dmol.jsのセットアップ方法に入る前に、インターフェースの最小機能デモを作成する方法を見てみましょう。
以下のコードは、4桁のPDBコードまたはPDBファイルを受け入れる簡単なデモアプリを作成します。アプリは、RCSB Protein Databankからpdbファイルを取得して表示するか、アップロードされたファイルを使用して表示します。
import gradio as gr
def update(inp, file):
# このシンプルな例では、pdbファイルを単純にRCSBから識別子を使用して取得するか、アップロードされたファイルを表示します
pdb_path = get_pdb(inp, file)
return molecule(pdb_path) # これはビューアーを含むiframeを返します
demo = gr.Blocks()
with demo:
gr.Markdown("# 3Dmol.jsを使用したPDBビューアー")
with gr.Row():
with gr.Box():
inp = gr.Textbox(
placeholder="PDBコードまたは下記でファイルをアップロード", label="入力構造"
)
file = gr.File(file_count="single")
btn = gr.Button("構造を表示")
mol = gr.HTML()
btn.click(fn=update, inputs=[inp, file], outputs=mol)
demo.launch()
update
: これはプロテインの処理を行い、ビューアーを含むiframe
を返す関数です
また、get_pdb
関数もシンプルです:
import os
def get_pdb(pdb_code="", filepath=""):
if pdb_code is None or len(pdb_code) != 4:
try:
return filepath.name
except AttributeError as e:
return None
else:
os.system(f"wget -qnc https://files.rcsb.org/view/{pdb_code}.pdb")
return f"{pdb_code}.pdb"
では、Gradioには3Dmolが直接利用可能なブロックとして存在しないため、プロテインをどのように可視化するのでしょうか?これにはiframe
を使用します。
概念的には、プロテインの可視化を返すmolecule
関数は次のようになります:
def molecule(input_pdb):
mol = read_mol(input_pdb)
# HTMLドキュメントのセットアップ
x = ("""<!DOCTYPE html><html> [..] </html>""") # この入力では'を使用しないでください
return f"""<iframe [..] srcdoc='{x}'></iframe>
これはセットアップが少し手間がかかりますが、現代のブラウザのセキュリティルールのために必要です。
3Dmol.jsのセットアップは非常に簡単で、ドキュメントにはいくつかの例が提供されています。
返されるドキュメントのhead
には、3Dmol.jsをロードする必要があります(これにより、JQueryもロードされます)。
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<style>
.mol-container {
width: 100%;
height: 700px;
position: relative;
}
.mol-container select{
background-image:None;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js" integrity="sha512-STof4xm1wgkfm7heWqFJVn58Hm3EtS31XFaagaa8VMReCXAkQnJZ+jEy8PCC/iT18dFy95WcExNHFTqLyp72eQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://3Dmol.csb.pitt.edu/build/3Dmol-min.js"></script>
</head>
.mol-container
のスタイルは、分子ビューアのサイズを変更するために使用できます。
body
は以下のようになります:
<body>
<div id="container" class="mol-container"></div>
<script>
let pdb = mol // molはPDBファイルの内容を含んでいます。完全なPythonコードについてはhf.space/simonduerr/3dmol.jsを確認してください。
$(document).ready(function () {
let element = $("#container");
let config = { backgroundColor: "white" };
let viewer = $3Dmol.createViewer(element, config);
viewer.addModel(pdb, "pdb");
viewer.getModel(0).setStyle({}, { cartoon: { colorscheme:"whiteCarbon" } });
viewer.zoomTo();
viewer.render();
viewer.zoom(0.8, 2000);
})
</script>
</body>
テンプレートリテラル(バックティックで示される)を使用して、PDBファイルをHTMLドキュメントに直接格納し、それを3dmol.jsを使用して出力します。
以上です。お気に入りのタンパク質MLモデルを楽しく簡単に使用できるGradioアプリに組み合わせて、予測されたまたは再設計された構造を直接視覚化することができます。構造の特性(例:各アミノ酸がリガンドに結合する可能性)を予測する場合、3Dmol.jsでは各原子のプロパティに基づいたカスタムのcolorfunc
の使用も可能です。
完全なコードについては、3Dmol.jsのスペースのソースコードを確認できます。
本番の例については、ProteinMPNNスペースを確認してください。ユーザーはバックボーンをアップロードし、逆折り畳みモデルProteinMPNNが新しい最適な配列を予測し、その後、予測されたすべての配列に対してAlphaFold2を実行して、初期の入力バックボーンが採用されるかどうかを検証することができます。AlphaFold2によって予測された構造と同様の構造を、高いpLDDTスコアで定性的に採用する成功した再設計は、実験室でテストする必要があります。
Gradio/HFスペースで3Dmol.jsの統合に問題がある場合は、hf.space/simonduerr/3dmol.jsでディスカッションを開いてください。
3Dmol.jsの設定に問題がある場合は、開発者に質問する必要がありますので、3Dmol.jsのIssueを開いて問題を説明してください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles