口袋条件自回归分子生成:AI解锁STAT3难成药靶点新路径
做肿瘤药这一行的人,对STAT3这个名字应该都不陌生。作为JAK-STAT通路的核心转录因子,STAT3长期被肿瘤学界划进“难成药靶点”的代表名单:SH2结构域表面平坦、蛋白-蛋白相互作用界面大、天然缺乏经典的小分子口袋。偏偏肿瘤细胞对它的依赖性很强,很多实体瘤和血液瘤都能看到STAT3异常持续激活,临床需求非常大。正因为传统方法很难在这个靶点上直接“下嘴”,这几年做计算药物设计的人,几乎都把目光投向同一个方向——用生成式AI从靶点口袋出发,直接设计分子。
最近中国药科大学余文颖、来茂德、邓昭团队在药物化学领域主流期刊JMC(Journal of Medicinal Chemistry)上发表的这项工作,就是这个思路的一个很典型的落地:口袋条件自回归分子生成算法驱动的强效STAT3抑制剂发现。简单说,他们让模型“看着STAT3的结合口袋来写分子”,再通过分子对接、物理化学性质过滤和湿实验验证,找到了一批有活性的候选化合物。这篇文章的价值,不止是发了篇好论文,而是给“难成药靶点怎么用生成模型从头做药”提供了一个完整可复用的技术闭环。
如果你正在做AI药物设计,尤其是针对转录因子这类难啃的靶点,这篇文章很值得仔细拆一拆。今天我不打算逐条复述论文里的数据,而是把它背后的算法设计、实操细节、踩坑经验全部摊开来聊,结合我自己的项目经验,给你一套可以直接参考的做事方法。
1. 先理清楚:STAT3这个靶点,难在哪、为什么生成式AI能切入
1.1 转录因子成药的“三座大山”
STAT3的全称是信号转导与转录激活因子3,平时以单体形式待在细胞质里,被上游激酶磷酸化后二聚化,进入细胞核调控大量与增殖、凋亡、免疫逃逸相关的基因。这个功能轮廓听起来很适合开发抑制剂,但真做起来有三座大山。
第一座,是STAT3没有传统激酶那样明确的“ATP口袋”。激酶抑制剂能遍地开花,很大程度是因为激酶有高度保守的ATP结合位点,小分子一怼就进去了。STAT3不一样,它主要的成药位点集中在SH2结构域,那是一个参与蛋白-蛋白相互作用的模块,界面大、又平又浅,小分子要找稳定的结合模式非常难。
第二座,是选择性。STAT3跟STAT1、STAT5在SH2结构域上有比较高的同源性,你设计出来的抑制剂如果只盯着某个静电热点做,很容易一竿子打翻一船STAT家族蛋白,活性很好但选择性惨不忍睹,后面毒理和机制研究全都会出问题。
第三座,是细胞透膜性。很多转录因子抑制剂是在分子层面结合不错,进细胞却不行。因为你要抑制的是胞内转录因子,不是细胞表面受体,分子必须穿过两三层膜还得保持活性。一堆极性太大的羧酸类抑制剂往往就在这一步栽了。
这“三座大山”叠加在一起,传统筛选策略的短板一下就暴露了:基于已知配体做相似性搜索,骨架空间太窄,很难跳出已知化学类型;做大规模高通量虚拟筛选,文库再大也只是在已有化合物库里挑,覆盖不了靶点真正需要的化学空间。
1.2 生成式AI换了一条思路:先有分子,再筛选
传统虚拟筛选的本质是“从库里挑”。分子生成模型的本质则是“从没有到有”,先在计算机里把候选结构写出来,然后再做后续评估。这个顺序上的变化,对STAT3这种靶点非常关键。
你可以这样理解:传统筛选像在现成货架上找一件合身的衣服,生成模型则相当于请了一个设计师,量了你的尺寸(结合口袋的三维形状和残基性质)之后,直接裁一件衣服出来。衣服合不合身当然还要试穿(对接、模拟、实验),但设计师的量体裁衣,已经帮你把最不搭的部分过滤掉了一大半。
在这篇JMC工作里,作者团队走了正是这条“量体裁衣”的路线。而且他们没有停留在通用分子生成,而是进一步把STAT3结合口袋的几何信息、残基信息作为生成条件,让模型在一开始写分子的时候就“主观朝向”这个特定靶点。这个技术点,就是我们标题里反复提到的“口袋条件自回归”。我下面把它拆开讲。
2. 从算法底层看“口袋条件自回归分子生成”到底在干什么
2.1 什么是自回归分子生成
“自回归”这个词这几年大家听得很多,语言模型GPT就是典型的自回归模型。它的核心逻辑说起来很简单:给定已经生成的前面若干个token,预测下一个token是什么,然后一个一个往下拼,拼出完整的序列。
分子也可以用同样的方式生成。最常见的是把分子写成SMILES字符串。比如苯酚可以写成Oc1ccccc1,这串字符里每个字母、数字、括号都是一个token。模型经过训练之后,可以学着SMILES的“语法”逐token地往后生成,最终生成一串看起来合法的SMILES,对应一个具体的分子结构。
自回归分子生成有几个很实际的好处。第一,训练稳定。它本质上就是一个大规模的单步分类任务,loss清晰,梯度回传稳定,不像GAN那样存在判别器和生成器对抗平衡的问题。第二,序列先验强。SMILES虽然只是线性字符串,但化学里的官能团、环系、电荷等局部模式会以连续token的形式出现,模型很容易学会这些微观规律。第三,和主流深度学习基础设施兼容度极高。Transformer、LSTM这些架构拿来就能用,预训练、微调、采样的生态非常成熟。
当然它也有缺点。最典型的问题是SMILES表示不唯一,同一个分子可以写成好几种不同的SMILES,模型训练时容易学出冗余。另外逐token生成的方式,对分子长程依赖关系的把握不如图模型直接,但这些问题都有工程办法来解决,后面我会提到。
2.2 什么是“口袋条件”:让模型生成时看着靶点
“口袋条件”这个词,其实就是给生成模型加一个输入:蛋白结合口袋的结构信息。模型不能只顾着“把SMILES写合法”,还必须让写出来的分子跟给定口袋相容。
口袋信息怎么表达,是这类工作真正的技术核心。常见做法有这么几类:
第一类是序列型条件。直接把口袋残基的氨基酸序列、以及每个残基与口袋几何中心的空间关系编码成向量。这种做法简单,但空间信息表达比较粗糙。第二类是栅格型条件。把口袋周围的三维空间划分成体素网格,每个网格记录原子类型、电荷、疏水性等属性。这个思路类似三维卷积,信息丰富,但计算量和内存开销都不小。第三类是基于图的条件。把口袋残基和原子建成一个三维图,用图神经网络编码,再把编码向量或节点特征喂给分子生成器。目前这类方法在结构信息保真度和计算效率之间平衡得比较好。
在这篇STAT3抑制剂的工作里,作者用的就是“口袋条件”这个宏观框架。实际建模时,口袋的定义很关键,需要决定哪些残基属于结合位点。一般做法是把已知共晶结构里配体周围约5埃到6埃范围内的残基划出来作为口袋,有时还会结合突变数据和已知SAR进一步修正。口袋选得准不准,直接影响后面生成分子的头部热点能不能对得上。
2.3 算法整体长什么样:一句话版和流程图版
如果你以前没接触过这类模型,我可以用一句话概括整条技术管线:模型输入端有两个东西,一个是目标STAT3口袋的编码,另一个是已经生成的部分分子序列;模型用Transformer或类似架构把这两个信息融合起来,逐token预测下一个分子token;等整个SMILES生成完毕,就得到一个候选分子;然后所有候选分子进入打分、过滤、聚类、对接、动力学和实验验证。
训练的时候,模型需要大量“口袋-配体”配对数据。理想情况下,每个配体都对应着它所在靶点口袋的结构。实际中很难做到每对都来自共晶结构,所以常见策略是:先在ZINC、ChEMBL这类大规模分子库上预训练分子语言模型,让它学会化学语法;再用少量带活性标签的靶点-配体数据做微调,教会它把口袋编码和分子生成关联起来。这就是类迁移学习的训练范式。
采样生成的时候,还有一个可控随机性的问题。自回归模型本质是在预测下一个token的概率分布,你可以通过温度参数调节采样策略。温度越低越保守,生成出来的分子多数比较“常规”;温度越高越激进,新颖结构出现的概率变大,但合法性容易下降。对付STAT3这种数据少、化学空间还没被充分探索的靶点,通常会先用中高温度采样一大批,再利用下游筛选把发散性控制在合理范围。
2.4 为什么这类算法特别适合STAT3
把“口袋条件”和“自回归”拼在一起,对STAT3的意义在哪里?你想想前面说的三座大山:口袋平、界面大、选择性难做。
如果只是单纯的无条件生成,你有大概率得到一批化学上合法、但结合口袋完全不兼容的分子,比如特别大的刚性稠环,或者与STAT3表面极性分布南辕北辙的纯疏水片。而口袋条件模型从一开始就把口袋形状和关键氢键供受体位点作为生成约束,产出的分子在拓扑上就更可能“长”进这个浅而宽的界面里。
另一个意义在于选择性问题。STAT3和STAT1/STAT5的SH2结构域有一些关键残基差异,比如某些位点的残基类型和侧链取向不同。如果把这些差异性的残基信息编码到条件里,模型是有潜力学到“哪些特征我该避开、哪些该保留”的。当然,这需要数据和训练策略都跟得上,不是模型结构本身就能保证。
3. 实操视角:真正动手做,有哪些核心细节决定成败
3.1 数据准备:往往比模型调参更花时间
做AI药物设计的人,非常容易一开始就陷进模型结构怎么改的兴奋里。但以我自己的经历看,这类项目绝大多数时间都耗在数据上。
STAT3的活性数据主要来自ChEMBL等公共数据库,也有不少来自文献挖掘。下载下来之后,你需要做非常仔细的清洗:统一分子的标准化表示(中和电荷、去除盐、处理互变异构)、确定活性端点(IC50、Ki、%抑制率)、区分不同实验体系(生化结合实验和细胞报告基因实验不能直接混用)、去掉重复测量后取合理值。这些步骤若不严谨,模型训练出来的结果会很虚。
除此之外,还要处理活性标签不平衡的问题。STAT3公开的高质量活性数据量,相比激酶靶点少一个量级,其中真正有IC50值的强活性分子又只占一小部分。如果直接把“活性”当二分类标签训练,很容易学成一个只会输出训练集中高频骨架的模型。常见的补法包括:在更大规模的无标注分子库上先做预训练、把活性信息用排序损失或者软标签的形式融入、引入已知的无活性或弱活性数据做负样本。
3.2 口袋定义与编码:决定模型“看”得到什么
在我接触过的团队里,最容易出现口径不一的就是“口袋到底怎么定义”。有人用配体周围所有残基,有人用手性中心附近残基,有人只取落在结合腔内的原子。这个差别,会对生成结果产生很大影响。
我的建议是,至少拿三个不同来源的结构信息做交叉验证。第一,共晶结构。如果STAT3有已知共晶配体,就以其结合模式为中心定义口袋。第二,同源结构比对。把不同物种或不同构象的STAT3结构做多重比对,找保守结合残基。第三,分子动力学采样。用几百纳秒的MD轨迹对口袋区域的残基柔性和水合位点做统计分析,挑出稳定相互作用热区。
编码方式上,如果你用的是基于图的口袋编码器,要处理好口袋原子和配体原子之间的连线问题。配体原子和口袋原子要不要建边、建多长的边、边特征用什么描述,这些都是超参数。我曾经试过只建模口袋内部残基图、不建模口袋和配体之间的跨图边,结果模型对口袋条件的敏感性骤降,生成分子几乎退化成无条件生成。后来把跨图边加上,活性相关指纹的富集立马有了明显提升。
3.3 训练与评价:比单看生成合法率重要得多的事情
自回归分子生成模型的训练,通常要守几条原则。第一,先预训练,再微调。预训练阶段用百万级、千万级的通用分子SMILES,学习化学语言的基本语法;微调阶段才用STAT3活性数据做条件生成。第二,数据划分要按骨架来,不能用随机划分。随机划分会导致训练集和测试集里有大量结构相似的分子,评价结果虚高。按Murcko骨架或相似性聚类划分,才能反映模型对新化学空间的外推能力。
评价一个模型好不好用,我建议不要只看“生成合法率95%”这种表面指标。至少还要看:唯一率(生成一万个分子有多少不重复)、新颖性(与训练集分子的最大相似度分布)、口袋匹配率(生成分子对接回到目标口袋的成功比例)、目标活性富集因子。这些指标可以做成一张表,每次模型迭代都记录下来对比。
| 评估维度 | 常用指标 | 想回答的问题 |
|---|---|---|
| 化学合法性 | SMILES合法率、环闭合率 | 模型是否学会了化学语法 |
| 多样性 | 唯一率、平均相似度 | 模型是否只是在复读训练集 |
| 新颖性 | 与训练集最大Tanimoto相似度 | 能否跳出已知骨架 |
| 口袋匹配度 | 对接通过率、Shape相似性 | 生成分子是否与口袋兼容 |
| 活性预测 | 预训练活性模型打分 | 是否富含潜在活性分子 |
在训练过程中,我还遇到过一种很隐蔽的问题:模型确实学会了口袋条件,但生成出的分子始终集中在一两个高活性骨架上。这个其实是采样多样性不足。解决办法通常是调高温度、在推理时对token概率做top-p过滤,并配合相似性惩罚,迫使模型去探索周边化学空间。
4. 从生成到验证:如何把一堆AI分子变成真正有效的STAT3抑制剂
4.1 生成后的“漏斗式”筛选
模型一次性生成几万个候选分子,我们不能直接拿去合成,需要一整套漏斗逐层过滤。第一步,做物理化学性质过滤。比如分子量、LogP、氢键供体受体数目、可旋转键数,用类药五规则或更灵活的口袋专属性质过滤掉明显的“化学怪胎”。第二步,做pan-assay interference(PAINS)过滤,排除那些容易产生假阳性的泛干扰化合物。第三步,做合成可及性评估。用SA打分器或逆合成路线推荐工具来看,这个分子能否用不超过三步的常规反应做出来。这一步特别容易被人忽视,但AI生成的分子经常会出现稀有杂环、过度稠合等结构,实验室根本没人愿意做。
这个漏斗的松紧度需要自己把握。太松,后面湿实验要测试的分子太多;太紧,可能把真正新颖的活性骨架提前掐死。我的习惯是,首轮筛选尽量松一点,多留一些多样性骨架,等到对接和动力学验证之后再做更严格的取舍。
4.2 对接和分子动力学:不仅仅是打个分而已
筛选之后,核心排序环节一般是分子对接。对STAT3这类浅口袋靶点,对接打分函数很容易给出虚假的“高互补”,因为打分函数对界面上的电荷互补和疏水接触比较敏感,但对构象变化和水的介导作用刻画不足。所以我一般不会只信一个打分函数,而是至少做两个不同打分函数的交叉排序,再用分子动力学模拟复核。
动力学复核的重点有三个:一是配体在口袋里的稳定性,主要看RMSD是否长时间保持收敛;二是关键相互作用是否稳定,比如分子是否始终跟STAT3 SH2结构域的核心残基保持氢键或盐桥;三是结合自由能估算,用MM-GBSA或类似的端到端方法判断结合强度趋势。这一套做下来,比单纯看对接分数可靠得多。
另外提醒一句:STAT3在细胞里有很多翻译后修饰和变构构象,静态晶体结构并不能代表全部。如果结构资源允许,建议对STAT3的不同构象分别跑一遍生成与筛选,看看候选分子对构象变化的容忍度。这样得到的强效分子,后续在细胞实验里才不会因为构象切换而突然失活。
4.3 湿实验闭环:从酶活到细胞活性的台阶
计算模拟的终点,是湿实验验证的起点。STAT3抑制剂验证一般分几个层次。
第一层,生化结合实验。通常用荧光偏振(FP)、TR-FRET或表面等离子共振(SPR)去测候选分子直接与STAT3蛋白的结合亲和力。这一层看的是最本质的结合。第二层,细胞功能实验。最常用的是检测STAT3在Y705位点的磷酸化水平,通过Western blot或免疫荧光看化合物能不能抑制JAK-STAT信号。第三层,细胞增殖与凋亡实验。对STAT3依赖的肿瘤细胞系做增殖抑制,观察细胞表型变化。第四层,选择性。用同家族的STAT1、STAT5做平行实验,确认化合物不会一通乱打。
我自己看这类文章时,最关心的是作者有没有把细胞层和生化层的活性差解释清楚。很多候选分子生化结合不错,进细胞却活性骤降,大概率是透膜性或外排泵问题。这篇JMC工作里,既然标题敢写“强效抑制剂”,至少说明作者在实验闭环上做了相当多工作,而且拿到了在可对标体系里表现不错的分子。
4.4 强效抑制剂的图景:生成式AI能带来的改变
回到开头的问题:为什么转录因子难成药,但AI这条路又有戏?传统药化项目里,从发现一个苗头化合物到把它优化成强效、可透膜、有选择性的先导物,常常需要几轮甚至十几轮的结构改造,周期以年计。生成式AI的价值在于把“起始分子”的质量整体抬高:它不是给你一个随机命中,而是给出一个已经适配口袋形状、包含关键相互作用要点、并且还能被化学合成实现的起点。后续药化优化的工作量,被大大压缩了。
当然,这不代表AI可以一步到位。真正强效的STAT3抑制剂,几乎一定还需要多轮“AI预测-合成测试-更新模型”之间的迭代反馈。把实验数据喂回模型,修正打分函数和生成偏好,收敛起来会非常快。这就是干湿闭环的意义。
5. 常见问题与排查技巧实录
5.1 生成分子大量不合法,SMILES全是乱码怎么办
如果模型生成的SMILES合法率突然掉到50%以下,先不要慌。最常见的诱因有三类:第一,预训练不充分,模型还没真正学会环闭合规则;第二,采样温度太高,概率分布摊太平,容易在环闭合token上出错;第三,加入了过强的口袋条件,模型为了迎合口袋编码而牺牲了化学语法。
排查建议:先固定温度参数,把口袋条件输入做dropout或清零,跑一组无条件生成的基线,看合法率是否恢复。如果基线恢复了,问题在条件建模的融合方式;如果基线也不行,问题在预训练数据量和模型规模。另外,可以给模型加一个简单的合法性掩码:当预测到某个会导致SMILES不闭合的token组合时,直接把非法选项概率置零。这种方法能用很低的成本把合法率拉回90%以上。
5.2 模型只会生成训练集里已有的分子,新颖性差
这是分子生成里的经典问题。模型发现训练集里某个活性骨架出现过很多次,就会把它当成安全选项高频输出。你得到的分子,本质上是训练集的“平均值”而不是“外推”。
我试过比较有效的办法有三个。第一,在采样阶段降低重复分子惩罚:每生成一批分子,就把与已有批次相似度高于阈值的候选去掉,强制模型往低密度区域走。第二,在训练中引入结构多样性损失:让模型不是只学“正确答案”,还能有意产生多样化的候选。第三,把已知STAT3抑制剂的药效团特征拆出来做约束,让模型必须保留关键药效团,同时放开非关键区域的骨架探索。这样既保持活性潜力,又能避免纯粹复读。
5.3 口袋条件形同虚设,生成分子跟没加条件一个样
这个问题更隐蔽,因为表面指标都正常,合法率也高,但生成分子完全看不出口袋相关的结构倾向。我遇到这种情况,会去检查编码器:是不是口袋编码在序列里放的位置太靠后,被自回归注意力“遗忘”了,或者条件向量维度过小,被分子token的信息稀释掉了。
一个很实用的验证方法是,做条件敏感性分析:用两个完全不同的口袋(比如STAT3和另一个激酶口袋)生成同量级分子,比较两组分子的物理化学性质分布和关键药效团频率。如果两组分布几乎没有差别,基本可以断定模型没学到口袋信息。调整时,可以加强条件信息在每一层Transformer中的注入频率,不只是开头加一次,而是每层都加;也可以在loss里加一个辅助任务,比如让模型预测生成分子里某个原子是否落在口袋结合热区,强制编码器保留结构信息。
5.4 对接分数很高,但湿实验一点活性都没有
这是一个非常打击士气的情况。高分对接分子在实验里没有活性,原因远比打分期想的复杂。
第一,打分函数对熵项和去溶剂化效应估计不足。STAT3界面很多极性残基,分子结合需要顶掉大量有序水分子,这部分熵增和焓变非常难算。第二,分子在缓冲液或细胞里发生了聚集,形成胶束,造成假阳性或假阴性。第三,实际起作用的是代谢产物而非原分子。
我的建议是,在进入湿实验前,至少用MM-GBSA或更严格的自由能微扰方法复核Top分子的结合趋势,再检查一下候选分子的水溶性和胶束倾向,LogP太高的分子先做溶解性预测。如果所有计算信号都支持,那就只能靠实验迭代来确认了。这种事做多了你就会明白:计算筛选的使命不是消除风险,而是把风险集中到一小批值得合成测试的分子上。
5.5 数据太少,模型训练不稳怎么办
STAT3这一类靶点的活性数据少,是常态,不用指望短期内有人会补一个百万级高质量数据集给你。更现实的做法是把弱监督和迁移学习用到极致。
你可以用三类数据混合训练:第一类是高置信度STAT3活性数据,作为强信号;第二类是STAT3结合或功能实验的定性数据,比如只有“有活性/无活性”而没有具体IC50,作为弱信号;第三类是泛化学空间的预训练数据,不与STAT3直接相关,但能稳定模型的化学语法。训练时用课程学习的方式:先用第三类数据预训练,再用第二类数据过渡,最后用第一类数据精调。这个次序能让模型逐渐把注意力从“化学怎么写”转移到“什么样的分子对STAT3有效”。
最后说一点实际操作中的体会
这类项目跑下来,给我最大的感受就是:模型结构的新颖程度,往往不是决定成败的因素;真正决定成败的,是数据清洗的口径、口袋定义的准确度、以及有没有把计算和实验之间的反馈回路跑通。尤其是ST