转自
作者:iwtbs
链接:https://www.zhihu.com/question/19843390/answer/1671468403
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
冷启动一般分为三类,用户冷启动、物品冷启动还有系统冷启动。
之所以叫冷启,就是因为没有太多数据和特征来训练模型,所以往往要用一些不同的方法来达到目的。这个目的不只是提高点击等消费指标,更深层的可能会极大的带动业务增长,提升产品的天花板。冷启有必要花时间做么 在最近深入做项目之前,我一直觉得冷启意义不大,也没必要花太多时间做,一方面网上关于冷启的介绍很少,特征和数据太少不好设计优雅的模型,和一些同学聊下来往往也是热度、品类等方法;另一方面为整个产品贡献价值最多的还是核心老用户和优质物品,花时间搞半天冷启好像也没多少价值。但事实上冷启非常的重要,就像我题目说的,冷启是业务增长的杀手锏,能够提高整个产品的天花板。 对于新用户来说,虽然他们的消费价值为产品带来的收益不是很大,但他们的留存是非常关键的。现在产品都讲用户增长,为了获取一个新用户可能会花大量的广告费和宣传,好不容易把用户搞到我们产品上了,结果上来一看推荐的内容不感兴趣,可能很快就卸载流失掉了。如果新用户冷启推荐的好,会让这部分用户留下来,最终产品的用户量就会稳步增长。
对于新物品来说,以视频为例,100个作者新发的视频往往只有10个是优质视频并预期能得到平均水准以上的消费,那么通过模型预估视频的价值并为可能成为热门的视频增加推荐权重就能让爆款尽快的出来,另外90个也要合理的推荐,在尽量不影响大盘核心指标的情况下,提高作者的发文积极性,只有作者们愿意花时间创造更多的内容,才能让产品内容生态更加丰富。 怎么评估冷启的效果 要回答这个问题,首先请大家先思考一下,用户、物品的冷启目标是什么? 第一段我们谈到了,冷启动绝对有必要花时间好好搞,因为用户冷启搞好了,用户量天花板就有望拔高,也能打造品牌口碑;而物品冷启搞好了,内容生态和作者积极性就会变好。那么以结果为导向,我们在评估冷启动的效果时,自然在用户侧会关注留存、活跃等,在物品侧会关注内容生态、作者活跃等,而不是盲目关注消费带来的广告收益、成交额等。 而这也会进一步影响我们的策略,因为涉及工作内容,所以以开放性问题提出来,大家可以自己思考一下:已知新用户有篮球爱好,在第一刷中我们给用户是都推荐球类相关的视频,还是体育、艺术、游戏多样性的视频?如何判断新用户和新物品,是按照时间长短,行为序列长度,还是?如果想把新用户留下,比起单纯推用户“可能想看的”,是否有更重要的目标呢,比如告诉用户“你为什么要选择我“ ?怎么通过模型判断一个视频能成为爆款?能否通过推荐算法,引导作者发文的活跃性和质量?有没有一套方法论,能够告诉我们产品增长的瓶颈在哪里,又如何通过算法来赋能呢?冷启推荐的四个阶段 以我的视角大致归纳了一下,我眼中冷启推荐的四个阶段,实际的业务也可以按照这样的进度逐渐迭代优化。由于篇幅和时间原因,这篇文章不会涉及具体的原理,对于EE、metra learning等我之后会单独写文章介绍细节。
1. 策略规则和简单模型阶段 策略规则比较好理解,项亮老师的书里关于冷启动部分介绍的方法基本就是这个阶段,容易想到的比如热度、地域、类目等,同时也可以根据业务需要设计一些策略,比如圈定目标候选,或者进行其他产品的id透传映射等。简单模型比如LR/FM等,重点是怎么筛选特征,以及如何debug发现优化点,这个月我做了不少冷启模型相关的工作,感觉这种特征很少的反而要做好难度挺大的。
2. EE探索阶段 可能大家都听过EE(Exploration and Exploitation),主要是为了平衡准确性和多样性,Exploitation是指我们要迎合用户兴趣给他推荐他想要的,Exploitation指的是怕用户腻,所以要推一些新的东西,万一用户感兴趣呢是吧。多臂老虎机问题就很像推荐这个场景,我们不知道每个机器吐钱的分布,只能根据现有的知识摇,如果一直摇所知最高的就是Exploitation,但这个吐钱最多的未必是真的,还需要通过Exploitation来探索,现在业界比较常用的有epsilon-greedy、汤普森采样、UCB、LinUCB等,学术界会探索强化学习方法,我们组也有同学在研究这个方向。
3. 元学习阶段 元学习(meta learing)最近还是比较火的,我在快手和字节的组里都会用MAML来做冷启,这个方法的本质是学习一个更智能的id_embedding初始化方法,那么无论是新用户还是新物品,我们在没有任何训练数据拟合id_emd的情况下,能够得到一个相对比较准确的初始化id_emd,对于模型来说是价值连城的。当然,maml的场景有一定的特殊性,如果其他泛化特征比较强那么id_emb带来的提升可能不明显,泛化特征太弱又无法生成准确的id_emb,还是得具体业务具体分析。
4. 主动学习 主动学习(active learning)的主要方式是模型通过与用户或专家进行交互,尽量通过较少的标记数据获得较好的“性能“,其实第二节提出的第一个问题答案和这个有关。如果我们对于某个新用户只推荐球类视频,那么即使前期收集了一定量的样本,我们对于uid的认知依然不够全面。所以在我看来,冷启的终极目标是,发挥每一个样本的学习价值,让新用户/物品的emd尽快收敛,这一部分我们也正在实验中。冷启的工程需求 前文提到冷启的用户行为过少所以推荐难做,而实际业务中可能用户行为积累了一定量,但是由于工程做的不够好没能及时训练并响应,而新用户不像老用户容忍度高,可能刷了几刷感觉不好就卸载了,所以工程还是很重要的,这里只提及一个角度:推荐系统的实时性。 在用户在客户端进行了一次反馈之后,我们总是希望模型可以尽快的学到这一种偏好。这就意味着我们的样本生成要尽可能的实时。但是这个在技术上是有难点的,在样本的角度考虑的主要问题在于:等多久? feature的生成是实时的,在进行预估的时候,feature实际上已经产生了。而label是什么时候产生的呢?这涉及到用户通常需要多少时间对推荐出来的item做出反馈。此外,通常用户一次请求返回的item条数通常不止一个,意味着我们要等用户对所有的item都做出反馈才行。所以,在生成样本的时候,通常是一个feature等待label(用户行为)的状态。等一天?用户行为肯定是准确的,但对模型来说,实时性太差了。等五分钟?对模型来说,实时性是够的,但是用户行为真的准确吗?可能还有3个item用户都没来得及看呢,如果我们在五分钟内做结算,这三个item肯定会因为用户没有足够的时间做反馈而被当做负例。用户后面如果真的看了,用负例结算就是非常不符合预期了。等一个小时?看起来好像可以,但是怎么衡量这个数值对不对呢? 这时候我们通常需要确定用户的行为需要要在多少时间内回收。这实际上是一个模型实时性与样本准确性做的trade-off。谈谈推荐算法中的trade-off这个通常需要根据推荐系统的应用场景来做决定。此外,因为我们要保证推荐系统的实时性,我们可能需要使用分布式的流式计算框架来进行样本的拼接,现在比较流行的计算框架是storm和flink。