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!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

機械学習

3つの質問:大規模言語モデルについて、Jacob Andreasに聞く

CSAILの科学者は、最新の機械学習モデルを通じた自然言語処理の研究と、言語が他の種類の人工知能をどのように高めるかの調査...

AIテクノロジー

「LXTのテクノロジーバイスプレジデント、アムル・ヌール・エルディン - インタビューシリーズ」

アムル・ヌール・エルディンは、LXTのテクノロジー担当副社長ですアムルは、自動音声認識(ASR)の文脈での音声/音響処理と機...

人工知能

「スノーケルAIのCEO兼共同創設者、アレックス・ラットナー - インタビューシリーズ」

アレックス・ラトナーは、スタンフォードAIラボを母体とする会社、Snorkel AIのCEO兼共同創設者ですSnorkel AIは、手作業のAI...

人工知能

キャルレールの最高製品責任者、ライアン・ジョンソンへのインタビューシリーズ

ライアンは、初期のスタートアップからフォーチュン100の組織まで、多様なテクノロジーと製品開発のリーダーシップ経験を15年...

人工知能

「トリントの創設者兼CEO、ジェフ・コフマンへのインタビューシリーズ」

ジェフ・コーフマンは、ABC、CBS、CBCニュースで30年のキャリアを持った後、Trintの創設者兼CEOとなりましたジェフは手作業の...

人工知能

「ナレ・ヴァンダニャン、Ntropyの共同創設者兼CEO- インタビューシリーズ」

Ntropyの共同創設者兼CEOであるナレ・ヴァンダニアンは、開発者が100ミリ秒未満で超人的な精度で金融取引を解析することを可...