推荐系统-Task05推荐系统流程构建

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: Offilne部分:主要是基于离线物料系统生成的物料画像和用户画像进行处理,为每个用户生成热门页列表和推荐页列表,并将其存储到Redis中Online部分:主要是针对不同的用户,使用不同的策略,提供热门页列表和推荐页列表的新闻数据,进行过滤排序之后,展示到前端页面上

1.推荐系统基本流程:


Offilne部分:主要是基于离线物料系统生成的物料画像和用户画像进行处理,为每个用户生成热门页列表和推荐页列表,并将其存储到Redis中

Online部分:主要是针对不同的用户,使用不同的策略,提供热门页列表和推荐页列表的新闻数据,进行过滤排序之后,展示到前端页面上


2. Offline部分


2.1 热门页列表构建


2.1.1 业务流程

基于离线物料系统生成的物料画像(MongoDB的NewsRecSys库的FeatureProtail集合数据),根据其发布时间以及用户的行为记录(阅读量、点赞量和收藏量)计算热度值,更新物料中所有新闻的热度值

将所有新闻按照类别,将热门列表存入缓存中,提供给Online的热门页列表


2.1.2 核心代码逻辑

代码位于recprocess/recall/hot_recall.py

update_hot_value()方法:主要用于更新物料中所有新闻的热度值,通过遍历MongoDB的NewsRecSys库的FeatureProtail集合数据,选取最近3天发布的新闻,通过使用下列公式,进行热度值的计算,并更新hot_value字段(初始值为1000):

news_hot_value = (news_likes_num * 0.6 + news_collections_num * 0.3 + news_read_num * 0.1) * 10 / (1 + time_hour_diff / 72)

Copy to clipboardErrorCopied

注: 上述公式源自魔方秀公式: 魔方秀热度 = (总赞数 * 0.7 + 总评论数 * 0.3) * 1000 / (公布时间距离当前时间的小时差+2) ^ 1.2


最初的公式为Hacker News算法: Score = (P-1) / (T+2)^G 其中P表示文章得到的投票数,需要去掉文章发布者的那一票;T表示时间衰减(单位小时);G为权重,默认值为1.8


group_cate_for_news_list_to_redis()方法:主要用于将物料库(FeatureProtail集合),通过遍历各类新闻,按照下面形式存入Redis[0]的hot_list_news_cate中:

hot_list_news_cate:<新闻类别标识>: {<新闻类别名>_<新闻id>:<热度值>}

Copy to clipboardErrorCopied


2.2 推荐页列表构建

2.2.1 业务流程

针对注册用户,建立冷启动的推荐页列表数据,通过用户年龄、性别指定用户群,自定义用户的新闻类别,根据新闻热度值,生成冷启动的推荐列表

针对老用户,提供个性化推荐,目前该系统没有提供千人千面的推荐功能


2.2.2 核心代码逻辑

代码位于recprocess/cold_start/cold_start.py

generate_cold_user_strategy_templete_to_redis_v2()方法:按照用户类别、新闻类别提供各类新闻的热度值;通过自定义配置将用户分为4类,遍历各类别中的新闻类型,将物料库(MongoDB的NewsRecSys库的FeatureProtail集合数据)中对应的新闻热度值按照下面形式存入Redis[0]的cold_start_group中:


cold_start_group:<人群分类ID>:<新闻类别标识>: {<新闻类别名>_<新闻id>:<热度值>}
Copy to clipboardErrorCopied

user_news_info_to_redis()方法:

按照用户、新闻分类提供用户冷启动的推荐模板;遍历所有用户,针对每个用户分类,从Redis[0]的cold_start_group中取出新闻热度值,按照以下形式存入Redis[0]的cold_start_user中:

cold_start_user:<用户ID>:<新闻类别标识>: {<新闻类别名>_<新闻id>:<热度值>}

Copy to clipboardErrorCopied

按照用户提供用户的新闻类别标识;针对每个用户,根据自定义的用户新闻类别(即每个用户分类具有哪些新闻类别),按照以下形式存入Redis[0]的cold_start_user_cate_set中:

cold_start_user_cate_set:<用户ID>: {<新闻类别标识>}

Copy to clipboardErrorCopied


3.Online部分

3.1 热门页列表构建


3.1.1 业务流程

获取用户曝光列表,得到所有的新闻ID

针对新用户,从之前的离线热门页列表中,为该用户生成一份热门页列表,针对老用户,直接获取该用户的热门页列表

对上述热门列表,每次选取10条新闻,进行页面展示

对已选取的10条新闻,更新曝光记录


3.1.2 核心代码逻辑

代码位于recprocess/online.py

_get_user_expose_set()方法:主要获取用户曝光列表,得到所有的新闻ID;该数据存储在Redis[3]中,数据格式如下:

user_exposure:<用户ID>: {<新闻ID>:<曝光时间>}

Copy to clipboardErrorCopied

_judge_and_get_user_reverse_index()方法:用于判断用户是否存在热门页列表,如果用户是新用户,根据Redis[0]的hot_list_news_cate中的数据,复制创建该用户的热门页列表,具体数据格式如下:

user_id_hot_list:<用户ID>:<新闻分类标识>: {<新闻类别名>_<新闻id>:<热度值>}

Copy to clipboardErrorCopied

_get_polling_rec_list()方法:通过轮询方式获取用户的展示列表,每次只取出10条新闻;通过while循环方式,从Redis[0]的user_id_hot_list:<用户ID>:<新闻分类标识>中选取新闻,之后删除已选取的新闻,并把选取的10条新闻内容放到用户新闻(user_news_list)数组中,新闻ID放到曝光列表(exposure_news_list)中

_save_user_exposure()方法:将曝光新闻数据存储到Redis[3]中;设置曝光时间,删除重复的曝光新闻,并按照下列格式存储到Redis[3]的user_exposure中:


user_exposure:<用户ID>: {<新闻ID>:<曝光时间>}

Copy to clipboardErrorCopied


3.2 推荐页列表构建

3.2.1 业务流程

获取用户曝光列表,得到所有的新闻ID

针对新用户,从之前的离线推荐页列表中,为该用户生成一份推荐页列表,针对老用户,直接获取该用户的推荐页列表

对上述热门列表,每次选取10条新闻,进行页面展示

对已选取的10条新闻,更新曝光记录

3.2.1 核心代码逻辑


代码位于recprocess/online.py


_get_user_expose_set()方法:主要获取用户曝光列表,得到所有的新闻ID;该数据存储在Redis[3]中,数据格式如下:


user_exposure:<用户ID>: {<新闻ID>:<曝光时间>}

Copy to clipboardErrorCopied

_judge_and_get_user_reverse_index()方法:用于判断用户是否存在冷启动列表,如果用户是新用户,获取分组ID,根据用户DI和分组ID,从Redis[0]的cold_start_group中的数据,复制创建该用户的推荐列表,具体数据格式如下:


cold_start_user:<用户ID>:<新闻分类标识>: {<新闻类别名>_<新闻id>:<热度值>}

Copy to clipboardErrorCopied

将用户当前的新闻类别标识,存放到cold_start_user_cate_set中,具体格式如下:


cold_start_user_cate_set:<用户ID>: {<新闻ID>}

Copy to clipboardErrorCopied

_get_polling_rec_list()方法:通过轮询方式获取用户的展示列表,每次只取出10条新闻;通过while循环方式,从Redis[0]的cold_start_user:<用户ID>:<新闻分类标识>中选取新闻,之后删除已选取的新闻,并把选取的10条新闻内容放到用户新闻(user_news_list)数组中,新闻ID放到曝光列表(exposure_news_list)中


_save_user_exposure()方法:将曝光新闻数据存储到Redis[3]中;设置曝光时间,删除重复的曝光新闻,并按照下列格式存储到Redis[3]的user_exposure中:


user_exposure:<用户ID>: {<新闻ID>:<曝光时间>}

Copy to clipboardErrorCopied


4 .总结


 本次任务主要介绍了离线/在线的热门页列表和推荐页列表生成,离线部分的列表生成,主要是用于Redis存储,提供给在线服务使用,前端页面通过调用在线服务,利用Redis中的热门页和推荐页列表数据进行展示,其中推荐页列表数据主要是冷启动部分。


推荐系统流程学习资料:


「从零入门推荐系统」01:推荐系统预备知识介绍_大数据与人工智能-CSDN博客


「从零入门推荐系统」02:推荐系统基础介绍_大数据与人工智能-CSDN博客


「从零入门推荐系统」03:推荐系统的数据源与数据预处理_大数据与人工智能-CSDN博客


「从零入门推荐系统」04:推荐系统的产品与运营_大数据与人工智能-CSDN博客


「从零入门推荐系统」05:推荐系统业务流程与架构_大数据与人工智能-CSDN博客


构建企业级推荐系统(05):从零开始入门推荐算法工程师(万文建藏)_大数据与人工

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
机器学习/深度学习 搜索推荐 算法
构建推荐系统:Python 与机器学习
推荐系统是一种利用机器学习算法和用户的历史行为数据来预测用户可能感兴趣的内容的技术。在当今的数字化时代,推荐系统已经成为许多互联网应用的核心组件,如电子商务、社交媒体和在线娱乐等。在 Python 中,我们可以使用各种机器学习库和工具来构建和实现推荐系统。
|
6月前
|
机器学习/深度学习 数据采集 人工智能
构建一个基于AI的推荐系统的技术探索
【5月更文挑战第23天】本文探讨了构建基于AI的推荐系统的关键技术,包括数据收集、预处理、特征工程、推荐算法(如协同过滤、内容过滤、深度学习)及结果评估。通过理解用户行为和偏好,推荐系统能提供个性化建议。实现步骤涉及确定业务需求、设计数据方案、预处理、算法选择、评估优化及系统部署。随着技术进步,未来推荐系统将更加智能。
|
3月前
|
机器学习/深度学习 搜索推荐 数据可视化
【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题二
本文介绍了2023年第十一届泰迪杯数据挖掘挑战赛C题的解决方案,重点讲解了如何构建招聘与求职双向推荐系统的建模过程和Python代码实现,并对招聘信息和求职者信息进行了详细分析和画像构建。
66 1
|
3月前
|
存储 人工智能 搜索推荐
【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 27页论文及实现代码
本文介绍了2023年第十一届泰迪杯数据挖掘挑战赛C题的解决方案,详细阐述了如何构建泰迪内推平台的招聘与求职双向推荐系统,包括数据收集、分析、画像构建、岗位匹配度和求职者满意度模型的建立,以及履约率最优化的推荐模型,提供了27页的论文和实现代码。
69 0
【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 27页论文及实现代码
|
4月前
|
存储 搜索推荐 算法
`surprise`是一个用于构建和分析推荐系统的Python库。
`surprise`是一个用于构建和分析推荐系统的Python库。
|
5月前
|
机器学习/深度学习 人工智能 搜索推荐
构建基于AI的个性化新闻推荐系统:技术探索与实践
【6月更文挑战第5天】构建基于AI的个性化新闻推荐系统,通过数据预处理、用户画像构建、特征提取、推荐算法设计及结果评估优化,解决信息爆炸时代用户筛选新闻的难题。系统关键点包括:数据清洗、用户兴趣分析、表示学习、内容及协同过滤推荐。实践案例证明,结合深度学习的推荐系统能提升用户体验,未来系统将更智能、个性化。
|
4月前
|
算法 搜索推荐
推荐系统,推荐算法01,是首页频道推荐,一个是文章相似结果推荐,用户物品画像构建就是用户喜欢看什么样的文章,打标签,文章画像就是有那些重要的词,用权重和向量表示,推荐架构和业务流
推荐系统,推荐算法01,是首页频道推荐,一个是文章相似结果推荐,用户物品画像构建就是用户喜欢看什么样的文章,打标签,文章画像就是有那些重要的词,用权重和向量表示,推荐架构和业务流
|
6月前
|
存储 搜索推荐 算法
大模型开发:在构建推荐系统时,你会考虑哪些因素?
构建推荐系统涉及关键因素:用户行为数据(理解兴趣)、物品属性(相似性分析)、上下文信息(时间、地点)、冷启动问题(新用户/物品推荐)、可扩展性与性能(高效算法)、多样性(避免单一推荐)、可解释性(增强信任)和评估优化(准确性和用户满意度)。通过综合运用这些因素,打造精准且有效的推荐服务。
123 1
|
6月前
|
JavaScript 搜索推荐 前端开发
音乐发现平台:借助Python和Vue构建个性化音乐推荐系统
【4月更文挑战第11天】本文介绍了如何使用Python和Vue.js构建个性化音乐推荐系统。首先确保安装Python、Node.js、数据库系统和Git。后端可选择Flask或Django搭建RESTful API,处理歌曲数据。前端利用Vue.js创建用户界面,结合Vue CLI、Vuex和Vue Router实现功能丰富的SPA。通过Vuex管理状态,Axios与后端通信。这种前后端分离的架构利于协作和系统扩展,助力打造定制化音乐体验。
149 0
|
机器学习/深度学习 资源调度 搜索推荐
协同过滤算法深入解析:构建智能推荐系统的核心技术
一、前言 随着互联网的高速发展,我们每天面临着海量信息的冲击,从而使得我们无法有效地筛选出感兴趣的信息。在这种背景下,推荐系统应运而生,成为帮助用户过滤信息,找到自己感兴趣内容的有效工具。协同过滤算法作为推荐系统中的一种核心技术,广泛应用于电商、社交媒体、音乐、电影等多个领域,极大地改善了用户体验。本文将对协同过滤算法进行深入解析,让我们一起探讨这一神奇的技术。
784 0