美文网首页
推荐系统入门实践(6)冷启动、策略等

推荐系统入门实践(6)冷启动、策略等

作者: 夏安的算法学前班 | 来源:发表于2020-05-23 15:50 被阅读0次

这部分主要涉及冷启动和一些策略类方法,可能比上部分还要更简略,因为真正自己做过的不多。

冷启动

什么是冷启动啊,就是说新用户或者新物品你要怎么处理。曾经有个面试官问我为什么要冷启动,为什么要给用户推新视频,我又一次被问蒙了,这是想问啥啊...

注意:这块不是很熟,不全和不细的地方后面看情况补充

对新用户

新用户主要是两个方向,一是尽量去获取能区分用户的信息包括地域、性别、手机型号、applist、预选的兴趣等,另外一个是尽量选一批优质的视频。新用户来的前几刷是比较难搞的,后面的可以靠i2i来推荐。

  1. 推热门item。

    • 全局热门当然是可以的,也可以把item聚类,然后每个类别都推几个。
    • grouphot则是对用户的一种细化,按某些属性(年龄、性别、地域等)对用户分组,然后统计每一组的热门,推给相应组的新用户。
    • 人工维护精品池。
  2. 利用用户在其他地方的行为。例如之前在长视频有行为的用户,新来短视频。各种“长推短”的召回(一般是ii召回),都是先把长短放到一起训练,然后留下短,例如youtube长推短的ii召回。

  3. 产品上:可以让用户进入前先勾选兴趣。

  4. 或者干脆就随机推几个,然后根据其行为进行后续推荐。

  5. EE试探(exploration vs exploitation)。一篇知乎文章 EE其实不只对新用户需要做,老用户也需要做,而且老用户更值得做。 算法通常是对item讲的,但操作一般是对tag的,因为tag数目少很多。或者对item分topic(例如LDA),然后对topic做。

    • UCB(upper confidence bound)比较出名,但是实践中效果似乎一直不好。
    • Thompson采样,利用beta分布的。
  6. 静态特征的usercf,主要是找‘不活跃用户’的相似‘活跃用户’,进而推荐。

  7. 模型:dropoutnet。模型结构可以看知乎文章。这个实践中确实有用,占比也不低。但是有可能有用的不是模型本身,而是实时化。

    • 可能是样本有问题。应该学习每一个u-i的score吗?还是按照什么规范来取负样本呢?负样本是不是可以用采样方法?
    • dropout的user content用什么呢?可以用静态特征的emb。
    • 静态特征的emb怎么得到?每个user相当于一个sentence,每个特征就是一个word,以此w2v即可。
  8. 还有一种实时emb的召回,这个我大概知道做法,就是把用户的分组放到feed list里一起w2v出emb,然后新用户来了可以ui。论文参考这个airbnb的文章Real-time Personalization using Embeddings for Search Ranking at Airbnb,也可以看看这个也可以看看

    • 举例说,user1的行为f1,f2,f3...他的静态特征例如age0,gender1,那么对这个用户表示成如下的sentence:age0_gender1_0_0 | f1 | age0_gender1_f1tag_0 | f2 | age0_gender1_f2tag_f1tag | f3 | ...
    • 上面的0表示是“空”,例子中是用了长度为2的历史,于是age0_gender1_f1tag_0表示:年龄0组、性别1组、前一个feed的tag是f1tag、前二个feed的tag是空,以此类推
    • 就用这样的sentence来训练w2v,等到新用户来了就可以使用对应的emb了
  9. applist可以有一种召回方法。产品做一个app-tag的mapping,例如小红书->时尚,然后做一个app-item的倒排。指标一般,占比不高。

对新物品

  1. 可以固定位置(或固定第某个)推。当然需要选择用户,有一定概率出。

  2. 比1进一步,可以先随机推,然后根据效果进一步推,这个可以叫做“阶梯分发”。比如在“深度用户”里,按一定概率在某位置出,达到一定分发量之后,根据指标判断是否继续分发,如此往复。

  3. dropoutnet也可以。

  4. 根据tag找相似item,进而推给user。例如可以相似item的emb平均作为替代emb。

  5. 加入side_info的node2vec可以推新视频。

  6. graphsage对新物品也是可以用的,关键看怎么设计的图了。


策略类

工作中,高深的算法不一定有亮眼的结果,有些简单的策略却可以取得很好的收益,这就要靠对业务的理解和思考了。

这里简单说几个实践中的trick,不一定限于召回。

  1. 用户分层,所谓分层是指按照活跃程度划分用户。召回的分层需要不大,粗排和精排的分层表现很好,也就是对不同层的用户分别训练不同的粗排或精排模型。

  2. 推荐历史回捞。比如某一刷里推给用户的n个feed只被看过一两个,然后用户就刷新了,这时候系统会重新推荐一刷。第一刷里面没被看过的feed也是系统认为很适合这个用户的,但是由于“去重”机制(召回时就会去掉),会导致它们不再出现。回捞就是把这些feed重新推出来。

  3. 负反馈。负反馈可以分显式(点击举报、不喜欢等)和隐式(例如多次推荐某tag未消费),可对应设置一些策略(例如若干时间内不使用某tag召回或者过滤某tag的feed)。实际上用户画像对兴趣做的好的话,负反馈也不用单独拿出来。用户兴趣可以分长短期,实践中短期参与的召回更多些。

  4. 一些多样性优化。有时候一些优化是根据业务需要(领导要求)的,可能适当牺牲一些效果指标。

    • 兴趣平滑和trigger加权采样。一般的,确定某召回源中每个trigger的召回数量,是根据每个trigger的分数(用户兴趣),线性分配该召回源的配额。而我们实践中(不同地方肯定不一样)的兴趣分数(主要指tag类兴趣,因为tag比较稀疏,而item类兴趣的情况好很多)分布极不平衡,这导致少数几个trigger分配了绝大多数配额。而且因为每次露出的视频有限,对有的用户来说,他好多刷的召回都是top的trigger召回的。这不就多样性差了嘛,容易疲惫。所以在召回前,先对兴趣分进行一个平滑(实践里是取了log,因为兴趣分公式里有个指数),然后根据平滑后的分数进行一个trigger加权采样(algorithm A-res采样,参考 这里 ),这样就平衡了一下兴趣分,也有一定的trigger多样性了。

    • 粗排后的召回比例控制。召回后有粗排,粗排后还有精排,为了保证进入精排模型的候选集的召回源多样性,我们对某些弱势或特殊功能的召回源进行保底配置。这里也可以用到分层,对不同分层的策略可以不同。

    • 精排后的mmr重排序。这个后面写精排的时候说。

  5. 时效性优化。例如固定某位置按概率推‘时效性视频’。这里时效性视频可能是新视频,也可能是‘匹配’到的热点视频。怎么匹配热点呢?去爬微博热搜、抖音热搜、百度热搜之类的,然后匹配视频标题,取相似度高的,然后设计公式得分(例如可以跟榜单排名有关,也可以跟热度有关,也可以跟类型有关,当时我们领导热衷体育视频,所以把体育的视频调的很高...)。召回规则可以纯按概率(一般对深度用户),也可以加一些自定义的策略,例如用户必须有某兴趣或者满足一些什么条件之类的。

注:贴一下A-res采样的伪代码。


image.png

相关文章

网友评论

      本文标题:推荐系统入门实践(6)冷启动、策略等

      本文链接:https://www.haomeiwen.com/subject/jkqlahtx.html