1 冷启动的优化何评价
1.1 物品的冷启动
针对于新发布的笔记和视频:
- ⼩红书上⽤⼾新发布的笔记
- B站上⽤⼾新上传的视频
- 今⽇头条上作者新发布的⽂章
上述问题讨论的都是UGC
(User-Generated Content,用户生成内容)的物品冷启动问题。而与UGC相对的是PGC
(Platform Generated Content)的物品冷启动问题。UGC比PGC更容易引起用户的注意,但PGC的物品冷启动问题却更加复杂。
1.2 特殊对待新笔记的原因
新笔记缺少与⽤⼾的交互,导致推荐的难度⼤,效果差扶持新发布、低曝光的笔记有两个⽬的: 1. 可以促进作者发布(否则发出来的新笔记没⼈看,就丧失发布笔记的动⼒),进 ⽽增⼤内容池 2. 挖掘优质笔记,让每篇新笔记都有⾜够曝光
1.3 优化冷启动的目标
- 精准推荐:克服冷启的困难,把新笔记推荐给合适⽤⼾,不引起⽤⼾反感
- 激励发布:流量向低曝光新笔记倾斜,激励作者发布
- 挖掘⾼潜:通过初期⼩流量的试探,给每篇新笔记曝光机会,找到⾼质量的笔记 给予流量倾斜
1.4 冷启动评价指标
1.4.1 作者侧指标
作者侧指标反映作者发布积极性(低曝光新笔记扶持越好,作者侧指标越⾼),分为发布渗透率、⼈均发布量
发布渗透率(penetration rate)
=当⽇发布⼈数/⽇活⼈数,即每天的作者⽐例发布⼀篇或以上,就算(仅有)⼀个发布⼈数⼈均发布量
=当⽇发布笔记数/⽇活⼈数,即平均每个⼈发多少篇笔记⼈均发布量通常⽐发布渗透率⼤,因为存在⼀些作者⼀天发很多篇笔记新笔记获得的曝光越多,⾸次曝光和交互出现得越早,作者发布积极性越⾼
1.4.2 用户侧指标
⽤⼾侧指标反映推荐是否精准(是否引起反感),它分为新笔记消费指标和⼤盘消费指标。
新笔记消费指标
这之中主要包括新笔记的点击率、交互率。
问题:曝光的基尼系数很⼤,少数头部新笔记占据了⼤部分的曝光;头部新笔记推的很准,效果也会很好。
解决方式:
设置阈值,分别考察⾼曝光、低曝光新笔记
- ⾼曝光——⽐如>1000次的曝光(这些笔记甚⾄不⽤冷启动也能推的很准)
- 低曝光——⽐如<1000次的曝光(重点关注)
⼤盘消费指标
这之中主要包括消费时长、日活、月活。
冷启动不是为了优化⼤盘指标变得很好,⽽是保证不要伤害⼤盘指标
作者侧发布指标变好,⽤⼾侧⼤盘消费指标变差 原因:低曝光笔记缺乏⽤⼾交互,推荐不准;增加这些笔记的推荐,⽤⼾体验会下降
内容侧指标
内容侧指标指的是⾼热笔记占⽐(⼩红书中,⾼热笔记指的是30天点击超过1000的笔 记)⾼热笔记占⽐越⾼,说明冷启阶段挖掘优质笔记的能⼒越强。
1.5 冷启动的优化点
- 优化全链路(包括召回和排序,保证低曝光/新发布笔记能正常⾛完链路,且推荐得很准)
- 流量调控(流量如何在新物品、⽼物品中分配)
2 冷启动召回的难点
2.1 新笔记冷启动时面临的情况
对于新笔记⽽⾔:笔记含有图⽚、⽂字、地点等信息,以及算法或⼈⼯标注的标签 但没有⽤⼾点击、点赞等信息,且没有笔记ID embedding
(笔记ID embedding需要通过⽤⼾和笔记交互来学习,但⽤⼾和新笔记缺乏这个过程,因此这个向量是初始化的,还没有经过反向传播来更新,所以新笔记的IDembedding啥也不是,反映不出笔记特点)
2.2 冷启动召回的困难
缺少⽤⼾交互,还没学好ID embedding,导致: 1. 双塔模型效果不好 2. ItemCF不适⽤
ItemCF不适⽤的原因:新物品未和⽤⼾进⾏交互,⽆法判断和旧物品的相似度
3 冷启动召回的改进
- 双塔模型召回
- 类目、关键词召回
- 聚类召回
- Look-ALIke召回
3.1 双塔模型的改进
3.1.1 新笔记使用default embedding
物品塔做ID embedding时,让所有新笔记共享⼀个ID,⽽不是⽤⾃⼰真正的ID Default embedding:共享的ID对应的embedding向量(它是学出来的,不是直接初始化的)
新笔记发出后,逐渐会有点击和交互,当到下次模型训练的时候,新笔记才有⾃⼰的ID embedding向量。
3.1.2 利用相似笔记embedding向量(平均)
查找topk内容最相似的⾼曝光笔记(每个笔记的图⽚、⽂字、类⽬通过多模态神经⽹络得到向量,查找最相似的k个向量),然后将这k个⾼曝笔记的embedding向量取平均,作为新笔记的embedding(⾼曝笔记的embedding通常学得很好)
3.1.3 多个向量召回池
采⽤多召回池(如1⼩时新笔记、6⼩时新笔记、24⼩时新笔记、30天笔记等),让新笔记有更多曝光机会。
这些召回池共享同⼀个双塔模型,不增加训练代价
3.2 类目、关键词召回
3.2.1 类目召回
系统维护类⽬索引:类⽬⟶笔记列表(按时间倒排)
⽤类⽬索引做召回:⽤⼾画像⟶感兴趣的类⽬⟶笔记列表。然后取回笔记列表上前k篇笔记(即取回对应类⽬最新的k篇)
3.2.2 关键词召回
系统维护关键词索引:关键词⟶笔记列表(按时间倒排)
根据⽤⼾画像上的关键词做召回,取回最新的k篇笔记
3.2.3 两种召回的缺点
- 只对刚刚发布的新笔记有效(笔记发布⼏⼩时后就再也没有机会被召回)
- 弱个性化,不够精准(依据类⽬、关键词做召回太宽泛了,不具体)
3.3 聚类召回
3.3.1 基本思想
如果⽤⼾喜欢⼀篇笔记,那么他会喜欢内容相似的笔记。
3.3.2 线下训练
事先训练⼀个神经⽹络,基于笔记的类⽬和图⽂内容,把笔记映射到向量
对笔记向量做聚类,划分为1000cluster,记录每个cluster的中⼼⽅向(k-means聚类,⽤余弦相似度)
3.3.3 聚类索引
步骤:
- ⼀篇新笔记发布之后,根据它的图⽂内容,⽤神经⽹络把它映射到⼀个特征向量
- 然后从1000个向量(对应1000个cluster)中找到最相似的向量,作为新笔记的cluster
索引:cluster⟶笔记ID列表(按时间倒排),线上召回时选择列表前⼏篇笔记
3.3.4 线上召回
- 给定⽤⼾ID,找到他的
last-n交互
的笔记列表,把这些笔记作为种⼦笔记
- 把每篇种⼦笔记映射到向量,寻找最相似的n个cluster(知道⽤⼾对哪些cluster感兴趣)
- 从每个cluster的笔记列表中,取回最新的m篇笔记,因此最多取回mn篇新笔记线上召回的缺点:和类⽬、关键词召回类似,都只对刚刚发布的新笔记有效
3.3.5 内容相似度模型
需要分别提取两篇笔记(实际是⼀篇笔记和⼀个cluster)的图⽂特征,再考虑它们的余弦相似度。
其中:
- CNN和BERT模型是预训练好的,可以固定它的参数,也可以做fine-tune
- 全连接层需要进⾏训练
模型训练
目标:种子笔记何正样本笔记相似度高,和负样本笔记相似度低。
\[ \text{Triplet hinge Loss}=max(0,m+\cos(a,b^-)-\cos(a,b^+)) \]
\[ \text{Triplet logistic Loss}=\log(1+\exp(\cos(a,b^-)-\cos(a,b^+))) \]
方式:通过最小化损失函数得到神经网络
正负样本选取
<种⼦笔记,正样本>
- ⽅法:
- ⽅法⼀:⼈⼯标注⼆元组的相似度(代价太⼤)
- ⽅法⼆:算法⾃动选正样本
- 筛选条件:
- 只⽤⾼曝光笔记作为⼆元组(有充⾜的⽤⼾交互信息)
- 两篇笔记有相同的⼆级类⽬(如都是“菜谱教程ˮ)
- ⽤ItemCF的物品相似度选正样本
- ⽅法:
<种⼦笔记,负样本>
⽅法:从全体笔记中随机选出满⾜条件的
- 字数较多(神经⽹络提取的⽂本信息有效)
- 笔记质量⾼,避免图⽂⽆关
3.4 Look-Alike人群扩散召回
Look-Alike
:寻找和种子用户相似的Look-Alike用户- 如何计算两个用户的相似度:
UerCF
:两个用户有共同的兴趣点用户ID embedding
:两个用户向量的余弦相似度较大
3.4.1 Look-Alike用于新笔记召回
思想
点击、点赞、收藏、转发——⽤⼾对笔记可能感兴趣,把和新笔记有交互的⽤⼾作为新笔记的种⼦⽤⼾,若⼀个⽤⼾可能和种⼦⽤⼾相似,那么就⽤Look-Alike在相似⽤⼾中扩散。
具体方式
- 得到的新笔记特征向量是有交互⽤⼾的向量的平均。
- 每当有⽤⼾交互该物品,则更新笔记的特征向量(近线更新,即有新⽤⼾交互该物品后⼏分钟后做到更新)
- 然后将新笔记特征向量存在向量数据库中,⽤⼾利⽤双塔模型得到⽤⼾特征的向量,将其作为query在数据库中做最近邻查找,得到⼏⼗个向量,通过向量反推新笔记,得到几十篇新笔记(实际是在考虑和⽤⼾最相似的⼀批种⼦⽤⼾)
4 冷启动的流量调控
4.1 扶持新笔记的做法
- 假设推荐系统只分发年龄<30天的笔记
- 假设采⽤⾃然分发,新笔记(年龄<24⼩时)的曝光占⽐为1/30
- 扶持新笔记,让新笔记的曝光占⽐远⼤于1/30
4.2 流量调控技术
- 在推荐结果中强插新笔记
- 对新笔记的排序分数做提权(boost)
- 通过提权,对新笔记做保量(保证新笔记的曝光达到⼀定数量)
- 差异化保量
4.2.1 新笔记提权
- 目的:做人为干涉,提升新笔记的曝光度
- 干涉环节
- 粗排
- 重排
- 干涉方式:对新笔记提权,让其占比和分数大幅提升。
- 特点
- 优点:容易实现,投⼊产出⽐好
- 缺点:曝光量对提权系数很敏感,因此很难精确控制曝光量,容易过度曝光和不充分曝光
4.2.2 新笔记保量
- 做法:不论笔记质量⾼低,都保证前24⼩时获得100次曝光
- 方式:在原有提权系数的基础上,乘以额外的提权系数,如下图
- 提权系数的计算:
- ⽬标时间:如24个⼩时
- ⽬标曝光:如100次
- 发布时间:如笔记已经发布12个⼩时
- 已有曝光:如笔记已经获得20次曝光
- 计算公式:
\[ \text{提权系数} = f(\frac{\text{发布时间}}{\text{⽬标时间}},\frac{\text{已有曝光}}{\text{⽬标曝光}})=f(0.5, 0.2) \]
- 保量难点
- 保量成功率远低于100%
- 很多笔记24⼩时达不到100次曝光
- 召回、排序存在不⾜
- 提权系数调的不好
- 线上环境变化导致保量失败
- 线上环境变化:新增召回通道,升级排序模型,改变重排打散规则……
- 线上环境变化后需要调整提权系数
- 保量成功率远低于100%
- 好处:分数提升越多,曝光次数越多
- 坏处:把笔记推荐给不太合适的受众,导致点击率、点赞率等指标会偏低,从⽽⻓期受推荐系统打压,难以成⻓为热⻔笔记。
所以简单粗暴的给新笔记提权(如直接提权4倍使其快速达到100次曝光),效果并不好(揠苗助长
)
4.2.3 差异化保量
- 内容:不同笔记有不同保量⽬标,普通笔记保100次曝光,内容优质的笔记保100-500次曝光
- 做法:
- 基础保量:24⼩时100次曝光
- 内容质量:根据模型评价的内容质量⾼低,给予额外保量⽬标,上限是加200次曝光
- 作者质量:根据作者历史上的笔记质量,给予额外保量⽬标,上限是加200次曝光
由此可得,⼀篇笔记最少100次保量,最多有500次保量
5 冷启动的AB测试
冷启动的AB测试:需要关注⽤⼾侧消费指标
和作者侧发布指标
通常做法
:实验组⽤新策略,对照组⽤旧策略,观测两组⽤⼾消费指标的diff
5.1 用户侧实验
采⽤上图 Figure 1 的实验⽅法,考察新笔记CTR和⽤⼾消费时⻓的diff
- 用户侧实验的缺点
- 限定:保量100次曝光
- 假设:新笔记曝光越多,⽤⼾使⽤app时⻓越低(说明新笔记曝光不精准,影响⽤⼾体验)
- 新策略:把新笔记排序时的权重增⼤两倍
- 结果(只看⽤⼾消费指标):消费指标会变差,AB测试的diff是负数,即实验组不如对照组
如果推全,diff会缩小。
- diff缩小的原因:推全会⾯向
更多的⽤⼾群体
,新笔记曝光更有可能获得⽤⼾的点击、点赞、收藏等
5.2 作者侧实验
5.2.1 方案一
缺点一:新笔记之间会抢流量
- 设定:新⽼笔记⾛各⾃队列,没有竞争,设定重排分给新笔记1/3流量,分给⽼笔记2/3流量
- 新策略:把新笔记的权重增⼤两倍
- 结果(只看作者发布指标):AB测试的diff是正数(实验组优于对照组)
实验组提权的新笔记会抢⾛对照组的曝光,导致实验组会涨,对照组会跌
如果推全,diff会消失(⽐如2%变为0)(推全后,新笔记只和新笔记竞争,权重*2后还是公平竞争,和原先没区别,不会改变发布侧指标
- 缺点二:新笔记抢老笔记的流量
- 设定:新⽼笔记⾃由竞争
- 新策略:把新笔记排序时的权重增⼤两倍
- 结果:AB测试中1个新笔记(50%)抢2个⽼笔记(100%)流量,推全后1个
新笔记(100%)抢1个⽼笔记(100%)流量,推全后抢流量更难,diff会减⼩甚⾄消失。
5.2.2 方案二
- 优势:这种⽅案避免了新笔记之间抢流量的问题,原理上能保证推全后还是AB测试的diff,实验结果更可信
- 缺点:
- 新笔记会和⽼笔记抢流量(和⽅案⼀相同)
- 内容池减少:新笔记内容池减少⼀半,需要从差⼀点的笔记中选⼀半补上来,影响⽤⼾体验,消费指标下降
5.2.3 方案三
这种⽅式就像把⼩红书切成两个app,内容池减少⼀半,消费指标⼀定会⼤跌