推荐系统学习笔记(四)--基于向量的召回

2024-05-28 20:20

本文主要是介绍推荐系统学习笔记(四)--基于向量的召回,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

离散特征处理

离散特征:性别,国籍,英文单词,物品id,用户id

处理:

建立字典:eg:china = 1

向量化:eg:one-hot /embedding(低维稠密向量)

one-hot--适合低维度

例如:

性别:男,女

字典:男 = 1,女 = 2

one-hot:

        未知[0 , 0]

        男 [1 , 0]

        女 [0 , 1]

one-hot局限:

例1: nlp中,对单词编码,维度上万

例2:推荐系统中,对物品id编码,上亿笔记

类别数量很大时,不用one-hot

embedding(嵌入)

例子:国籍embeddding

参数数量:向量维度 * 类别数量

embedding : 4 * 200 = 800

embedding层:参数以矩阵形式保存,大小为:向量维度 * 类别数量

输入:序号,eg:美国序号为2

输出:向量,eg:美国对应参数矩阵第二列

神经网络关键在于embedding层,对它的优化是一个关键点

one-hot和embedding关系

embedding = one-hot * 参数矩阵

矩阵补充(目前不常用)

训练:

用户embedding层,矩阵A,每个用户对应一列

物品embedding层,矩阵B,每个物品对应一列

内积就是第u个用户对第i个商品兴趣的预估值

训练的目的:学习矩阵A和B

数据集:(用户id a,物品id b,真实兴趣分数 y)------>三元组

优化问题:min\sum (y-<a,b>)^2

行:用户,列:物品,灰色位置表示未曝光,绿色位置代表分数

为什么叫矩阵补充?

大多数都是灰色的,我们并不知道这些用户对这些物品的兴趣,用绿色的部分训练,得到矩阵AB,将灰色部分补全,补全之后就可以给用户做推荐了

工业界不用

缺点:

1.没有利用物品和用户的属性,仅仅使用了id做embedding

2.负样本选取方式不对:

        正样本:曝光后点击

        负样本:曝光后未点击(这是一个“想当然”的设计,其实不对,工业界不采用,后面会详细讲如何构造负样本)

3.训练的方法不好,内积不如余弦相似度,平方损失(回归)不如交叉熵损失(分类)判断正负样本

线上服务

模型存储

训练得到的矩阵AB可能会很大,A--用户,B---物品

矩阵A:

        存到key-value表,key是用户id,value是A的一列。

矩阵B:

        比较复杂

线上服务

1.利用用户id,查找kv表,得到向量a

2.最近邻查找:查找最有可能的k个物品

        物品的embedding向量bi,计算内积<a,bi>,返回最大的k个物品

缺点:时间复杂度正比于物品数量,暴力枚举导致无法实时运转。

如何加速

近似最近邻查找

定义标准:余弦相似度最大(常用) or 内积最大 or 欧氏距离小。

如果系统不支持计算余弦相似度:

将向量归一化(二范数等于1),此时计算出的内积就等于余弦相似度。

方法:

1.数据预处理:分成多个区域,每个区域用一个长度为1的单位向量表示,建立索引,向量作为key,点列表作为value,给定一个向量,就可以返回区域内所有点。

如何划分:余弦相似度---扇形,欧氏距离---多边形

2.线上快速找回:用户向量a,与所有单位索引向量对比,计算相似度,找到最相似的,通过索引,找到所有点,再计算所有点的相似度

这篇关于推荐系统学习笔记(四)--基于向量的召回的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1011589

相关文章

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

C++简单日志系统实现代码示例

《C++简单日志系统实现代码示例》日志系统是成熟软件中的一个重要组成部分,其记录软件的使用和运行行为,方便事后进行故障分析、数据统计等,:本文主要介绍C++简单日志系统实现的相关资料,文中通过代码... 目录前言Util.hppLevel.hppLogMsg.hppFormat.hppSink.hppBuf

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

macOS彻底卸载Python的超完整指南(推荐!)

《macOS彻底卸载Python的超完整指南(推荐!)》随着python解释器的不断更新升级和项目开发需要,有时候会需要升级或者降级系统中的python的版本,系统中留存的Pytho版本如果没有卸载干... 目录MACOS 彻底卸载 python 的完整指南重要警告卸载前检查卸载方法(按安装方式)1. 卸载

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.