【王树森推荐系统】推荐系统涨指标的方法03:排序模型

精排模型的改进

  • 推荐系统的精排模型大多长这样
    在这里插入图片描述

精排模型:基座

  • 基座的输入包括离散特征和连续特征,输出一个向量,作为多目标预估的输入
  • 改进 1:基座加宽加深,计算量更大,预测更准确。embedding 的参数量特别大,但是全连接层的参数又不够大,所以加宽加深可以让预测更准。由于计算量也加大,所以就有一个投入产出比的问题。如果算力比较强而且工程架构比较先进,那么基座可以大一些,比如 6 个全连接层,否则基座会很小,只有一两层
  • 改进 2:做自动的特征交叉,比如 bilinear 和 LHUC
    在这里插入图片描述
  • 改进 3:特征工程,比如添加统计特征,多模态内容特征

精排模型:多目标预估

在这里插入图片描述

  • 基于基座输出的向量,同时预估点击率等多个目标
  • 改进 1:增加新的预估目标,并把预估结果加入融合公式
    • 最标准的目标包括点击率,点赞率,收藏率,转发率,评论率等
    • 寻找更多目标,比如加入评论区,给他人写的评论点赞等
    • 把新的预估目标加入融合公式
  • 改进 2:MMoE,PLE 等结构可能有效,但往往无效
  • 改进 3:纠正 position bias 可能有效,也可能无效
    在这里插入图片描述

粗排模型的改进

  • 粗排的打分量比精排大 10 倍,因此粗排模型必须够快
  • 简单模型:多向量双塔模型,同时预估点击率等多个目标
  • 复杂模型:三塔模型效果好,但工程实现难度大

粗精排一致性建模

  • 蒸馏精排训练粗排,让粗排和精排更一致
  • 方法 1:pointwise蒸馏
    • yyy 是用户真实行为,设 ppp 是精排的预估
    • y+p2{y+p} \over 22y+p 作为粗排拟合的目标
    • 例:
      • 对于点击率目标,用户有点击(y = 1),精排预估 p=0.6p=0.6p=0.6
      • y+p2=0.8{{y+p} \over 2 }=0.82y+p=0.8 作为粗排拟合的点击率目标
  • 方法 2:pairwise 或 listwise 蒸馏
    • 给定 k 个候选物品,按照精排预估做排序
    • 做 learning to rank(LTR),让粗排拟合物品的序(而非值)
    • 例:
      • 对于物品 iiijjj ,精排预估点击率为 pi>pjp_i > p_jpi>pj
      • LTR 鼓励粗排预估点击率满足 qi>qjq_i >q_jqi>qj,否则有乘法
      • LTR 通常用 piarwise logistic loss
  • 优点:粗精排一致性建模可以提升核心指标
  • 缺点:如果精排出 bug,精排预估值 ppp 有偏,会污染粗排训练数据,让粗排也变差,这个问题是不易被察觉的

用户行为序列建模

  • 物品ID 为用户最近交互过的物品 ID
    在这里插入图片描述
  • 最简单的方法是对物品向量取平均,作为一种用户特征
  • DIN 使用注意力机制,对物品向量做加权平均
  • 工业界目前沿着 SIM 的方向做发展,先用类目等属性筛选物品,然后用 DIN 对物品向量做加权平均
  • 改进 1:增加序列长度,让预测更准确。但是会增加计算成本和推理时间。主要看工程架构最多能抗多少的序列长度
  • 改进 2:筛选的方法,比如用类目,物品向量表征聚类
    • 离线用多模态神经网络提取物品内容特征,将物品表征为向量
    • 离线将物品向量聚为 1000 类,每个物品有一个聚类序号,通常用层次聚类
    • 线上排序时,用户行为序列中有 n=1,000,000n=1,000,000n=1,000,000 个物品。某候选物品的聚类序号是 70,对 nnn 个物品做筛选,只保留聚类序号为 70 的物品。nnn 个物品只有数千个会被保留下来
    • 同时有好几种筛选方法,取筛选结果的并集
  • 改进 3:对用户行为序列中的物品,使用 ID 以外的一些特征
  • 概括:沿着 SIM 的方向发展,让院士的序列尽量长,然后做筛选降低序列长度,最后将筛选结果输入 DIN

在线学习

全量更新 vs 增量更新

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在线学习的资源消耗

  • 效果非常好,但是算力消耗非常大
  • 既需要在凌晨做全量更新,也需要全天不间断做增量更新,所以需要额外的算力
  • 设在线学习需要 10,000 CPU core 的算力增量更新一个精排模型。推荐系统一共需要多少额外的算力给在线学习?
  • 为了做 AB 测试,线上同时运行多个不同的模型。每个模型都要做在线学习
  • 如果线上有 m 个模型,则需要 m 套在线学习的机器
  • 线上有 m 个模型,其中 1 个是 holdout,1 个是推全的模型,m - 2 个测试的新模型

在这里插入图片描述

  • 推全模型可能与 holdout 相同,也可能不同
  • 图中有 4 套精排模型,那么就需要 4 套在线学习的资源。也就是说如果公司给了 4 套在线学习的资源,那么就只能测试两套新模型。想看 7 日留存模型就必须在线上跑 7 天,想看 30 日留存就必须跑 30 天。召回和重排越是同理,每个模型都需要一套在线资源,不过召回和粗排模型小,消耗的资源没那么多
    在这里插入图片描述
  • 线上有 mmm 个模型,其中 1 个是 holdout,1 个是推全的模型,m - 2 个测试的新模型
  • 每套在线学习的机器成本都很大,因此 m 数量很小,制约模型开发迭代的效率
  • 在线学习对指标的提升巨大,但是会制约模型开发迭代的效率

老汤模型

  • 解决不了的话新模型很难超过老模型,影响迭代效率
  • 用每天新产生的数据对模型做 1 epoch 的训练
  • 久而久之,老模型训练得非常好,很难被超过
  • 对模型做改进,重新训练,但是很难追上老模型
  • 问题 1:如何快速判断新模型结构是否优于老模型?(不需要追上线上的老模型,只需要判断新老模型谁的结构更诱)
  • 问题 2:如何更快追平,超过线上的老模型?(只有几十天的数据,心魔新就能追上训练上百天的老模型)

问题 1:如何快速判断新模型结构是否优于老模型?

  • 对于新,老模型结构都随机初始化全连接层
  • Embedding 层可以是随机初始化,也可以是复用老模型训练好的参数
  • nnn 天的数据训练新老模型(从就到新,训练 1 epoch)
  • 如果新模型显著由于老模型,新模型很可能更优
  • 只是比较新老模型结构谁更好,而非真正追平老模型

问题 2:如何快速判断新模型结构是否优于老模型?

  • 已经得出初步结论,认为新模型很可能优于老模型。用几十天的数据训练新模型,早日追平老模型
  • 方法 1:尽可能多地付用老模型训练好的 embedding 层,避免随机初始化 embedding 层(embedding 层是对用户,物品特点的记忆,比全连接层学得慢)
  • 方法 2:用老模型做 teacher,蒸馏新模型(用户真实行为是 yyy,老模型预测是 ppp,用 y+p2{y+p} \over 22y+p 作为训练新模型的目标)

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值