本文同步发表于:
- 知乎专栏: 知乎专栏-推荐系统(2):详解曝光去重实践
- 微信公众号: yanianth的公众号-推荐系统(2):详解曝光去重实践
欢迎关注订阅,一起学习,一起成长~
1. 什么是曝光去重|曝光过滤?
为什么需要曝光去重?
在推荐这个场景,特别是信息流&短视频领域,视频和图文都属于快消品,用户会频繁的刷新,挑选符合他们口味的内容,尤其像抖音 & bilibi这种短内容平台,一刷就是一个下午。
在上文讲过,推荐的逻辑是从整个大的内容池过滤出最符合当下用户的内容,那么如何标识哪些内容已经被用户消费过这个问题,至关重要。
最典型的场景莫过于,重复推荐。我甚至能够想象用户多次刷到重复内容的绝望场景:“不会吧不会吧,这个视频我刚已经点过赞了,又来,up这波要赞简直丧心病狂啊”
同理在电商推荐场景也类似,用户已经点击过没有明显消费兴趣的,假如还重复推荐的话,本质上是对流量和广告的一种浪费(都是白花花的钱)
1.1 如何定义内容重复
用户刷到重复内容,可以从以下几个角度考量
-
相同的内容,在内容池里属于两个不同的itemid。
-
极度相似的内容,在内容池里属于两个不同的itemid
-
同一篇内容,同一个itemid,给同一个用户曝光了多次
其中 1. 2 点都可以通过内容平台入库审核内容时卡掉。相同或者相似的内容不入库。
在检测内容相同或者相似上,有不同的算法。
比如图文内容重复,常见的是 simhash算法。simhash算法是一种局部敏感hash算法。可以将原始的文本映射为 hash数字,且相近的文本得到的hash签名也比较相似。比如 “推荐系统实战” 和 “推荐系统实践” 在文本上只相差1 个字。 算出来的 hash 签名可能是 000101 和 000100。通过对比两个hash签名的 0 1 区别,即可大致判断文本是否相同或者相似(也叫Hamming distance,海明距离)
视频的相似检测也可以基于类似的方法,首先将视频抽成帧,再基于帧提取图像特征,进行模型训练,每个视频的到对应一个 embedding向量。通过计算向量的相似度来判断视频是否相似。
本文主要讨论第3点,在相同itemid 上的曝光去重工程实践。
2 曝光去重的选型考量
在上一小节介绍内容相似的时候,我们引入simhash等相似算法。那么在去重服务上能否也使用simhash?
理论上是可以的。
但是曝光去重作为一个在线服务,在日活千万的产品下,服务QPS甚至可能达到10w/qps, 因此除了达到判重这个功能性需求外,还需要具备有很高的性能(时间复杂度,空间复杂度)
simhash是通过计算内容的签名之间的 01差异数量(海明距离)来判断是否相似的。虽然可以通过离线计算好item之间的相似度,存储起来&#x