【图解】短视频推荐打散算法

1,581 阅读3分钟

这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

在推荐系统中,最终召回的候选池数据,有一个重要的处理,那就是候选列表中不同数据类型的散列化。例如抖音Feed信息流中推荐的短视频,如果不进行一定程度的打散,那么就有可能会看到连续的同类型堆积在一起,没有层次感。

打散是推荐系统比较重要的数据处理逻辑,是推荐系统避免数据扎堆最重要的实现手段,本次介绍推荐算法中最简单的轮询算法——单维度轮询。

单维度轮询主要是把数据按照某一个角度进行分类,比如短视频推荐业务中,相同作者的视频不能相邻出现。

下面是我自定义的一些打散规则,目的就是返回的视频列表不会有作者的作品相邻重复出现。

短视频打散规则

基本规则

  • 每个视频对应一个作者
  • 相同作者的视频不可连续
  • 可控制每次展示的视频数量

视频游标规则

  • 游标为视频ID,默认从头开始。视频游标可以每次获取视频时都能拿到还未看过的视频。可以解决分页查询视频时,会出现新增视频,旧的视频被挤到下一页,导致重复视频问题。

固定位视频插入规则

  • 标识控制是否显示固定视频
  • 固定视频的位置可以是列表中任意位置,不必是最前面

基本规则图解

  • 初始查出视频列表如下

1.png

  • 查出视频与作者对应关系

2.png

  • 初始结果列表,列表大小由参数size控制

3.png

  • 首次添加视频,视频id放到结果列表中,添加作者ID到作者临时表

4.png

  • 第二次添加视频,作者临时表中有相同作者,不进行添加,将视频id保存到待添加队列

5.1.png

  • 第三次添加视频,作者临时表中无相同作者,进行添加

6.png

  • 循环过一次之后,清空作者临时表,取待添加队列中的列表作为新的视频列表,继续走上面逻辑,将视频放入到结果列表中,直到待添加队列无数据,退出递归,返回最终结果列表

7.png

固定视频规则图解

  • 固定视频需要再初始结果列表中对应索引位置放入视频ID

8.png

  • 作者临时表中放入作者信息

9.png

  • 添加视频逻辑增加个判断当前索引中是否有视频,有视频则不添加。结合上面的相同作者视频不可连续规则,16后面的视频应该是3,并记录作者临时表中放入作者B,如下图

10.png

  • 第一次遍历,只有3和5放到结果列表中了,其余的放到待添加队列中,结果如下

11.png

  • 继续按照基本规则循环添加,直到结果列表满了不再添加,最终结果如图

12.png

小结

本文通过画图,说明了一个简单的自定义打散规则,保证了返回视频列表更有层次感,具体的代码实现会再后面给出。

参考