发布于 2019-12-11

原文: 推荐系统中如何做多目标优化

在做推荐系统的过程中,我们希望同时优化多个业务目标。比如电商场景中,希望能够在优化GMV的基础上提高点击率,从而提高用户的粘性;在信息流场景中,希望提高用户点击率的基础上提高用户关注,点赞,评论等行为,营造更好的社区氛围从而提高留存。因此推荐系统做到后期,往往会向多目标方向演化,承担起更多的业务目标。下面就介绍几种多目标相关的算法。其中有些是笔者实践过取得了线上的收益,有些是最新的论文中提出的新的解决方案,文章没有公式,易于理解,拿出来和大家一起讨论。

A. 通过sample weight进行多目标优化

该方法是多目标的0.1版本,是rank主模型上的微调,以实现多目标。这里以信息流场景为例,我们的主目标是feed的点击率,用户在feed上的任何点击行为都被认为是正反馈。与此同时,在feed中的点赞功能是我们希望boost的功能。此时点击和点赞都是正样本(点赞本身也是一种点击行为),但是点赞的样本可以设置更高的sample weight。模型训练在计算梯度更新参数时,梯度要乘以权重,对sample weight大的样本给予更大的权重。直观理解,对于sample weight大的样本,如果预测错误就会带来更大的损失。通过这种方法能够在优化某个目标(点击率)的基础上,优化其他目标(点赞率)。实际AB测试会发现,这样的方法,目标A会受到一定的损失换取目标B的增长。通过线上AB测试和sample weight调整的联动,可以保证在可接受的A目标损失下,优化目标B,实现初级的多目标优化。

  • 优点:
    • 模型简单,仅在训练时通过梯度上乘sample weight实现对某些目标的boost或者decay
    • 带有sample weight的模型和线上的base模型完全相同,不需要架构的额外支持,可以作为多目标的第一个模型尝试。
  • 缺点:
  • 本质上并不是对多目标的建模,而是将不同的目标折算成同一个目标。相关的折算可能需要多次AB测试才能确定。此处有点难理解,设置sample weight,本质上是用base样本去度量其他样本。比如认为一个点赞算两次点击。比如在视频中停留了5min是等价于2次对视频的点击行为等。
  • 从原理上讲无法达到最优,多目标问题本质上是一个帕累托寻找有效解的过程。有很多文章给出多目标的数学建模,如[1]。我们后续从这些文章中给出更详细的证明。

B. 多个模型 stacking

这个思路是也是很直接的。我们有多个优化的目标,每个优化的目标都有一个独立的模型来优化。可以根据优化目标的不同,采用更匹配的模型。如视频信息流场景中,我们用分类模型优化点击率,用回归模型优化停留时长。不同的模型得到预测的score之后,通过一个函数将多个目标融合在一起。

最常见的是weighted sum融合多个目标,给不同的目标分配不同的权重。当然,融合的函数可以有很多,比如连乘或者指数相关的函数,这里和业务场景和目标的含义强相关,可以根据自己的实际场景探索。

  • 优点:
    • 模型简单
  • 缺点:
  • 线上serving部分需要有额外的时间开销,通常我们采用并行的方式请求两个模型进行融合。
  • 多个模型之间相互独立,不能互相利用各自训练的部分作为先验,容易过拟合。

C. Shared bottom NN model 多个模型stacking会带来更多的训练参数,导致模型的规模变大。�