商品推荐(内容过滤 + 协同过滤)

2023-11-06

目录

1. 名词列表

2. 协同过滤

2.1 基于物品的协同过滤 itemCF

2.1.1 数据模型:

2.1.2 商品相似度矩阵生成:

2.1.3 推荐策略:

2.2 基于用户的协同过滤 userCF

2.2.1 数据模型:

2.2.2 用户相似度矩阵生成:

2.2.3 推荐策略:

2.3 user_product_rating_matrix 作为一个中间计算结果:

3. 内容过滤

4. 商品推荐系统整体系统流程:

推荐服务流程:

训练服务流程:

训练数据生成流程:

5. 数据表模型:

6. 内外服务交互方式:

7. 数据采集方式:

8. 训练过程:

9. 推荐服务提供方式:

10. 性能:


1. 名词列表

Flask:使用Python提供Http服务的服务端软件,可以结合 Gunicorn 构建 pre-fork 多进程模型的服务器。

内容过滤:基于内容相似度的商品推荐。

物品协同过滤:基于物品的协同过滤方式的商品推荐。

用户协同过滤:基于用户的协同过滤方式的商品推荐。

2. 协同过滤

2.1 基于物品的协同过滤 itemCF

2.1.1 数据模型:

用户表(user):存储用户基本信息,用于后期采样时进行群体分开训练。

商品表(product):存储商品的基本信息,用于内容过滤匹配和协同过滤,同时用于区分三种来源类别(精选厂家、jd等接口商品、自有商品)。

用户与商品交互表(user_action):存储用户与商品的交互历史日志,用作商品相似度计算的输入。

交互类型与得分映射表(action_score_map):存储每种交互类型的得分权重映射关系的常量数据,如 click: 1, search: 3, order: 10, favourite: 8。

商品相似度矩阵(product_similarity_matrix):存储商品之间的相似度,从用户-商品评分矩阵(user_product_rating_matrix)表生成。

用户-商品评分矩阵(user_product_rating_matrix):用于存储统计计算三种来源的用户-商品评分矩阵。

从 user_product_matrix 表中加载全部的用户-商品交互矩阵,在实际生产环境中是非常大的数据量,可能存在性能问题。

为了优化这个过程,我们可以考虑几个策略:

  1. 只加载活跃用户的交互数据,过滤掉长期不活跃的用户。

  2. 只加载热门商品的交互数据,不加载长尾冷门商品的交互。

  3. 对矩阵进行采样,例如每个用户只随机采样部分交互数据。

  4. 不完整加载矩阵到内存,而是使用延迟加载(Lazy Load)的机制,即只在计算时对特定条目进行加载。

  5. 对矩阵进行分块,按用户或商品的区块进行分组加载。

  6. 使用更优化的矩阵存储格式,如稀疏矩阵存储优化内存占用。

  7. 增量加载,每次只加载最近一次训练后新增的交互数据,避免重复加载。

综合这些策略,可以在保证足够的交互数据的同时,大幅减少内存占用和加载时间,使训练过程更高效。充分利用用户-商品交互矩阵来训练更好的模型。

2.1.2 商品相似度矩阵生成:

根据 user_product_rating_matrix 用户-商品交互矩阵,生成商品相似度矩阵:

从 user_product_rating_matrix 表中加载用户-商品交互数据,使用常用的算法如余弦相似度、改进的余弦相似度和Pearson相关系数等,得到的商品相似度矩阵可以直接供 ItemCF 模型使用。在推荐时,基于用户的商品交互历史,找到相似的商品,然后推荐商品的 topN 的相似商品。

2.1.3 推荐策略:

推荐的商品可能来自三种不同来源,需要做数量控制,再结合内容过滤的推荐方法来增加来源里推荐比较少的商品。综合推荐结果,按比例取出三种来源的前 i, j, k 个商品并去重。

2.2 基于用户的协同过滤 userCF

2.2.1 数据模型:

用户表(user):存储用户基本信息,用于后期采样时进行群体分开训练。

商品表(product):存储商品的基本信息,用于内容过滤匹配和协同过滤,同时用于区分三种来源类别(精选厂家、jd等接口商品、自有商品)。

用户与商品交互表(user_action):存储用户与商品的交互历史日志,用作商品相似度计算的输入。

交互类型与得分映射表(action_score_map):存储每种交互类型的得分权重映射关系的常量数据,如 click: 1, search: 3, order: 10, favourite: 8。

用户相似度矩阵(user_similarity):存储用户之间的相似度,从用户-商品评分矩阵(user_product_rating_matrix)表生成。

用户-商品评分矩阵(user_product_rating_matrix):用于存储统计计算三种来源的用户-商品评分矩阵。

从 user_product_matrix 表中加载全部的用户-商品交互矩阵,在实际生产环境中是非常大的数据量,可能存在性能问题。

2.2.2 用户相似度矩阵生成:

根据 user_product_rating_matrix 用户-商品交互矩阵,生成用户相似度矩阵:

从 user_product_rating_matrix 表中加载用户-商品交互数据,使用常用的算法如余弦相似度、改进的余弦相似度等,得到的用户相似度矩阵可以直接供 userCF 模型使用。在推荐时,基于用户的商品交互历史,找到相似的商品,然后推荐商品的 topN 的相似商品。

2.2.3 推荐策略:

推荐的商品可能来自三种不同来源,需要做数量控制,再结合内容过滤的推荐方法来增加来源里推荐比较少的商品。综合推荐结果,按比例取出三种来源的前 i, j, k 个商品并去重。

2.3 user_product_rating_matrix 作为一个中间计算结果:

常见的做法是将其作为一个中间计算结果,每次在模型训练或推荐请求时动态生成:

  • 根据最新用户行为数据,实时计算交互矩阵

  • 避免了维护一个大型矩阵表的成本

  • 可以确保矩阵数据时效性

  • 但每次计算会增加训练和推荐延时

3. 内容过滤

将商品的标题、描述等信息合为一个宽字段,构建分词矩阵并构建向量矩阵,最终构建相似度矩阵。

具体流程:

  • 查询站点上线的所有商品,按精选、jd等接口商品、会员自有分为3类,将商品信息字段合为一个宽字段,输出 csv 文件,格式为 {product_id:1, detail:"皮手套"};

  • 按3类分别构建商品信息的相似度矩阵,并保存该相似度矩阵以供商品的相似度查询和推荐;

  • 定时任务对商品相似度矩阵进行更新,如果查询到的站点上线的所有商品没有变化,则相似度矩阵保持不变;

  • 推荐商品时,使用商品的信息查询3类相似度矩阵中最相似的前 n 个商品,得到推荐商品列表后去除作为参数传入的商品,3类商品按比例分别取前 j、k、l 个商品,组成最终的推荐列表。

4. 商品推荐系统整体系统流程:

推荐服务流程:

springboot 微服务负责接收请求并对请求进行转换(如把商品 id 转换成商品信息的分词再传给 flask),把请求转发给 flask 集群。flask根据商品id、用户id、商品信息分词,分别推荐商品,把推荐维果返回给 springboot,springboot 综合推荐结果获取3种不同来源的不同比例的商品并去重后,返回给客户端。

训练服务流程:

内容过滤模型训练: 训练进程读取3类来源的商品信息csv文件,按3类分别构建商品信息的相似度模型,并保存该相似度矩阵以供商品的相似度查询和推荐。

物品协同过滤模型训练:训练进程读取用户与商品交互表(user_action)生成的csv文件,来生成最新的用户商品评分矩阵(user_product_rating_matrix),根据最新的评分矩阵训练商品相似度矩阵,商品相似度矩阵即为商品相似度模型。

物品协同过滤模型训练:训练进程读取用户与商品交互表(user_action)生成最新的用户商品评分矩阵(user_product_rating_matrix),根据最新的评分矩阵训练商品相似度矩阵,商品相似度矩阵即为商品相似度模型。

训练数据生成流程:

内容过滤:Java 进程读取商品数据库,合并多个商品表的多个字段,生成商品信息的CSV文件。用定时任务完成。

物品协同过滤:Java 进程将用户商品交互表(user_action)生成为CSV文件;更CSV文件时,对比CSV文件最后一行的记录id和时间戳,以增量的方式更新CSV文件。用定时任务完成。

用户协同过滤:Java 进程将用户商品交互表(user_action)生成为CSV文件;更CSV文件时,对比CSV文件最后一行的记录id和时间戳,以增量的方式更新CSV文件。用定时任务完成。

5. 数据表模型:

内容过滤:

商品信息宽字段,按三种来源生成三种 csv 文件

物品协同:

用户表(user),商品表(product),用户与商品交互表(user_action),交互类型与得分映射表(action_score_map),用户-商品评分矩阵(user_product_rating_matrix),商品相似度矩阵(product_similarity)

用户协同:

用户表(user),商品表(product),用户与商品交互表(user_action),交互类型与得分映射表(action_score_map),用户-商品评分矩阵(user_product_rating_matrix),用户相似度矩阵(user_similarity)

6. 内外服务交互方式:

springboot 微服务:负责参数的传入转发给 flask;推荐结果的综合去重、按比例获取前 i, j, k 个商品处理;内容过滤、物品协同过滤、用户协同过滤的CSV数据文件增量生成的定时任务。

flask 推荐计算服务:负责不同模型的加载和推荐计算,提供Restful 接口,向springboot响应结果。

训练服务:定时任务训练内容过滤模型、物品协同过滤模型、用户协同过滤模型。

7. 数据采集方式:

内容过滤:定时任务

物品协同:用户行为存入用户商品交互表,评分表使用定时任务 + 增量计算

用户协同:用户行为存入用户商品交互表,评分表使用定时任务 + 增量计算

8. 训练过程:

内容过滤:定时任务,每个站点分别生成3个模型(各属于一种商品来源)

物品协同:定时任务 + 增量计算,

用户协同:定时任务 + 增量计算

9. 推荐服务提供方式:

Restful 接口,由 springboot 提供。

10. 性能:

Flask 推荐计算服务可以通过结合 gunicorn 和 nginx,提供多节点的分布式服务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

商品推荐(内容过滤 + 协同过滤) 的相关文章

  • 01-ZooKeeper快速入门

    1 Zookeeper概念 Zookeeper是Apache Hadoop项目下的一个子项目 是一个树形目录服务 zookeeper翻译过来就是 动物园管理员 它是用来管理Hadoop 大象 Hive 蜜蜂 Pig 小猪 的管理员 简称ZK
  • 分布式锁解决方案_Zookeeper分布式锁原理

    通过召zk实现分布式锁可靠性时最高的 公平锁和可重入锁的原理 取水秩序 1 取水之前 先取号 2 号排在前面的 就可以先取水 3 先到的排在前面 那些后到的 一个一个挨着 在井边排成一队 公平锁 这种排队取水模型 就是一种锁的模型 什么是可
  • Nacos、ZooKeeper和Dubbo的区别

    Nacos ZooKeeper和Dubbo是三个不同的分布式系统组件 它们之间有以下几点区别 功能定位 Nacos主要提供服务发现 配置管理和服务治理等功能 而ZooKeeper主要是分布式协调服务 提供了分布式锁 分布式队列等原语 Dub
  • 什么是分布式架构

    一 分布式架构定义 什么是分布式架构 分布式系统 distributed system 是建立在网络之上的软件系统 内聚性 是指每一个数据库分布节点高度自治 有本地的数据库管理系统 透明性 是指每一个数据库分布节点对用户的应用来说都是透明的
  • Kafka——Mac搭建kafka环境

    1 下载Kafka安装包 下载地址 将压缩包移动到 usr local mv kafka 2 12 3 1 0 tgz usr local 解压 tar zxvf kafka 2 12 3 1 0 tgz 2 启动 启动zookeeper
  • 2021春招已正式开启,阿里巴巴企业智能事业部内推,有意者看下文!

    前言 说一说已经拿到内推的两个朋友的面试经验 你们可以看一下准备一下 同事A阿里巴巴一面 55分钟 先介绍一下自己吧 说一下自己的优缺点 具体讲一下之前做过的项目 你觉得项目里给里最大的挑战是什么 Hashmap为什么不用平衡树 AQS知道
  • Hadoop 完全分布式运行实战

    Hadoop运行模式包括 本地模式 伪分布式模式以及完全分布式模式 Hadoop官方网站 Apache Hadoop 流程步骤 准备3台客户机 关闭防火墙 静态ip 主机名称 安装JDK 配置环境变量 安装Hadoop 配置环境变量 配置集
  • 【seaweedfs】3、f4: Facebook’s Warm BLOB Storage System 分布式对象存储的冷热数据

    论文地址 Facebook的照片 视频和其他需要可靠存储和快速访问的二进制大型对象 BLOB 的语料库非常庞大 而且还在继续增长 随着BLOB占用空间的增加 将它们存储在我们传统的存储系统 Haystack 中变得越来越低效 为了提高我们的
  • Redis 分布式缓存

    分布式缓存 单点 Redis 的问题及解决 数据丢失 实现Redis数据持久化 并发能力 搭建主从集群 实现读写分离 存储能力 搭建分片集群 利用插槽机制实现动态扩容 故障恢复能力 利用哨兵机制 实现健康检测和自动恢复 RDB RDB全称R
  • 基于一致性理论的孤岛微电网分布式控制策略研究(Simulink仿真实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 仿真搭建 2 2 优化控制
  • GoLong的学习之路,进阶,微服务之使用,RPC包(包括源码分析)

    今天这篇是接上上篇RPC原理之后这篇是讲如何使用go本身自带的标准库RPC 这篇篇幅会比较短 重点在于上一章对的补充 文章目录 RPC包的概念 使用RPC包 服务器代码分析 如何实现的 总结 Server还提供了两个注册服务的方法
  • AI分布式训练:DDP (数据并行)技术详解与实战

    编者按 如今传统的单机单卡模式已经无法满足超大模型进行训练的要求 如何更好地 更轻松地利用多个 GPU 资源进行模型训练成为了人工智能领域的热门话题 我们今天为大家带来的这篇文章详细介绍了一种名为 DDP Distributed Data
  • 不会做项目惨遭部门领导批评,连刷35天分布式小册轻松拿下

    互联网发展到今天 用户数量越来越多 产生的数据规模也越来越大 应用系统必须支持高并发访问和海量数据处理的需求 对比集中式架构 分布式系统由于具有可扩展性 可以动态扩展服务和存储节点 使用廉价的机器构建高性能的服务 更适合如今的互联网业务 分
  • Kafka基础—3、Kafka 消费者API

    一 Kafka消费者API 1 消息消费 当我们谈论 Kafka 消费者 API 中的消息消费时 我们指的是消费者如何从 Kafka 主题中拉取消息 并对这些消息进行处理的过程 消费者是 Kafka 中的消息接收端 它从指定的主题中获取消息
  • 各种不同语言分别整理的拿来开箱即用的8个开源免费单点登录(SSO)系统

    各种不同语言分别整理的拿来开箱即用的8个开源免费单点登录 SSO 系统 单点登录 SSO 是一个登录服务层 通过一次登录访问多个应用 使用SSO服务可以提高多系统使用的用户体验和安全性 用户不必记忆多个密码 不必多次登录浪费时间 下面推荐一
  • 终于找到了最新版的Zookeeper入门级教程,建议收藏!

    小熊学Java https javaxiaobear cn 1 分布式一致性 1 CAP 理论 CAP 理论指出对于一个分布式计算系统来说 不可能同时满足以下三点 一致性 在分布式环境中 一致性是指数据在多个副本之间是否能够保持一致的特性
  • 使用 Helm Chart 部署分布式 GreptimeDB

    GreptimeDB 作为云时代基础设施的时序数据库 从第一天开始就积极拥抱云原生技术 将数据库部署在 Kubernetes 上可以提供可伸缩性 自愈能力和简化的部署和管理 从而为应用程序提供了强大的弹性和可靠性 Helm 是一个用于管理
  • 华纳云:ServiceComb如何实现zipkin分布式调用链追踪

    Apache ServiceComb是一个开源的微服务框架 它提供了分布式系统开发所需的一系列工具和服务 在ServiceComb中 实现分布式调用链追踪可以通过整合Zipkin来实现 Zipkin是一个开源的分布式追踪系统 它可以帮助你跟
  • 【复现】遗传算法求解分布式电源选址定容问题并考虑环境因素研究【IEEE33节点】(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 手把手教你使用HarmonyOS本地模拟器

    我们通过下面的动图来回顾下手机本地模拟器的使用效果 本期 我们将为大家介绍HarmonyOS本地模拟器的版本演进 并手把手教大家使用HarmonyOS本地模拟器 一 本地模拟器的版本演进 2021年12月31日 经过一个版本的迭代优化 随D

随机推荐

  • python计算距今时间

    计算距今时间 计算一个 ISO 8601 格式的时间字符串距离今天的天数 import datetime 定义时间字符串 time str 2023 08 03T09 30 29 359 08 00 解析时间字符串为datetime对象 d
  • 关于openldap/bdb的一些配置和维护的问题

    一 配置部份在基本配置完成之后 可以在slapd conf设置一些提高安全和效率的选项 cachesize 5000 checkpoint 1024 5 cachesize是ldap在内存中缓存的记录条数 这个缓存是openldap自己维护
  • GMTC分享——当插件化遇到 Android P

    转自 https blog csdn net xinzhou201 article details 80881604 GMTC分享 当插件化遇到 Android P 手机京东技术团队 2018 06 30 举报 前言 Android P 来
  • 用Python写爬虫就很low?你赞同嘛?

    之前换了份工作 不再是单纯的Web开发了 要学习的东西真的挺多的 入职的第1天 就让我入手写个爬虫 只是这个爬虫没有采集几个亿数据量的业务场景 之前换了份工作 不再是单纯的Web开发了 要学习的东西真的挺多的 入职的第1天 就让我入手写个爬
  • 总结flutter玩转之-flutter 调用安卓原生view(使用AndroidView)

    总结flutter玩转之 fluuter 调用安卓原生view 使用AndroidView 1 假设你已经熟悉fluuter 开发熟悉dart 语言 android 原生开发技能 1 在安卓原生项目添加代码 1 创建一个原生view 比如说
  • 什么是MIPI接口

    什么是MIPI接口 摘要 随着客户要求手机摄像头像素越来越高同时要求高的传输速度传统的并口传输越来越受到挑战 提高并口传输的输出时钟是一个办法但会导致系统的EMC设计变得越来困难增加传输 手机摄像头MIPI技术介绍 随着客户要求手机摄像头像
  • Postgresql一行变多行unnest与string_to_array,多行变一行string_agg

    Postgresql一行变多行unnest与string to array 多行变一行string agg 1 源码 创建表 create table tb id int value varchar 30 插入数据 insert into
  • vscode c++ string报错ERROR: Unable to start debugging. Unexpected GDB output from command “-exec-run“.

    尝试用vscode配值c 环境 配通之后可以hello world了 但是cout string类型的变量时总是闪退 看了下调试控制台上报错 ERROR Unable to start debugging Unexpected GDB ou
  • BI开发步骤

    BI开发如何快速接入 在数据中台项目中 我们会频繁接触BI工具并需要进行开发接入 BI工具种类繁多 因此如果能快速学习完成开发 则能大大提升效率 1 BI工具通用的开发步骤 数据源接入 数据集配置 分为常规数据集和SQL数据集 仪表盘配置
  • C语言游戏---小猫钓鱼

    A和B两个同学玩简单的纸牌游戏 每人手里有n张牌 两人轮流出牌并依次排列在桌面上 每次出掉手里的第1张牌 出牌后如果发现桌面上有跟刚才打出的牌的数字相同的牌 则把从相同的那张牌开始的全部牌按次序放在自己手里的牌的末尾 当一个人手中的牌先出完
  • 将开源clucene引擎编译成动态库

    本章介绍如何将clucene编译成动态库 开发桌面级的全文检索引擎 1 准备工具 编译平台 windows 10 代码编译工具 vs2010 CMake版本 cmake 3 17 1 win64 x64 源代码版本 clucene core
  • C++ 模板类和友元

    模板类的友元分三类 1 非模板友元 2 约束模板友元 即友元的类型取决于类被实例化时的类型 3 非约束模板友元 即友元的所有具体化都是类的每一个具体化的友元 1 模板类的非模板友元函数 count 函数不是通过对象调用的 它是友元不是成员函
  • QT中css样式

    QLabel 字体左对齐 QLabel qproperty alignment AlignLeft 字体居中 QLabel qproperty alignment AlignCenter 字体右对齐 QLabel qproperty ali
  • 基于FiscoBcos v3.0.1 pro版的host网络模式集群环境搭建

    安装软件 更新 最新版本系统软件 yum update y 安装docker yum install y yum utils device mapper persistent data lvm2 设置yum源 yum config mana
  • python+unittest+HTMLReopertRunner生成测试报告

    1 安装HTMLReport 在线安装 使用pip命令安装HTMLReport 命令 pip install HTMLReport 安装好的位置在 Python安装路径下的Lib site packages下 离线安装 直接将下载好的HTM
  • 现在上车音视频开发还来得及吗?论音视频开发的的前景趋势!

    一 行业现状 核心竞争力 定义音视频是程序届的皇冠 掌握音视频意味着拿到通往未来的船票 不用担心会被其他人替代 音视频是有门槛的 是与其他人拉开差距的分水岭 高端人才相关缺乏 Boss直聘中 北上广深很多年限上50w 70w的音视频岗位 常
  • Sqlilabs-22

    这里来到了第一阶段的最后一关 22 关 其实跟 21 关一样 只不过变成了双引号 而已 直接上菜吧o uname YWRtaW4iIGFuZCBleHRyYWN0dmFsdWUoMSxjb25jYXQoMHg3ZSwoc2VsZWN0IGR
  • 数字后端学习之SDC

    SDC是一个设计中最重要的文件 为什么这么说呢 ppa大家知道把 sdc就是要对ppa进行约束 那sdc有哪些具体的内容呢 1 描述芯片的工作速度 包括 create clock create generate clock 要知道clock
  • 华为OD机试 Python 称砝码

    题目 你有一些不同的砝码 每个砝码都有自己的重量和数量 试问 用这些砝码 你可以得到多少种不同的重量组合 输入 第一行给出砝码的种类数 n 1 n 10 第二行按顺序列出每种砝码的重量 重量范围为 1 m 2000 第三行按顺序列出每种砝码
  • 商品推荐(内容过滤 + 协同过滤)

    目录 1 名词列表 2 协同过滤 2 1 基于物品的协同过滤 itemCF 2 1 1 数据模型 2 1 2 商品相似度矩阵生成 2 1 3 推荐策略 2 2 基于用户的协同过滤 userCF 2 2 1 数据模型 2 2 2 用户相似度矩