Rosetta评分函数在结合亲和力预测中的应用 - 第1节

Rosetta 是什么?先聊聊它的定位

Rosetta 这个软件套件,说白了就是一把瑞士军刀。专门用来处理蛋白质、核酸、小分子这类生物大分子的结构和相互作用。我个人最开始接触它的时候,其实挺头疼的——它不像有些商业软件那样点开就能用。它的设计哲学是:给你一套底层工具,你自己搭积木。

Rosetta 的核心是两个东西:能量函数 和 采样算法。能量函数告诉你一个结构好不好,采样算法帮你去找到那个好的结构。这有点像在爬山,能量函数是海拔高度,采样算法是找路的方法。

Rosetta 能做什么?

应用领域其实挺广的。我简单列几个我实际用过的:

  • 蛋白质结构预测:从氨基酸序列猜三维结构。Rosetta 在 CASP 比赛里成绩一直不错。
  • 蛋白质设计:反过来,你想要一个功能,Rosetta 帮你算需要什么序列。我在抗体优化项目里试过,效果还行。
  • 蛋白-小分子对接:这就是咱们这门课的重点——结合亲和力预测。
  • 蛋白-蛋白相互作用:解析两个蛋白怎么抱在一起的。
  • 酶设计:这个难度最大,我试过但没成功过,哈哈。
我的一点体会: Rosetta 最强大的地方不是某个单项,而是你能把它的模块串起来。比如先用对接预测结合模式,再用设计优化界面序列,最后用评分函数评估亲和力。这套管道很多顶刊文章都在用。

一个核心概念:评分函数是它的灵魂

说到评分函数,其实它就是 Rosetta 判断“这个结构好不好”的标准。Rosetta 的评分函数不长这样:

total_score = 
  Lennard_Jones_attractive +   // 范德华吸引力
  Lennard_Jones_repulsive +    // 范德华排斥力
  solvation +                  // 溶剂化能
  hydrogen_bonding +           // 氢键
  electrostatics +             // 静电作用
  rotamer_probability +        // 侧链构象偏好
  reference_energy             // 参考态能量

你可以看到,Rosetta 把物理相互作用拆成了一个个项,然后加权求和。为什么要这么做?因为这样你就能知道——哪个地方贡献大,哪个地方出问题了。我在某个项目里发现结合亲和力预测偏差很大,一拆项才发现是氢键项的参数有问题,换成新版的 ref2015 立刻就好了。

这就是 Rosetta 的一个核心理念:可解释性。它不搞黑箱,每个项都有物理意义。

Rosetta 的历史与发展

Rosetta 这个项目最早是 1998 年左右,由 David Baker 教授在华盛顿大学开始的。我当年读博的时候,Rosetta 还只是个装在一张 CD 上的代码包,现在是 GitHub 上几十万行代码的大工程。简单梳理一下时间线:

年份 里程碑 我的记忆点
1998 Rosetta 诞生,最初做 de novo 结构预测 那时候还没有评分函数,用的是知识势能
2003 RosettaDesign 发布,开始做蛋白质设计 我导师说:“设计比预测有意思多了”
2010 Rosetta3 重构,模块化架构上线 那时候开始用 XML 写脚本,我被虐得够呛
2015 ref2015 评分函数成为黄金标准 这个版本我参与了测试,参数调整花了大半年
2018 PyRosetta 大规模推广,开始有 Python 接口 做项目效率提高了一个数量级
2021 Rosetta 进入深度学习时代,结合神经网络 我现在主力在用这个版本
至今 持续迭代,社区活跃,GitHub 上万人参与 每天都有新协议冒出来,真学不完

你想想看,从 98 年到现在快 30 年,Rosetta 从一个研究组内部的工具,变成了全球计算生物学界的标配。凭什么?我觉得三个原因:开源、模块化、持续迭代。

Rosetta 的架构演进

早期的 Rosetta 是一个巨大的可执行文件。你写一个 C++ 类,编译进去,然后跑任务。那时候最痛苦的是——改一行代码要编译半小时。

后来的 Rosetta3 做了重大重构。它把核心逻辑拆成了几个层:

  • core:基础数据结构和评分函数
  • protocols:高级流程,比如对接、设计、折叠
  • apps:可以直接用的命令行工具
  • pyRosetta:Python 绑定,方便交互

这个结构意味着你可以只改自己关心的部分,不用触碰整个系统。我个人的习惯是在 pyRosetta 里做原型验证,确认方案可行后再用 C++ 实现性能优化。

一个我踩过的坑: 新手最容易犯的错误是直接修改评分函数原始代码而不备份。我曾经在 ref2015 里调了 solvation 项的权重,结果跑了三天发现整个 pipeline 不收敛。后来我才学会——永远在评分函数副本上做修改,用 Rosetta 的 Patch 机制来管理。

Rosetta 的核心工作流

不管你用 Rosetta 做什么,底层的逻辑都差不多。我通常把它画成四个阶段:

Rosetta 核心工作流 阶段 1:输入准备 序列 / PDB / 小分子 阶段 2:能量计算 评分函数评估 阶段 3:采样优化 MCMC / 遗传算法 输出 模型 迭代收敛 各阶段典型操作 输入准备: 加载PDB、准备小分子参数、设置势能场 能量计算: 对当前结构逐项打分,输出能量分解 采样优化: 扰动结构(旋转、平移、侧链库),重新计算能量 输出: 最佳能量构象、种群多样性、能量轨迹 迭代: 如果能量未收敛或未达采样数目,回到采样步骤

这图里最重要的就是那个 迭代循环。Rosetta 不是一次算完就完事的,它是一个反复采样、评估、再采样的过程。说白了你得给它足够的自由度让它去“找”那个能量最低的结构。

怎么上手 Rosetta?

很多新手第一件事就是编译 Rosetta。其实现在没必要了,直接下预编译版就行。我推荐你用 conda 或者 Docker 方式安装,省时省力:

# 用 conda 安装 pyRosetta(推荐)
conda install -c https://conda.rosettacommons.org pyrosetta

# 验证安装
python -c "import pyrosetta; pyrosetta.init(); print('Rosetta ready')"

如果你需要完整版 Rosetta(有 C++ 源码和所有协议),可以去 Rosetta Commons 注册后下载。不过说实话,没有特殊需求的话,pyRosetta 就够用了。

核心结论: Rosetta 是一个以能量函数为核心、采样算法为驱动的计算生物学平台。它的评分函数是可解释的、可定制的,这使它成为结合亲和力预测的理想工具。接下来几章,我们会深入拆解评分函数的每一项,看看它们到底怎么影响预测结果。