推荐算法丨物品冷启动

物品冷启动指的是如何对新发布的物品做分发。优化物品冷启动在UGC平台尤为重要,这是因为新物品数量巨大,内容质量良莠不齐,分发非常困难。

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

优化冷启动的目标

  • 精准推荐:克服冷启的困难,把新物品推荐给合适的用户,不引起用户反感。
  • 激励发布:流量向低曝光新物品倾斜,激励发布。
  • 挖掘高潜:通过初期小流量的试探,找到高质量的物品,给与流量倾斜。

物品冷启动的指标

  • 作者侧指标:发布渗透率、人均发布量
    • 发布渗透率=当日发布人数/日活人数(发布一篇或以上的用户算一个发布人数)。
    • 人均发布量=当日发布笔记数/日活人数。
  • 用户侧指标:
    • 新笔记指标:点击率、交互率
    • 大盘指标:消费时长、日活、月活
  • 内容侧指标(非必需):高热物品占比

召回

冷启动召回的难点是缺少用户交互,还没学好物品 ID embedding,导致双塔模型效果不好。而且缺少用户交互会导致 ItemCF 不适用。因此物品冷启动需要新的召回通道。

改造双塔模型

新物品缺少用户交互,还没学好物品 ID embedding,如果要使用双塔模型需要解决如何确定物品ID的问题。有两种解决方案:

新物品使用default embedding

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

利用相似物品的embedding向量

  • 查找top k内容最相似(根据标签、文字、图片等)的高曝物品。

  • 把k个物品的向量取平均作为新物品的向量。

可以设置多个召回池,如1小时新笔记、6小时内新笔记、24小时内新笔记、30天内新笔记,让新笔记有更多曝光机会。所有召回池共享一个双塔模型,因此不会增加训练代价。

类目召回

系统维护从类目到笔记的索引,每个类目下的笔记列表根据时间倒排。做召回时,根据用户画像取回用户感兴趣的几个类目下的笔记列表,每个笔记列表取最新的k篇笔记做为召回结果。

同样的原理还可以实现基于关键词的召回。

这样的方法有以下缺点

  • 只对刚刚发布的新笔记有效,发布几小时后就再没有机会被召回。
  • 弱个性化,不够精准。

聚类召回

聚类召回是基于物品内容的召回通道。它假设如果用户喜欢一个物品,那么用户会喜欢内容相似的其他物品。可以事先训练一个神经网络,基于物品的类目和内容,把物品映射到向量。对物品向量做聚类,划分为1000个cluster,记录每个cluster的中心方向(k-means聚类,用余弦相似度)。

聚类索引

  • 当一个新物品发布后,用神经网络把它映射到一个特征向量。
  • 从1000个向量(对应1000个cluster)中找到最相似的向量,作为新物品的cluster。
  • 索引:cluster→物品ID列表(按时间倒排)。

线上召回

  • 给定用户ID,找到塔的last-n交互的物品列表,把这些物品作为种子物品。
  • 每个种子物品映射到向量,寻找最相似的cluster。
  • 从每个cluster的笔记列表中,取回最新的m篇笔记,最多取回mn个新物品。

聚类召回同样只对新发布的笔记有效,但聚类召回的推荐比简单按类目推荐更加精准。

需要训练一个神经网络来将内容映射成向量。例如对于图文内容,可以用CNN处理图片信息,用BERT处理文字信息,分别生成一个向量并做拼接,再用一个全连接层映射成新的向量。具体训练如下:

  • 使用模型预测种子物品、正样本、负样本的向量
  • 鼓励尽可能小。使用Triplet hinge loss或Triplet logistic loss,这两个损失函数见召回的双塔模型训练。

正样本的选取可以采用人工标注的方式,但这样成本太高。

可以利用算法自动选取正样本:

  • 筛选条件:
    • 只用高曝光物品作为二元组(因为有充足的用户交互信息)。
    • 两个物品有相同的二级类目。
  • 用ItemCF的物品相似度选取正样本。

负样本可以直接从全体物品中随机选取内容较丰富、质量高的物品。

Look-Alike人群扩散

Look-Alike是互联网广告常用的方法,也可以应用在推荐系统。Look-Alike 适用于发布一段时间、但是点击次数不高的物品。

Look-Alike主要思想如下:

  • 如果用户与物品发生点击、点赞等交互,则认为用户对物品可能感兴趣。
  • 把有交互行为的用户作为新物品的种子用户。
  • 用look-alike在种子用户的相似用户中扩散。
    • 取种子用户向量(双塔模型生成)的平均作为物品向量表征(近线更新,即分钟级别的更新),存储在向量数据库。
    • 做推荐时,拿用户向量对向量数据库做最近邻查找。

物品从发布到热门,主要的透出渠道会经历三个阶段:

  • 类目召回、聚类召回。它们是基于内容的召回通道,适用于刚刚发布的物品。
  • Look-Alike 召回。它适用于有点击,但是点击次数不高的物品。
  • 双塔、ItemCF、Swing 等等。它们是基于用户行为的召回通道,适用于点击次数较高的物品。

流量调控

流量调控是物品冷启动最重要的一环,直接影响作者发布指标。工业中往往要把流量向新物品倾斜,这是为了:

  • 提高作者创作积极性,提高发布渗透率、人均发布量。
  • 让每个新物品都能获得足够曝光,以挖掘优质笔记,提高高热物品占比。

流量调控的发展通常会经历这几个阶段:

  • 在推荐结果中强插新物品。
  • 对新物品做提权(boost):给新物品的分数乘以一个系数。
    • 容易实现,投入产出比好。
    • 曝光量对提权系数很敏感,很难精确控制曝光量。
  • 通过提权,对新物品做保量
    • 例如保证物品24小时内获得100次曝光。
    • 在原有提权系数上,离保量目标越远乘以一个更大的系数。
    • 提权系数=
    • 因为推荐链路、提权系数、线上环境等问题,保量成功率往往远低于100%。
    • 不能直接给所有新物品一个很大的提权系数,否则会把物品推荐给不合适的受众。
  • 差异化保量。
    • 结合内容质量以及作者历史作品质量给予物品额外的保量目标。

AB测试

推荐系统常用的AB测试只考察用户侧消费指标(新笔记点击率、交互率,大盘指标),而冷启动的AB测试还需要额外考察作者侧发布指标(发布渗透率和人均发布量)。

用户侧实验

推荐系统标准的AB测试中,将所有用户分为实验组和对照组,将所有物品按不同的策略向两组用户分别做推荐,看是否存在diff。

将这种方法应用到冷启动的AB测试,可能会导致推全后与AB测试存在差异。例如这样一个实验:

  • 限定:保量100次曝光。
  • 假设:新物品曝光越多,用户使用APP时长越低。
  • 新策略:把新物品排序时的权重增大两倍。
  • 结果(只看用户消费指标):
    • AB测试的diff是负数(实验组不如对照组)。
    • 如果推全,diff会缩小。

这是因为对实验组的新物品做提权,则实验组会看到更多的新物品。而新物品做保量100次曝光是确定的,新物品在实验组取得更多曝光,就会在对照组取得更少曝光,从而使diff变大。实验组策略的变化会对对照组造成影响,所以实验会和推全结果存在差异。

作者侧实验

作者侧实验比用户侧实验更加复杂,已知的实验方案都存在缺陷。

方案一

  • 新笔记的作者分为实验组和对照组,实验组使用新策略,对照组使用原策略,同时面向所有用户做推荐。
  • 这种方案新物品之间会抢流量。例如新策略是把新物品的权重增大两倍,由于实验组和对照组的新物品存在竞争关系,实验组的策略会对对照组造成较大影响,实验组的物品会得到更多的曝光而对照组的物品曝光将大大减少。
  • 此外,如果新笔记和老笔记存在竞争关系,那么AB测试时只有50%带策略的新笔记跟所有老笔记抢流量,而推全后则是100%,实验和推全结果会存在差异。

方案二

  • 用户也分为实验组和对照组,实验组的新物品只向实验组的用户推荐,对照组的新物品只向对照组的用户推荐。

  • 这种方案两组新物品不会抢流量,实验结果更可信。但是,新物品仍然会和老物品抢流量,AB测试和推全结果有差异。并且,这会导致给用户推荐的内容池较少一半,影响用户体验,降低消费测指标,结果得不偿失。

方案三

  • 老笔记也分为实验组和对照组,实验组的新物品和老物品都只对实验组的用户做推荐,对照组亦然。
  • 这种方案相当于把整个平台一分为二,实验结果更加准确。但会严重损害消费指标。

设计冷启动AB测试方案时,需要考虑几个问题:

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