Involution Hell
AI 知识库Recommender systems

王树森推荐系统学习笔记_冷启动

王树森推荐系统学习笔记_冷启动

物品冷启动

物品冷启动:评价指标

物品冷启动

  • 小红书上用户新发布的笔记。
  • B 站上用户新上传的视频。
  • 今日头条上作者新发布的文章。

新笔记冷启动

  • 新笔记缺少与用户的交互,导致推荐的难度大、效果差。
  • 扶持新发布、低曝光的笔记,可以增强作者发布意愿。

优化冷启的目标

  1. 精准推荐:克服冷启的困难,把新笔记推荐给合适的用户,不引起用户反感。

  2. 激励发布:流量向低曝光新笔记倾斜,激励作者发布。

  3. 挖掘高潜:通过初期小流量的试探,找到高质量的笔记,给予流量倾斜。

评价指标

  • 作者侧指标:

    • 发布渗透率、人均发布量。
  • 用户侧指标:

    • 新笔记指标:新笔记的点击率、交互率。
    • 大盘指标:消费时长、日活、月活。
  • 内容侧指标:

    • 高热笔记占比。

作者侧指标

发布渗透率(penetration rate)

  • 发布渗透率 = 当日发布人数 / 日活人数
  • 发布一篇或以上,就算一个发布人数。
    • 当日发布人数 = 100 万
    • 日活人数 = 2000 万
    • 发布渗透率 = 100 / 2000 = 5%

人均发布量

  • 人均发布量 = 当日发布笔记数 / 日活人数
    • 每日发布笔记数 = 200 万
    • 日活人数 = 2000 万
    • 人均发布量 = 200 / 2000 = 0.1

发布渗透率、人均发布量反映出作者的发布积极性。

冷启的重要优化目标是促进发布,增大内容池。

新笔记获得的曝光越多,首次曝光和交互出现得越早,作者发布积极性越高。

用户侧指标

新笔记的消费指标

  • 新笔记的点击率、交互率。

    • 问题:曝光的基尼系数很大。
    • 少数头部新笔记占据了大部分的曝光。
  • 分别考察高曝光、低曝光新笔记。

    • 高曝光:比如 >1000 次曝光。
    • 低曝光:比如 <1000 次曝光。

内容侧指标

高热笔记占比

  • 高热笔记:前 30 天获得 1000+ 次点击。
  • 高热笔记占比越高,说明冷启阶段挖掘优质笔记的能力越强。

总结

  • 作者侧指标:发布渗透率、人均发布量。
  • 用户侧指标:新笔记消费指标、大盘消费指标。
  • 内容侧指标:高热笔记占比。

冷启动的优化点

  • 优化全链路包括召回和排序)。
  • 流量调控流量怎么在新物品、老物品中分配)。

物品冷启动:简单的召回通道

召回的依据

冷启召回的困难

  • 缺少用户交互,还没学好笔记 ID embedding,导致双塔模型效果不好。
  • 缺少用户交互,导致 ItemCF 不适用。

双塔模型

ID Embedding

改进方案 1:新笔记使用 default embedding

  • 物品塔做 ID embedding 时,让所有新笔记共享一个 ID,而不是用自己真正的 ID。
  • Default embedding:共享的 ID 对应的 embedding 向量。
  • s到下次模型训练的时候,新笔记才有自己的 ID embedding 向量。

改进方案 2:利用相似笔记 embedding 向量

  • 查找 top k 内容最相似的高曝光笔记。
  • 把 k 个高曝光笔记的 embedding 向量取平均,作为新笔记的 embedding。

多个向量召回池

  • 多个召回池,让新笔记有更多曝光机会。

    • 1 小时新笔记,
    • 6 小时新笔记,
    • 24 小时新笔记,
    • 30 天笔记。
  • 共享同一个双塔模型,那么多个召回池不增加训练的代价。

类目召回

基于类目的召回

  • 系统维护类目索引: 类目笔记列表(按时间倒排)\text{类目} \rightarrow \text{笔记列表(按时间倒排)}

  • 用类目索引做召回: 用户画像类目笔记列表\text{用户画像} \rightarrow \text{类目} \rightarrow \text{笔记列表}

  • 取回笔记列表上前 k 篇笔记(即最新的 k 篇)。

基于关键词的召回

  • 系统维护关键词索引: 关键词笔记列表(按时间倒排)\text{关键词} \rightarrow \text{笔记列表(按时间倒排)}

  • 根据用户画像上的 关键词 做召回。

缺点

  • 缺点 1:只对刚刚发布的新笔记有效。

    • 取回某类目 / 关键词下最新的 k 篇笔记。
    • 发布几小时之后,就再没有机会被召回。
  • 缺点 2:弱个性化,不够精准。

物品冷启动:聚类召回

聚类召回

基本思想

  • 如果用户喜欢一篇笔记,那么他会喜欢内容相似的笔记。

  • 事先训练一个神经网络,基于笔记的类别和图文内容,把笔记映射到向量。

  • 对笔记向量做聚类,划分为 1000 个 clustercluster,记录每个 clustercluster 的中心方向。(kk-means 聚类,用余弦相似度。)

聚类索引

  • 一篇新笔记发布之后,用神经网络把它映射到一个特征向量。

  • 从 1000 个向量(对应 1000 个 clustercluster)中找到最相似的向量,作为新笔记的 clustercluster

  • 索引:

    cluster笔记ID列表(按时间倒排)cluster \rightarrow \text{笔记ID列表(按时间倒排)}

线上召回

  • 给定用户 ID,找到他的 last-nn 交互的笔记列表,把这些笔记作为种子笔记。

  • 把每篇种子笔记映射到向量,寻找最相似的 clustercluster。 (知道了用户对哪些 clustercluster 感兴趣。)

  • 从每个 clustercluster 的笔记列表中,取回最新的 mm 篇笔记。

  • 最多取回 mnmn 篇新笔记。

内容相似度模型

训练内容相似度模型

模型的训练

基本想法:鼓励 cos(a,b+)\cos(\mathbf{a}, \mathbf{b}^+) 大于 cos(a,b)\cos(\mathbf{a}, \mathbf{b}^-)

Triplet hinge loss:

L(a,b+,b)=max{0,cos(a,b)+mcos(a,b+)}L(\mathbf{a}, \mathbf{b}^+, \mathbf{b}^-) = \max\{0, \cos(\mathbf{a}, \mathbf{b}^-) + m - \cos(\mathbf{a}, \mathbf{b}^+)\}

Triplet logistic loss:

L(a,b+,b)=log(1+exp(cos(a,b)cos(a,b+)))L(\mathbf{a}, \mathbf{b}^+, \mathbf{b}^-) = \log(1 + \exp(\cos(\mathbf{a}, \mathbf{b}^-) - \cos(\mathbf{a}, \mathbf{b}^+)))

<种子笔记,正样本>

方法一:人工标注二元组的相似度

方法二:算法自动选正样本

筛选条件:

  • 只用高曝光笔记作为二元组 (因为有充足的用户交互信息)。

  • 两篇笔记有相同的二级类别,比如都是 “菜谱教程”。

  • 用 ItemCF 的物品相似度选正样本。

<种子笔记,负样本>

  • 从全体笔记中随机选出满足条件的:
    • 字数较多 (神经网络提取的文本信息有效)
    • 笔记质量高,避免图文无关。

总结

  • 基本思想:根据用户的点赞、收藏、转发记录,推荐内容相似的笔记。

  • 线下训练:多模态神经网络把图文内容映射到向量。

  • 线上服务

    用户喜欢的笔记特征向量最近的 Cluster新笔记\text{用户喜欢的笔记} \rightarrow \text{特征向量} \rightarrow \text{最近的 Cluster} \rightarrow \text{新笔记}

物品冷启动:Look-Alike 人群扩散

Look-Alike 起源于互联网广告

  • 如何计算两个用户的相似度?

  • UserCF:两个用户有共同的兴趣点。

  • Embedding:两个用户向量的 cos\cos 较大。

Look-Alike 用于新笔记召回

  • 点击、点赞、收藏、转发 —— 用户对笔记可能感兴趣。

  • 把有交互的用户作为新笔记的种子用户。

  • 用 look-alike 在相似用户中扩散。

  • 近线更新特征向量。

  • 特征向量是有交互的用户的向量的平均。

  • 每当有用户交互该物品,更新笔记的特征向量。

利用双塔模型计算出用户的特征向量,将这个特征向量在向量数据库中做最近邻查找。这个过程就叫做 Look-Alike 召回。

如果种子用户喜欢某篇笔记,那么相似用户也可能喜欢这篇笔记,这叫做 Look-Alike 扩散召回通道。

物品冷启动:流量调控

扶持新笔记的目的

  • 目的1:促进发布,增大内容池。

    • 新笔记获得的曝光越多,作者创作积极性越高。
    • 反映在发布渗透率、人均发布量。
  • 目的2:挖掘优质笔记。

    • 做探索,让每篇新笔记都能获得足够曝光。
    • 挖掘的能力反映在高热笔记占比。

工业界的做法

  • 假设推荐系统只分发年龄 <30 天的笔记。

  • 假设采用自然分发,新笔记(年龄 <24 小时)的曝光占比为 1/30。

  • 扶持新笔记,让新笔记的曝光占比远大于 1/30。

流量调控技术的发展

  1. 在推荐结果中强插新笔记。
  2. 对新笔记的排序分数做提权(boost)。
  3. 通过提权,对新笔记做保量。
  4. 差异化保量。

新笔记提权(boost)

新笔记提权

  • 目标:让新笔记有更多机会曝光。

    • 如果做自然分发,24 小时新笔记占比为 1/30。
    • 做人为干涉,让新笔记占比大幅提升。
  • 干涉粗排、重排环节,给新笔记提权。

  • 优点:容易实现,投入产出比好。

  • 缺点

    • 曝光量对提权系数很敏感。
    • 很难精确控制曝光量,容易过度曝光和不充分曝光。

新笔记保量

  • 保量:不论笔记质量高低,都保证 24 小时获得 100 次曝光。

  • 在原有提权系数的基础上,乘以额外的提权的系数,例如:

动态提权保量

用下面四个值计算提权系数

  • 目标时间:比如 24 小时。
  • 目标曝光:比如 100 次。
  • 发布时间:比如笔记已经发布 12 小时。
  • 已有曝光:比如笔记已经获得 20 次曝光。

计算公式:

提权系数=f(发布时间目标时间,已有曝光目标曝光)=f(0.5,0.2)\text{提权系数} = f\left( \frac{\text{发布时间}}{\text{目标时间}}, \frac{\text{已有曝光}}{\text{目标曝光}} \right) = f(0.5, 0.2)

保量的难点

保量成功率远低于 100%

  • 很多笔记在 24 小时达不到 100 次曝光。
  • 召回、排序存在不足。
  • 提权系数调得不好。

线上环境变化会导致保量失败

  • 线上环境变化:新增召回通道、升级排序模型、改变重排打散规则……
  • 应对措施:线上环境变化后,需要调整提权系数。

给新笔记分数 boost 越多,对新笔记越有利?

  • 好处:分数提升越多,曝光次数越多。
  • 坏处:把笔记推荐给不太合适的受众。
    • 提权系数过高,导致预估兴趣分数偏高,会将笔记推荐给不合适的受众
    • 点击率、点赞率等指标会偏低。
    • 长期会受推荐系统打压,难以成长为热门笔记。

差异化保量

  • 保量:不论新笔记质量高低,都做扶持,在前 24 小时给 100 次曝光。

  • 差异化保量:不同笔记有不同保量目标,普通笔记保 100 次曝光,内容优质的笔记保 100~500 次曝光。

差异化保量

  • 基础保量:24 小时 100 次曝光。

  • 内容质量:用模型评价内容质量高低,给予额外保量目标,上限是加 200 次曝光。

  • 作者质量:根据作者历史上的笔记质量,给予额外保量目标,上限是加 200 次曝光。

  • 一篇笔记最少有 100 次保量,最多有 500 次保量。

总结

  • 流量调控:流量怎么在新老笔记之间分配。

  • 扶持新笔记:单独的召回通道,在排序阶段提权。

  • 保量:帮助新笔记在前 24 小时获得 100 次曝光。

  • 差异化保量:根据内容质量、作者质量,决定保量目标。

物品冷启动:AB测试

新笔记冷启的 AB 测试

  • 作者侧指标

    • 发布渗透率、人均发布量。
  • 用户侧指标

    • 对新笔记的点击率、交互率。
    • 大盘指标:消费时长、日活、月活。

用户侧实验

用户侧实验

缺点

  • 限定:保量 100 次曝光。

  • 假设:新笔记曝光越多,用户使用 APP 时长越低。

  • 新策略:把新笔记排序时的权重增大两倍。

  • 结果(只看消费指标)

    • AB 测试的 diff 是负数(策略组不如对照组)。

    • 如果推全,diff 会缩小(比如 -2% ➝ -1%)。

    • 这是因为新笔记采取保量。实验组的新笔记曝光量偏多,对照组偏少。比如有90篇新笔记,每篇保量100次,一共曝光9000次。实验组曝光了6000次,对照组曝光了3000次。试验结束后,原来实验组的 50% 用户曝光了4500次,对照组的 50% 用户也曝光了4500次,因此实验计算的 diff 偏大。

作者侧实验

作者侧实验:方案一

缺点:新笔记之间会抢流量

  • 设定:

    • 新老笔记走各自队列,没有竞争。

    • 重排:分给新笔记 1/3 流量,分给老笔记 2/3 流量。

  • 新策略:把新笔记的权重增大两倍。

  • 结果(只看发布指标):

    • AB 测试的 diff 是正数(策略组优于对照组)。

    • 如果推全,diff 会消失(比如 2% ➝ 0)。

缺点:新笔记和老笔记抢流量

  • 设定:新老笔记自由竞争。

  • 新策略:把新笔记排序时的权重增大两倍。

  • AB 测试时,50% 新笔记(带策略)跟 100% 老笔记抢流量。

  • 推全后,100% 新笔记(带策略)跟 100% 老笔记抢流量。

  • 作者侧 AB 测试结果与推全结果有些差异。

作者侧实验:方案二

方案二比方案一的优缺点

  • 优点:新笔记的两个桶不抢流量,作者侧实验结果更可信。

  • 相同:新笔记和老笔记抢流量,作者侧 AB 测试结果与推全结果有些差异。

  • 缺点:新笔记池减小一半,对用户体验造成负面影响。

作者侧实验:方案三

对公司业务造成影响。

总结

  • 冷启的 AB 测试需要观测 作者发布指标 和 用户消费指标。

  • 各种 AB 测试的方案都有缺陷。(小红书有更好的方案,但也不完美。)

  • 设计方案的时候,问自己几个问题:

    • 实验组、对照组新笔记会不会抢流量?
    • 新笔记、老笔记怎么抢流量?
    • 同时隔离笔记、用户,会不会让内容池变小?
    • 如果对新笔记做保量,会发生什么?

贡献者