推荐系统手册.docx
- 文档编号:28438239
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:18
- 大小:29.76KB
推荐系统手册.docx
《推荐系统手册.docx》由会员分享,可在线阅读,更多相关《推荐系统手册.docx(18页珍藏版)》请在冰豆网上搜索。
推荐系统手册
推荐系统手册(0)--前言
推荐系统是近几年比较新的一个领域,目前比较完整的介绍这个领域的资料,主要是一些综述性paper。
这些paper往往都各有侧重点,大多比较偏重推荐算法这一个层面,不够全面。
2011年的时候,国外一些在个性化推荐领域浸淫多年的人合作写了《RecommenderSystemHandbook》一书,弥补了这方面的一个空白。
其实这个东西与其说是一本书,不如说是一个资料集。
它的写作方式看起来是几个大牛先拍下来应该包含哪几部分,每一部分包括哪些topic,然后把每一个topic分给对应的人写命题作文。
这样的后果就是这本手册的每一章都是不同的作者写的,导致全书的连贯性和一致性较差,也就不够权威了。
然而尽管权威性不足,这本书仍然是目前能够找到的最全面的推荐系统方面的资料。
鉴于此,我决定通读一遍这本书。
在阅读的过程中,对每一章结合自己的理解,写一篇读书笔记。
以此作为前言。
推荐系统手册
(1)—简介
现代生活带来的一个深刻改变是:
人们的选择越来越多。
我们选择看哪部电影,买哪个手机,看哪条新闻,租哪处房子…我们拥有的决策自由越来越多,随之而来的是,我们为这些决策付出的代价越来越多。
相信大家都有过同样的经历,为了买一样东西,将网上琳琅满目的商品页面从第一页翻到最后一页,最后精疲力竭,还是购买了最初看中的那一个。
有句俗话说得好:
只有一个选择的人是最幸福的。
1. 推荐系统
推荐系统的兴起,即是为了把人们从信息过载的陷阱中解决出来,帮助人们进行简单决策。
它的主要原理是根据用户过去的行为(比如购买、评分、点击等)来为用户建立兴趣模型,并利用一定的推荐算法,把用户最可能感兴趣的内容推荐给用户,如下图。
图1 推荐系统简图
2. 数据
为了完成上面的计算,我们需要三部分数据:
(1)用户数据:
用户数据用来建立用户模型,这些数据根据不同的推荐算法而不同,典型的数据包括用户兴趣点、用户profile、用户的社交好友关系等。
(2)内容数据:
内容数据是用来描述一个被推荐内容主要属性的数据,这些属性主要都是跟具体的内容相关的,如一部电影的导演、演员、类型和风格等。
(3)用户--内容数据:
用户--内容交互是能反映用户与内容内在联系的数据,其分为隐式和显式两种。
显式主要是指评价、打分、购买等能明显反映用户对内容兴趣的交互数据,隐式指的是用户的点击、搜索记录等间接反映用户对内容兴趣的交互数据。
3. 算法
有了基础数据之后,我们可以考虑不同的推荐算法。
根据数据和利用数据的方式的不同,当前主流的推荐算法可以分为以下六类(不是主流的划分方法):
(1)基于内容的推荐(content-based):
根据用户过去喜欢的内容,推荐相似的内容
(2)基于协同过滤的推荐(collaborativefiltering):
根据与当前用户相似的用户的兴趣点,给当前用户推荐相似的内容
(3)基于人口统计学的推荐(demographic-based):
根据用户共同的年龄、地域等人口统计学信息进行共同的推荐
(4)基于知识的推荐(knowledge-based):
根据对用户和内容的特定领域知识,给特定的用户推荐特定的内容
(5)基于团体的推荐(community-based):
根据用户的社交好友关系,给用户推荐其好友感兴趣的内容
(6)混合推荐(hybridrecommendersystem):
以上各种推荐算法的特定组合
有了基础数据和算法选择后,我们在理解了特定领域知识、可用数据、应用需求的基础上,分析潜在的挑战和限制后,才能选择合适的推荐算法进行推荐系统的开发。
4. 相关领域
推荐系统(RS)是一个较新的领域,它利用并结合了多个领域的技术,其中最主要的包括信息检索(IR)、机器学习(ML)和人机交互(HCI)。
RS和IR同是为了解决人们面对信息过载的解决方法,它们有很多共同点。
它们利用的很多技术,如相关性计算、多样性页面展现等,都是可以互为借鉴的。
同时,它们会遇到很多类似的问题,如关联计算的规模过大,在IR中是通过倒排索引来减小计算规模,这一点在IR中同样可以借用。
不同的是信息检索是利用显式的query来表达用户的需求,而推荐系统是利用机器隐式分析用户的兴趣来表达用户的需求。
这一点决定了RS是一个比IR更难的问题,一是用户的兴趣比query更难准确的表达;二是用户的规模往往比query的规模要大几个数量级。
RS利用了ML中的很多算法和思想,如KNN聚类、机器学习点击率预估等,都是RS中常用的机器学习方法。
在推荐系统开发完成后,我们还需要考虑人机交互接口的问题。
第一,系统要建立用户对推荐系统的信任;除了给用户靠谱的推荐结果外,我们从界面设计上要给出推荐的解释,即告诉用户系统为什么给他推荐某项内容,以此来说服用户信任推荐系统;第二,系统要给用户反馈的机制。
当某项推荐靠谱并得到用户行为的证实(购买、评价高分等)时,系统要从用户的行为中得到正反馈来增进系统的准确性;同时,当某项推荐不靠谱时,我们要给用户提供一个负反馈的界面,来对推荐结果进行批评。
第三,推荐的展现效果要满足用户的视觉需求,堆积的过满或者过松,字体太大或者太小,有没有缩略图等,都会对用户对推荐的满意度产生一定的影响。
推荐系统手册
(2)—推荐系统的数据挖掘方法
引言
通常来说,数据挖掘(DataMining,DM)最早是机器学习(MachineLearning,ML)算法在具体领域中的应用。
后来,在这些具体应用过程中逐渐总结出一套通用的流程,和数据挖掘一起形成了一个新的领域,叫数据库中的知识发现(KnowledgeDiscoveryinDatabase),其主要流程:
其中,数据预处理主要是针对原始数据中的一些问题,如噪声、离群点、遗漏值、不一致值和重复值等数据质量的问题,通过抽样、维度规约、归一化、离散化和变量变换等方式,将数据转换成为适合数据挖掘直接利用的数据。
数据挖掘即是机器学习算法在具体问题中的应用,通常包括分类、聚类和异常检测等。
数据后处理是数据挖掘后的结果进行进一步的处理,使得数据挖掘的结果应用到问题的解决之中。
推荐系统算法策略通常会用到数据挖掘、机器学习、信息检索和自然语言处理等领域中的很多知识,尤其是数据挖掘。
1. 数据预处理
推荐系统相关的数据预处理技术除了通常的归一化、变量替换等以外,最主要的是相似度计算、抽样和维度规约。
(1). 相似度计算
相似度通常有两种衡量方式,一是直接计算相似度,二是计算距离,距离是本质上是相异程度的度量,距离越小,相似度越高。
1) 相似度度量
● 余弦相似度
相似度计算最常见的方式是余弦相似度,对于n维空间的两个向量,通过以下公式计算相似度。
其几何意义就是两个向量的空间夹角的余弦值,取值范围在-1到1之间。
取值为-1表示完全相反,取值为1表示完全相同,其余值表示介于二者之间。
● 皮尔逊相关系数
相似度计算的另一种常见方式时皮尔逊相关系数。
皮尔逊相关系数的实际意义是两个随机变量x和y之间的线性相关性,取值范围在-1和1之间。
-1表示负线性相关,1表示正线性相关,其余值表示介于二者之间。
● Jaccard相关系数(JaccardCoefficient)
Jaccard用于集合相似度的一种方式。
2) 距离度量
● 欧几里得距离(EuclideanDistance)
距离度量最常见的是欧几里得距离,计算多位空间中两个点之间的绝对距离。
● 曼哈顿距离(ManhattanDistance)
曼哈顿距离也称为城市块距离,是将多个维度的直线距离求和后的结果。
● 切比雪夫距离(ChebyshevDistance)
● 闵可夫斯基距离(MinkowskiDistance)
Minkowski距离是欧氏距离(p=2)、曼哈顿距离(p=1)和切比雪夫距离(p=无穷)的推广。
● 标准化欧氏距离(StandardizedEuclideanDistance)
标准化欧氏距离是为了解决以上四种距离的一个重要不足而产生的,即以上四种距离把不同维度指标的差异视为相同的。
标准欧式距离则通过每一维的标准差,对该维度进行一个标准化后再进行计算。
● 马哈拉诺比斯距离(MahalanobisDistance)
Mahalanobis距离是标准化欧氏距离的推广,在协方差矩阵是对角阵时,Mahalanobis距离就变成了标准化欧氏距离。
(2).抽样
抽样技术在数据挖掘中主要用在两个地方:
一是在数据预处理和后处理阶段,为了避免计算规模过大,进行抽样计算。
二是在数据挖掘阶段,通常会对训练出来的模型进行交叉验证,需要抽样将所有样本划分为训练集和测试集。
通常所说的抽样都是随机抽样(randomsampling),主要用于所有样本点都可以认为没有区分时适用。
还有一种分层抽样(striatedsampling),在样本需要显著的分为不同的子集时,针对每个子集分别进行抽样。
(3). 维度规约(dimensionalityreduction)
在统计学习理论中,当样本的维度增加的时候,待学习的模型的复杂性是随着维度呈指数增长的,这种现象通常称为“维灾难(curseofdimensionality)”。
这也就意味着,如果我们想在高维空间中学到和在低维空间中精度一样高的模型,所需要的样本数是呈指数增长的。
维度规约通常是用来处理维灾难问题的。
通常维度规约有两种思路,一是从高维数据中选出最能表达数据的一些维度,并用这些维度来代表数据,称为特征选择(featureselection)。
另一种是将高维数据通过某种trick变换映射到低维空间,称为特征构造(featureextraction)。
主成分分析(PCA,PrincipalComponentAnalysis)是最主要的一种特征选择方式。
它通过特征分解能够得到每一个维度对于整个数据的最小均方差的贡献程度,从而定量判断每一维对于数据所包含信息的贡献度。
然后保留最主要的一些维度,抛弃一些不显著的维度,对数据进行降维。
奇异值分解(SVD,singularvaluedecomposition)是主要的特征构造方式。
它通过矩阵分解的方式,将数据从高维空间映射到低维空间,对数据进行降维。
2.数据挖掘-分类
分类是数据挖掘的主要内容,方法众多,各自都有不同数据假设和理论支持。
下面简单列举最有代表性的一些算法。
(1).KNN(k-nearestneighbour)
KNN是最容易理解的分类器,它不训练任何模型。
当有一个未知样本需要预测时,它从已知样本中找到与这个未知样本距离最近的K个点,根据这K个点的类别来预测未知样本的类别。
它最主要的不足在于它需要的样本量非常大,同时因为它没有任何训练的模型,每一次预测都要计算k次距离,计算量非常大。
(2).决策树(Decisiontree)
决策树将分类过程抽象为一颗树,它通过最大化信息增益的方式对树的分支进行划分,最终通过设置不纯度的阈值来停止树的划分,形成最终的决策树。
它的主要优点在于模型的训练和预测都非常快,不足在于模型的精度有时会低于其它分类器。
不过,通过集群学习(ensemblelearning)的方式能够极大的克服这一点,如采用bagging思想的randomforest和采用boosting思想的GBDT,都是决策树的延伸,它们综合多棵决策树的分类结果来组合出更精确的分类器。
(3).基于规则的分类器(rule-basedclassifier)
基于规则的分类器通常都是利用“如果…则…”一类的规则来进行分类。
其适用性有限,且要获得靠谱的规则比较困难,一般用的较少。
(4).贝叶斯分类器
贝叶斯分类器其实是一类分类器,主要是利用贝叶斯公式,通过估计先验概率和似然概率,并利用一部分先验信息,来计算给定样本的各维度数据值的情况下,样本属于某个类别的概率。
(5).人工神经网络
这个真心没弄懂,占座以后补上。
(6).支持向量机(supportingvectormachine)
支持向量机是线性分类器的代表。
与贝叶斯分类器先估计概率密度然后计算判别函数不同,线性分类器都是直接估计线性判别式,并最小化某个目标函数,利用某种凸优化方法求解得到最终的线性判别式。
这是最流行的分类器之一,通常认为它训练、预测速度快,而且精度靠谱,所以在各种领域广泛使用。
(7).组合分类器(ensemblelearning)
组合分类器的想法是集合若干个弱分类器来组合成一个强分类器,通常有bagging和boosting两种思路。
(8).分类器评估
分类器评估是对一个分类器性能进行评价的重要一步,其主要有一些一些标准
● Precision-recall:
准确率-召回率,根据混淆矩阵计算
● F1:
结合准确率-召回率的一个综合指标
● ROC:
直观的曲线比较分类器性能
● AUC:
ROC的定量化表达
● MAE:
平均绝对误差
● RMSE:
平均根方误差
推荐系统中所使用的混合技术介绍
在推荐系统实际运用中,各种混合技术是其中一项极为重要的核心技术。
在工程实践中我们发现,混合技术对提升推荐效果、改进推荐系统的性能等都有重要意义,因此本文对该专题进行如下的一些总结和介绍。
引言
在这个信息爆炸的时代,消费者面临众多选择、未知的领域、过载的信息时,往往无所适从;然而与此同时,内容的生产者(例如商家)也在苦苦寻觅合适的用户,寻找最便捷的渠道,而解决这两类矛盾的最好工具就是推荐系统。
推荐系统缘起于搜索系统,在底层系统上两者有大量相通的技术,但是在相应用户需求和产生应用的场景上,推荐系统离用户更进一步:
当用户的需求具体而明确时,他搜索;但当用户需求不明确或难以表达时,他需要推荐。
另一方面,当用户需要找某个领域下公认的、热门的内容时,他搜索;但当用户需要找个性化的内容时,他需要推荐。
很多场景下,用户的个性化需求是很难转化为简短明确的查询词的,例如“今天中午想找个附近的、符合我口味的、消费不贵的餐馆”这样的需求,非常常见但很难用查询词来表达清楚。
推荐系统恰好可以填补这个空白,根据挖掘用户历史行为来将个性化的需求深入挖掘清楚,实现用武之地。
目前在电商、视频、文学、社交网络等等各类网站或应用中,推荐系统都开始扮演起一个越来越重要的角色。
但是无论应用于什么系统,归根结底最关键的是必须保证高质量的推荐效果。
撇开产品、交互设计、基础数据等方面,如果从系统和算法的角度来看,混合推荐的思路是其中最为重要的部分。
毫不夸张的说,在真实世界的应用中,无论产品规模的大或小、用户的多与少,只要是想要追求推荐效果的高水准,那么混合推荐一定是必不可少的一门绝技。
原因为何?
——下面来作个解释
为什么要有混合技术
推荐技术发展至今已经历了十余年,这期间众多的算法被提出并在业界运用,经过大量的实践,人们发现似乎没有任何一个方法可以独领风骚、包打天下,每种推荐方法都有其局限性,下面举些典型的例子说明:
基于物品的协同过滤(Item-basedCollaborativeFiltering)是推荐系统中知名度最高的方法,由亚马逊(Amazon)公司最早提出并在电商行业内被广泛使用。
但基于物品的协同过滤在面对物品冷启动,以及数据稀疏的情况下效果急剧下降。
同时基于物品的协同过滤倾向于推荐用户购买过商品的类似商品,往往会出现多样性不足、推荐惊喜度低的问题。
基于用户的协同过滤(User-basedCollaborativeFiltering)方法在推荐结果的新颖性方面有一定的优势,但是推荐结果的相关性较弱,且容易受潮流影响而倾向于推荐出大众性物品。
同时新用户或低活跃用户也会遇到冷启动(Cold-Start)的棘手问题。
在多个推荐算法竞赛中,我们发现隐语义与矩阵分解模型(LatentFactorModel)及其各种改进升级方法(包括SVD++等)是推荐精度最好的单一模型方法,但当数据规模大时其运算性能会明显降低,同时基于MF的方法依赖全局进行计算信息,因而很难作增量更新,导致实际工程中会遇到不少困难。
另外,隐语义模型还存在调整困难、可解释性差等问题。
基于内容的推荐算法(Content-basedRecommendation)是最直观的推荐算法,这种方法实现简单,不存在冷启动问题,应对的场景丰富,属于“万金油”型打法。
但在一些算法公开评测中,基于内容的方法效果都是垫底的之一。
同时该算法依赖内容的描述程度,往往受限于对文本、图像或音视频内容进行分析的深度。
基于统计思想的一些方法,例如SlopeOne,关联规则(AssociationRules),或者分类热门推荐等,计算速度快,但是对用户个性化偏好的描述能力弱,实际应用时也存在各种各样的问题,在此不多赘述。
怎样混合是个问题
解决各种推荐方法“硬伤”的一条最好的解决途径就是混合技术——它的思路非常明确,俗称“三个臭皮匠顶个诸葛亮”——即综合运用各种方法的优势、扬长避短,组合起来成为一个效果强大的系统。
道理虽然简单,但是怎样组合才能真正发挥威力?
联想到一个有趣的电影片段:
周星驰的喜剧电影《国产零零漆》中,神志不清的特工达文西“发明”了一个“要你命3000”的武器,这个“超级武器霸王”把一堆街头武器——“西瓜刀、铁链、火药、硫酸、毒药、手枪、手榴弹、杀虫剂”——用绳子绑在一起,但是完全没有作用,被对手一枪击毙。
在实际应用中,从系统、算法、结果、处理流程等不同的角度,都有一些具体的混合策略。
下面依次从不同的角度来进行介绍。
多段组合混合推荐框架
推荐系统一方面要处理海量的用户、物品的数据,一方面要实时相应线上用户的请求,迅速的生成结果并返回。
在这里存在一个矛盾是,离线数据挖掘(例如常见的Hadoop系统)虽然擅长处理大量数据,但运算周期长(小时级或天级)、实时推荐能力差,而在线系统由于要迅速(例如几十毫秒)计算出推荐结果,无法承担过于消耗资源的算法。
在业界实际部署时,解决此类常见问题的流行方法是采用三段式混合系统:
即Online-Nearline-OfflineRecommendation(在线-近线-离线)三层混合机制。
曾经举办过著名的国际推荐竞赛的Netflix公司,在所公开的后台推荐系统架构中,即采用了该混合系统。
其中Online系统直接面向用户,是一个高性能和高可用性的推荐服务,在这里通常会设计有缓存(Cache)系统,来处理热门的请求(Query)重复计算的问题。
而当Cache不命中的情况下,Online推荐运行一个运算简单可靠的算法,及时生成结果。
Online系统后是Nearline系统,这个系统部署在服务端,一方面会接收Online系统发过来的请求,将Online计算的一些缓存结果,采用更复杂的算法重新计算并更新后更新缓存。
另一方面Nearline是衔接Online和Offline系统的桥梁,因为Offline结果往往会挖掘长期的、海量的用户行为日志,消耗的资源大、挖掘周期长,但是Offline推荐系统计算所得的结果质量往往是最高的,这些结果会通过Nearline系统输送到线上,发挥作用。
另外一个不可忽视的问题是用户反馈的及时收集,并及时用于调整推荐结果。
挖掘用户的反馈对调整推荐结果有莫大的帮助,但这个调整往往越及时越好,否则用户很容易对结果不满意而流失。
这个点击挖掘和反馈的功能往往由Nearline推荐系统来承担,因为该系统收集前端反馈比较方便,又可以保证适当的处理时长。
加权型混合推荐技术
上面介绍了从系统架构的角度如何进行混合。
而从算法的角度来看,则最常用的是采用加权型的混合推荐技术,即将来自不同推荐算法生成的候选结果及结果的分数,进一步进行组合(Ensemble)加权,生成最终的推荐排序结果。
具体来看,比较原始的加权型的方法是根据推荐效果,固定赋予各个子算法输出结果的权重,然后得到最终结果。
很显然这种方法无法灵活处理不同的上下文场景,因为不同的算法的结果,可能在不同的场景下质量有高有低,固定加权系统无法各取所长。
所以更好的思路是设置训练样本,然后比较用户对推荐结果的评价、与系统的预测是否相符,根据训练得到的结果生成加权的模型,动态的调整权重。
加权混合的模型有很多,除了简单的线性模型外,常用的有回归模型(LogisticRegression)、RBM(RestrictedBoltzmannMachines)、GBDT(GradientBoostedDecisionTrees),这三种混合模型在推荐算法竞赛中大放异彩,在2009年结束的Netflix百万美元推荐竞赛中,优胜队伍将充分运用和多种加权混合模型的优势,组合后的算法推荐精度非常高。
获胜队的YehudaKoren在论文TheBellKorSolutiontotheNetflixGrandPrize中对此有非常详细的介绍。
另外值得一提的是台湾大学推荐团队,他们通过混合甚至二次混合的方式(如图2),将众多单独推荐算法的结果进行最合理的加权组合,在最近几届的KDDCup数据挖掘竞赛中所向披靡,经常取得极为优异的推荐效果。
分级型混合推荐技术
尽管上述加权组合型混合推荐技术有非常高的精度,但系统复杂度和运算负载都较高。
在工业界实际系统中,往往采用一些相对简单的方案,其中分级型混合推荐技术就是一类思想简单但效果也不错的方法。
这种混合推荐技术根据不同的推荐场景,将不同的推荐算法按照效果优劣进行层次性划分。
在对应的推荐场景下,优先采用高可信度的推荐算法生成的结果,然后依次采用后续方法生成结果。
在各种推荐场景中,Top-N推荐是最为常见的一类。
这种推荐应用有时需要展示较多的推荐结果,而此时一种推荐算法的结果往往不够丰富,通常会采用分级型的混合技术,通过事先的数据挖掘,优先将推荐精度高的算法结果先列出,然后用依次用其他方法的结果递补。
不同的推荐算法往往在精度(Precision)和召回(Recall)之间有所折衷,因此优先列出高精度结果,长尾部分则采用高召回的结果进行补足,能兼顾对推荐结果数量和质量的两种需求。
交叉调和技术
交叉调和技术有些类似西方酿造威士忌(Whisky)酒的过程——将纯麦威士忌、谷物威士忌、或者不同产地、口味的陈酿进行一定比例的调配后最终成品。
交叉调和推荐技术(BlendingRecommendation)的主要动机是保证最终推荐结果的多样性。
因为不同用户对同一件物品的着眼点往往各不相同,而不同的推荐算法,生成的结果往往代表了一类不同的观察角度所生成的结果,交叉调和技术将不同推荐算法的生成结果,按照一定的配比组合在一起,打包后集中呈现给用户。
交叉调和技术需要注意的问题是结果组合时的冲突解决问题,通常会设置一些额外的约束条件来处理结果的组合展示问题。
另外我们发现为了让用户更多的注意到结果的多样性,对不同类型的推荐结果辅以展示不同的推荐理由,往往能获得更多收益。
瀑布型混合方法
瀑布型(WaterfallModel)的混合方法采用了过滤(Filtering)的设计思想,将不同的推荐算法视为不同粒度的过滤器,尤其是面对待推荐对象(Item)和所需的推荐结果数量相差极为悬殊时,往往非常适用。
在瀑布型混合技术中,前一个推荐方法过滤的结果,将输出给后一个推荐方法,层层递进,候选结果在此过程中会被逐步遴选,最终得到一个高精确的结果。
设计瀑布型混合系统中,通常会将运算速度快、区分度低的算法排在前列,逐步过渡为重量级的算法,这样的优点是充分运用不同算法的区分度,让宝贵的运算资源集中在少量较高候选结果的运算上。
推荐基
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 推荐 系统 手册