摘要:本文介绍推荐系统中排序阶段的核心模型与策略,包括多目标建模(MMoE)、负样本降采样、预估分数校准、粗排三塔模型等关键技术。内容基于实际项目经验整理。


一、排序阶段在推荐系统中的位置

推荐系统通常分为三个阶段:召回 → 粗排 → 精排。

海量物品 → 召回(千/万级) → 粗排(百级) → 精排(十级) → 策略层 → 最终展示
  • 召回:从百万级候选池中快速筛选出千/万级候选
  • 粗排:在召回结果中进一步筛选到百级,平衡精度与速度
  • 精排:对百级候选进行精确打分排序

本文将重点讨论粗排和精排阶段的核心技术。


二、多目标建模

2.1 为什么需要多目标?

在实际业务中,我们关心的不仅仅是点击率(CTR),还包括:

  • 播放时长 / 完播率:用户是否真的看完了
  • 点赞 / 评论 / 分享:用户是否有互动行为
  • 关注 / 收藏:用户是否有长期兴趣

把多个反馈直接混成一个标量目标,往往难以分别控制各指标,也会掩盖任务之间的冲突。多目标学习(Multi-Task Learning, MTL)是保留各任务监督信号并共享表示的一种常见方案,但不是唯一方案;加权单目标、约束优化和后续策略融合也各有适用场景。

2.2 MMoE(Multi-gate Mixture-of-Experts)

MMoE 是 Google 提出的多任务学习架构,通过专家网络和门控机制实现任务间的知识共享与分离。

输入特征 → [Expert_1, Expert_2, ..., Expert_n]
                ↓ 门控加权
        [Tower_CTR]    [Tower_CVR]
                ↓           ↓
           P(点击)      P(转化)

核心公式:任务 $k$ 的 gate 根据输入产生对各专家的 softmax 权重,先得到任务相关表示,再交给该任务自己的 tower:

\[z_k=\sum_{i=1}^{n}g_k(i\mid x)f_i(x), \qquad \hat{y}_k=h_k(z_k)\]

其中 $g_k(i\mid x)\ge 0$ 且 $\sum_i g_k(i\mid x)=1$,$f_i$ 是共享专家,$h_k$ 是任务 $k$ 的 tower。专家混合结果 $z_k$ 不是最终预测值,不能省略后续任务 tower 的含义。

注意事项:

  • 应监控各任务 gate 的分布和专家利用率;如果长期集中到少数专家,再结合验证结果尝试 Dropout、门控正则或其他去极化方法。Dropout 不是 MMoE 原始定义中的必需步骤,也不能单独保证专家分化
  • 使用了 MMoE 并不一定带来提升,需要结合业务数据分布和任务相关性来调参
  • 当任务高度相关时,Shared-Bottom 可能更简单有效;当任务差异大时,MMoE 的优势才体现出来

2.3 预估分数融合

当有多个目标分数时,可以用线性加权作为最简单的融合基线:

\[\text{Score} = w_1 \cdot p(\text{点击}) + w_2 \cdot p(\text{完播}) + w_3 \cdot p(\text{互动})\]

权重 $w_i$ 可以先由业务约束和离线实验给出候选值,再通过线上实验验证。实际系统也可能使用乘法、非线性融合或带约束的优化,不能把线性加权视为唯一形式。


三、训练策略

3.1 负样本降采样

在点击率预估中,负样本(未点击)数量远大于正样本(点击),导致:

  1. 样本严重不平衡
  2. 训练效率低下

一种方案是对负样本进行降采样,例如把正负比调整到 1:2 或 1:3;具体比例需要验证,类别加权、难例挖掘等方法也可能更合适。

3.2 预估值校准

若正样本全部保留、负样本以概率 $\alpha<1$ 独立保留,且训练损失没有用权重抵消这次采样,采样数据中的正类先验会升高。令 $R=1$ 表示样本被保留,在同一个特征条件 $X=x$ 下定义:

\[p_{true}(x)=P(Y=1\mid X=x)\] \[p_{pred}(x)=P(Y=1\mid X=x,R=1) =\frac{p_{true}(x)}{p_{true}(x)+\alpha[1-p_{true}(x)]}\]

这里要求 $P(R=1\mid Y=1,X=x)=1$、$P(R=1\mid Y=0,X=x)=\alpha\in(0,1]$,且模型输出已经在采样分布上校准。全数据的 $n_+/(n_++n_-)$ 只是总体正类比例,不能直接当作每个用户—物品对的条件概率。

校准公式:

\[p_{true}(x) = \frac{\alpha \cdot p_{pred}(x)}{[1 - p_{pred}(x)] + \alpha \cdot p_{pred}(x)}\]

在上述假设成立且概率估计充分校准时,这个公式把采样分布下的后验换算回原分布下的后验。它不能修复模型欠拟合、采样依赖特征或线上分布漂移,因此不能被理解为无条件“保证排序分数准确”。


四、视频播放建模

在视频推荐场景中,单纯的 CTR 预估是不够的。排序依据还需要考虑:

4.1 播放时长

实际播放时长是曝光后才能观察到的结果,不能在排序时直接作为输入,否则会发生标签泄漏。可以先定义截断后的训练标签:

\[Y_{watch}=\min(\text{实际播放时长}, \text{视频时长})\]

线上排序使用的是模型在当前特征下对 $Y_{watch}$ 的条件期望、分桶分布或其他统计量的预测,而不是尚未发生的实际播放时长。

4.2 完播率

完播率容易受视频长度影响,但并不存在通用的长度阈值或固定权重。下面只是一种可以通过分桶评估和线上实验检验的策略示例:

  • 短视频(< 1min):完播率权重较高
  • 中视频(1-10min):完播率适中
  • 长视频(> 10min):适当降低完播率权重,改为关注有效播放比例

五、排序模型的特征工程

5.1 特征分类

类别 示例
用户画像 年龄、性别、地域、兴趣标签
物品画像 类别、标签、发布时间、作者
用户统计特征 历史点击率、平均播放时长、活跃天数
物品统计特征 总曝光量、总点击量、CTR、完播率
场景特征 时间段、入口位置、网络环境

5.2 特征处理

对于曝光量、点赞数等长尾计数特征,直接输入模型可能导致:

  • 极少数值过大,主导梯度更新
  • 大部分值集中在 0 附近,区分度低

处理方法:

  1. Log 变换:log(1 + x) 压缩大值,同时在 0 附近近似保持线性;它不会在绝对尺度上“拉伸”小值
  2. 分桶(Binning):将连续值离散化为区间
  3. 构造率特征:如 点赞数 / 曝光量,但要处理零分母和小样本的高方差;常见做法是加入先验平滑,并同时保留曝光量等置信度信息

六、粗排模型

粗排的核心挑战是:牺牲一定准确性,换取推理速度。

6.1 三塔模型

下面给出一种项目中使用的三塔式粗排结构。它把用户、物品编码与轻量交互拆开,是介于前期融合和后期融合之间的折中,而不是“三塔模型”唯一的标准定义:

用户塔 → User Embedding
物品塔 → Item Embedding
            ↓
        交叉塔(轻量交互)
            ↓
         排序分数
  • 用户塔和物品塔:独立的特征编码网络
  • 交叉塔:在这个实现中只做轻量交互,以控制延迟
  • 输出层:这个实现用较浅的全连接层输出分数;深度和非线性仍应按延迟预算与收益选择

6.2 粗排 vs 精排

维度 粗排 精排
输入候选量(沿用开头示例) 千/万级 百级
输出候选量(沿用开头示例) 百级 十级
模型复杂度 轻量 复杂
特征交互 有限(三塔) 充分(Deep Cross)
延迟要求 更严格 相对宽松,但由业务 SLO 决定

七、总结

排序阶段是推荐系统中最直接影响用户体验的环节。关键技术要点:

  1. 多目标建模(MMoE):平衡 CTR、完播率、互动等多维度指标
  2. 样本处理:负样本降采样 + 预估分数校准
  3. 特征工程:长尾分布处理、多类别特征融合
  4. 粗排优化:三塔模型平衡速度与精度

八、参考资料


相关文章: