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

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

相关文章

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima