使用ESM-2和EvoProtGrad进行蛋白质序列的体外定向进化

社区文章 发布于2023年11月13日

通过定向进化进行蛋白质工程一直是生物技术的基石,能够优化蛋白质用于工业、治疗和诊断应用。计算模型的出现,特别是像ESM-2这样的蛋白质语言模型,通过实现计算机定向进化彻底改变了这一领域。EvoProtGrad框架利用这些先进模型,可以快速探索和优化蛋白质序列,显著加速蛋白质设计过程。在这里,我们将讨论个体蛋白质以及相互作用蛋白质对的计算机定向进化,以期优化蛋白质-蛋白质相互作用。

image/png

引言

定向进化,一个模仿自然选择的过程,传统上是在体外或体内进行的,涉及生成大量蛋白质变体库,然后筛选所需性状。蛋白质语言模型(如ESM-2(进化尺度建模))的出现,促进了向计算机方法的转变。这些模型经过广泛的蛋白质序列数据库训练,对蛋白质语言有了深入理解,使其能够预测氨基酸序列的变化如何影响蛋白质结构和功能。

EvoProtGrad是一个Python框架,它集成了这些蛋白质语言模型,以进行计算机定向进化。它采用基于梯度的方法,利用ESM-2等模型的预测能力,迭代地突变蛋白质序列以达到优化状态。与传统方法相比,这种方法能够更有效地探索蛋白质序列空间。

单一蛋白质进化

第一种方法侧重于进化单一蛋白质序列。蛋白质序列最初被转换为FASTA格式,这是一种广泛使用的用于表示核苷酸或肽序列的文本格式。每个序列都以一个描述性行开头,以“>”开始,后面是后续行中的序列本身。

然后加载ESM-2模型及其tokenizer,作为定向进化的专家系统。该模型经过大量蛋白质序列数据预训练,理解氨基酸之间复杂的相互关系。tokenizer将蛋白质序列转换为ESM-2模型可以处理的格式。

定向进化是使用EvoProtGrad的DirectedEvolution类启动的,指定ESM-2模型作为专家。该过程涉及运行多个马尔可夫链蒙特卡罗(MCMC)步骤的并行链。每个链探索序列空间,在每个步骤中提出突变。然后EvoProtGrad框架根据专家模型的预测评估这些突变,接受可能改善所需蛋白质特征的突变。

!pip install evo_prot_grad -q
import evo_prot_grad
from transformers import AutoTokenizer, EsmForMaskedLM

def run_evo_prot_grad(raw_protein_sequence):
    # Convert raw protein sequence to the format expected by EvoProtGrad
    # Usually, protein sequences are handled in FASTA format, so we create a mock FASTA string
    fasta_format_sequence = f">Input_Sequence\n{raw_protein_sequence}"

    # Save the mock FASTA string to a temporary file
    temp_fasta_path = "temp_input_sequence.fasta"
    with open(temp_fasta_path, "w") as file:
        file.write(fasta_format_sequence)

    # Load the ESM-2 model and tokenizer as the expert
    esm2_expert = evo_prot_grad.get_expert(
        'esm',
        model=EsmForMaskedLM.from_pretrained("facebook/esm2_t30_150M_UR50D"),
        tokenizer=AutoTokenizer.from_pretrained("facebook/esm2_t30_150M_UR50D"),
        temperature=0.95,
        device='cuda'  # or 'cpu' if GPU is not available
    )

    # Initialize Directed Evolution with the ESM-2 expert
    directed_evolution = evo_prot_grad.DirectedEvolution(
        wt_fasta=temp_fasta_path,    # path to the temporary FASTA file
        output='best',               # can be 'best', 'last', or 'all' variants
        experts=[esm2_expert],       # list of experts, in this case only ESM-2
        parallel_chains=1,           # number of parallel chains to run
        n_steps=20,                  # number of MCMC steps per chain
        max_mutations=10,            # maximum number of mutations per variant
        verbose=True                 # print debug info
    )

    # Run the evolution process
    variants, scores = directed_evolution()

    # Process the results
    for variant, score in zip(variants, scores):
        print(f"Variant: {variant}, Score: {score}")

# Example usage
raw_protein_sequence = "MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKTRREAEDLQVGQVELGGGPGAGSLQPLALEGSLQKRGIVEQCCTSICSLYQLENYCN"  # Replace with your protein sequence
run_evo_prot_grad(raw_protein_sequence)

配对蛋白质进化

第二种方法将这种方法扩展到配对蛋白质序列,通过一个特定的标记(在这种情况下是20个'G'氨基酸组成的字符串)分隔。这个独特的连接子或接头允许同时进化两个蛋白质序列,同时保持它们的个体完整性和关系上下文。

与单一蛋白质进化类似,配对序列被格式化为FASTA样结构,用'G'氨基酸字符串替换':'分隔符。然后,这个修改后的序列进行定向进化过程,并保留'G'字符串区域以维持两个蛋白质序列之间的区别。

在进化过程中,突变在两个蛋白质序列中被提出和评估,同时考虑它们的组合上下文。保留区域确保突变不会破坏分隔符,从而保持配对格式的完整性。

结果与讨论

EvoProtGrad框架利用ESM-2,展示了一种新颖的蛋白质工程方法。通过模拟计算机中的自然进化过程,它允许快速探索巨大的序列空间。进化单一或配对蛋白质序列的能力为靶向个体蛋白质或蛋白质复合体提供了灵活性。

在配对蛋白质进化中使用“G”氨基酸串作为分隔符或“接头”是一个独特的旧概念(例如,参见蛋白质-蛋白质相互作用结构生物学中的接头)。它确保在进化过程中考虑蛋白质对之间的关系上下文,这对于相互作用或协同发挥作用的蛋白质至关重要。它也具有灵活性,当长度选择得当时,可以为我们提供一种使用仅在单一序列上训练过的模型来建模蛋白质-蛋白质复合物的方法。对连接的蛋白质对或复合物进行微调可能会提高性能,但我们将其留待未来的工作。

使用EvoProtGrad和ESM-2进行的计算机定向进化代表了蛋白质工程的重大进步。它提供了比传统方法更快、更具成本效益的替代方案,并有可能加速开发具有增强或新型功能的蛋白质。这种利用先进蛋白质语言模型力量的计算方法,有望成为蛋白质工程领域不可或缺的工具。

import evo_prot_grad
from transformers import AutoTokenizer, EsmForMaskedLM

def run_evo_prot_grad_on_paired_sequence(paired_protein_sequence):
    # Replace ':' with a string of 20 'G' amino acids
    separator = 'G' * 20
    sequence_with_separator = paired_protein_sequence.replace(':', separator)

    # Determine the start and end indices of the separator
    separator_start_index = sequence_with_separator.find(separator)
    separator_end_index = separator_start_index + len(separator)

    # Format the sequence into FASTA format
    fasta_format_sequence = f">Paired_Protein_Sequence\n{sequence_with_separator}"

    # Save the sequence to a temporary file
    temp_fasta_path = "temp_paired_sequence.fasta"
    with open(temp_fasta_path, "w") as file:
        file.write(fasta_format_sequence)

    # Load the ESM-2 model and tokenizer as the expert
    esm2_expert = evo_prot_grad.get_expert(
        'esm',
        model=EsmForMaskedLM.from_pretrained("facebook/esm2_t30_150M_UR50D"),
        tokenizer=AutoTokenizer.from_pretrained("facebook/esm2_t30_150M_UR50D"),
        temperature=0.95,
        device='cuda'  # or 'cpu' if GPU is not available
    )

    # Initialize Directed Evolution with the preserved separator region
    directed_evolution = evo_prot_grad.DirectedEvolution(
        wt_fasta=temp_fasta_path,
        output='best',
        experts=[esm2_expert],
        parallel_chains=1,
        n_steps=20,
        max_mutations=10,
        verbose=True,
        preserved_regions=[(separator_start_index, separator_end_index)]  # Preserve the 'G' amino acids string
    )

    # Run the evolution process
    variants, scores = directed_evolution()

    # Process the results, replacing the 'G' amino acids string back to ':'
    for variant, score in zip(variants, scores):
        evolved_sequence = variant.replace(separator, ':')
        print(f"Evolved Paired Sequence: {evolved_sequence}, Score: {score}")

# Example usage
paired_protein_sequence = "MLTEVMEVWHGLVIAVVSLFLQACFLTAINYLLSRHMAHKSEQILKAASLQVPRPSPGHHHPPAVKEMKETQTERDIPMSDSLYRHDSDTPSDSLDSSCSSPPACQATEDVDYTQVVFSDPGELKNDSPLDYENIKEITDYVNVNPERHKPSFWYFVNPALSEPAEYDQVAM:MASPGSGFWSFGSEDGSGDSENPGTARAWCQVAQKFTGGIGNKLCALLYGDAEKPAESGGSQPPRAAARKAACACDQKPCSCSKVDVNYAFLHATDLLPACDGERPTLAFLQDVMNILLQYVVKSFDRSTKVIDFHYPNELLQEYNWELADQPQNLEEILMHCQTTLKYAIKTGHPRYFNQLSTGLDMVGLAADWLTSTANTNMFTYEIAPVFVLLEYVTLKKMREIIGWPGGSGDGIFSPGGAISNMYAMMIARFKMFPEVKEKGMAALPRLIAFTSEHSHFSLKKGAAALGIGTDSVILIKCDERGKMIPSDLERRILEAKQKGFVPFLVSATAGTTVYGAFDPLLAVADICKKYKIWMHVDAAWGGGLLMSRKHKWKLSGVERANSVTWNPHKMMGVPLQCSALLVREEGLMQNCNQMHASYLFQQDKHYDLSYDTGDKALQCGRHVDVFKLWLMWRAKGTTGFEAHVDKCLELAEYLYNIIKNREGYEMVFDGKPQHTNVCFWYIPPSLRTLEDNEERMSRLSKVAPVIKARMMEYGTTMVSYQPLGDKVNFFRMVISNPAATHQDIDFLIEEIERLGQDL"  # Replace with your paired protein sequences
run_evo_prot_grad_on_paired_sequence(paired_protein_sequence)

使用计算机方法进化蛋白质序列对的实用性和用例

概述

由EvoProtGrad与ESM-2等框架促成的蛋白质序列对的计算机定向进化,在蛋白质工程和分子生物学领域具有重要实用价值。这种方法在两个或更多蛋白质相互作用或协同发挥作用的情况下特别有用,这在生物系统中是很常见的情景。共同进化这些蛋白质对可以带来在孤立进化单个蛋白质时可能无法实现的见解和发展。

关键用例

  1. 优化蛋白质-蛋白质相互作用:许多生物过程涉及多个蛋白质之间复杂的相互作用。共同进化蛋白质对可以产生具有增强结合亲和力或特异性的变体。这在药物设计中特别有价值,其中靶向蛋白质-蛋白质相互作用对于开发有效的治疗剂至关重要。

  2. 酶-底物对:酶通常与特定底物或辅助因子相互作用。共同进化酶-底物对可以优化这些相互作用,从而提高催化效率或改变底物特异性。这在工业生物催化和代谢工程中具有广泛的意义。

  3. 信号转导途径:信号转导途径中的蛋白质通常以成对或成组的形式工作。共同进化这些蛋白质有助于理解并可能修改信号通路,这在基础生物学研究和开发涉及信号功能障碍(如癌症)疾病的治疗方法中至关重要。

  4. 结构蛋白质复合物:结构生物学严重依赖于蛋白质亚基之间的相互作用。共同进化这些亚基可以导致形成具有所需结构特性的新型蛋白质复合物,这可以在材料科学和纳米技术中加以利用。

  5. 免疫学:在免疫系统中,抗体与特定抗原结合。共同进化抗体及其各自的抗原可以促进开发更有效的疫苗和免疫疗法。

计算机方法的优势

  1. 速度和效率:计算方法能够快速探索庞大的蛋白质序列空间,比实验方法快得多。

  2. 降低成本:计算机方法最大限度地减少了昂贵且耗时的实验室实验需求,尤其是在初步筛选阶段。

  3. 精确度:ESM-2等高级模型能够高精度预测突变的影响,从而实现更有针对性和高效的设计过程。

  4. 复杂系统探索:同时进化蛋白质对的能力允许探索实验中难以研究的复杂相互作用动力学。

利用计算方法进行蛋白质对的定向进化为蛋白质工程开辟了新途径,使得复杂生物相互作用的探索和优化成为可能。这种方法不仅对基础生物学研究大有裨益,而且在治疗学、工业生物技术和合成生物学等各种应用领域也蕴藏着巨大的潜力。将ESM-2等先进计算模型集成到EvoProtGrad等平台中,代表着我们工程设计和理解蛋白质复杂模式能力方面的重大飞跃。有关EvoProtGrad的更多信息,请访问文档GitHub仓库

社区

注册登录 发表评论