推荐系统三十六式
刑无刀
“贝壳找房”资深算法专家,8 年推荐系统工程师
43607 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
开篇词 (1讲)
原理篇 · 深度学习 (2讲)
原理篇 · 其他应用算法 (3讲)
推荐系统三十六式
15
15
1.0x
00:00/00:00
登录|注册

23 | 推荐候选池的去重策略

查询模式串是否在集合中
二进制位向量
哈希函数
计算汉明距离
生成整数指纹
Bloomfilter用来做寻址
Simhash加权处理
借助哈希函数
牺牲误伤概率换得效率提升
查询模式串是否在集合中
二进制位向量
哈希函数
计算汉明距离
哈希成整数
为每个内容生成整数指纹
Bloomfilter
防止重复推荐
Simhash
计算词向量距离
提取关键词
分词
两种去重策略
重复内容的检测
布隆过滤器原理
防止已经推荐的内容被重复推荐
Simhash核心思想
MD5信息指纹方法
Google的内容重复检测算法
内容重复检测
不重复给用户推荐
内容源去重
总结
Bloomfilter
Simhash
去重是刚需
推荐候选池的去重策略

该思维导图由 AI 生成,仅供参考

今天依然要讲到两个问题,它们看似和推荐系统没有必然关系,但实际上,在你构建自己的推荐系统的时候,不可避免地会遇到这两个问题。

去重是刚需

在推荐系统中,有一个刚需就是去重,那么说在哪些地方有去重的需求呢?
主要是在两个地方:一个是内容源去重,另一个是不重复给用户推荐。
先说说内容源的去重,这部分以前几年的图文信息流推荐为典型的例子。
如果一个平台自己不生产内容,只是做内容搬运和聚合分发,那么从大量第三方的内容生产处抓取内容,就难免遇到相似甚至重复的内容。这就需要对内容做一个重复检测了。
对内容做重复检测,直观的思路是分词,然后提取关键词,再两两计算词向量之间的距离,距离小于一定阈值后就判定为重复。然而,这对于海量内容,比如几千万以上的内容来说简直就是灾难。
其实,内容源去重并不是仅在推荐系统中才首次出现,这早在搜索引擎时代就是一个刚需了,搜索引擎把整个互联网的网页都下载到自己的服务器上,这时,重复冗余的内容就需要被检测出来。
另一个需求是在内容阅读类推荐场景下,给用户推荐的内容不要重复,推荐过的内容就不再出现在推荐候选集中。
在你刷一个信息流产品时,不断看到重复的内容,想必不是使用感很好的一件事。因为以抓取作为主要内容来源的信息流产品,不同于社交网站上用户自发产生内容,除非遇到用户恶意发送,否则后者是不容易重复的。
以上两个场景,需要在你打造自己的推荐系统时予以考虑和应对。今天就介绍两种最常见的去重算法,两者有相通之处也有不同的之处,听我慢慢说来。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

推荐候选池的去重策略是推荐系统中不可或缺的一环。文章介绍了两种常见的去重算法:Simhash和Bloomfilter。Simhash通过将内容映射为整数指纹,利用哈希函数和加权向量的方式进行内容重复检测,避免不重要的词汇影响重复检测的准确性。而Bloomfilter则通过哈希函数和二进制位向量的映射,实现对内容ID的去重,以防止已经推荐的内容被重复推荐。这两种算法都以牺牲一定的误伤概率为代价,换取了大幅度的效率提升,具体实现上都借助了哈希函数。总结来看,文章强调了在推荐系统中对原始内容的挖掘和清洗的重要性,其中包括对重复内容的检测。这两种去重策略都体现了技术上的创新和高效性,为推荐系统的构建提供了有力支持。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《推荐系统三十六式》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • yyy
    信息流页面,调用api接口获取到推荐的数据,一般情况下会在页面进行瀑布流加载更多。那么每次请求数据和整个瀑布流批次数据如何统一?防止重复推荐?如何处理整个批次的推荐和单次的存储、缓存、以及统一呢? 作者回复: 关于这个问题,在我的图书中有详细介绍。 我:哪本书呢

    作者回复: 已经完成,还在编辑中。

    2019-05-30
    2
    1
  • chon
    老师,simhash算法有啥好用的来源项目吗?谢谢

    作者回复: 自己实现很简单的。

    2019-03-18
  • Da.du.Ma
    信息流页面,调用api接口获取到推荐的数据,一般情况下会在页面进行瀑布流加载更多。那么每次请求数据和整个瀑布流批次数据如何统一?防止重复推荐?如何处理整个批次的推荐和单次的存储、缓存、以及统一呢?

    作者回复: 关于这个问题,在我的图书中有详细介绍。

    2019-01-14
  • 林彦
    Counting Bloom Filter支持删除操作,除了已有的二进制向量,向量的每一位对应一个整数计数器。每当增加一个元素时,哈希函数映射到的二进制向量对应的整数计数器加一,删除时减一。有了这个操作可以增加,查找和删除集合里的元素。
    2018-04-25
    10
  • chy2048
    买了这个专栏只想请教下关于去重的问题,不知道还会不会有人回复😂 用布隆过滤器防止内容重复推荐,具体是怎么实现的? 1.是一个用户一个布隆过滤器吗? 2.如果是一人一个布隆过滤器的话,如何设置布隆过滤器的大小呢?貌似不能动态伸缩吧? 3.布隆过滤器持久化是依赖redis吗? 4.如果需要对过去24小时的内容去重,如果每隔24小时创建一个布隆过滤器,那两个过滤器如何平滑过度? 看到有空麻烦回复下,谢谢🙏买这个专栏只为这一篇,本来想看下面的评论,结果评论只有10条,我晕
    2019-07-15
    1
    6
  • EAsY
    用布隆过滤来过滤用户推荐记录的话 是否需要为每个用户存一个向量 之前考虑过用bitmap 内容池经常变动 感觉比较麻烦
    2018-04-25
    1
    4
  • vicviz
    Bloomfilter非常大的时候,用什么存储呢?用户数过亿,保存上千条内容不重,还得持久化
    2018-05-03
    3
    2
  • 曾阿牛
    对于分页展示的推荐列表,有更快速的方法保证前后几页不重复吗?
    2018-04-26
    1
    2
  • 随心而至
    如果每一节能把参考的资料给出来就好了,虽然有的通过Google可以找到类似的。
    2019-08-06
    1
  • 曾阿牛
    业界一般是不对布隆过滤器剔除元素,原因是剔除已有元素有可能导致整体数据错误。想到一种方法:使用一个同样长度的向量,记录对于位置1的个数,剔除是先hash6映射,对于1的位置,个数大于的话不变,等于1的话设为0;不过,缺点是这个向量占空间,存储成稀疏向量吧
    2018-04-26
    1
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部