[搜广推]王树森推荐系统笔记——矩阵补充最近邻查找
视频合集链接
矩阵补充(工业界不常用)
模型结构
- embedding可以把 用户ID 或者 物品ID 映射成向量
- 输入用户ID 和 物品ID,输出向量的内积(一个实数),内积越大说明用户对这个物品越感兴趣
- 模型中的两个embedding层不共享参数

基本想法
- 用户 embedding 参数矩阵记作 A A A。第 u u u 号用户对应矩阵第 u u u 列,记作向量 a u a_u au。
- 物品 embedding 参数矩阵记作 B B B。第 i i i 号物品对应矩阵第 i i i 列,记作向量 b i b_i bi。
- 內积 < a u , b i > <a_u,b_i> <au,bi>是第 u u u 号用户对第 i i i 号物品兴趣的预估值。
- 训练模型的目的是学习矩阵 A A A 和 B B B ,使得预估值拟合真实观测的兴趣分数。

数据集
- (用户ID,物品ID,兴趣分数)的集合,记作 Ω = { ( u , i , y ) } Ω =\{(u, i,y)\} Ω={(u,i,y)}
- 数据集中的兴趣分数是系统记录的,比如:
- 曝光但是没有点击,记为0分
- 点击、点赞、收藏、转发,各记1分
- 分数最低是0,最高是4
训练
有一个用户-物品交互矩阵,其中行代表用户,列代表物品,矩阵中的元素代表用户对物品的评分。由于用户通常只对少数物品进行评分,这个矩阵往往是稀疏的。因此需要补全这个矩阵
- 把用户ID、物品ID映射成向量。
- 第 u u u 号用户 --> 向量 a u a_u au
- 第 i i i 号物品 --> 向量 b i b_i bi
- 训练时要求解优化问题,得到参数A和B
m i n A , B ∑ ( u , i , y ) ∈ Ω ( y − < a u , b i > ) 2 min_{A,B} ∑_{(u, i, y)\in \Omega}( y-<a_u,b_i>)^2 minA,B(u,i,y)∈Ω∑(y−<au,bi>)2
其中,A和B是embedding参数矩阵,不是用户-物品交互矩阵 - 解得A,B之后,根据A和B计算用户-物品交互矩阵中未曝光物品(灰色位置)的兴趣分数补全矩阵
- 向用户推荐补全的矩阵中分数较高的物品

缺点
在实践中效果不好…
缺点1:仅用 ID embedding,没利用物品、用户属性。
- 物品属性:类目、关键词、地理位置、作者信息。
- 用户属性:性别、年龄、地理定位、感兴趣的类目。
- 双塔模型可以看做矩阵补充的升级版
缺点2:负样本的选取方式不对。
- 样本:用户-物品的二元组,记作(u,i)。
- 正样本:曝光之后,有点击、交互。(正确的做法)
- 负样本:曝光之后,没有点击、交互。(错误的做法,这是一种想当然的做法,其实没有效果)
缺点3:做训练的方法不好。
- 內积〈au,bi〉不如余弦相似度。
- 用平方损失(回归),不如用交叉熵损失(分类)
模型存储
- 训练得到矩阵A和B
- A的每一列对应一个用户。
- B的每一列对应一个物品。
- 把矩阵A的列存储到 key-value 表。
- key是用户ID,value是A的一列。
- 给定用户ID,返回一个向量(用户的embedding)
- 矩阵B的存储和索引比较复杂
线上服务
把用户 ID作为 key,查询 key-value 表,得到该用户的向量,记作a°
最近邻查找:查找用户最有可能感兴趣的k个物品,作为召回结果。
- 第 i i i 号物品的 embedding 向量记作 b i b_i bi
- 內积 < a , b i > <a,b_i> <a,bi>是用户对第 i i i 号物品兴趣的预估。
- 返回內积最大的k个物品。
缺点:如果枚举所有物品,时间复杂度正比于物品数量。
加速最近邻查找
支持最近邻查找的系统:Milvus、Faiss、HnswLib等等。
度
衡量最近邻的标准:
- 欧式距离最小(L2距离)
- 向量内积最大(内积相似度)
- 向量夹角余弦最大(cosine相似度,目前常用)
如何用cosine相似度计算最近邻
- 在进行线上服务之前对数据进行预处理,划分成很多区域
- 如何划分取决于用什么标准衡量最近邻
- 欧式距离最小:多边形
- cosine相似度:扇形

- 划分之后每个区域用一个向量表示
- 这些向量长度都是1(单位向量)
- 根据向量和点建立索引,把每个区域的向量作为key,区域中所有点的列表作为value,这样给定一个向量就可以取回那个区域所有的点

- 线上做召回时,把一个用户的向量a和所有索引向量对比,选出最相似的
- 通过索引找到物品列表,计算区域内每个物品与用户向量的相似度,选出最相似的k个点
这k个点就是最近邻查找的结果

相关文章:
[搜广推]王树森推荐系统笔记——矩阵补充最近邻查找
视频合集链接 矩阵补充(工业界不常用) 模型结构 embedding可以把 用户ID 或者 物品ID 映射成向量输入用户ID 和 物品ID,输出向量的内积(一个实数),内积越大说明用户对这个物品越感兴趣模型中的两个embed…...
Unity3D * 粒子特效 * Particle System
(基于阿发教程做的重点笔记) 粒子 用于模拟一些流动的,没有形状的物质,例如 液体,烟雾,火焰,爆炸,魔法等效果 去除粒子外框 particle system 粒子发生器,有1个主模块和22个子模块࿰…...
【基础篇】1. JasperSoft Studio编辑器与报表属性介绍
编辑器介绍 Jaspersoft Studio有一个多选项卡编辑器,其中包括三个标签:设计,源代码和预览。 Design:报表设计页面,可以图形化拖拉组件设计报表,打开报表文件的主页面Source:源代码页码ÿ…...
数据结构:算法篇:快速排序;直接插入排序
目录 快速排序 直接插入排序 改良版冒泡排序 快速排序 理解: ①从待排序元素中选定一个基准元素; ②以基准元素将数据分为两部分:(可以将:大于基准元素放左,小于基准元素放右) ③对左半部分…...
WebAPI编程(第一天,第二天)
WebAPI编程(第一天,第二天) day01 - Web APIs 1.1. Web API介绍 1.1.1 API的概念1.1.2 Web API的概念1.1.3 API 和 Web API 总结 1.2. DOM 介绍 1.2.1 什么是DOM1.2.2. DOM树 1.3. 获取元素 1.3.1. 根据ID获取1.3.2. 根据标签名获取元素1.3.…...
查看MySQL存储引擎方法,表操作
修改数据库表存储引擎 show create table dept; show table status from itpux where name s2\G; select * from information_schema.TABLES where table_schemaitpux and table_names3; 查询整个mysql里面存储引擎是innodb/myisam的表 建表时候要写好存储引擎 -- 创建表 -- 表…...
【Python教程】Python3基础篇之Number(数字)
博主介绍:✌全网粉丝21W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…...
基于openEuler22.09部署OpenStack Yoga云平台(一)
OpenStack Yoga部署 安装OpenStack 一、基础准备 基于OpenStack经典的三节点环境进行部署,三个节点分别是控制节点(controller)、计算节点(compute)、存储节点(storage),其中存储…...
I.MX6U 启动方式详解
一、启动方式选择 BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置 来选择 BOOT 方式。 BOOT_MODE[1:0]的值是可以改变的,有两种方式,一种是改写 eFUSE(熔 丝),一种是修改相应的 GPIO 高低电平。第一种修改 eFUSE 的方式只能修改一次,后面就…...
施耐德变频器ATV320系列技术优势:创新与安全并重
在工业自动化领域,追求高效、安全与智能已成为不可阻挡的趋势。施耐德变频器ATV320系列凭借其强大的设计标准和全球认证,成为能够帮助企业降低安装成本,提高设备性能的创新解决方案。 【全球认证,品质保障】ATV320 系列秉持施耐德…...
系统思考—全局思维
昨天接到一个企业需求,某互联网公司VP希望N-1的核心团队一起学习系统思考,特别是在新业务快速发展的阶段。公司增长势头不错,但如何解决跨部门的协作问题,成为了瓶颈。全局思维就是关键。产品、技术、市场、运营、客服……如何打破…...
Windows如何切换用户访问局域网共享文件夹,如何切换网上邻居的账户
Windows如何切换用户访问局域网共享文件夹,如何切换网上邻居的账户 查看共享连接 使用net use命令可以查看当前已经建立的共享连接。net use删除共享连接 使用net use * /del 或net use * /delete命令可以删除所有当前的共享连接。net use * /delnet use * /delete如果只想删除…...
如何在谷歌浏览器中启用语音搜索
想象一下,你正在拥挤的地铁上,双手都拿着沉重的购物袋,突然你想搜索附近的咖啡馆。此时如果你能通过语音而不是打字来进行搜索,那将多么的便利!在谷歌浏览器中,启用语音搜索功能就是这么简单而高效…...
HarmonyOS NEXT 技术实践-基于基础视觉服务实现骨骼点识别
本示例展示了如何在HarmonyOS Next中实现基于基础视觉服务的骨骼点识别功能。骨骼点识别是计算机视觉中的一项重要技术,广泛应用于运动分析、健身监控和增强现实等领域。通过使用HarmonyOS Next提供的视觉API,开发者能够轻松地对人物图像进行骨骼点检测&…...
Debian系统宝塔面板安装LiteSpeed Memcached(LSMCD)
参考链接 1. 官网指引: https://www.litespeedtech.com/support/wiki/doku.php/litespeed_wiki:lsmcd:installation 2. 安装OpenLiteSpeed官方LSMCD对象缓存替换Memcached详细图文教程 - 搬主题 实操记录: 首先LSMCD 默认的端口是11211,…...
tcp 的三次握手与四次挥手
问1: 请你说一下tcp的三次握手一次握手两次握手三次握手问: 为什么不四(更多)次握手? 问 2: 请说一下 tcp 的 4 次挥手一次挥手两次挥手问题:能不能等到数据传输完成再返回 ack? 三次挥手四次挥手问: 为什么要等两个最大报文存在时间? bg: tcp 是可靠的连接,如何保证 建立连…...
QT--信号与槽机制
什么是信号与槽? 在 Qt 中,信号与槽是一种用于对象间通信的机制。它使得一个对象可以通知其他对象某个事件的发生,而不需要直接知道这些对象的具体实现。这种机制非常适合事件驱动的编程模型,如用户界面交互。 1. 信号ÿ…...
vue3项目history路由模式部署上线405、刷新404问题(包括部分页面刷新404问题)
一、找不到js模块 解决方法:配置Nginx配置文件: // root /your/program/path/dist root /www/wwwroot/my_manage_backend_v1/dist;二、刷新页面导致404问题(Not found) 经过一系列配置后发现进入页面一切正常,包括路由前进和回退࿰…...
电阻容差是啥意思
定义 电阻器在生产过程中,由于工艺等因素的限制,其实际阻值不可能与标称阻值完全一致,总会存在一定的误差。例如,一个标称阻值为100Ω、容差为5%的电阻,其实际阻值可能在95Ω至105Ω之间。 产生原因 材料特性差异&a…...
Rust: offset祼指针操作
offset是偏移元素个数,不是字节数! fn main(){let student_a Student{id:20240001,name:"张三娃".into(),class_id:3,age:14,grade:1};let student_b Student{id:20240002,name:"李四牛".into(),class_id:3,age:15,grade:1};let …...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
