信息流推荐算法小结

面试记录

蚂蚁金服:

  • 多目标跷跷板怎么快速调,逻辑回归中似然函数和概率的关系;编程题,实现一个树的数据结构,可以支持遍历;写 FM layer。

字节电商:

  • 一面,DIN 无效怎么分析;编程题(1)中序后序树子节点;(2)估算 pi
  • 二面,用户序列笛卡尔积量级大,特征重要性是否有效;时长 loss 分类问题;编程题(1)旋转数组找中点;(2)链表随机采样 蓄水池算法
  • 三面,多目标跷跷板问题怎么调;多目标 MMoE 怎么分析;debias 还有什么方法;多目标 loss 融合方法。编程题(1)堆排快排,不使用额外空间
  • 互娱一面,多目标 loss weight 调整;粗排 serving 方式;编程题(1)链表加法,(2)判断 B 是 A 的子树

腾讯:

  • FM 相关 N 阶特征交叉空间复杂度;数据倾斜怎么解决;A 和 B 抛硬币,A先抛赢的概率;debias 相邻的方法,编程题(1)股票买卖;(2)排序

信息流

信息流推荐场景:
推荐内容混品类推荐,涉及的品类包括旅拍图文、短视频动图、酒店、景点,是内部内容化消费最大的流量入口,为各bu导流,契合公司内容化转型战略。

线上推荐评估:

  1. uv 点击率、人均点击 pv 数
  2. 消费类:消费时长、总时长
  3. 生态类:集中度、新鲜度、多样性
  4. 留存,渗透率
  5. 交互类:点赞、收藏、分享、关注、评论

召回

  • 向量化召回
    • u2i: YoutubeDNN user-emb 和 item-emb 做点积召回
    • i2i: ICF,点击序列构建 word2vec (加入side information),node2vec (userid + itemid),EGES
    • u2u: YoutubeDNN 的 user embedding 相似度召回;node2vec 加入 user 建图得到 user embedding
    • 向量化召回样本trick,样本中增加负采样,否则会逐步变成高热通道;负采样尝试全局负采样,batch 内负采样,修正loss,实验除主指标正向以外,集中度显著下降,新鲜度上升
  • 策略类召回
    • 城市、poi类召回 基于城市意图分,订单、意图、熟悉、本地、热门城市下按照产品质量分召回、分段、搭配退场进行召回
    • 交互作者 IAR
    • Tag 召回 (主题和图片标签)
    • 新用户产品池
  • 探索类召回
    • 新入库产品的 explore 通道
    • EE 汤普森采样 小时级 online learning

排序

  • 粗排 (分阶段)

    • 双塔结构,item 离线计算好,user 在线推理,特征引入用户行为序列,线上做点积后取 topk
    • user 和 item 塔内做 DCN,feasign embedding 的生成由只基于 show 改为基于 show_click score
    • 粗排与精排一致构建多目标模型,引入时长
    • 蒸馏,学习精排的 soft label 的蒸馏 loss 叠加真实 label 的真实 loss。进一步可以让精排的 teacher 模型和 student 模型联合学习
    • 浅层 COLD,SENet,构建浅层网络,引入交叉特征,item 历史的 show click
  • 精排

  • 模型结构迭代

    1. 单目标 ctr 尝试 LR、WDL、DNN
    2. 参考位置去偏 debias, PAL 对位置作 onehot 拼接在网络不同层上,最后一层效果最好,生态指标有收益,可视化可以学到不同位置的权重变化
    3. 多目标点击和时长 bottom share 架构,尝试曝光时长算作 0 来拟合以及mask掉不加入拟合,即预估曝光时长和点击时长,后者效果更好;线上调整融合参数作 AB
    4. 时长目标尝试截断后归一化 loss 为 mse loss 做1/2次幂,和点击量纲有差距;后改为归一化后转为分类模型,预估加权的logloss,有收益
    5. label 域因果关系引入 ESMM,有提升;引入 MMoE 4 个 expert 有收益,点击提升更多,时长提升较少;引入 CGC 提升不明显,缓解跷跷板
    6. 多目标引入 5 个交互指标,点赞、收藏、分享、关注、评论,单独迭代,分为 2 阶段
    7. 多目标权重 https://mp.weixin.qq.com/s/JaMSZfJZ6zPEOueuVg6XHw ,GradNorm 主要 2 个要点,loss 量级接近、不同任务以相近的速度学习
    8. 考虑蒸馏,蒸馏点后的行为
  • 特征迭代 https://zhuanlan.zhihu.com/p/95779014

    1. 用户、item、context、

Q1: 如何将 embedding 融入LR框架中?
A: 不推荐直接使用,原因不够快捷、变为黑盒破坏LR的解释性、不稳定。
衍生出一系列衡量 <user, item> 相关度的指标,在 LR 中使用 衍生指标,如将计算收藏或点击的item的listing embedding 集合求均值,当成这个user下行为的embedding,再与候选的item embedding做点积,计算相似度喂入模型,参考 airbnb。

Q2: 召回和粗排的双塔有什么异同?
A: 1. 样本
召回正例是真实正例,负例通过采样(全局采样、batch内采样等)得到。
粗排正负例都是从用户的真实正负例中选取。
2. 特征:无区别
3. 网络结构:粗排和召回在网络结构的区别是:双塔的交互时机不同。
召回一般是通过双塔分别得到 user emb 和 item emb,然后简单进行cos/mul计算;为了效率以及使用近邻搜索组件来进行线上召回,双塔之间的交互只能在最后的emb层来做。
粗排可以在双塔的底层就可以对不同塔的特征进行交互得到交叉特征。
4. Loss
召回一般是单目标模型,通过pointwise(sigmoid)或者pairwise(sample softmax)来计算loss。如果需要达到多目标的效果。一般业内有两种做法,一种根据多个目标训练多个召回模型,然后线上多路召回/融合;一种是不同行为做加权生成label权重,通过调节label权重来达到多目标的效果。
粗排一般是多目标模型,不同目标得分进行融合得到粗排分。
5. 评估
召回使用的评估指标是hit rate等指标;
粗排一般使用排序的评估指标auc、uauc等。

经典双塔模型,user embedding 和 item embedding 作内积,使得用户和正例 item 在 embedding 空间更接近,和负例 item 在 embedding 空间拉远。损失函数为交叉熵转化为一个分类问题。
传统双塔模型的问题,(1) 组合特征由于分离结构无法使用,但可以拆分分离问题不算太大;(2)User 侧和 Item 侧的特征交互时间点的问题,在最后阶段交互时机太晚,特征损失较大。