本系列博客总结了不同框架、不同算法、不同界面的推荐系统,完整阅读需要大量时间(又臭又长),建议根据目录选择需要的内容查看,欢迎讨论与指出问题。
目录
系列文章梗概
系列文章目录
一、问题背景介绍
1.推荐算法与关联分析
2.推荐系统动机与简介
3.推荐系统架构
3.1 推荐系统分层架构
3.2 推荐系统形式架构
4.推荐系统评估
4.1 推荐系统分维度评估
4.2 推荐系统分状态评估
4.2.1 在线评估
4.2.2 离线评估
4.3 推荐系统评估综述
5.推荐系统应用
6.问题引入
6.1 电影推荐系统
6.2 数据集介绍
二、推荐系统中的算法
1.算法分类综述
2.协同过滤
2.1 协同过滤简介
2.2 基于邻域(内存)的协同过滤
2.2.1 原理简介
2.2.2 相似度度量
2.3 基于模型的协同过滤
2.3.1 基于关联数据挖掘的协同过滤
2.3.2 基于矩阵分解的协同过滤
2.4 协同过滤原理补充与方法对比
2.4.1 协同过滤信息源
2.4.2 协同过滤评估
2.4.3 协同过滤对比
本次大作业主要是以电影推荐系统为例,介绍并实践不同框架下推荐系统的构建。在问题背景介绍部分,首先从推荐算法与关联分析引入,通过推荐系统的动机、架构、评估、应用详解了推荐系统,并对电影推荐系统做了定义与数据集介绍。在推荐系统的算法部分,先分类综述了推荐算法,随后详解了不同类型的协同过滤算法并在本地不同框架下做了推荐实践。在MapReduce部分,首先通过背景与全流程详解了MapReduce的原理,并通过WordCount实现了配置与简单应用,后续完成了基于MapReduce的电影推荐系统构建。在Spark部分,首先通过生态与全流程详解了Spark的原理,后续完成了基于Spark的电影推荐系统。在对比分析部分,分别从原理、数据处理方式、性能等对比MapReduce与Spark框架,并基于两个构建出的推荐系统做性能对比验证,并总结了两种框架的优缺点与选择标准与依据。在方法补充与实践部分,拓展了协同过滤之外的其他推荐算法并实际构建出了对应的电影推荐系统。在系统界面构建部分,简述了系统界面的设计,详解了不同框架、不同数据集下的数据可视化,并分别在Web、APP、Uni-app上构建了相对完整的电影推荐系统,在总结部分,对一些实验趣事与结论进行了补充。参考部分根据类别划分,汇总了本次实验的参考文献与资料。
第一章 推荐系统从入门到入门——推荐系统综述与协同过滤
推荐系统是大数据、人工智能等交叉领域经典的一个问题,在多年的研究中跟据不同需求、不同原理发展出了多种基于机器学习、深度学习的推荐算法,并适配多种系统框架。在对系统构建之前,在本章先对相关问题背景进行引入。
“啤酒与尿布”的故事 年轻爸爸去超市购买尿布时,经常会买点啤酒犒劳自己。因此,沃尔玛将这两种商品一起销售,最终获得了更好的销量。 |
由“啤酒与尿布”的故事可知,物品(数据)之间在多种层面是存在一定联系的,因而通过找到这种联系给对应的人(物)推荐对应的数据,实际上就是推荐算法的核心——关联分析。
关联分析是指在交易数据、关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式、关联、相关性或因果结构。本质上就是在不同维度上寻找数据间的联系,根据不同的关联分析方式与指标,设计出了很多经典的推荐算法。在本部分以三个常用的分析指标为例简述关联分析评估,总结于表1:
表1 几种常见的关联分析指标
指标 |
解释 |
支持度 |
指A商品和B商品同时被购买的概率,或者说某个商品组合的购买次数占总商品购买次数的比例 |
置信度 |
指购买A之后又购买B的条件概率 |
提升度 |
先购买A对购买B的提升作用 |
随着当今技术的飞速发展,数据量也与日俱增,用户面对大量数据信息的时候,无法获得对自己真正有用(感兴趣)的部分。正是为了解决信息过载(Information overload)的问题,人们提出了推荐系统。
在1997年Resnick和Varian的定义中,推荐系统是“它是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助用户完成购买过程”,如图1所示:
图1 推荐系统核心
由推荐系统的原理与流程分析,实际上推荐系统就是通过用户偏好(历史行为、社交关系、兴趣点等信息)去预测用户对某个他/她没有使用过的物品/服务的喜欢程度,并根据某些规则向用户推荐。其核心任务主要是把用户和信息关联起来,对于常见的“商家<—>用户”产品工作流,推荐系统的意义如下:
补充:提到推荐系统,我们常常会联想到搜索引擎,两种技术都是为了解决信息过载问题,但两者是针对不同的需求,具体如下:
搜索引擎更倾向于人们有明确的目的,可以将人们对于信息的寻求转换为精确的关键字,然后交给搜索引擎最后返回给用户一系列列表,用户可以对这些返回结果进行反馈。
而推荐系统(引擎)更倾向于人们没有明确的目的,或者说他们的目的是模糊的。此时推荐系统通过用户的偏好来送给推荐算法,然后推荐系统运用推荐算法来产生用户可能感兴趣的项目列表。
其中,长尾理论(人们只关注曝光率高的项目,而忽略曝光率低的项目)可以很好解释推荐系统的存在,如图2所示。试验表明位于长尾位置的曝光率低的项目产生的利润不低于只销售曝光率高的项目的利润。推荐系统正好可以给所有项目提供曝光的机会,以此挖掘长尾项目的潜在利润。
图2 长尾理论
由2中推荐系统简介可知,推荐系统是根据用户偏好给用户推荐数据的系统,核心问题是海量数据中的数据选择与推荐算法的设计与实现。本部分针对推荐系统的系统构建部分做简述。
本质上,推荐系统是一种信息过滤系统。通常分为:召回、排序、重排序这3个环节,每个环节逐层过滤,最终从海量的物料库中筛选出几十个用户可能感兴趣的物品推荐给用户,分阶段过滤流程样例如图3所示,详细分层架构样例如图4所示:
图3 推荐系统分阶段过滤样例
分析:如图3所示,通过分阶段过滤,实现了信息的筛选(根据对应推荐算法原理与标准),最终有效解决了信息过载与数据推荐两大问题。
图4 推荐系统分层架构图
如图4所示,为推荐系统一般的分层架构图,其中各层的主要作用总结如表2:
表2 推荐系统架构层级作用总结
层级名称 |
主要作用 |
数据源 |
推荐算法所依赖的各种数据源 |
计算平台 |
负责对底层的各种异构数据进行清洗、加工,离线计算和实时计算 |
数据存储层 |
存储计算平台处理后的数据,根据需要可落地到不同的存储系统中 |
召回层 |
包括各种推荐策略或者算法,比如经典的协同过滤,基于内容的召回,基于向量的召回,用于托底的热门推荐等 |
融合过滤层 |
触发多路召回,由于召回层的每个召回源都会返回一个候选集,因此这一层需要进行融合和过滤 |
排序层 |
利用机器学习、深度学习等模型,以及更丰富的特征进行重排序,筛选出更小、更精准的推荐集合返回给上层业务 |
分析:如图4与表2所示,从数据存储层到召回层、再到融合过滤层和排序层,候选集逐层减少,但是精准性要求越来越高,因此也带来了计算复杂度的逐层增加,这个便是推荐系统构建中的最大挑战,即特征(如何做信息筛选)和算法(如何利用信息)。
结合图4中的架构图,从特征与算法拆解推荐系统,核心功能与技术方案如图5所示:
图5 推荐系统(引擎)核心功能与技术方案
分析:如图5所示,如果从特征与算法的角度分析推荐系统,特征包含离线与实时特征,需要不同的框架模型去计算处理,算法主要包含召回与排序,各部分作用在表2中有详解。
3.1中从分层架构拆解了推荐系统,若从形式上(输入、输出等显式信息)解析推荐系统,系统架构如图6所示:
图6 推荐系统形式架构样例
如图6所示,只从形式(使用)上去解析推荐系统,其可以高度概括为f(U,I,C),这个极简定义源于推荐系统核心要义:基于用户(User)+物品(Item)+场景(Context)信息,从系统中的物品库中,给对应的用户推荐相应的物品。对推荐系统形式架构详解如下:
由上述论述可知,推荐系统的形式化输入为user(用户)+ item(物品/服务)+context(信息,一般是评价,可理解为review),输入解析总结如表3。
而推荐系统的形式化输出一般为推荐列表(top-n)+推荐理由(根据不同算法原理选择有所不同),输出解析总结如表4:
表3 推荐系统形式输入解析
1、User & user Profile(用户画像):
2、Item(物品) & Item Profile(物品对应特征):
3、Context/Review(user 对 item 的评价):
|
表4 推荐系统形式输出解析
1、推荐列表(TOP-N):
2、推荐理由:
|
在熟悉推荐架构,构建系统成功(后文详解构建步骤)后,要对推荐系统进行效果评估,从状态上分为在线评价与离线评价两种方式,从维度上分为用户维度、平台维度、系统维度等,本部分对常用的几种评估方式与指标做简介与解析。
本部分将从不同维度介绍几种常见的推荐系统评估方式与指标,总结如表5所示:
表5 推荐系统分维度评估方式与指标
1、用户维度(诉求:更方便、快捷地发现自己想要/喜欢的“目标产品”): 2、平台方维度(对接产品提供方与用户,诉求:利益与用户留存):
3、系统维度(算法体系闭环,为用户提供服务):
4、产品提供方维度(为平台、用户提供产品,诉求:提高产品销量、口碑):
|
本部分将从不同状态介绍几种常见的推荐系统评估方式与指标,具体如下:
在线评估其实就是设计在线用户实验,根据用户在线实时反馈或事后问卷调查等结果来衡量推荐系统的表现。
目前最常用的在线评估方法之一是A/B测试,A/B测试核心就是为了同一个目标制定两个方案,一部分用户使用A方案,另一部分用户使用B方案,记录下用户的使用情况,看哪个方案更符合设计目标。它的核心思想是:1) 多个方案并行测试;2) 每个方案只有一个变量不同;3) 以某种规则优胜劣汰。
而对于A/B测试评估指标一般与线上服务核心指标保持一致,样例如下:
(1)电商类推荐模型:点击率、转化率、客单价(用户平均消费金额)
(2)新闻类推荐模型:留存率(x日后还活跃的用户数/x日前的用户个数)、平均停留时长、平均点击个数
(3)视频(电影)类推荐模型:播放完成率(播放时长/视频时长)、平均播放时长、播放总时长
离线测评即是根据待评价的推荐系统在实验数据集上的表现,然后再根据一些评价指标(表5与其他相关指标)来衡量推荐系统的质量,一般推荐系统模型训练与模型评估流程如图7所示:
图7 推荐系统模型训练与离线评估
在表5中对不同维度下的常见指标做了概念简述,在本部分对几种常用指标(离线评估)做具体数学定义,详情如下:
4.2.3 分状态评估对比
对于推荐系统的分状态评估,在4.2.1中分析了在线评估,在4.2.2中分析了离线评估,在本部分对两种评估的优点与局限做总结,如表6所示:
表6 推荐系统分状态评估对比总结
状态 |
优点 |
局限 |
在线评估 |
1.评价结果的主观性 2.对于所需评价的精准收集 |
1.评估方式、问题设计到实现复杂 2.人力、时间成本大 |
离线评估 |
1.省时省力,成本较低 2.数据量大,系统泛化能力更强 |
1.数据集的稀疏性限制了适用范围 2.评价结果的客观性(无法真正确定用户对系统的评价) 3.难以找到离线评价指标和在线真实反馈 之间的关联关系 |
4.1与4.2中从不同的两个角度定义与解释了多种推荐系统常用评估指标,本部分总结如表7:
表7 推荐系统评价指标简表
如表6所示,单独使用在线评估与离线评估都存在一定局限,故在实际工程化的推荐系统中一般是两种状态迭代评估,流程样例如图8所示:
图8 实际推荐系统评估流程
在了解完推荐系统简介、架构、评估后,在本部分对于推荐系统的几种常见应用场景做介绍。
在谈具体应用前,应先对常见分类,推荐系统的应用场景通常分为以下两类:
补充:从功能(形式)上来说,一般有个性化推荐、相关推荐、热门推荐三种。
而对于推荐系统的具体应用,我们知道推荐系统是为了解决信息过载问题存在的,理论上存在海量数据的地方就存在推荐系统。推荐系统的常见应用场景包括:电子商务、咨询网页、音乐电影平台等,样例如图9所示:
图9 推荐系统应用样例
在了解完推荐系统相关概念后,在后续要使用不同框架、不同算法去实践构建推荐系统。在本实验中将以电影推荐系统为例,数据集选择为Movielens,在本部分做问题引入。
电影推荐系统顾名思义,就是用户(user)是观影人,物品/数据(item)是电影,信息(context)是电影评价的推荐系统。样例如图10所示:
图10 电影推荐系统样例
补充:图10的四种推荐方式是推荐系统的四种常见范式,概念详解如下:
(1)完全个性化范式(左上):为每个用户提供个性化的内容,每个用户推荐结果都不同
(2)群组个性化范式(右上):首先将用户分组(根据用户的兴趣,将兴趣相似的归为一组),每组用户提供一个个性化的推荐列表,同一组的用户推荐列表一样,不同组的用户推荐列表不一样
(3)非个性化范式(左下):为所有用户提供完全一样的推荐
(4)标的物关联标的物范式(右下):为每个标的物关联一组标的物,作为用户在访问标的物详情页时的推荐,每个用户都是相同的标的物
本实验目标:以不同框架(本地、Mapreduce、Spark等)、不同语言(Java、Scala、Python)、不同算法(协同过滤、CNN、基于内容等)、不同评估标准(准确率、覆盖率、ROC曲线等)构建一个基于Movielens数据集的电影推荐系统,做一定的数据可视化,并使用docker搭建Web服务器。
本实验使用数据集为Movielens,官方地址:MovieLens | GroupLens,在本部分对数据集做介绍。
MovieLens是电影评分的集合,有各种大小,覆盖大量用户与电影。包含多个用户对多部电影的评级数据(ratings.dat),也包括电影元数据信息(movies.dat)和用户属性信息(users.dat)。部分数据展示如图11所示:
图11 MovieLens数据展示样例
在上一章中我们介绍了推荐系统的基本概念、架构、评估、应用场景,在本章中会对推荐系统中的算法做详解,尤其是本实验最着重使用的协同过滤算法,并在本地使用一些相关算法进行电影推荐系统的构建。
由第一章可知,推荐系统中最重要的部分之一就是推荐算法的设计,按算法分类,一般可将推荐系统分为协同过滤、基于内容、混合、流行度、非传统5类,总结如表8所示:
表8 推荐算法分类综述
1、协同过滤推荐算法:
2、基于内容的推荐算法:
3、混合推荐算法:
4、流行度推荐算法:
5、非传统推荐算法:
|
补充:表8简单总结了不同类的推荐算法,但每一类的算法下基于原理与评估指标又细分为了许多不同的推荐算法。
对于不同类别的推荐算法均存在一定的优点与局限,如协同过滤不需要用户和项(物品),简单且在大部分场景中可以产生不错的结果,但存在冷启动问题,且会有流行度偏见(长尾存在时表现不好)等问题,而对于非传统推荐算法又存在可解释性不强、缺乏工具支持等问题。另外,使用不同系统框架与计算逻辑对同一个系统实现也有不同程度的影响。
综上所述,没有一个或一类推荐算法构成的系统可以完美适应各种应用场景。在选择推荐算法时应从数据源、计算框架、用户与项、实现逻辑、需求等多维分析,最终择优选择。
本次实验主要目标是实践不同框架下的基于协同过滤的推荐系统并进行效果对比,故本部分对于协同过滤进行详解。
协同过滤(collaborative filtering),包括协同和过滤两个操作。所谓协同就是利用用户群体的行为来做决策(推荐)。对于推荐系统来说,即通过用户的持续协同作用,最终给用户的推荐会越来越准。而过滤,就是从可行的决策(推荐)方案(标的物)中将用户喜欢的方案(标的物)找(过滤)出来。
综上,协同过滤的核心思路是通过用户群体的行为来找到某种相似性,通过该相似性来为用户做决策和推荐。
由于协同过滤本质上还是推荐系统的一个模块,因此依然符合推荐系统的形式化架构(图6),故协同过滤一般利用“用户-项目评分矩阵”进行推荐,样例如图12所示:
图12 用户-项目评分矩阵
补充:在推荐系统中根据用户对项目的评分可以得到 “用户-项目评分矩阵”,其中矩阵中的值表示用户对项目的评分,“-”表示用户未对项目进行评分。实际场景中通常只存在用户对少量项目的评分,因此矩阵往往非常稀疏。
而对于协同过滤推荐过程,实际上是与推荐系统形式相呼应的,一般过程如图13所示,分为以下两步:
(1) 系统将整个空间表示为二维矩阵。在二维矩阵R中,U和I分别对应用户和项目。Rij是用户Ui对项目Ij的评分。如果用户未对项目评分则项目值设为0。
(2) 使用矩阵R预测用户i对项目j的评分,以便为用户可能喜欢的N个项目做出推荐。
图13 协同过滤推荐一般过程
对于协同过滤的类别,根据不同的模式与指标分为两大类协同过滤,分别是基于邻域(内存)的协同过滤和基于模型的协同过滤,详解如下。
基于内存的协同过滤方法一般采用最近邻技术,利用用户的历史喜好信息计算用户/项目之间的距离, 然后利用目标用户的邻居用户对商品/喜爱商品相似商品评价的加权值来预测目标用户对特定商品的喜好程度,推荐系统根据喜好程度对目标用户进行推荐。而根据参照物的不同(用户或物品),又分为基于用户(UserCF)与基于项目/物品(ItemCF)的两种协同过滤。
基于用户的协同过滤根据用户之间的评分行为相似度预测用户评分; 基于项目的协同过滤根据预测项目与用户实际选择项目之间的相似度预测用户评分,两种方法原理对比可视化如图14所示:
图14 基于内容的协同过滤方法原理对比
由于这两种方法的原理不同,因此在不同应用场景中的表现不同。基于用户的推荐更社会化,反映用户所在的兴趣群体中物品的热门程度; 基于项目的推荐更个性化,反映用户自己的兴趣传承。具体对比如表9所示:
表9 基于内存的协同过滤方法对比
对于协同过滤算法来说,相似度是推荐的核心,故如何度量相似度是一个核心问题。对于基于内存的协同过滤来说,常用方法包括皮尔森相关系数、余弦相似度、杰卡德相似系数以及欧氏距离。这些相似度度量方法没有绝对优劣之分,在不同应用场景下可择优选择或组合使用。本部分以相关系数、余弦相似度为例对相似度度量做定义,详情如下:
(1)皮尔森相关系数
皮尔森相关系数用于度量任意两变量间线性相关的程度,系数值越大表明两者相关性越强(有正负),系数输出范围为[-1,1],定义如式5:
式5 相关系数定义
Tips:式5中的R、I与用户-项目评分矩阵(图12)中定义保持一致。
(2)余弦相似度
余弦相似度通过计算两个向量的夹角余弦值来评估它们的相似度,输出范围及参数含义与皮尔森相关系数保持一致,定义如式6:
式6 余弦相似度定义
实际上,余弦相似度在应用中存在未考虑不同用户对项目的评分标准存在差异的问题,故提出修正余弦相似度,核心是减去用户对项目的平均评分(中心化),定义如式7:
式7 修正余弦相似度定义
基于模型的协同过滤方法通过建模的方式模拟用户对项目的评分行为。其使用机器学习与数据挖掘技术,从训练数据中确定模型并将模型用于预测未知商品评分。常见模型包括聚类模型、贝叶斯模型、矩阵分解等。本部分以关联数据挖掘、矩阵分解为例介绍基于模型的协同过滤过程。
关联度、关联分析等概念与指标在一(1)中有做简介。关联规则挖掘实际上就是基于用户购买商品之间的关联关系预测用户偏好。具体来说,关联规则基于物品维度构思考虑,分析出数据库中 所有包含属性等特征信息模块间的隐藏关联,进而找出满足给定项集支持度和项集置信度的多个模块间存在的所有依赖关系。根据关联规则推荐原理产生的推荐算法步骤如图15所示:
图15 基于关联数据挖掘的协同过滤推荐一般流程
矩阵分解是推荐系统中最常用的协同过滤模型之一。该模型利用用户-项目评分矩阵(图12)预测用户对项目的评分,通过学习用户潜在向量U和项目的潜在向量V,使U和V内积近似于用户 真实评分X,得到预测的评分R如式8所示:
式8 预测评分定义
其中i是用户索引,j是项目索引,rij表示用户i对项目j的预测评分,u是用户的潜在向量,v是项目的潜在向量。然后计算其损失函数为式9:
式9 损失函数定义
Tips:其中是第二范式。λ是正则化项(防止过拟合)。
协同过滤的信息源大体上满足推荐系统的输入(user+item+context/review),详细来说,协同过滤信息源可分为用户行为、用户标签、上下文信息、社交网络四种,简介如下:
(1)用户行为:显性反馈行为(用户明确表示对物品喜好)与隐性反馈行为(不能明确反应用户喜好的行为(例:页面浏览))
(2)用户标签:联系用户和物品的一些特征
(3)上下文信息:用户所处的上下文(context), 包括用户访问推荐系统的时间、地点、心情等
(4)社交网络:朋友推荐、广告植入等网络传播信息
协同过滤为推荐算法的一种,属于推荐系统的一个模块,故评估方式与推荐系统评估保持一致,主要以准确度、覆盖率、多样性、新颖性等指标评估,在一(4)中有详解。
在2.2与2.3中介绍了基于内存与基于模式的协同过滤,两类方法的优缺点总结如表10:
表10 协同过滤方法的优缺点比较