商品推荐系统浅析 | 京东云技术团队

news2024/11/18 11:34:29

一、综述

本文主要做推荐系统浅析,主要介绍推荐系统的定义,推荐系统的基础框架,简单介绍设计推荐的相关方法以及架构。适用于部分对推荐系统感兴趣的同学以及有相关基础的同学,本人水平有限,欢迎大家指正。

二、商品推荐系统

2.1 推荐系统的定义

推荐系统本质上还是解决信息过载的问题,帮助用户找到他们感兴趣的物品,深度挖掘用户潜在的兴趣。

2.2 推荐架构

其实推荐系统的核心流程只有召回、排序、重排。

请求流程

当一个用户打开一个页面,这个时候前端会携带用户信息(pin或者uuid等)去请求后台接口(通过color间接调用),当后台收到请求后一般会先根据用户标识进行分流获取相关策略配置(ab策略),这些策略去决定接下来会调用召回模块、排序模块以及重排模块的哪个接口。一般召回模块分多路召回,每路召回负责召回多个商品,排序和重排负责调整这些商品的顺序。最后挑选出合适的商品并进行价格、图片等相关信息补充展现给用户。用户会根据自己是否感兴趣选择点击或者不点击,这些涉及用户的行为会通过日志上报到数据平台,为之后效果分析和利用用户行为推荐商品奠定基础。

其实有些问题想说一说:

为什么要采取召回、排序、重排这种漏斗分层架构?

(1)从性能方面

终极:从百万级的商品库筛选出用户感兴趣的个位数级别的商品。

复杂的排序模型线上推断耗时严重,需要严格控制进入排序模型的商品数量。需要进行拆解

(2)从目标方面

召回模块:召回模块的任务是快速从大量的物品中筛选出一部分候选物品,目的是不要漏掉用户可能会喜欢的物品。召回模块通常采用多路召回,使用一些简化的特征或模型。

排序模块:排序模块的任务是精准排序,根据用户的历史行为、兴趣、偏好等信息,对召回模块筛选出的候选物品进行排序。排序模块通常使用一些复杂的模型。

重排模块:重排模块的任务是对排序模块的结果进行二次排序或调整,以进一步提高推荐的准确性和个性化程度。重排模块通常使用一些简单而有效的算法。

什么是ab实验?

参考论文:Overlapping Experiment Infrastructure: More, Better, Faster Experimentation(google2010)

只有在线实验才能真正评估模型优劣,ab实验可以快速验证实验的效果,快速迭代模型。减少上线新功能的风险。

ab算法:Hash(uuid+实验id+创建时间戳)%100

特性:分流+正交

2.3召回

召回层的存在仅仅是为用户从广阔的商品池子中初筛出一批还不错的商品。为了平衡计算速度与召回率(正样本占全部正样本的比例)指标之间的矛盾,采用多路召回策略,每路召回策略只考虑其中的单一特征或策略。

2.3.1多路召回的优劣

多路召回:采用不同的策略、特征或者简单模型分别召回一部分候选集,然后把候选集混合在一起供排序使用。召回率高,速度快,多路召回相互补充。

多路召回中每路召回的截断个数K是个超参数,需要人工调参,成本高;召回通路存在重合问题,冗余。

是否存在一种召回可以替代多路召回,向量召回应用而生,就目前而言,仍然是以向量召回为主,其他召回为辅的架构。

2.3.2召回分类

主要分为非个性化召回,个性化召回两大类。非个性化召回主要是进行热点推送,推荐领域马太效应严重,20%的商品贡献80%的点击。个性化召回主要是发掘用户感兴趣的商品,着重处理每个用户的差异点,提高商品的多样性,保持用户的粘性。

非个性化召回

(1) 热门召回

近7天高点击、高点赞、高销量商品召回

(2)新品召回

最新上架的商品召回

个性化召回

(1)标签召回、地域召回

标签召回:用户感兴趣的品类、品牌、店铺召回等

地域召回:根据用户的地域召回地域内的优质商品。

(2)cf召回

协同过滤算法是基于用户行为数据挖掘用户的行为偏好,从而根据用户的行为偏好为其推荐物品,其根据的是用户和物品的行为矩阵(共现矩阵)。用户行为一般包括浏览、点赞、加购、点击、关注、分享等等。

协同过滤分为三大类:基于用户的协同过滤(UCF)和基于物品的协同过滤(ICF)和基于模型的协同过滤(隐语义模型)。是否为用户推荐某个物品,首先要把用户和物品进行关联,而进行关联的点是另一个物品还是另一个用户,决定了这属于哪个类型的协同过滤。而基于隐语义模型是根据用户行为数据进行自动聚类挖掘用户的潜在兴趣特征。从而通过潜在兴趣特征对用户和物品进行关联。

基于物品的协同过滤(ICF):判断是否为用户推荐某个物品,首先根据用户历史行为记录的物品和这个物品的相似关系来推断用户对这个物品的兴趣度,从而判断我们是否推荐这个物品。整个协同过滤过程主要分为以下几步:计算物品之间的相似度,计算用户对物品的兴趣度,排序截取结果。

商品相似度计算:

衡量相似度主要有以下几种方式:夹角余弦距离,杰卡德公式。由于用户或物品的表示方式的多样性,使得这些相似度的计算非常灵活。我们可以利用用户和物品的行为矩阵来去计算相似度,也可以根据用户行为、物品属性和上下文关系构造用户和物品的向量表示去计算相似性。

夹角余弦距离公式: cos⁡θ=(x1*x2+y1*y2)/(√(x12+y12 )*√(x22+y22 ))

杰卡德公式J(A,B)=(|A⋂B|)/(|A⋃B|)

商品a商品b商品c商品d
用户A1001
用户B0110
用户C1011
用户D1100

夹角余弦距离公式计算商品a和b的相似度:

Wab=(1*0+0*1+1*0+1*1)/(√(12+02+12+12 )*√(02+12+02+12 ))=1/√6

spark实现ICF:https://zhuanlan.zhihu.com/p/413159725

问题:冷启动问题,长尾效应。

(3)向量召回

向量化召回:通过学习用户与物品低维向量化表征,将召回建模成向量空间内的近邻搜索问题,有效提升了召回的泛化能力与多样性,是推荐引擎的核心召回通道。

向量:万物皆可向量化,Embedding就是用一个低维稠密的向量表示一个对象(词语或者商品),主要作用是将稀疏向量转换成稠密向量(降维的效果),这里的表示蕴含着一定的深意,使其能够表达出对象的一部分特征,同时向量之间的距离反映对象之间的相似性。

向量召回步骤:离线训练生成向量,在线向量检索。

1.离线训练生成向量

word2vec:词向量的鼻祖,由三层神经网络:输入层,隐藏层,输出层,隐藏层没有激活函数,输出层用了softmax计算概率。

目标函数

网络结构:

总的来说:输入是词语的序列,经过模型训练可以得到每个词语对应的向量。应用在推荐领域就是输入是用户的点击序列,经过模型训练得到每个商品的向量。

优劣:简单高效,但是只考虑了行为序列,没有考虑其他特征。

双塔模型:

网络结构:分别称为User塔和物品塔;其中User塔接收用户侧特征作为输入比如用户id、性别、年龄、感兴趣的三级品类、用户点击序列、用户地址等;Item塔接受商品侧特征,比如商品id、类目id、价格、近三天订单量等。数据训练:(正样本数据,1)(负样本,0)正样本:点击的商品,负样本:全局随机商品样本(或者同批次其他用户点击样本)

优劣:高效,完美契合召回特性,在线请求得到用户向量,检索召回item向量,泛化性高;用户塔和item塔割裂,只在最后做了交互。

2.在线向量检索

向量检索:是一种基于向量空间模型(Vector Space Model)的信息检索方法,用于在大规模文本集合中快速查找与查询向量最相似的文档向量。在信息检索、推荐系统、文本分类中得到广泛应用。

向量检索的过程是计算向量之间的相似度,最后返回相似度较高的TopK向量返回,而向量相似度计算有多种方式。计算向量相似性得方式有欧式距离、内积、余弦距离。归一化后,内积与余弦相似度计算公式等价。

向量检索的本质是近似近邻搜索(ANNS),尽可能减小查询向量的搜索范围,从而提高查询速度。

目前在工业界被大规模用到的向量检索算法基本可以分为以下3类:

  • 局部敏感性哈希(LSH)
  • 基于图(HNSW)
  • 基于乘积量化

简单介绍LSH

LSH算法的核心思想是:将原始数据空间中的两个相邻数据点通过相同的映射或投影变换后,这两个数据点在新的数据空间中仍然相邻的概率很大,而不相邻的数据点被映射到同一个桶的概率很小。

相比于暴力搜索遍历数据集中的所有点,而使用哈希,我们首先找到查询样本落入在哪个桶中,如果空间的划分是在我们想要的相似性度量下进行分割的,则查询样本的最近邻将极有可能落在查询样本的桶中,如此我们只需要在当前的桶中遍历比较,而不用在所有的数据集中进行遍历。当哈希函数数目H取得太大,查询样本与其对应的最近邻落入同一个桶中的可能性会变得很微弱,针对这个问题,我们可以重复这个过程L次(每一次都是不同得哈希函数),从而增加最近邻的召回率。

案例:基于word2vec实现向量召回

2.4排序

推荐系统的掌上明珠

排序阶段分为粗排和精排,粗排一般出现在在召回结果的数据量级比较大的时候。

进化历程

简单介绍Wide&Deep

背景:手动特征组合实现记忆性效果不错但是特征工程太耗费人力,并且未曾出现的特征组合无法记忆,不能进行泛化。

目的:使模型同时兼顾泛化和记忆能力(有效的利用历史信息并具有强大的表达能力)​

(1)记忆能力 模型直接学习并利用历史数据中物品或者特征共现频率的能力,记忆历史数据的分布特点,简单模型容易发现数据中对结果影响较大的特征或者组合特征,调整其权重实现对强特征的记忆

(2)泛化能力 模型传递特征的相关性,以及发掘稀疏或者从未出现过的稀有特征和最终标签相关性的能力,即使是非常稀疏的特征向量输入也能得到稳定平滑的推荐概率。提高泛化性的例子:矩阵分解,神经网络

兼顾记忆和泛化能力 (结果的准确性和扩展性) wide部分专注模型记忆,快速处理大量历史行为特征,deep部分专注模型泛化,探索新世界,模型传递特征的相关性,发掘稀疏甚至从外出现过的稀有特征与最终标签的相关性的能力,具有强大的表达能力。最终将wide部分和deep部分结合起来,形成统一的模型。

wide部分就是基础的线性模型,表示为y=W^T X+b X特征部分包括基础特征和交叉特征。交叉特征在wide部分很重要,可以捕捉到特征间的交互,起到添加非线性的作用。

deep部分为embeding层+三层神经网络(relu),前馈公式

联合训练

优劣:为推荐/广告/搜索排序算法之后的发展奠定了重要基础,从传统算法跨越到深度学习算法,里程碑意义。兼顾记忆和泛化能力但是Wide侧仍需要手工组合特征。

参考论文:Wide & Deep Learning for Recommender Systems

2.5 重排

定义:对精排后的结果顺序进行微调,一方面实现全局最优、一方面满足业务诉求提升用户体验。比如打散策略,强插策略,提高曝光,敏感过滤

MMR算法

实现商品多样性问题​

目的:在推荐结果准确性的同时保证推荐结果的多样性,为了平衡推荐结果的多样性和相关性​

算法原理,如公式​

D:商品集合,Q:用户,S:已被选中的商品集合, R\S:R中未被选中的商品集合​

def MMR(itemScoreDict, similarityMatrix, lambdaConstant=0.5, topN=20):
    #s 排序后列表 r 候选项
    s, r = [], list(itemScoreDict.keys())
    while len(r) > 0:
        score = 0
        selectOne = None
        # 遍历所有剩余项
        for i in r:
            firstPart = itemScoreDict[i]
            # 计算候选项与"已选项目"集合的最大相似度
            secondPart = 0
            for j in s:
                sim2 = similarityMatrix[i][j]
                if sim2 > second_part:
                    secondPart = sim2
            equationScore = lambdaConstant * (firstPart - (1 - lambdaConstant) * secondPart)
            if equationScore > score:
                score = equationScore
                selectOne = i
        if selectOne == None:
            selectOne = i
        # 添加新的候选项到结果集r,同时从s中删除
        r.remove(selectOne)
        s.append(selectOne)
    return (s, s[:topN])[topN > len(s)]



意义是选择一个与用户最相关的同时跟已选择物品最不相关的物品。时间复杂度O(n2) 可以通过限制选择的个数进行降低时间复杂度​

工程实现:需要用户和物品的相关性和物品之间的相似性作为输入,用户和物品的相关性可以用排序模型的结果作为代替,物品之间的相似性可以通过协同过滤等算法得到商品向量,计算余弦距离。也可以简单得是否同一三级类目、同一店铺等表征​

三、总结

就简单唠叨这么多啦,主要想让大家了解一下推荐系统,向大家介绍一下整个推荐架构,以及整个推荐都有哪些模块。由于本人水平有限,每个模块也没有讲的特别细,希望之后能在工作中继续学习这个领域,深挖细节,产出更好的东西呈现给大家。感谢!!!

作者:京东零售 闫先东

来源:京东云开发者社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/852445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G RedCap

5G RedCap指的是3GPP所提出的5G标准。与之前发布的5G标准相比,功能更加精简。5G RedCap于2019年6月首次被纳入3GPP R17研究项目。 把一些不必要的功能去掉就可以带来模组价格的降低。背后的基本想法是:为物联网应用定义一种新的、不那么复杂的NR设备。 …

自定义实现spring源码

目录 1.本文实现目标 2.自定义注解 3. 定义controller加上自定义的注释 4. 识别到这个注解 5.扫描目录,返回该目录下所有文件名(全限定名) 6.扫描该文件所在包中所有带这两个注解的类和方法放到map中 7.通过反射的方式创建实例 8.通过…

【Java】智慧工地管理系统源码(SaaS模式)

智慧工地是聚焦工程施工现场,紧紧围绕人、机、料、法、环等关键要素,综合运用物联网、云计算、大数据、移动计算和智能设备等软硬件信息技术,与施工生产过程相融合。 一、什么是智慧工地 智慧工地是指利用移动互联、物联网、智能算法、地理信…

汉字形近字(OCR)

近期做中文OCR识别的优化,抓破头皮却收获甚微。 为了百尺竿头更进一步,遂将目光聚焦在中文汉字特有的形近字和生僻字问题上,于是怒发整理形近字大全(花了不少刀),希望对同行朋友们也有帮助: 地表…

Vue + Cesium快速搭建(无需配置)

方式一&#xff1a;直接引入&#xff08;最简单&#xff09; 1.安装Cesium&#xff08;Vue搭建可以看我上一期的文章&#xff09; npm i cesium -save2.将node_modules\cesium\Build\Cesium文件夹拷贝到项目的public文件中 3.在public\index.html引入Cesium <!DOCTYPE h…

把天气美景“搬”进HarmonyOS桌面里是种怎样的体验

近日&#xff0c;在HDC 2023大会上&#xff0c;HarmonyOS 4正式官宣。其中&#xff0c;全新的全景天气壁纸延续桌面天气组件、天气AOD熄屏显示便捷、易用等特点&#xff0c;为用户带来感受真实天气的视野体验&#xff0c;受到了广泛的关注。 日常中&#xff0c;多变的天气影响…

【LeetCode】313. 超级丑数

313. 超级丑数 方法&#xff1a;“多路归并” 思路 这道题其实是 264. 丑数 II 的进阶&#xff0c;前者固定使用三个指针&#xff0c;分别对应于 2、3、5&#xff0c;而这道的primes数组长度不固定&#xff0c;因此使用指针数组来对应 primes 的每一个值。 第一个丑数一定是 …

MySQL的Group_concat函数超过1024怎么破?

最近在MySQL写字段拼接&#xff0c;结果发现拼接的不完整。 丢失了一般的字段。查询了一下才发现。 group_concat长度限制默认是1024&#xff0c;如果在实际使用过程中拼接好的字符串长度超过了最大长度&#xff0c;那么最后仅保留前1024个字符。 执行SQL SHOW VARIABLES LIK…

线上影院售票系统票商端H5小程序源码搭建

搭建一个线上影院售票系统票商端H5小程序源码是一个相对复杂的过程&#xff0c;需要涉及到前端开发、后端开发以及数据库的搭建等多个方面。具体步骤如下&#xff1a; 1. 确定需求&#xff1a;首先需要明确影院售票系统的功能需求&#xff0c;包括电影信息的展示、影院排片管理…

开发中的花样玩法(前端打工人须知)

一、关于vue使用vant的van-popup&#xff0c;子元素设定固定定位失效问题。 position: fixed; 原因是该组件使用了transform导致&#xff0c;父元素使用了transform会导致子元素在使用固定定位时失效&#xff0c;解决方法就是把要设置固定定位的子元素放在跟组件平级的位置&…

PHP流浪动物招领网站mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP流浪动物招领网站 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 下载链接 nullhttps://download.csdn.net/download/qq_41221322/88190168视频演示 …

狂码三万字 | 三维场景点云理解与重建技术

目录 00 引言 01 点云特征提取与匹配 1.1 传统点云特征提取 1.2 点云深度学习 1.3 点云卷积 1.4 稀疏卷积 1.5 点云Transformer 1.6 点云旋转不变特征提取 1.7 点云匹配 02 场景点云语义分割 2.1 场景表征与数据集 2.1.1 室内场景表征与相关数据集 2.1.2 室外场…

motrix配合百度网盘的下载激活使用,需下载Motrix(官网)绝对安全

使用文档下载 需要下载神器motrix 有官网怕被和谐就不挂了放在上面文档里,也可baidu自行搜索 motrix下载 操作步骤 --> 简单易学↓↓↓↓ 网盘链接和提取码分开来填,操作见下图↓↓ 就是加速(点这儿解析链接) 点击后有时需要等待几秒钟 如果没…

完整版:TCP、UDP报文格式

目录 TCP报文格式 报文格式 报文示例 UDP报文格式 报文格式 报文示例 TCP报文格式 报文格式 图1 TCP首部格式 字段长度含义Source Port16比特源端口&#xff0c;标识哪个应用程序发送。Destination Port16比特目的端口&#xff0c;标识哪个应用程序接收。Sequence Numb…

安防视频监控汇聚EasyCVR平台接入Ehome告警,公网快照不显示的原因排查

智能视频监控汇聚平台TSINGSEE青犀视频EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;视频监控管理平台…

外贸接单购物网站java开源搭建--内置客服系统+后台采集功能

搭建一个外贸接单购物网站是一个具有挑战的任务&#xff0c;需要考虑到用户界面设计、后端系统开发、客服系统和采集功能等多个方面。下面是一个大致的开发计划。 1. 用户界面设计 - 设计一个直观易用的用户界面&#xff0c;包括用户注册、登录、商品展示、下单等功能。 …

Scratch 之 3D 介绍及教程

第一章 为什么 3D 很难&#xff1f; 1.1 3D 难在何处&#xff1f; 3D 之所以会使我们觉得困难&#xff0c;是因为 Scratch 软件只有两个坐标轴&#xff0c;既&#xff1a;X轴、Y轴。 2维坐标系 而 3D 却拥有三个坐标轴&#xff1a; 3维坐标系 怎么办&#xff1f;很简单&…

Leetcode-每日一题【剑指 Offer 12. 矩阵中的路径】

题目 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 例如&#xff0c;在下面的 34 的矩阵中包含单词 "ABCCED"&#xff08;单词中的字母…

空天地光网络

空天地光网络 星座 卫星星座分类可参考卫星导航 walker星座&#xff1a; a classical inclined orbit constellation consisting of many orbits with the same height, and inclination. 参考论文Load-Balanced Virtual Network Embedding Based on Deep Reinforcement L…

Ariadne’s Thread-使用文本提示改进对感染区域的分割胸部x线图像

论文&#xff1a;https://arxiv.org/abs/2307.03942&#xff0c; Miccai 2023 代码&#xff1a;GitHub - Junelin2333/LanGuideMedSeg-MICCAI2023: Pytorch code of MICCAI 2023 Paper-Ariadne’s Thread : Using Text Prompts to Improve Segmentation of Infected Areas fro…