微博以前的信息流都是按时间顺序,可以直接从数据库层读取,现在类似抖音这种智能推荐的信息流,是要为每个用户存储一个推荐列表(list)吗?
重复刷新多次,信息流似乎取之不竭。如果每个用户单独存一个推荐列表(list),那数据量也不小。
刷很多次,获取大量内容,发现也没有重复现象。说明数据还有一定的去重过滤。如果是实时计算推荐内容(可能就会出现重复推荐了),这个去重功能是真的存在吗?否则,怎么实现的呢?
一个用户好几天没来登录,今天忽然来刷一次信息流,如果是预存的话,用什么机制去截取最新推荐的内容?
智能推荐信息流这部分,除了后端算法,还要考虑到用户端的呈现,一般有哪些最佳实践的推荐方法吗?
1
sunjourney 2020-11-21 12:29:17 +08:00
存 bucket 再随机取,shuffle 一下就好了,这个随机和 shuffle 用 userId 做 seed
|
2
liudaqi OP @sunjourney
抖音里比较少刷到重复的推荐内容(广告视频除外),短视频并没有严格的时效,所以那个去重工作还是蛮繁重的,不知道性能问题是怎么处理的。 刷微信视频号、微视 App 就有比较大概率刷到重复推荐的内容。 |
3
unixeno 2020-11-21 13:04:25 +08:00 via Android
不是做信息流推荐的,但是做信息流服务端搬砖的,说一下我的理解吧
1:不是 2:会有消重 首先会有一个候选集,这个集合非常大,你可以认为每个用户都是相同的 用户的每次请求都会根据一套模型或者策略从候选集里筛选出一大批这个用户可能感兴趣的视频,这个过程叫召回,一般会用不同的召回策略同时召回再合并 这个量级可能是从几百万视频里找出来几百或者几千个视频 然后这些视频会过一遍过滤逻辑,筛掉一些不能展示的内容,比如看过的视频 筛选过的视频会经过模型排序 每次排序都会筛选出更小的用户可能更喜欢子集,但是每次的模型都会更复杂,也会更准(也更慢) 最后一次排序完毕之后,选择分最高的视频返回给用户就可以了 |
4
lhx2008 2020-11-21 13:14:31 +08:00
首先可以肯定是一个 list 来推荐的,其次生成这个 list 时间不会超过几秒,所以你看第一个视频的时候他在后台给你找就行了, 有时候你滑的快他也会卡住给你加载的
去重没多难,用 hash 或者 Bloom Filter 都很快 |
5
linvon 2020-11-21 13:20:58 +08:00
1. 不是 你可以认为推荐有很多个池子,每个里面有很多视频,每次刷新会根据你用户的历史特征去跑不同的模型,获取不同类别待推荐的视频,这是召回部分。然后会对召回的内容做打分计算,这是排序部分,最终会呈现出你一次刷新的推送列表,一般你一次刷新会推送多个视频的,不是一个一个刷的
2. 是去重的 每个用户都会有推荐历史,召回后的内容要过历史池去重的,不是特别大的 APP 一般就是每个用户维护其推荐历史,这个数据量级的确很大。至于像抖音这种量级的,我也感兴趣他们的历史是如何维护的。 3. 来刷信息流的时候都是用已知的用户特征去当前的推荐池跑模型,隔几天登录并没有区别,也没有什么给用户的预存 |
6
sadfQED2 2020-11-21 20:59:43 +08:00 via Android
以前听过隔壁推荐流部门的分享,啥都没听懂,现在只记得几个核心算法叫召回,重排序还有啥来着。所以我觉得楼上说了召回算法的都是大佬
|