image.png
本章介绍的是推荐系统的排序阶段,包含粗排和精排。

  • 粗排和精排模型原理基本相同,只是粗排模型小、特征少、效果差一些,因此本章介绍排序时不区分粗排和精排
  • 粗排的目的:做快速筛选,如果不用粗排,直接把很大的精排模型用在几千篇候选笔记上,计算代价太大

    因为以小红书为例,所以下文中 物品 == 笔记

1. 多目标排序模型

:::info 多目标排序模型/多任务排序模型 MTL

  1. 模型结构
    1. 输入:用户特征、物品特征、统计特征、场景特征等
    2. 输出:对多个指标的预估
  2. 降采样和校准
    1. 降采样:在实际的推荐系统中,正负样本的比例严重不平衡,负样本数量远多于正样本,因此需要对负样本做降采样
    2. 校准:以点击率为例,对负样本做降采样会导致模型高估点击率,因此需要用公式做校准 :::

      1.1 排序的依据

      排序的主要依据:用户对物品的兴趣。而兴趣可以反映在用户对物品的交互上
      用户——物品的交互:对于每篇笔记,系统会记录如下左栏的数据,并计算得到如下右栏的消费指标
  • 曝光次数(number of impressions)
  • 点击次数(number of clicks) → 点击率 = 点击次数 / 曝光次数
  • 点赞次数(number of likes) → 点赞率 = 点赞次数 / 点击次数
  • 收藏次数(number of collects) → 收藏率 = 收藏次数 / 点击次数
  • 转发次数(number of shares) → 转发率 = 转发次数 / 点击次数

排序的依据:前面提到排序的依据是用户对物品的兴趣,因此需要预估用户对物品的兴趣,即

  • 用排序模型预估点击率、点赞率、收藏率、转发率等多种分数(消费指标)
  • 再融合这些预估分数
    • 最简单的融合公式就是加权和,权重是通过 ab 测试调出来的
    • 后续会介绍比加权平均更好的融合公式
  • 根据融合的分数对物品做排序、截断

1.2 多目标模型

多目标排序模型

  • 输入:各种特征
    • 用户特征:用户 id、用户画像
    • 物品特征:物品 id、物品画像、作者信息
    • 统计特征
      • 用户统计特征 eg. 该用户过去 30 天一共曝光了多少篇笔记、点击了多少篇笔记、点赞了多少篇笔记
      • 物品统计特征 eg. 候选物品过去 30 天一共获得了多少次曝光机会,获得了多少次点击、点赞
    • 场景特征:是随着用户请求传过来的,包含当前的时间、用户所在的地点等
  • 输出:多个目标的预估值,比如点击率、点赞率、收藏率、转发率

image.png

模型的训练

  • 损失函数:4 个任务分别用交叉熵损失函数,加起来作为总的损失函数
    • 每个人物都是一个二元分类任务,因此可以用交叉熵损失函数

image.png

训练的难点类别不平衡(正样本少,负样本多)

  • 每 100 次曝光,约有 10 次点击、90 次无点击
  • 每 100 次点击,约有 10 次收藏、90 次无收藏

解决方案:负样本降采样(down sampling)

  • 只保留一小部分负样本
  • 让正负样本数量平均,节约计算(太多负样本用处不大,白白浪费计算资源),缩短训练时间

带来新的问题:点击率被高估(以点击率为例,对负样本做降采样会导致模型高估点击率)

1.3 预估值校准

为什么需要预估值校准?

  1. 负样本降采样后,导致负样本变少,点击率被高估
  • 正样本、负样本数量分别为 排序(多目标排序) - 图4排序(多目标排序) - 图5
  • 对负样本做降采样,抛弃一部分负样本
  • 使用排序(多目标排序) - 图6个负样本,排序(多目标排序) - 图7是采样率
  • 由于负样本变少,预估点击率大于真实点击率

    但是其实不做校准,对于 CTR 来说,相对顺序也是不变的

  1. 单一目标可以不用校准,但是多目标需要校准,因为需要一个统一的量纲
  2. 广告系统需要 CTR 做计费,所以需要校准:如果纯优化点击的话,降采样后的各个物品 CTR 相对顺序是不变的,不做校准也可以。校准一般是针对广告系统,CTR 需要参与广告计费的计算,所以需要精确值。而校准有两部分,一是模型端降采样后的校准,如前文的说明。二是后链路根据实际CTR校准,如插值保序回归等。

如何进行预估值校准?

论文:Practical Lessons from Predicting Clicks on Ads at Facebook,2014

  • 真实点击率:排序(多目标排序) - 图8(期望)
  • 预估点击率:排序(多目标排序) - 图9(期望)
  • 由上面两个等式可推出校准公式排序(多目标排序) - 图10

校准后用排序(多目标排序) - 图11(校准后的点击率)作为排序的依据

2. MMoE (Multi-gate Mixture-of-Experts)

:::info Multi-gate Mixture-of-Experts (MMoE)
MMoE 是一种多目标排序模型。

  • 原理:MMoE 用多个独立的 expert 塔提取特征,并对多塔提取的特征向量做加权平均(不同任务对每个 expert 塔的权重不同(gate 不同)),然后送入多头。
  • 问题:MMoE 的训练,softmax 容易出现极化现象(polarize),可以用 dropout 解决。

注意:用了 MMoE 不一定会有提升 !有人用了有提升,有人用了没有,没有效果的原因不清楚,可能是实现不够好,也可能是不适用于特定的业务场景。如果你的公司没用 MMoE,很可能是尝试之后发现没有提升 :::

参考论文:

  1. Google 提出 MMoE 模型:Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts. KDD 2018
  2. Youtube 提出极化问题的解决方案:Recommending What Video to Watch Next: A Multitask Ranking System. RecSys 2019

MMoE 的结构

  • Experts(专家网络):N 个 expert 网络的结构相同,但不共享参数
    • expert 网络的个数 N 是个超参数,需要手动调。图中画了 3 个 expert,实践中通常会用 4 个 or 8 个 expert
  • Multi-gate(门控网络):有 M 个任务/目标,就有 M 个门控网络(图中有点击率、点赞率两个目标,因此画了两个门控网络)
    • 每个门控网络都是神经网络 + softmax 激活函数,输出 N 个概率值排序(多目标排序) - 图12作为门控
    • 因为是 softmax 的输出,因此 N 个概率的和为 1,且每个概率值都是大于 0
    • 每个概率排序(多目标排序) - 图13对应一个专家网络排序(多目标排序) - 图14,作为排序(多目标排序) - 图15输出向量排序(多目标排序) - 图16的权重
    • 对 N 个 experts 的输出向量 排序(多目标排序) - 图17做加权平均

image.png

2.1 问题:极化现象 Polarization

softmax 会发生极化
极化现象softmax 输出的向量中,一个元素接近于 1,其余都接近于 0

  • 以两个任务的 MMoE 网络为例,有两个 gate 网络,如下图所示,假设左边这个 gate 网络的 softmax 输出约等于 0 0 1(假设有 3 个 experts 网络),右边这个 gate 网络的 softmax 输出约等于 0 1 0。也就是说,左边的预估任务只使用了第 3 个 expert,而右边的预估任务只使用了第 2 个 expert,没有使用其它 expert
  • 这相当于没有使用 Mixture-of-Experts,没有融合三个 experts 网络的输出,而是简单使用了一个专家
  • 第 1 个 expert 相当于死掉了,没有被用到
  • 那么,MMoE 就退化成了简单的多目标模型,不会对 experts 做融合,失去了 MMoE 的优势

image.png

解决极化问题在训练时,对 softmax 的输出使用 dropout

  • 如果有 n 个 expert,那么每个 softmax 的输入和输出都是 n 维向量
  • 训练时,对 softmax 的输出使用 dropout 后,softmax 输出的 n 个数值被 mask 的概率都是 10%,也就是说每个 expert 被随机丢弃的概率都是 10%,这样会强迫每个任务根据部分 experts 做预测
  • 训练时用 dropout,就不太可能会发生极化
    • 因为如果发生了极化,即 softmax 输出的某个元素为 1,而恰好这个元素被 mask 了,那么预测的结果就会错的离谱。为了减少损失,让预测更精准,神经网络会尽量避免发生极化

3. 预估分数的融合

:::info 排序的多目标模型会预估点击率、点赞率等指标。得到这些指标之后,需要将它们融合成一个分数。本节介绍工业界常用的几种融分公式。 ::: 预估分数的融合公式

下面公式中的排序(多目标排序) - 图20都是超参数,需要手动调,线上做 ab 测试选出合适的超参数

  1. 简单的加权和排序(多目标排序) - 图21
  • 排序(多目标排序) - 图22分别是预估的点击率、点赞率、收藏率
  1. 点击率乘以其他项的加权和排序(多目标排序) - 图23
  • 排序(多目标排序) - 图24排序(多目标排序) - 图25,因此排序(多目标排序) - 图26
  1. 海外某段视频 APP 的融分公式排序(多目标排序) - 图27
  • 排序(多目标排序) - 图28是预估的观看时长
  1. 快手短视频 APP 的融分公式排序(多目标排序) - 图29
  • 根据预估时长排序(多目标排序) - 图30,对 n 篇候选视频做排序
  • 如果某视频排序第排序(多目标排序) - 图31,则它得分排序(多目标排序) - 图32
  • 对点击、点赞、转发、评论等预估分数做类似处理
  • 得到最终的融合分数
  1. 国内某电商的融分公式排序(多目标排序) - 图33

    假如排序(多目标排序) - 图34都为 1,那么这个公式就代表电商的营收,有很明确的物理意义

  • 电商的转化流程:曝光→点击→加购物车→付款
  • 模型预估:排序(多目标排序) - 图35,即预估的点击率、加购物车率、付款率
  • 得到最终的融合分数

4. 视频播放建模

:::info 视频播放建模

  • 视频播放建模的主要目标:视频播放时视频完播率
  • 本节介绍如何在多目标排序模型添加与播放时长、完播率相关的预估任务 :::

图文和视频的排序有显著的区别:

  • 图文笔记排序的主要依据:点击、点赞、收藏、转发、评论……
    • 即,用户的点击和其它交互行为反映出用户对图文笔记的兴趣
  • 视频排序的依据还有:播放时长 完播
    • 播放时长、完播是视频最主要的指标,其次才是点击和其它交互行为
    • 如果用户把一个视频看完,即便没有点赞、收藏、转发,也能说明用户对视频感兴趣

4.1 视频播放时长

播放时长是连续变量,因此自然而然就会想到用回归来拟合播放时长。但是,直接用回归拟合播放时长效果并不好建议用 YouTube 的时长建模方式Deep Neural Networks for YouTube Recommendations,RecSys 2016(是实践中效果最好的方法)

本节介绍这篇论文的方法,但是和原论文有些区别,因为如果直接用这篇论文的方法会有偏差

视频播放时长建模:

  • 把最后一个全连接层的输出记作 z。设 p = sigmoid(z)
  • 实际观测的播放时长记作 t。(如果没有点击,则 t = 0)
  • 训练:最小化交叉熵损失 排序(多目标排序) - 图36
  • 推理:把 exp(z) 作为对播放时长的预估
  • 最终将 exp(z) 作为融分公式的一项,影响对视频的排序

image.png

4.2 视频完播

视频完播有两种建模方法

  1. 回归方法
  • 例:视频长度 10 分钟,实际播放 4 分钟,则实际播放率为 y = 0.4(y∈[0, 1])
  • 让预估播放率 p 拟合 y:最小化交叉熵 排序(多目标排序) - 图38
  • 线上预估完播率,模型输出 p = 0.73,意思是预计播放 73%
  • 预估的完播率就类似于点赞率、收藏率,会作为融分公式的一项,影响视频的排序
  1. 二元分类方法
  • 需要自定义完播指标,eg. 完播 80%
  • 例:视频长度 10 分钟,播放 > 8 分钟作为正样本,播放< 8 分钟作为负样本
  • 做二元分类训练模型,播放 > 80% vs 播放 < 80%
  • 线上预估完播率,模型输出 p = 0.73,意思是 P(播放 > 80%) = 0.73

不能直接将预估的完播率用到融分公式

  • 原因视频越长,完播率就越低。如果直接用预估的完播率,那么会有利于短视频,而对长视频不公平
  • 解决方法:线上预估完播率后,用函数 f(视频时长) 对预估的完播率做调整,使得公平对待长短水平的完播率
    • 排序(多目标排序) - 图39
      • 视频越长,f 的值越小
    • 排序(多目标排序) - 图40作为融分公式中的一项

image.png