最近一段日子,怎么在一个大的新闻候选集合(假设有10w条新闻)选出用来做 CTR 预估的小集合(假设是100条新闻)困扰我们已久,昨夜我夜观星象,突来灵感,遂有此文。
首先,我们需要明确选出这 100 条新闻的目的是什么?废话,不选个小集合 CTR 预估怎么算得过来。好,那么目的一便是确定一个精简的集合以使 CTR 预估能在线上实时响应。再进一步思考,这100条新闻要是怎么样的新闻?我认为这100新闻需要具备如下两个特征,也即我们的另外两个目的:
- 准确率高:具体指这100条新闻的每一条新闻都有一个相比于普通新闻更容易被点击的理由
- 覆盖率高:具体指100条新闻要覆盖绝大部分上面一点所说的理由(假设有若干个理由),以减小容易被点击新闻没有进入 CTR 预估流程的概率
顺着这样的思路,我整理出如下图的候选集触发方案:
方案分两部分,分别是候选集触发和融合&过滤。下面分别进行介绍:
候选集触发
在此候选集触发方案中,不仅满足上述 “准确率高” 和 “覆盖率高” 两原则,并且各个方案之间可以弥补各自的缺陷。下面对各个候选集选择子方案进行说明:
- 协同过滤:与你相似的人看过的文章或与你看过文章相似的文章会更容易被点击,缺点是依赖历史数据,对新用户或历史数据较少用户作用不大。我们可采用 UserCF 和 ItemCF 相结合,当然初期可以简单点只实现一个。缺点是依赖历史数据,存在冷启动问题
- 基于地域推荐:相对于普通新闻,当地新闻可能更容易被点击(之前常明 PPT 中说推当地新闻效果不好,应该是指和其他推荐的新闻相比,而这里是和普通新闻相比应该会更好)
- 关键字推荐:代表了一定的用户意愿,关键字可以是新闻关键字,搜索关键字(搜索关键字也可以帮助我们提高个性化推荐整体覆盖率)
- 流行度推荐:这里的流行度推荐是针对每个人不同的,根据用户对各个分类或话题的感兴趣程度从其感兴趣的分类或话题下选取流行的新闻
- 实时推荐:根据用户实时的展示、点击数据更新候选集列表,这个可以放在后面做。更具体来说,这里推荐使用基于内容相似度的推荐(比如用户看了一条王宝强、马蓉的离婚新闻,再用户刷新或下次打开时给推荐与王宝强、马蓉紧密相关的新闻)
- 替补策略:虽然上述有5点子方案,但难保少数情况下以上方案产出的总集合过小(比如总过产生了5条),这是需要有一个最终的保障来将候选集补全,可以根据热度、点击率、评论数等进行补充
融合&过滤
这里过滤的目的是为了支持人工介入,比如,要过滤掉:
- 运营指定不能推的新闻
- 包含某关键字的新闻
- ...
为了结合不同候选集子方案的优点,同时提高候选集的多样性和覆盖率,需要将不同的触发算法融合在一起。有以下两种方法:
- 加权型:根据经验对不同的子方案赋予不同的权重,权重越高取的条数越多(按比例)
- 分级型:优先采用效果好的算法,当产生的候选集大小不足以满足目标值时,再使用效果次好的算法,依次类推(效果好坏的评价可以根据该子方案最终产生的推荐的点击率来算)
我们初期可以用简单点的加权型,后期可以使用分级型或综合加权和分级
如何计算
候选集触发中除了实时推荐另外都可以通过离线计算,保证一天更新一次(根据计算量大小可调)。过滤、融合过程也是通过离线计算,紧接着候选集触发进行。实时推荐可以实时计算之后,另外加到推荐候选集中。
需要实时更新的是用户的属性,比如分类打分、topic 分布、关键等。这样虽然候选集并不是实时更新,但用户的属性是实时更新的,由于 CTR 预估是实时计算的,这样最终的推荐结果也是实时改变着
参考:
欢迎关注我的微信公众号:FunnyBigData
FunnyBigData
网友评论