@如何提升链路目标一致性?爱奇艺短视频推荐之粗排模型优化历程

如何提升链路目标一致性?爱奇艺短视频推荐之粗排模型优化历程_AI&大模型_爱奇艺技术产品团队_InfoQ精选文章

想法

  • 2021 年的文章,看起来还是轻松一点,有一些简单的思路其实可以尝试。

背景

  • 最初采用的粗排模型可以归为上述第二类选型模型,是一个基于各个纬度统计特征的 GBDT 模型。统计特征维度主要包括下面几个维度: #card

      1. 不同属性的用户群体对不同类型视频(分标签、创作者和视频本身等)的消费统计特征。
      1. 视频维度累积的消费统计特征,如视频的点击率、时长消费中位数和均值等;创作者 up 主的消费统计特征以及视频标签的消费统计特征等。
      1. 用户历史消费的视频内容统计特征,如用户历史消费的类型标签统计、消费的创作者内容统计等。
  • 在业务的精排模型优化升级为 wide&deep 模型后,我们对粗排模型和精排模型的预估结果做了详细的统计和分析,发现粗排模型预估为 top 的头部视频和精排模型预估的头部视频有很大的差异。归咎原因主要是以下两方面的原因:

      1. 特征集合的差异:#card
      • 粗排 GBDT 模型中主要是一些稠密类统计特征,而精排 wide&deep 模型中发挥重要作用的特征主要是用户长短期消费的视频 id、视频 tag、up 主 id 等以及视频本身的 id、tag 和 up 主 id 等稀疏类型特征。
    • id:: 6804cbee-5d4a-4da2-84d7-d7c416843252

  1. 模型结构的差异:#card

    • 树型结构模型和 DNN 模型的优化和拟合数据时的侧重点还是有很大的差异的。

    • 除了预估结果和精排 wide&deep 模型有比较大的差异性外,GBDT 模型在特征处理和挖掘方面还需要投入大量的人力。综合以上分析,为了尽量弥补粗排模型和精排模型的 Gap,缩小粗排模型和精排模型预估结果的差异性,并节省大量特征统计和挖掘的人力成本,我们对粗排模型进行了一系列的升级和优化。

[[双塔粗排模型]]

粗排双塔 DNN 模型结构图
image.png

+ 

+ 用户侧和 Item 侧分别构建三层全联接 DNN 模型,最后分别输出一个多维(512)的  **embedding 向量**  ,作为用户侧和视频侧的低维表征。
+ 在构建粗排模型特征集合时,为了控制粗排模型参数的复杂度,我们对粗排的特征集合做了大量的裁剪,用户侧和视频侧都只采用了少部分精排模型的特征子集。 #card

  + 其中,用户侧特征主要选取了下面几维特征:

    + 1. 用户基础画像特征、上下文特征如手机系统、型号、地域等。

    + 2. 用户的历史行为特征,如用户观看的视频 ID、up 主 ID,以及观看视频的关键词 tag 等,以及用户 session 内的行为特征等。

  + 视频侧特征只保留了三维:

    + 1. 视频 ID

    + 2. up 主 ID

    + 3. 视频标签

[[知识蒸馏]] 实现模型压缩

image.png

+ 在蒸馏训练的过程中,为了使粗排模型输出的 logits 和精排模型输出的 logits 分布尽量对齐,训练优化的目标从原来单一的粗排模型的 logloss 调整为 :-> 三部分 loss 的加和,包括 student loss(粗排模型 loss)、teacher loss(精排模型 loss)和蒸馏 loss 三部分组成。#card
+ 其中蒸馏 loss 我们线上采用的是粗排模型输出和精排模型输出的最小平方误差,为了调节蒸馏 loss 的影响,我们在该项 loss 前又加了一维超参 lamda,我们设置超参 lamda 随着训练步数迭代逐渐增大,增强蒸馏 loss 的影响,在训练后期使得粗排模型预估值尽量向精排模型对齐,lamda 随着训练 step 的变化趋势如图四所示。#card

image.png

Embedding 参数优化 #card

  • 将模型 embedding 参数的优化器替换为稀疏解优化神器 FTRL

  • 其他层的参数依然还用 AdaGrad

  • 练得到的粗排模型的 embedding 参数全为 0 的比率也高达 49.7%之多。我们在做模型导出时,裁剪掉了全为 0 的 embedding 参数,粗排模型大小减小了 46.8%,使得模型的传输速度也有近一倍的提升,同时线上加载模型的内存消耗也降低了 100%。

线上 Inference 优化

  • 首先在计算 user 侧 embedding 时进行了合并计算,对同一个用户+千级别候选视频 pair,在计算 user 侧 embedding 时,将 user 侧的特征独立拆分,只过 一次 user 侧 NN 的 inference。这个优化使得粗排模型打分计算服务 p99 的计算耗时减少了 19ms 左右。
  • 此外,基于视频推荐时特别长尾的分布,以及如前文所述,粗排模型视频侧的特征全部是静态特征(视频 id 确定,特征也是确定的),我们对高频视频的 embedding 进行了缓存。视频侧 embedding 优先从缓存里查询,未命中缓存时再进行 inference 计算。优化后的粗排打分服务架构如下图五所示:#card

image.png

级联模型

  • 目的 #card

    • 为了一劳永逸地解决粗排模型目标和精排模型目标一致性的问题,我们对粗排模型进行了又一次的迭代优化。

    • 通过升级为级联模型,使得粗排模型能够自适应地对齐精排模型目标的变化,同时也节省了蒸馏训练的环节,大大地节省了训练资源消耗。

  • [[粗排目标是判断item是否在精排 topk]] 从实践的角度,级联模型对模型结构以及模型输入的特征集没有做任何修改,只是调整了粗排模型训练样本的生成方式,升级后的粗排模型从学习线上真实曝光点击/播放样本,调整为直接学习精排模型的预估结果,将精排模型预估 topn 的结果作为粗排模型学习的正样本。级联模型的样本生成方式具体如图六所示。#card
    image.png

    • 所以这一次升级粗排模型到级联模型只是简单地调整了模型的训练样本,却取得了很显著的收益,除了去掉了蒸馏学习的环节,大大地缩减了粗排模型训练的资源和时间消耗,实际上线也取得了很显著的收益,视频推荐场景的曝光点击率和人均有效观看视频数都提升了 3%左右。同时各项互动指标也有显著提升,其中人均评论量有 12%的显著提升。

@如何提升链路目标一致性?爱奇艺短视频推荐之粗排模型优化历程

https://blog.xiang578.com/post/logseq/@如何提升链路目标一致性?爱奇艺短视频推荐之粗排模型优化历程.html

作者

Ryen Xiang

发布于

2025-04-20

更新于

2025-04-20

许可协议


网络回响

评论