推荐算法丨物品冷启动
物品冷启动指的是如何对新发布的物品做分发。优化物品冷启动在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测试方案时,需要考虑几个问题:
- 实验组、对照组新物品会不会抢流量?
- 新物品、老物品怎么抢流量?
- 同时各类笔记、用户,会不会让内容池变小?
- 如果对新笔记做保量,会发生什么?