一文带你读完《推荐系统实践》

这是前年暑假看《推荐系统实践》时顺手摘下的重要概念与知识点,存到博客里来。

目录

  • 一、评测推荐系统
  • 二、利用用户行为数据
    • 2.1用户行为分析
    • 2.2基于邻域的算法
      • 2.2.1基于用户的协同过滤算法UserCF
      • 2.2.2基于物品的协同过滤算法ItemCF
      • 2.2.3UserCF和ItemCF的综合比较
    • 2.3隐语义模型LFM
    • 2.4基于图的模型
  • 三、推荐系统冷启动问题
  • 四、利用用户标签数据
    • 4.1基于标签的推荐系统
    • 4.2基于图的推荐算法
    • 4.3给用户推荐标签
  • 五、利用上下文信息
  • 六、利用社交网络数据
  • 七、推荐系统实例
    • 7.1外围架构
    • 7.2推荐系统架构
    • 7.3推荐引擎的架构
  • 八、评分预测问题

一、评测推荐系统

推荐系统实验方法:离线实验、用户调查和在线实验(AB测试)。

一般来说,一个新的推荐算法最终上线,需要完成上面所说的3个实验。

评测指标:准确度、覆盖度、新颖度、惊喜度、信任度、透明度等。

二、利用用户行为数据

基于用户行为分析的推荐算法,亦称为协同过滤算法。协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使 自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。

用户行为数据在网站上最简单的存在形式就是日志。

互联网中的用户行为有很多种,比如浏览网页、购买商品、评论、评分等。要用一个统一的 方式表示所有这些行为是比较困难的。表2-3给出了一种表示方式,它将一个用户行为表示为6部 分,即产生行为的用户和行为的对象、行为的种类、产生行为的上下文、行为的内容和权重。

一文带你读完《推荐系统实践》_第1张图片

2.1用户行为分析

长尾分布(Power Law),也称幂次现象,80/20法則 。
f ( x ) = a x k + o ( x k ) f(x)=ax^k + o(x^k) f(x)=axk+o(xk)

仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对协同过滤算法 进行了深入研究,提出了很多方法,比如基于邻域的方法(neighborhood-based)、 隐语义模型 (latent factor model)、 基于图的随机游走算法(random walk on graph)等。在这些方法中, 最著名的、在业界得到最广泛应用的算法是基于邻域的方法。

数据集:本章采用GroupLens提供的MovieLens数据集介绍和评测各种算法。本数据集包含6000多用户对4000多部电影的100万条评分,用户可以给电影评5个不同等级的分数(1~5分)。

评测指标
○ 召回率描述有多少比例的用户—物品评分记录包含在最终的推荐列表中。
○ 准确率描述最终的推荐列表中有多少比例是发生过的用户—物品评分记录。
○ 覆盖率反映了推荐算法发掘长尾的 能力,覆盖率越高,说明推荐算法越能够将长尾中的物品推荐给用户。覆盖率表示最终的推荐列表中包含多大比例的物品。
○ 推荐的新颖度,这里用推荐列表中物品的平均流行度度量推荐结果的新颖度; 越不流行越新颖。

2.2基于邻域的算法

基于邻域的方法主要包含UserCF和ItemCF这两种算法:

2.2.1基于用户的协同过滤算法UserCF

实现步骤:①找到与用户A兴趣相似的其他用户,②将这些用户喜欢的而A没听过的物品推荐给A。 ①的关键是计算两个用户的兴趣相似度。这里,协同过滤算法主要利用行为的相似度计算兴趣的相似度。

改进:两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。

缺点: 随着网站的用户数目越来越大,计算用户兴趣相似度矩阵将越来越困难,其运算时间复杂度和空间复杂度的增长和用户数的增长近似于平方关系。很难对推荐结果作出解释。

2.2.2基于物品的协同过滤算法ItemCF

是目前业界应用最多的算法 。给用户推荐那些和他们之前喜欢的物品相似的物品。不过, ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。

步骤:
①计算物品之间的相似度;
②根据物品的相似度和用户的历史行为给用户生成推荐列表。

相似度的归一化:
假设物品分为两类——A和B, A类物品之间的相似度为0.5, B类物品之间的相似度为0.6,归一化之后, A类物品之间的相似度变成了1, B类物品之间的相似度也是1。用户如果喜欢5个A类物品和5个B类物品,那么他的推荐列表中A类物品和B类物品的数目也应该是大致相等的。

2.2.3UserCF和ItemCF的综合比较

1992年被提出之初,应用于邮件过滤系统及新闻个性化推荐,后来被著名的文章分享网站Digg用来给用户推荐个性化的网络文章。ItemCF则是相对比较新的算法,在著名的电子商务网站亚马逊和Netflix中得到了广泛应用。

​ UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点,而ItemCF 的推荐结果着重于维系用户的历史兴趣。换句话说, UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣。

在新闻网站中,用户的兴趣不是特别细化,绝大多数用户都喜欢看热门的新闻。因此,个性化新闻推荐更加强调抓住 新闻热点,热门程度和时效性是个性化新闻推荐的重点,而个性化相对于这两点略显次要。因此,UserCF可以给用户推荐和他有相似爱好的一群其他用户今天都在看的新闻,这样在抓住热 点和时效性的同时,保证了一定程度的个性化。此外,新闻更新速度远远快于新用户的加入速度,而ItemCF需要维护一张物品相关度的表,这张表也需要很快更新,这在技术上很难实现。

在图书、电子商务和电影网站,比如亚马逊、豆瓣、 Netflix中, ItemCF则能极大地发挥优势。这些网站中个性化推荐的任务是帮助用户发现和他研究领域相关的物品。此外,这些网站的物品更新速度不会特别快,且物品的相似度相对于用户的兴趣一般比较稳定。
一文带你读完《推荐系统实践》_第2张图片

2.3隐语义模型LFM

采取基于用户行为统计的自动聚类,通过隐含特征 (latent factor)联系用户兴趣和物品。

隐含语义分析技术从诞生到今天产生了很多著名的模型和方法,其中和该技术相关且耳熟能详的名词有pLSA、 LDA、隐含类别模型(latent class model)、隐含主题模型(latent topic model)、 矩阵分解(matrix factorization)。

推荐系统的用户行为分为显性反馈和隐性反馈。
LFM在显性反馈数据(也就是评分数据)上,解决评分预测问题并达到了很好的精度。不过本章主要讨论的是隐性反馈数据集,这种数据集的特点是只有正样本(用户喜欢什么物品),而没有负样本(用户对什么物品不感兴趣)。

LFM重要参数:
隐形特征F 、学习速率alpha 、正则系数lambda、 负/正样本比例ratio(影响最大,控制推荐算法发掘长尾能力(流行度),影响准确度(本书中1-10之内准确率上升趋势,之后平稳))。

实际应用举例:
雅虎首页个性化设计。雅虎的研究人员以CTR作为优化目标,利用LFM来预测用户是否会单击一个链接。为此, 他们将用户历史上对首页上链接的行为记录作为训练集。解决实效性?长期历史行为LFM(每天更新) + 最近几小时历史行为LFM (快速计算)。

缺点:很难实现实时的推荐。

2.4基于图的模型

用户行为很容易用二分图表示,基于邻域的模型也称为基于图的模型。如果将个性化推荐算法放到二分图模型上,那么给用户u推荐物品的任务就可以转化为度量用户顶点vu和与vu没有边直接相连的物品节点在图上的相关性,相关性越高的物品在推荐列表中的权重就越高。

典型算法是基于随机游走的PersonalRank算法:
假设要给用户u进行个性化推荐,可以从用户u对应的节点vu开始在用户物品二分图上进行随 机游走。游走到任何一个节点时,首先按照概率 α 决定是继续游走,还是停止这次游走并从vu节 点开始重新游走。如果决定继续游走,那么就从当前节点指向的节点中按照均匀分布随机选择一 个节点作为游走下次经过的节点。这样,经过很多次随机游走后,每个物品节点被访问到的概率 会收敛到一个数。最终的推荐列表中物品的权重就是物品节点的访问概率。

三、推荐系统冷启动问题

如何在没有 大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统, 就是冷启动的问题。

冷启动问题主要分3类:用户冷启动、物品冷启动、系统冷启动。

解决:提供非个性化推荐(热门排行榜)、利用用户注册信息、选择合适的物品启动用户的兴趣(提供物品让用户反馈)、利用物品的内容信息、利用专家进行标注。

四、利用用户标签数据

目前流行的推荐系统基本上通过3种方式联系用户兴趣和物品:(1)利用用户喜欢过的物品,为其推荐相似的物品(基于物品);(2)利用和用户A兴趣相似的其他用户,推荐他们喜欢的物品给A(基于用户);(3)通过一些特征联系用户和物品,推荐具有用户喜欢的特征的物品。特征的表现方式可以是物品的属性集合,或隐语义向量,或标签,等等。

标签应用:(1)作者或专家给物品打标签;(2)用户给物品打标签UGC。UGC的标签系统是一种表示用户兴趣和物品语义的重要方式。

UGC标签系统的代表应用:UGC标签系统的鼻祖Delicious、论文书签网站CiteULike、音乐网站Last.fm、视频网站Hulu、书和电影评论网站豆瓣

豆瓣的标签系统:首先,在每本书的页面上,豆瓣都提供了一个叫做“豆瓣成员常用标签”的应用,它给出了这本书上用户最常打的标签。同时,在用户给书做评价时,豆瓣也会让用户给图书打标签。最后,在最终的个性化推荐结果里,豆瓣利用标签将用户的推荐结果做了聚类,显示了对不同标签下用户的推荐结果,从而增加了推荐的多样性和可解释性。

4.1基于标签的推荐系统

一个最简单的个性化推荐算法:统计每个用户最常用的标签。对于每个标签,统计被打过这个标签次数最多的物品。对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门物品推荐给这个用户。

数据集:Delicious数据集中包含用户对网页的标签记录,每一行由4部分组成, 即时间、用户ID、网页URL、标签。本章只抽取了其中用户对一些著名博客网站网页(Wordpress、 BlogSpot、 TechCrunch)的标签记录。 CiteULike数据集包含用户对论文的标签记录,它每行也由4部分组成,即物品ID、用户ID、时间、标签,本章选取了其中稠密的部分。

4.2基于图的推荐算法

在用户标签数据集上,有3种不同的元素,即用户、物品和标签。因此,我们需要定义3种不同的顶点,即用户顶点、物品顶点和标签顶点。

如果我们得到一个表示用户u 给物品i打了标签b的用户标签行为(u,i,b),那么最自然的想法就是在图中增加3条边,首先需要在用户u对应的顶点v(u)和物品i对应的顶点v(i)之间增加一条边(如果这两个顶点已经有边相连,那 么就应该将边的权重加1) ,同理,在v(u)和v(b)之间需要增加一条边, v(i)和v(b)之间也需要边相连接。

4.3给用户推荐标签

原因:方便用户输入标签;提高标签质量。
标签推荐算法1.0:推荐该用户最常用标签列表里获得该标签次数最多的物品
标签推荐算法2.0:

  1. 对用户标签向量建模,而非仅仅使用最常见。比如TagBasedTFIDF。
  2. 标签扩展(列举“推荐系统”时候把“协同过滤”也拉进来),减少矩阵稀疏性。扩展方法: LDA主题模型。
  3. 标签清理:比如不要推荐“不好笑”;方法:去除高频停止词,去除词根不同同义词,去除分隔符不同造成同义词(后两个都是英文里)。

推荐方法:
(0)给用户u推荐整个系统里最热门的标签PopularTags;
(1)给用户u推荐物品i上最热门的标签ItemPopularTags;
(2)给用户u推荐他自己经常使用的标签UserPopularTags。
(3)前面两种的融合(这里记为HybridPopularTags),通过一个系数将上面的推荐结果线性加权,然后生成最终的推荐结果。

五、利用上下文信息

上下文包括用户访问推荐系统的时间、地点、心情等,对于提高推荐系统的推荐系统非常重要。

时间上下文信息

时间对用户兴趣的影响表现为:用户兴趣是变化的,物品也是有生命周期的,以及季节效应。

包含时间信息的用户行为数据集由一系列三元组构成,其中每个三元组(u,i,t)代表了用户u在时刻t对物品i产生过行为。

数据集:
本节将利用Delicious数据集进行离线实验以评测不同算法的预测精度。该数据集包含950 000个用户在2003年9月到2007年12月间对网页打标签的行为。该数据集中包含132 000 000个标签和 420 000 000条标签行为记录。该数据集每行是一条标签行为记录,由4部分组成——用户ID、日期、网页URL和标签,代表了一个用户在某一天对某个网页打上了某个标签的行为。因为网页由 URL标识,因此可以根据域名将网页分成不同的类别。本节选取了5个域名对应的网页,将整个数据集分成5个不同的数据集加以研究。这5个域名是nytimes.com、 sourceforge.net、 blogspot.com、 wikipedia.org、 youtube.com。

实时推荐系统:
要求在每个用户访问推荐系统时,都根据用户这个时间点前的行为实时计算推荐列表。推荐算法需要平衡考虑用户的近期行为和长期行为,即要让推荐列表反应出用户近期行为所体现的兴趣变化,又不能让推荐列表完全受用户近期行为的影响,要保证推荐列表对用户兴趣预测的延续性。

推荐系统每天推荐结果的变化程度被定义为推荐系统的时间多样性

提高推荐结果的时间多样性:
首先,需要保证推荐系统能够在用户有了新的行为后及时调整推荐结果,使推荐结果满足用户最近的兴趣(不同的算法具有不同的时间多样性);其次,需要保证推荐系统在用户没有新的行为时也能够经常变化一下结果,具有一定的时间多样性。

时间上下文推荐算法

  1. 最近最热门;
  2. 时间上下文相关的ItemCF算法(物品相似度、在线推荐);
  3. 时间上下文相关的UserCF算法(用户兴趣相似度、相似兴趣用户的最近行为)。

时间段图模型
时 间 段 图 模 型 G ( U , S U , I , S I , E , w , σ ) 也 是 一 个 二 分 图 。 U 是 用 户 节 点 集 合 , S U 是 用 户 时 间 段 节 点 集 合 。 一 个 用 户 时 间 段 节 点 v u t ∈ S U 会 和 用 户 u 在 时 刻 t 喜 欢 的 物 品 通 过 边 相 连 。 I 是 物 品 节 点 集 合 , S I 是 物 品 时 间 段 节 点 集 合 。 时间段图模型 G(U, S_U, I, S_I, E, w,σ ) 也是一个二分图。 U是用户节点集合, S_U 是用户时间段节点集合。 一个用户时间段节点 v_ut∈S_U 会和用户u在时刻t喜欢的物品通过边相连。 I是物品节点集合, S_I 是物品时间段节点集合。 G(U,SU,I,SI,E,w,σ)USUvutSUutISI
本节的离线实验将同时对比如下算法,将它们的召回率和准确率曲线画在一张图上。这里,我们没有对比不同参数下各个算法的性能,最终的实验结果是在最优参数下获得的。

  • Pop 给用户推荐当天最热门的物品
  • TItemCF 融合时间信息的ItemCF算法
  • TUserCF 融合时间信息的UserCF算法。
  • ItemCF 不考虑时间信息的ItemCF算法。
  • UserCF 不考虑时间信息的UserCF算法。
  • SGM 时间段图模型。
  • USGM 物品时间节点权重为0的时间段图模型。
  • ISGM 用户时间节点权重为0的时间段图模型。

地点上下文

LARS位置感知推荐系统。

兴趣本地化、活动本地化。

六、利用社交网络数据

本章不仅讨论如何利用社交网络给用户推荐物品,而且将讨论如何利用社交网络给用户推荐好友。

社交网络定义了用户之间的联系,因此可以用图定义社交网络。在社交网站中存在两种关系,一种是用户对物品的兴趣关系,一种是用户之间的社交网络关系。

社会化推荐优点:好友推荐可以增加推荐的信任度;社交网络可以解决冷启动问题。社会化推荐的优势不在于增加预测准确度,而是在于通过用户的好友增加用户对推荐结果的信任度,从而让用户单击那些很冷门的推荐结果。

基于邻域的社会化推荐算法:给用户推荐好友喜欢的物品集合,算法中要考虑好友与用户的熟悉程度以及兴趣相似度。

基于图的社会化推荐算法:定义顶点、边和权重(其中用户和用户之间边的权重可以定义为用户之间相似度的α倍(包括熟悉程度和兴趣相似度),而用户和物品之间的权重可以定义为用户对物品喜欢程度的β倍)。然后可以利用PersonalRank图排序算法生成每个用户的推荐结果。

好友推荐算法在社交网络上被称为链接预测(link prediction):

  • 基于内容的匹配,如人口统计学属性、位置信息、兴趣等。
  • 基于共同兴趣的好友推荐InterestBased,参考UserCF或提取兴趣标签。
  • 基于社交网络图的好友推荐SocialBased,推荐好友的好友。

基于用户调查的好友推荐算法对比:
一文带你读完《推荐系统实践》_第3张图片

ACM推荐系统大会在2010年曾经举办过一个社会化推荐比赛,该比赛将社交网络看做一种 上下文,希望参赛者能够利用社交网络信息提高推荐系统的性能。关注社交化推荐的读者可以关 注一下该比赛最后发出的论文集。

七、推荐系统实例

7.1外围架构

一文带你读完《推荐系统实践》_第4张图片
推荐系统界面的共性:

  • 通过一定方式展示物品,主要包括物品的标题、缩略图和介绍等。
  • 很多推荐界面都提供了推荐理由,理由可以增加用户对推荐结果的信任度。
  • 推荐界面还需要提供一些按钮让用户对推荐结果进行反馈,这样才能让推荐算法不断改 善用户的个性化推荐体验。

数据收集和存储:按照数据的规模和是否需要实时存取,不同的行为数据将被存储在不同的媒介中。一般来说,需要实时存取的数据存储在数据库和缓存中,而大规模的非实时地存取数据存储在分布式文件系统(如HDFS)中。

一文带你读完《推荐系统实践》_第5张图片

7.2推荐系统架构

推荐系统联系用户和物品的方式主要有3种:

一文带你读完《推荐系统实践》_第6张图片

如果将这3种方式都抽象一下就可以发现,如果认为用户喜欢的物品也是一种用户特征,或者和用户兴趣相似的其他用户也是一种用户特征,那么用户就和物品通过特征相联系。

根据上面的抽象,可以设计一种基于特征的推荐系统架构。推荐系统为用户生成特征,然后对每个特征找到和特征相关的物品,从而最终生成用户的推荐列表。因而,推荐系统的核心任务就被拆解成两部分,一个是如何为给定用户生成特征,另一个是如何根据特征找到物品。

用户特征分为:

  1. 人口统计学特征,年龄、性别、民族等注册时提供的信息。

  2. 用户行为特征,浏览、收藏、给什么物品打了多少分等。在时间上也可以分为用户近期行为和长期行为。

  3. 用户话题特征,根据用户历史行为用话题模型将影视剧聚合成不同的话题,计算其感兴趣的话题。

推荐系统的推荐任务:

  1. 推荐最近加入的物品;
  2. 推荐商业上需要宣传的物品;
  3. 推荐不同种类的物品;
  4. 推荐不同新颖度的物品;
  5. 考虑上下文实时推荐。

如果要在一个系统中把上面提到的各种特征和任务都统筹考虑,那么系统将会非常复杂,而且很难通过配置文件方便地配置不同特征和任务的权重。因此,推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一类特征和一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或者优先级合并、排序然后返回。

一文带你读完《推荐系统实践》_第7张图片
这样做还有两个好处:易于增加/删除引擎,控制不同引擎对推荐结果的影响;可以实现推荐引擎级别的用户反馈。

7.3推荐引擎的架构

一文带你读完《推荐系统实践》_第8张图片

A模块:通过分析用户行为数据生成当前用户特征向量。

B模块:将用户特征向量通过特征-物品相关矩阵转化为初始推荐物品列表。

C模块:对初始的推荐列表进行过滤、排名等处理,生成最终的推荐结果。

生成用户特征向量

一个特征向量由特征以及特征的权重组成,在利用用户行为计算特征向量时需要考虑以下因素。

  1. 用户行为的种类。一般的标准是用户付出代价越大的行为权重越高。比如,购买物品需要用户掏钱,所以用户一定会三思而后行,因此购买行为最为重要。相反,浏览物品的网页代价很小,所以这种行为对反映用户的真实兴趣的影响很小。

  2. 用户行为产生的时间。 一般来说,用户近期的行为比较重要,而用户很久之前的行为相对比较次要。因此,如果用户最近购买过某一个物品,那么这个物品对应的特征将会具有比较高的权重。

  3. 用户行为的次数。比如用户会听一首歌很多次,看一部电视剧的很多集等。因此用户对同一个物品的同一种行为发生的次数也反映了用户对物品的兴趣,行为次数多的物品对应的特征权重越高。

  4. 物品的热门程度。 如果用户对一个热门物品产生了偶尔几次不重要的行为(比如浏览行为)时,不能说明用户对这个物品有兴趣。反之,如果用户对一个不热门的物品产生了行为,就说明了用户的个性需求。因此,推荐引擎在生成用户特征时会加重不热门物品对应的特征的权重。

物品-物品相关推荐

在得到用户的特征向量后,我们可以根据离线的相关表得到初始的物品推荐列表。对于每个特征,我们可以在相关表中存储和它最相关的N个物品的ID。

对于一个推荐引擎可以在配置文件中配置很多相关表以及它们的权重,而在线服务在启动时会将这些相关表按照配置的权重相加,然后将最终的相关表保存在内存中,而在给用户进行推荐时,用的已经是加权后的相关表了。

从上面的架构图可以看到,特征—物品相关推荐模块还可以接受一个候选物品集合。候选物品集合的目的是保证推荐结果只包含候选物品集合中的物品。它的应用场合一般是产品需求希望将某些类型的电视剧推荐给用户。

过滤模块

过滤内容:1.用户已经产生过行为的数据;2.候选物品以外的物品;3.某些质量很差的物品(这种过滤一般以历史评分为依据)。

排名模块

经过过滤后的推荐结果直接展示给用户一般也没有问题,但如果对它们进行一些排名,则可以更好地提升用户满意度。

一般排名模块需要包括很多不同的子模块,例如:1.新颖性排名;2.多样性;3.时间多样性;4.用户反馈(最重要的部分)

八、评分预测问题

评分预测问题就是如何通过已知的用户历史评分记录预测未知的用户评分记录。评分预测问题最基本的数据集就是用户评分数据集。该数据集由用户评分记录组成,每一条评分记录是一个三元组(u, i, r),表示用户u给物品i赋予了评分r。

评分预测问题基本都通过离线实验进行研究。对于测试集中的一对用户和物品(u, i),将用户u对物品i的真实评分和推荐算法预测的用户u对物品i的评分用均方根误差RMSE度量预测的精度。评分预测的目的就是找到最好的模型最小化测试集的RMSE。

评分预测算法

  1. 利用平均值:例如全局平均值、用户评分平均值、物品评分平均值、用户分类对物品分类的平均值等。
  2. 基于邻域:基于用户的领域算法和基于物品的领域算法。相似度cossine,皮尔逊系数,adjust cosine similarity。
  3. 隐语义模型与矩阵分解模型:传统的SVD(奇异值)分解(很难实际应用)、Simon Funk的SVD分解、加入偏置项后的LFM、考虑领域影响的LFM。
  4. 加入时间信息:将时间信息应用到基于邻域的模型或矩阵分解模型中。
  5. 模型融合:模型级联融合(在A1基础上设计A2)、模型加权融合(显性融合,神经网络等)。

你可能感兴趣的:(其他,推荐系统,算法,数据挖掘)