3. 功能预测任务定义与建模目标

在蛋白功能预测建模工程中,最先要做的不是选模型,而是把“预测什么”定义清楚。同一个蛋白序列,可以问出很多不同的问题:它属于哪个家族?它的最适温度是多少?它同时具备哪些功能?哪些残基参与催化?哪些突变更可能致病?这些问题对应的输出空间、损失函数、评价指标和可用数据形态完全不同。如果任务定义错了,后面无论用多复杂的网络,都只是在优化一个错误的目标。

本节把常见的蛋白功能预测任务归纳为五类:分类、回归、多标签、位点识别和排序。理解它们的差别,是后续数据构造、模型选型和评估设计的前提。

一、分类:从序列到一个离散类别

分类任务假设每个样本属于且仅属于一个类别,输出是互斥的。典型场景包括:酶与非酶判别(二分类)、蛋白亚细胞定位预测(多分类,如细胞核、细胞质、线粒体、分泌途径等)、以及蛋白家族归属(如把序列分到某个 Pfam 家族)。

建模时,标签通常编码为 one-hot 向量,模型末端接 softmax,损失用交叉熵。评价指标不能只看准确率:当类别极不平衡时(例如膜蛋白只占少数),应同时看宏平均 F1、每类召回率和混淆矩阵。一个常见误区是把“多标签”当成“多分类”处理——如果一条序列可以同时是激酶和转录因子,用 softmax 会强迫模型二选一,这是任务定义错误。

二、回归:预测连续数值

回归任务的输出是实数,例如最适 pH、最适温度、热稳定性 ΔTm、催化效率 kcat/Km、表达量或结合亲和力。与分类不同,回归对标签的数值精度和量纲非常敏感。

建模时通常对目标做标准化或对数变换(如 kcat 常跨多个数量级,宜取 log10),损失用 MSE 或 Huber。评价指标用 MAE、RMSE、Pearson/Spearman 相关系数。需要注意:如果训练集里同一蛋白有多个实验条件下的测量值,直接回归会引入标签噪声,应先明确预测的是“某个条件下的值”还是“条件平均趋势”。

三、多标签:一条序列对应多个功能

多标签任务中,每个样本可以同时拥有多个标签,标签之间不互斥。蛋白功能注释(GO term 预测)是最典型的例子:一条序列可能同时具有“ATP 结合”“蛋白激酶活性”“细胞凋亡调控”等多个功能。

建模时,输出层对每个标签独立做 sigmoid,损失用二元交叉熵(BCE),每个标签单独设阈值。评价指标常用 mAP、micro-F1、macro-F1 以及每个 GO term 的 AUPRC。由于 GO 标签极度不平衡且存在层级关系(子 term 蕴含父 term),实际工程中常做标签传播或层级约束,而不是把几千个 term 完全独立对待。

四、位点识别:从整条序列到残基级标注

位点识别把预测粒度从“整条序列”下沉到“每个残基”。典型任务包括:催化残基识别、金属结合位点、糖基化位点、蛋白-蛋白相互作用界面残基、以及二硫键半胱氨酸配对。

这类任务的输入是序列(或结构),输出是长度等于序列长度的标签序列,属于序列标注问题。模型常用 CNN、BiLSTM 或蛋白语言模型加逐残基分类头,损失用逐位置交叉熵。评价时不能只看残基准确率——正例通常只占 1%~5%,应看残基级 AUPRC、precision/recall,以及“命中一个真实位点即算对”的蛋白级指标。位点识别还常与结构信息结合,例如用距离图约束预测的残基在三维空间中是否聚集。

五、排序:关心相对顺序而非绝对分数

排序任务不要求预测出精确数值,只要求把候选对象按某种功能相关性排出先后。典型场景包括:给定一个蛋白,对候选配体/底物/突变体排序;或在定向进化中,对突变文库排序以挑选下一轮实验对象。

建模时常用 pairwise 或 listwise 损失(如 RankNet、LambdaRank),评价指标用 NDCG、MAP、Top-k 命中率。排序任务的价值在于:实验验证预算有限时,模型只需把真正有功能的候选排进前几名即可,而不必给出准确的活性值。

蛋白功能预测的五类任务:输出空间与建模目标 输入 蛋白序列 (可选结构) ① 分类 输出:互斥类别 softmax + 交叉熵 ② 回归 输出:连续数值 MSE / Huber ③ 多标签 输出:多个非互斥标签 sigmoid + BCE ④ 位点识别 输出:逐残基标签 逐位置交叉熵 ⑤ 排序 输出:候选相对顺序 pairwise / listwise 评价指标与典型场景 分类 指标:Accuracy、macro-F1、混淆矩阵 场景:酶/非酶、亚细胞定位、家族归属 回归 指标:MAE、RMSE、Pearson / Spearman 场景:最适 pH/温度、ΔTm、kcat/Km 多标签 指标:mAP、micro-F1、每标签 AUPRC 场景:GO term 预测、多酶活注释 位点识别 指标:残基级 AUPRC、蛋白级命中率 场景:催化残基、结合界面、修饰位点 排序 指标:NDCG、MAP、Top-k 命中率 场景:底物/配体排序、突变体文库筛选 共同前提:先明确输出空间与标签语义,再选损失与指标。 标签互斥性、数值量纲、粒度层级决定任务类型。

六、如何判断一个任务属于哪一类

可以用三个问题快速定位:第一,输出是离散还是连续?离散→分类/多标签/位点识别,连续→回归或排序分数。第二,标签之间是否互斥?互斥→分类,不互斥→多标签。第三,预测粒度是整条序列还是单个残基?残基级→位点识别。第四,是否只关心相对顺序?是→排序。

实际项目中,任务常常是组合的。例如“预测某突变对蛋白稳定性的影响”可以建模为回归(预测 ΔΔG 数值),也可以建模为排序(把突变按有害程度排序);“预测蛋白功能”可以同时输出 GO 多标签和催化位点。此时应明确主任务与辅助任务,并设计多任务损失权重,而不是把所有输出混在一个头里。

工程提示:在写数据加载器之前,先用一句话写下任务定义,例如“输入一条长度 ≤ 1024 的氨基酸序列,输出该序列所属的 10 个亚细胞定位类别之一”。如果这句话里出现了“同时”“排序”“每个残基”等词,就说明任务类型需要重新归类。

七、从任务定义到建模目标的落地检查

确定任务类型后,还要把它翻译成可执行的建模目标。建议按以下顺序检查:

  • 输出维度:分类为类别数 C,多标签为标签数 L,位点识别为序列长度 × 类别数,排序为每个候选的分数。
  • 标签编码:分类用整数或 one-hot,多标签用 0/1 向量,位点识别用与序列等长的标签序列,排序用相关性等级或成对偏好。
  • 损失函数:分类用交叉熵,多标签用 BCE,回归用 MSE/Huber,位点识别用逐位置交叉熵,排序用 pairwise/listwise 损失。
  • 评价指标:必须与任务类型匹配,并考虑类别不平衡、标签不平衡和正例稀疏问题。
  • 基线:分类可用逻辑回归或 kNN,回归可用均值预测,多标签可用频率最高标签,位点识别可用保守性打分,排序可用 BLAST 相似度。先跑通基线,再上深度模型。

以“预测蛋白是否具有某个酶活”为例,如果只判断“有/无”,是二分类;如果要同时预测 EC 号的前三位,是多标签;如果要预测具体催化残基,是位点识别;如果只是把候选底物按反应可能性排序,是排序。同一个生物学问题,任务定义不同,数据标注方式、模型输出和评估标准都会随之改变。

常见错误:把多标签任务用 softmax 训练,导致模型被迫在互不排斥的功能之间做单选;把回归目标直接送入分类损失,或把连续值离散化后丢失排序信息;在位点识别中只报告残基准确率,掩盖了正例极少的事实。这些都属于任务定义与建模目标不匹配。

总结来说,分类回答“是哪一个”,回归回答“是多少”,多标签回答“有哪些”,位点识别回答“在哪里”,排序回答“哪个更可能”。在蛋白功能预测建模工程中,先把这五个问题分清楚,后续的数据构造、模型设计和评估才有稳定的落脚点。