某天某时某刻在摸鱼,闲刷某乎,看到了一篇实用性很强的文章:【闲聊推荐架构】推荐系统的曝光去重该怎么设计?,仔细阅读了一番,发现写的是真不错,推荐大家去读,但是这篇文章可能是一个「工程大佬」写的,对于曝光过滤的设计实现层面写的很赞,但是对于偏向于算法层面的同学来讲,可能不是那么友好,因此提笔在该篇文章和一些话题讨论基础上,结合笔者自己的工作经验进行补充和介绍,如果大家有什么好的想法和提议欢迎在评论区留言!
1.曝光过滤问题的定义
相信做推荐系统的朋友对「曝光过滤」这个话题肯定不陌生,试想在某个电商平台中总是给你推你已经看过的东西,那么它的用户流失率肯定不低,在失去用户体验的同时,也并不能对商品做到有效的分发,因此就引出了「曝光过滤」这个话题。
曝光过滤,顾名思义,就是将历史曝光给用户的item不再重复的进行曝光,进而引申的是将已经曝光过的商品的高相似商品也进行过滤,当然这里也有另一个命题是:推荐结果中高相似度商品的去重问题。所以这里探讨的是三个问题:
- 历史曝光过的商品进行过滤
- 历史曝光过的商品的高相似度商品进行过滤
- 候选池中高相似度商品去重
历史曝光过滤中最重要的是用户的历史曝光序列怎么定义,比如跨场景、跨天等,高相似度过滤中如何定义item的相似度、跨场景、跨session的高相似度去重都是值得细细探究和深挖的点,这些内容会在第四部分进行分享。
2.在哪个阶段进行过滤
传统的推荐系统的流程包括:召回、粗排、精排、重排。在这些不同的阶段中,何时进行曝光过滤比较合适的?首先粗排和精排是不需要进行曝光过滤的,因为其天生的职责是排序,粗排是为了缓解精排的压力,选取比候选池小但比最终推荐结果大的一个池子给精排,精排则是优中选优,选出用户最可能喜欢的若干个spu曝光给用户。
其实常见的曝光过滤是在召回阶段完成的,但其实在重排侧也可以进行曝光过滤,我们依次来进行分析。