《推荐系统开发实战》之业内推荐系统架构介绍

2023-10-29 04:40

本文主要是介绍《推荐系统开发实战》之业内推荐系统架构介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载请注明出处:http://blog.csdn.net/gamer_gyt
博主微博:http://weibo.com/234654758
Github:https://github.com/thinkgamer
公众号:搜索与推荐Wiki
个人网站:http://thinkgamer.github.io


不管是电商网站,还是新闻资讯类网站,推荐系统都扮演着十分重要的角色。一个优秀的推荐系统能够推荐出让人满意的物品,但这不仅是推荐算法的功劳,整个推荐架构所扮演的角色也举足轻重。

学术界往往更加关注推荐算法的各项评估指标。从基本的协同过滤到点击率预估算法,从深度学习到强化学习,学术界都始终走在最前列。一个推荐算法从出现到在业界得到广泛应用是一个长期的过程,因为在实际的生产系统中,首先需要保证的是稳定、实时地向用户提供推荐服务,在这个前提下才能追求推荐系统的效果。

在生产系统中,不管是用户维度、物品维度还是用户和物品的交互维度,数据都是极其丰富的,学术界对算法的使用方法不能照搬到工业界。当一个用户访问推荐模块时,系统不可能针对该用户对所有的物品进行排序,那么推荐系统是怎么解决的呢?对应的商品众多,如何决定将哪些商品展示给用户?对于排序好的商品,如何合理地展示给用户?

架构介绍

图14-1所示是业界推荐系统通用架构图,主要包括:底层基础数据、数据加工存储、召回内容、计算排序、过滤和展示、业务应用。
底层基础数据是推荐系统的基石,只有数据量足够多,才能从中挖掘出更多有价值的信息,进而更好地为推荐系统服务。底层基础数据包括用户和物品本身数据、用户行为数据、用户系统上报数据等。

图14-2~图14-4所示为用户本身数据、物品本身数据和用户行为数据。

得到底层基础数据之后,就要对数据进行加工处理和分析了,如结合用户属性信息和行为信息构建用户画像,结合物品属性信息和用户对物品的行为信息构建物品画像。基于用户对物品的行为数据构建特征工程,同时进行相关的数据分析。
数据在处理之后存储到相应的位置(业务推荐系统使用的数据一般存储在redis中),供推荐系统实时调用。

召回内容

电商网站、内容网站、视频网站中数据量很大,并不能直接把所有的物品数据全部输送到推荐系统进行排序,那么如何对物品进行筛选就成了很关键的问题。
第4章中介绍了一些常用的数据挖掘算法和应用场景,在进行物品召回时可以基于一些常用的机器学习算法构建用户偏好模型、用户兴趣模型、物品相似模型、物品互补模型等。在进行内容召回时,只召回和用户有偏好关系、和用户有直接关联、和用户有直接关系的相关物品,输入排序模型,进行打分排序。
例如,在某新闻类网站中,根据用户对新闻的相关行为信息构建用户对新闻标签的兴趣模型,在为用户推荐时就可以推荐用户偏好标签下的新闻数据,如图14-5所示。

在物品召回过程中,重点是如何构建合适的用户偏好模型,只有保证偏好模型的准确性才能确保用户召回物品的准确性。

计算排序

特征工程

“数据决定了机器学习的上限,而算法只是尽可能逼近这个上限”,这里的数据指的就是经过特征工程得到的数据。特征工程指的是把原始数据转变为模型的训练数据的过程,目的就是获取更好的训练数据特征,使得机器学习模型逼近这个上限。特征工程能使模型的性能得到提升,有时甚至在简单的模型上也能取得不错的效果。

特征工程在机器学习中起着非常重要的作用,一般认为包括特征构建、特征提取、特征选择三部分。 特征提取与特征选择都是为了从原始特征中找出最有效的特征。它们之间的区别是:

  • 特征提取强调通过特征转换的方式得到一组具有明显物理意义或统计意义的特征;
  • 特征选择是从特征集合中挑选一组具有明显物理意义或统计意义的特征子集。

两者都能帮助减少特征维度、数据冗余,特征提取有时能发现更有意义的特征属性,特征选择的过程经常能表示出每个特征对于模型构建的重要性。
特征工程的标准化流程主要分为以下几步:
(1)基于业务理解,找到对因变量有影响的所有自变量,即特征。
(2)评估特征的可用性、覆盖率、准确率等。
(3)特征处理:包括特征清洗、特征预处理(特征预处理可参考第4章“数据预处理”部分)、特征选择。
(4)特征监控:特征对算法模型的影响很大,微小的浮动都会带来模型效果的很大波动,因此做好重要特征的监控可防止特征异常变动带来线上事故。

特征分类

在工业界的推荐系统中,典型的特征主要分为以下四类。

  • 相关性特征:评估内容的属性与用户是否匹配。显性的匹配包括关键词匹配、分类匹配、来源匹配、主题匹配等。
  • 环境特征:包括地理位置、时间。这些既是偏差特征,又能以此构建一些匹配特征。
  • 热度特征:包括全局热度、分类热度、主题热度及关键词热度等。内容热度信息在大的推荐系统中特别是在用户冷启动时非常有效。
  • 协同特征:可以在一定程度上帮助解决所谓算法越推越窄的问题。协同特征并不考虑用户已有历史,而是通过用户行为分析不同用户间的相似性,如点击相似、兴趣分类相似、主题相似、兴趣词相似,甚至向量相似,从而扩展模型的探索能力。

排序算法

在得到召回的物品之后,就要考虑如何对这些物品进行正确的排序。目前业界在机器学习领域最普遍的做法是将排序推荐模型作为二分类模型来训练,即在构造样本集的过程中对应的标签为0或1(未点击或点击)。常用的排序算法包括但不局限于GBDT、LR、XGBoost等,当然也有很多把GBDT和LR结合起来使用的,但是模型融合后的效果在不同的业务场景中带来的提升并不是很大。

物品过滤和展示

过滤和展示直接影响用户体验,因此在做推荐系统时一定要注意相关的过滤和展示规则。

物品过滤

经常会听到人们说“电商网站经常给我推荐我已经买过的东西”。其实在做推荐系统的过程中会有相关的过滤规则,在电商推荐系统中,最常用的过滤规则是:用户购买过滤,即在进行商品召回时过滤掉用户过去一段时间内已经购买过的商品和相似商品。例如,用户昨天买了一个机械键盘,今天的推荐系统就不会再给该用户推荐机械键盘了。
同时也会有一些其他过滤规则如:

  • 项目指定的一些敏感词汇或敏感商品等过滤。
  • 刷单商品过滤。
  • 曝光商品过滤(有时会认为那些曝光过的商品是用户不感兴趣的,即看到了没有进行点击)。
  • 无货商品过滤。

至于为什么推荐系统会给用户推荐已经购买过的商品,是因为在用户购买该商品之后,又对该类型的商品产生了新的行为,所以推荐系统会再次进行推荐。

物品展示

展示即用户看到的推荐结果。不同类型的推荐系统中展示的规则不一样,但基本原则是:品类隔离展示,即同类型的商品不能出现在相邻的位置。例如推荐系统返回的推荐结果集中有两个手机,这两个手机就不能在相邻的位置展示。

有的推荐系统会要求第一屏内不能出现同类型的商品,如推荐系统给用户的第一屏展示了8个商品,那么这8个商品中就不能出现同类型的商品(如不能出现两个手机)。

效果评估

无论是推荐架构最开始的召回内容、计算排序,还是最后的过滤和展示,每次新上一个方案之后都要进行效果统计,生产系统中最常用的效果评估方法就是ABTest,更多关于ABTest的使用介绍可以参考第10章。
在生产系统中,进行ABtest之后,往往会将不好的方案下线,保留效果更好的一方,同时也会不断上线新的召回、排序特征等,迭代优化模型,提升线上效果。


注:《推荐系统开发实战》是小编近期要上的一本图书,预计本月(7月末)可在京东,当当上线,感兴趣的朋友可以进行关注!


【技术服务】,详情点击查看: https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg

扫一扫 关注微信公众号!号主 专注于搜索和推荐系统,尝试使用算法去更好的服务于用户,包括但不局限于机器学习,深度学习,强化学习,自然语言理解,知识图谱,还不定时分享技术,资料,思考等文章!

这篇关于《推荐系统开发实战》之业内推荐系统架构介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

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

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

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

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

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

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

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

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