| --- |
| license: mit |
| language: |
| - en |
| - zh |
| tags: |
| - OneScience |
| - life-science |
| - protein |
| - antibody |
| - mutation |
| - inverse-folding |
| - structural-evolution |
| frameworks: PyTorch |
| --- |
| |
| <p align="center"> |
| <strong> |
| <span style="font-size: 30px;">Structural Evolution</span> |
| </strong> |
| </p> |
| |
| # Model Introduction |
|
|
| Structural Evolution is an unsupervised protein and antibody mutation recommendation workflow based on a structure-informed protein language model. It takes a PDB/CIF structure of a protein or protein complex as input, scores candidate mutation sequences under structural conditions with ESM-IF1, and selects high-probability substitutions from deep mutational scanning candidates to assist protein and antibody sequence optimization. |
|
|
| Paper: |
|
|
| > **Unsupervised evolution of protein and antibody complexes with a structure-informed language model** |
| > https://doi.org/10.1126/science.adk8946 |
|
|
| # Model Description |
|
|
| Structural Evolution uses the structure-conditioned language model ESM-IF1 to recommend mutations for a target chain in a given protein structure. The program first extracts the target chain's wild-type sequence from the input PDB/CIF and generates single-point deep mutational scanning candidates. It then calculates the log-likelihood of each candidate under a single-chain or multichain backbone condition and selects recommended mutations in descending score order. |
|
|
| # Use Cases |
|
|
| | Use case | Description | |
| | --- | --- | |
| | Single-point protein mutation recommendation | Select high-probability amino acid substitutions from structure information | |
| | Antibody sequence optimization | Recommend structure-conditioned mutations for antibody heavy and light chains separately | |
| | Protein complex optimization | Evaluate target-chain mutations in a multichain backbone context | |
| | Deep mutational scanning candidate screening | Score all single-point mutations and output high-scoring candidates | |
|
|
| # Usage |
|
|
| ## 1. Using OneCode |
|
|
| Experience intelligent one-click AI4S programming in the OneCode online environment: |
|
|
| [Try intelligent one-click AI4S programming](https://web-2069360198568017922-iaaj.ksai.scnet.cn:58043/home) |
|
|
| ## 2. Manual Installation and Usage |
|
|
| **Hardware Requirements** |
|
|
| - Structural Evolution supports inference on CPUs and GPUs. |
| - A GPU/DCU is recommended for ESM-IF1 inference to accelerate candidate sequence scoring. |
| - Larger protein complexes or larger mutation candidate libraries require more GPU/DCU memory and host memory. |
| - If no GPU/DCU is available, you can explicitly use the CPU with `--nogpu`, but execution will be significantly slower. |
|
|
| ### Set Up the Runtime Environment |
|
|
| #### DCU Environment |
|
|
| ```bash |
| # Activate DTK and CONDA first |
| conda create -n onescience311 python=3.11 -y |
| conda activate onescience311 |
| |
| # Install with uv support |
| pip install onescience[bio] \ |
| -i http://mirrors.onescience.ai:3141/pypi/simple/ \ |
| --trusted-host mirrors.onescience.ai |
| ``` |
|
|
| #### Environment Notes |
|
|
| - If you encounter missing dependencies or version incompatibilities during execution, refer to the dependency versions specified in `environment.yml` and install or adjust the relevant dependencies as needed. |
|
|
| ### Prepare the Weights |
|
|
| Complete Structural Evolution inference only requires the additional **ESM-IF1 model weights**. Standard mutation recommendation does not require downloading any additional training dataset from the paper. |
|
|
| #### 1) ESM-IF1 Model Weights |
|
|
| Download the ESM-IF1 weights: |
|
|
| ```text |
| https://zenodo.org/records/12631662 |
| ``` |
|
|
| Command: |
|
|
| ```bash |
| wget -P ~/.cache/torch/hub/checkpoints \ |
| https://zenodo.org/records/12631662/files/esm_if1_20220410.zip |
| |
| unzip ~/.cache/torch/hub/checkpoints/esm_if1_20220410.zip \ |
| -d ~/.cache/torch/hub/checkpoints/ |
| ``` |
|
|
| After extraction, make sure that the following file exists: |
|
|
| ```text |
| ~/.cache/torch/hub/checkpoints/ |
| └── esm_if1_20220410.pt |
| ``` |
|
|
| The file must exist. |
|
|
| `scripts/recommend.py` always loads the model from: |
|
|
| ```text |
| ~/.cache/torch/hub/checkpoints/esm_if1_20220410.pt |
| ``` |
|
|
| loads the model from this path. If you save the weights elsewhere, update the checkpoint path in the code. |
|
|
| ## 3. Quick Start |
|
|
| ### Download the Model Package |
|
|
| ```bash |
| hf download OneScience-Group/structural-evolution \ |
| --local-dir ./structural-evolution |
| |
| cd structural-evolution |
| ``` |
|
|
| - Structural Evolution additionally depends on the **ESM-IF1 model weights**. Prepare `esm_if1_20220410.pt` as described in "Prepare the Weights" and make sure that the checkpoint path in the code matches its actual location. |
|
|
| ### Quick Verification |
|
|
| View the inference options: |
|
|
| ```bash |
| python scripts/recommend.py --help |
| ``` |
|
|
| Run a quick verification with the official example structure: |
|
|
| ```bash |
| python scripts/recommend.py \ |
| scripts/examples/7mmo_abc_fvar.pdb \ |
| --chain A \ |
| --n 10 |
| ``` |
|
|
| # Example Data |
|
|
| The official repository provides an example structure in: |
|
|
| ```text |
| scripts/examples/ |
| ``` |
|
|
| The directory contains: |
|
|
| ```text |
| scripts/examples/ |
| └── 7mmo_abc_fvar.pdb |
| ``` |
|
|
| This structure contains the LYCoV-1404 antibody variable region and SARS-CoV-2 RBD, and demonstrates mutation recommendation for an antibody heavy chain. |
|
|
| For your own tasks, prepare: |
|
|
| ```text |
| PDB or CIF structure of a protein or protein complex |
| + |
| Target chain ID |
| ``` |
|
|
| For example: |
|
|
| ```text |
| structure.pdb |
| chain A |
| ``` |
|
|
| # Inference Examples |
|
|
| ## Basic Mutation Recommendation |
|
|
| The simplest way to run it is: |
|
|
| ```bash |
| python scripts/recommend.py \ |
| /path/to/structure.pdb \ |
| --chain A |
| ``` |
|
|
| Default output: |
|
|
| ```text |
| Top 10 mutations |
| maxrep = 1 |
| multichain backbone = True |
| ``` |
|
|
| This recommends 10 mutations by default and allows each original residue position to appear at most once. |
|
|
| ## Antibody Example |
|
|
| Official example: |
|
|
| ```bash |
| python scripts/recommend.py \ |
| scripts/examples/7mmo_abc_fvar.pdb \ |
| --chain A \ |
| --seqpath scripts/examples/7mmo_chainA_lib.fasta \ |
| --outpath scripts/examples/7mmo_chainA_scores.csv \ |
| --upperbound 109 \ |
| --offset 1 |
| ``` |
|
|
| Where: |
|
|
| | Parameter | Description | |
| | --- | --- | |
| | `--chain` | Target chain ID | |
| | `--seqpath` | Output path for the generated deep mutational scanning FASTA | |
| | `--outpath` | Output path for the CSV containing scores for all mutation candidates | |
| | `--n` | Number of mutations to recommend; default: 10 | |
| | `--maxrep` | Maximum number of times the same position may appear in the recommendations; default: 1 | |
| | `--upperbound` | During final recommendation, consider only positions below this residue number | |
| | `--offset` | Offset correction for PDB residue numbering | |
| | `--order` | Specify chain order in a multichain structure | |
| | `--multichain-backbone` | Use all chains as the structural context | |
| | `--singlechain-backbone` | Use only the target chain backbone | |
| | `--nogpu` | Force CPU execution | |
|
|
| In the antibody example above, `--chain A` specifies the heavy chain. `--upperbound 109` excludes mutations in the final framework region. Because the input structure lacks the first residue, `--offset 1` corrects the mutation numbering. |
|
|
| ## Customize the Number of Recommendations |
|
|
| For example, output the top 20 candidates and allow the same position to appear at most twice: |
|
|
| ```bash |
| python scripts/recommend.py \ |
| /path/to/your_structure.pdb \ |
| --chain A \ |
| --n 20 \ |
| --maxrep 2 |
| ``` |
|
|
| ## Single-Chain Backbone Condition |
|
|
| To use only the backbone information of the target chain: |
|
|
| ```bash |
| python scripts/recommend.py \ |
| /path/to/your_structure.pdb \ |
| --chain A \ |
| --singlechain-backbone |
| ``` |
|
|
| ## CPU Inference |
|
|
| ```bash |
| python scripts/recommend.py \ |
| /path/to/your_structure.pdb \ |
| --chain A \ |
| --nogpu |
| ``` |
|
|
| # Output Description |
|
|
| Structural Evolution first generates a complete single-point deep mutational scanning sequence library for the target chain in the input structure, then uses ESM-IF1 to calculate the structure-conditioned log-likelihood of each candidate sequence. |
|
|
| If the following options are not specified manually: |
|
|
| ```text |
| --seqpath |
| --outpath |
| ``` |
|
|
| the program automatically saves the results under `output/`. |
|
|
| The main outputs include: |
|
|
| ```text |
| *.fasta |
| *.csv |
| ``` |
|
|
| The files are: |
|
|
| | Output | Description | |
| | --- | --- | |
| | DMS FASTA | Contains the wild-type sequence and all single-point mutation candidates | |
| | scores CSV | Stores candidate sequences and their corresponding `log_likelihood` scores | |
| | Terminal output | Top-N recommended mutations sorted by `log_likelihood` | |
|
|
| Candidate sequences in the CSV are sorted by: |
|
|
| ```text |
| log_likelihood |
| ``` |
|
|
| in descending order, and recommended mutations are finally selected using parameters such as `n`, `maxrep`, and `upperbound`. |
|
|
| # Official OneScience Information |
|
|
| | Platform | Main OneScience repository | Skills repository | |
| | --- | --- | --- | |
| | Gitee | https://gitee.com/onescience-ai/onescience | https://gitee.com/onescience-ai/oneskills | |
| | GitHub | https://github.com/onescience-ai/OneScience | https://github.com/onescience-ai/oneskills | |
|
|
| # Citation and License |
|
|
| - Original Structural Evolution paper: [Unsupervised evolution of protein and antibody complexes with a structure-informed language model](https://doi.org/10.1126/science.adk8946). |
| - Structural Evolution is released under the **MIT License**, which permits use, copying, modification, publication, distribution, sublicensing, and commercial use provided that the copyright notice and license text are retained. See `LICENSE` in the repository root. |
| - Structural Evolution inference depends on ESM-IF1 and related ESM code. The MIT License of the Structural Evolution repository does not automatically cover third-party model weights or dependency resources. For commercial use, redistribution, or other purposes, also review the applicable ESM/ESM-IF1 licenses and model-weight terms of use. |
| - If you use this repository in research, cite the original Structural Evolution paper and, as appropriate, the related work on ESM-IF1 and other components actually used. |
|
|