当前位置: 首页 > news >正文

推荐系统学习笔记(九)曝光过滤 Bloom Filter

曝光过滤

如果用户看过某个物品,则系统不再把该物品曝光给该用户,这个思想称之为曝光过滤

基本流程如下:

  1. 对于每个用户,记录已经曝光给他的物品。(小红书只召回1个月以内的笔记,因此只需要记录每个用户最近1个月的曝光历史)
  2. 对于每个召回的物品,判断它是否已经给该用户曝光过,排除掉曾经曝光过的物品。
  3. ⼀位⽤户看过 𝑛 个物品,本次召回 𝑟 个物品,如果暴⼒对⽐,需要 𝑂 (𝑛𝑟) 的时间

 Bloom Filter

判断一个物品🆔是否在已曝光的物品集合中

  1. 如果判断为no,那么该物品一定不在集合中;
  2. 如果判断为yes,那么该物品很可能在集合中(可能误伤,错误判断未曝光物品为已曝光,将其过滤掉)。

 参考文献:Burton H. Bloom. Space/time trade-offs in hash coding with allowable errors. Communications of the ACM , 1970.

具体流程如下:

  1. Bloom Filter 把物品集合表征为一个 m 维的二进制向量;
  2. 每个用户有一个曝光物品的集合,表征为一个向量,需要 m  bit的存储空间
  3.  Bloom filter 有 k 个哈希函数,每个哈希函数把物品ID映射成介于 0 和 m-1 之间的整数;
  4. 已曝光物品ID通过哈希函数映射进了二进制向量中对应的位置,如果该位置为0则调整为1,若为1无需调整;
  5. 对于召回的物品ID,通过哈希函数映射,若对应位置全为1,则说明该物品已曝光,否则未曝光。

若曝光物品集合⼤⼩为 𝑛,⼆进制向量维度为 𝑚,使⽤ 𝑘 个哈希函数

那么 Bloom filter 误伤的概率为:

\delta \approx \left( 1 - \exp\left(-\frac{kn}{m}\right) \right)^k

设定可容忍的误伤概率为 𝛿,那么最优参数为:

k = 1.44 \cdot \ln\left(\frac{1}{\delta}\right), m = 2n \cdot \ln\left(\frac{1}{\delta}\right).

侵删

💡注意:Bloom filter 只⽀持添加物品,不⽀持删除物品。从集合中移除物品,无法消除它对向量的影响。每天都需要从物品集合中移除年龄⼤于 1 个⽉的物品。

http://www.xdnf.cn/news/1237591.html

相关文章:

  • 从传热学基础到有限元弱形式推导:拆解热传导问题Matlab有限元离散核心
  • Jupyter Notebook 中高效处理和实时展示来自 OpenCV 和 Pillow 的图像数据探究
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | TodoList(代办事项组件)
  • Android 之 MVC架构
  • JVM学习日记(十五)Day15——性能监控与调优(二)
  • IO流-对象流
  • 回归的wry
  • 前后端交流
  • 电路原理图绘制专业实战教程2
  • Nginx负载均衡配置
  • 6. 平台总线
  • 跨语言模型中的翻译任务:XLM-RoBERTa在翻译任务中的应用
  • Compose笔记(四十一)--ExtendedFloatingActionButton
  • 有限元方法中的数值技术:三角矩阵求解
  • Redis面试精讲 Day 10:Redis数据结构底层实现原理
  • 【AI论文】Rep-MTL:释放表征级任务显著性在多任务学习中的潜力
  • 介绍JAVA语言、介绍greenfoot 工具
  • 数据结构中使用到的C语言
  • golang的包和闭包
  • Python 小数据池(Small Object Pool)详解
  • 使用AndroidStudio调试Framework源码
  • 关于域名的级别
  • Linux环境下使用Docker搭建多服务环境
  • Apache Shenyu 本地启动及快速入门
  • Flutter开发 dart异步
  • 动态置信度调优实战:YOLOv11多目标追踪精度跃迁方案(附完整代码)
  • 基于springboot的在线考试系统/考试信息管理平台
  • 生成式人工智能展望报告-欧盟-04-社会影响与挑战
  • trace-cmd记录线程被中断打断的时间
  • Java 实现poi方式读取word文件内容