一文入门推荐系统——推荐系统实践读书笔记(下)

简介: 一文入门推荐系统——推荐系统实践读书笔记(下)

正文


3.2. 基于内容的推荐


基于内容推荐的原理是根据用户感兴趣的物品A,找到和A内容信息相近的物品B。内容信息是指用户和物品本身的内容特征,如用户的地理位置、性别、年龄,电影物品的导演、演员、发布时间等。比如用户喜欢看《神探夏洛克第一季》,那么就给他推荐《神探夏洛克第二季》。


基于内容推荐的优点如下:


简单、有效,推荐结果直观,容易理解,不需要领域知识;

不需要用户的历史数据,如对对象的评价等;

没有物品冷启动的问题;

没有稀疏问题;

算法成熟,如数据挖掘、聚类分析等。

基于内容的推荐的缺点如下:

特征提取能力有限

比如图像、视频,没有有效的特征提取方法。即便是文本资源,特征提取也只能反应一部分内容,难以提取内容质量,会影响用户满意度。

很难出现新的推荐结果

根据用户兴趣的喜好进行推荐,很难出现惊喜。对于时间敏感的内容,如新闻,推荐内容基本相同,体验度较差。

存在用户冷启动的问题

当新用户出现时, 系统较难获得该用户的兴趣偏好,无法进行有效推荐。

推荐对象内容分类方法需要的数据量较大


3.3. 基于关联规则的推荐


关联规则是反映一个事物与其他事物之间的相互依存性和关联性,常用于实体商店或在线电商的推荐系统:通过对顾客的购买记录数据库进行关联规则挖掘,最终目的是发现顾客群体的购买习惯的内在共性。


关联规则分析中的关键概念包括:支持度(Support)、置信度(Confidence)与提升度(Lift):

支持度 Support

支持度是两件商品A AA和B BB在总销售笔数N NN中出现的概率,即A AA与B BB同时被购买的概率

32.png

置信度 Confidence

置信度是购买A AA后再购买B BB的条件概率。简单来说就是交集部分C CC在A AA中比例,如果比例大说明购买A AA的客户很大可能会购买B BB商品



33.png

提升度 Lift

提升度表示先购买A对购买B的概率的提升作用,用来判断规则是否有实际价值,即使用规则后商品在购物车中出现的次数是否高于商品单独出现在购物车中的频率。如果大于1说明规则有效,小于1则无效


34.png

例如在某电商平台上,可乐和薯片的关联规则的支持度是20%,购买可乐的支持度是3%,购买薯片的支持度是5%,则提升度为


35.png


这说明购买可乐对购买薯片有提升效果。

该提升效果的置信度为:

36.png


3.4. 基于知识的推荐


基于知识的推荐(Knowledge-based Recommendation),主要应用于知识型的产品中,主要解决的问题是,为用户定制个性化的进阶路线图。


比如用户想学习钢琴,如果该用户是刚入门的小白,那最好从简单的谱子学起。但这样带来一个问题,由于用户的历史行为都在初级范围之内,根据兴趣偏好,推荐给用户的信息也都在初级范围,无法满足用户的进阶需求。


这个时候就需要基于知识的推荐。推荐系统知道用户现在所处的知识级别(用户知识),也知道学习钢琴所有的级别(产品知识),然后根据用户当前的情况为用户推荐合适的进阶信息。


精确的定义表达为:基于知识的推荐使用用户知识和产品知识, 通过推理什么产品能满足用户需求来产生推荐。这种推荐系统不依赖于用户评分等关于用户偏好的历史数据, 故其不存在冷启动方面的问题。基于知识的推荐系统响应用户的即时需求, 当用户偏好发生变化时不需要任何训练。


例如某论文针对海量习题带来的信息过载导致学习针对性不强、效率不高等问题,提出了基于知识点层次图的个性化习题推荐算法。


该算法首先根据课程知识点体系结构的特点,构建了表征知识点层次关系的权重图,该权重图有效反映知识点间的层次关系。然后,根据学生对知识点的掌握情况,在知识点层次图的基础上提出了一种个性化习题推荐算法。该算法通过更新学生-知识点失分率矩阵,获取学生掌握薄弱的知识点,以此实现习题推荐。


3.5. 基于标签的推荐


3.5.1. 基于标签推荐物品


拿到了用户标签行为数据之后,可以通过如下步骤设计一个推荐算法:


统计每个用户最常用的标签;

对于每个标签,统计被打过这个标签次数最多的物品;

找到一个用户常用的标签,然后找到具有这些标签的最热门物品推荐给这个用户。

在第三步中,就是要找到用户所标记标签中有哪些物品是他最感兴趣的,可以通过以下兴趣公式计算:

简单标签算法

1.png

其中,n u , b n_{u,b}n u,b 是用户u uu打过标签b bb的次数,n b , i n_{b,i}n

b,i 是物品i ii被打过标签b bb的次数

TF-IDF标签算法


2.png

其中,n b ( u ) n_b^{(u)}n b(u) 记录了标签b bb被多少个不同的用户使用过。这个公式可以给热门标签更小的权重,从而反应用户个性化的兴趣

改进的TF-IDF标签算法


3.png


其中,n i ( u ) n 记录了物品i ii被多少个不同的用户打过标签。这个公式可以给热门物品更小的权重,从而反应用户个性化的兴趣。

TF-IDF 公式(Term Frequency-Inverse Document Frequency, 词频-逆文件频率)是文本分析领域的著名公式,它用于计算词的权重:

wi=log(IDF(ei))TF(ei)


其中,词频 ( T F ) = e i 在文本中出现的次数 该文本中出现次数最多的词的出现次数 词频(TF)=\frac{e_i在文本中出现的次数}{该文本中出现次数最多的词的出现次数}词频(TF)= 该文本中出现次数最多的词的出现次数e i 在文本中出现的次数

,逆文档频率 ( I D F ) = log ⁡ ( 文本总数 包含该关键词的文本数 + 1 ) 逆文档频率(IDF)=\log(\frac{文本总数}{包含该关键词的文本数+1})逆文档频率(IDF)=log(

包含该关键词的文本数+1

文本总数 )


众多的标签并不是一个个标签孤岛,实际上,大多数标签之间都有一定的联系,例如“强化学习”和“多臂老虎机算法”、“Q学习”三个不一样的标签相交于同一领域,为了衡量不同标签之间的相关性,我们这里介绍一种基于邻域的标签扩展方法,即对每个标签找到和它相似的标签,也就是计算标签之间的相似度。


如果认为同一个物品上的不同标签具有某种相似度,那么当两个标签同时出现在很多物品的标签集合中时,我们就可以认为这两个标签具有较大的相似度。对于标签b bb,令N ( b ) N(b)N(b)为被打上标签b bb的物品的集合,n b , i n_{b,i}n b,i

为给物品i ii打上标签b bb的用户数,我们可以通过如下余弦相似度公式计算标签b bb和标签b ′ b'b  的相似度:

4.png

这样的话就可以让那些含义相同的标签相互关联起来。


同时我们必须注意到,不是所有标签都能反应用户的兴趣。比如,在一个视频网站中,用户可能对一个视频打了一个表示情绪的标签,比如“不好笑”,但我们不能因此认为用户对“不好笑”有兴趣。因此我们需要进行标签清理。


标签清理的另一个重要意义在于将标签作为推荐解释。如果我们要把标签呈现给用户,将其作为给用户推荐某一个物品的解释,对标签的质量要求就很高。一般来说,标签清理有如下几种方法:


去除词频很高的停止词

去除因(词根、翻译、叫法)不同造成的同义词。

去除因分隔符造成的同义词

此外,为了控制标签的质量,很多网站也采用了让用户进行反馈的思想,即让用户告诉系统某个标签是否合适。


为了得到更好的推荐效果,我们利用图模型做基于标签数据的个性化推荐,即基于图的标签推荐算法。


该方法首先需要将用户打标签的行为表示到一张图上。在用户标签数据集上,有3种不同的元素,即用户、物品和标签,因此,我们需要定义3种不同的顶点,即用户顶点、物品顶点和标签顶点。这样就得到了一个表示用户u uu给物品i ii打了标签b bb的用户标签行为( u , i , b ) (u,i,b)(u,i,b)。


如下所示用户—物品—标签图包含3个用户(A AA、B BB、C CC)、3个物品(a aa、 b bb、c cc)和3个标签(1 11、2 22、3 33)

5.png

对应的用户标签行为列表为:

用户 标签 物品
6.png

在定义出用户—物品—标签图后,就可以利用PersonalRank算法计算所有物品节点相对于当前用户节点在图上的相关性,然后按照相关性从大到小的排序,给用户推荐排名最高的N NN个物品。


3.5.2. 给用户推荐标签


一般认为,给用户推荐标签有以下好处:


方便用户输入标签

让用户从键盘输入标签无疑会增加用户打标签的难度,这样很多用户不愿意给物品打标签,因此我们需要一个辅助工具来减小用户打标签的难度,从而提高用户打标签的参与度。

提高标签质量

同一个语义不同的用户可能用不同的词语来表示。这些同义词会使标签的词表变得很庞大,而且会使计算相似度不太准确。而使用推荐标签时,我们可以对词表进行选择,首先保证词表不出现太多的同义词,同时保证出现的词都是一些比较热门的、有代表性的词

用户u uu给物品i ii打标签时,我们有四种简单方法可以给用户推荐和物品i ii相关的标签:


PopularTags

给用户u uu推荐整个系统里最热门的标签

ItemPopularTags

给用户u uu推荐物品i ii上最热门的标签

UserPopularTags

用户u uu推荐他自己经常使用的标签

HybridPopularTags

给用户推荐物品i ii上最热门的标签,且他自己经常使用的标签,通过一个系数将两种方法的推荐结果进行线性加权,然后生成最终的推荐结果。

同样的,图模型也可以应用于标签推荐,在根据用户打标签的行为生成图之后,再利用PersonalRank算法进行排名。此时顶点的启动概率定义如下


7.png

也就是说,只有用户u uu和物品i ii对应的顶点有非0的启动概率,而其他顶点的启动概率都为0。


3.6. 基于社交网络的推荐


3.6.1. 给用户推荐内容

社会化推荐受到很多网站的重视,因为其有如下优点:


好友推荐可以增加推荐的信任度

好友往往是用户最信任的。用户往往不一定信任计算机的智能,但会信任好朋友的推荐;

社交网络可以缓解冷启动问题

当一个新用户通过微博或者Facebook账号登录网站时,我们可以从社交网站中获取用户的好友列表,然后给用户推荐好友在网站上喜欢的物品。从而我们可以在没有用户行为记录时就给用户提供较高质量的推荐结果。

(1)基于邻域的社会化推荐算法


最简单算法是给用户推荐好友喜欢的物品集合,设用户 u uu 对物品 i ii 的兴趣 p u i p_{ui}p ui ,则有如下公式:


8.png

其中 o u t ( u ) out(u)out(u) 是用户 u uu 的好友集合,如果用户 v vv 喜欢物品 i ii,则 r v i = 1 r_{vi}=1r vi =1,否则 r v i = 0 r_{vi}=0r vi =0

不过显然的,不同的好友和用户u uu的熟悉程度和兴趣相似度是不同的。因此,我们应该在推荐算法中应该考虑好友和用户的熟悉程度以及兴趣相似度:


9.png

其中w u v w_{uv}w uv由两部分相似度构成,一部分是用户u uu和用户v vv的熟悉程度,另一部分是用户u uu和用户v vv的兴趣相似度,两者按照一定权重组合成w u v w_{uv}w u 。

用户 u uu 和用户 v vv 的熟悉程度(familiarity)描述了两个用户在现实社会中的熟悉程度,如果用户 u uu 和用户 v vv 很熟悉,那么一般来说他们应该有很多共同的好友:

10.png

(2)基于图的社会化推荐算法

图模型的优点是可以将各种数据和关系都表示到图上去,应用到社交网站中,可以找出两种关系,一种是用户对物品的兴趣关系,一种是用户之间的社交网络关系。


用户的社交网络可以表示为社交网络图,用户对物品的行为可以表示为用户物品二分图,而这两种图可以结合成一个图,例如下图中的用户顶点(圆圈)和物品顶点(方块)

11.png

在定义完图中的顶点和边后,需要定义边的权重。其中用户和用户之间边的权重可以定义为用户之间相似度的α \alphaα倍(包括熟悉程度和兴趣相似度),而用户和物品之间的权重可以定义为用户对物品喜欢程度的 β \betaβ倍。之后就可以利用PersonalRank图排序算法给每个用户生成推荐结果。


在社交网络中,除了常见的、用户和用户之间直接的社交网络关系,还有一种关系,即两个用户属于同一个社群


为了表达这种社群关系,可以加入一种节点表示社群(下图最左边一列的节点),而如果用户属于某一社群,图中就有一条边联系用户对应的节点和社群对应的节点。在建立完图模型后,我们就可以通过前面提到的基于图的推荐算法(比如PersonalRank)给用户推荐物品。

13.png

(3)信息流推荐

在大多数社交软件中,我们都可以通过信息流看到好友最近的言论,但信息流里面夹杂了很多用户并不关心的信息。基于信息流的推荐就是进一步帮助用户从信息流中挑选有用的信息。


目前最流行的信息流推荐算法是Facebook的EdgeRank,该算法综合考虑了信息流中每个会话的时间、长度与用户兴趣的相似度,它的主要思想为:


将其他用户对当前用户信息流中的会话产生过行为的行为称为edge,而一条会话的权重定义为:

14.png

其中:u e u_eu e

指产生行为的用户和当前用户的相似度,这里的相似度主要是在社交网络图中的熟悉度;w e w_ew e 指行为的权重,这里的行为包括创建、评论、like(喜欢)、打标签等。d e d_ed e

 指时间衰减参数,越早的行为对权重的影响越低。

从上面的算法描述中可以得出看出在该算法中:如果一个会话被你熟悉的好友最近产生过重要的行为,它就会有比较高的权重。


3.6.2. 给用户推荐好友

好友推荐系统的目的是根据用户现有的好友、用户的行为记录给用户推荐新的好友,从而增加整个社交网络的稠密程度和社交网站用户的活跃度。好友推荐算法在社交网络上被称为链接预测(Link Prediction),主要包括以下几种场景:


(1)基于内容的匹配

可以给用户推荐和他们有相似内容属性的用户作为好友。下面给出了常用的内容属性:


用户人口统计学属性,包括年龄、性别、职业、毕业学校和工作单位等

用户的兴趣,包括用户喜欢的物品和发布过的言论等

用户的位置信息,包括用户的住址、IP地址和邮编等

计算用户在上述内容信息上的相似度就可以找出相似的用户,然后相互推荐。


(2)基于共同兴趣的好友推荐

在Twitter和微博为代表的以兴趣图谱为主的社交网络中,用户往往不关心对于一个人是否在现实社会中认识,而只关心是否和他们有共同的兴趣爱好。因此,在这种网站中需要给用户推荐和他有共同兴趣的其他用户作为好友。


因此可以基于用户的利用协同过滤算法(UserCF)计算用户之间的兴趣相似度,其主要思想就是如果用户喜欢相同的信息和内容,则说明他们具有相似的兴趣。此外,也可以根据用户在社交网络中的发言提取用户的兴趣标签,来计算用户的兴趣相似度。


(3)基于社交网络图的好友推荐

基于好友的好友推荐算法可以用来给用户推荐他们在现实社会中互相熟悉,而在当前社交网络中没有联系的其他用户。


介绍3种基于社交网络的好友推荐算法:

15.png


4. 冷启动问题


推荐系统需要根据用户的历史行为和兴趣预测用户未来的行为和兴趣,因此大量的用户行为数据就成为推荐系统的重要组成部分和先决条件。因此很多在开始阶段就希望有个性化推荐应用的网站来说,如何在没有大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统,就是冷启动(Cold Start)的问题。


冷启动主要分3类:


用户冷启动

用户冷启动主要解决如何给新用户做个性化推荐的问题。当新用户到来时,我们没有他的行为数据,所以也无法根据他的历史行为预测其兴趣,从而无法借此给他做个性化推荐。

物品冷启动

物品冷启动主要解决如何将新的物品推荐给可能对它感兴趣的用户这一问题。

系统冷启动

系统冷启动主要解决如何在一个新开发的网站上(物品信息远多于用户行为信息)设计个性化推荐系统,从而在网站刚发布时就让用户体验到个性化推荐服务这一问题。

对于这3类不同的冷启动问题,有不同的解决方案。一般来说,可以参考如下解决方案:


4.1. 利用用户注册信息


显而易见,利用用户的注册信息可以很好地缓解注册用户的冷启动问题。用户的注册信息分3种:


人口统计学信息

包括用户的年龄、性别、职业、民族、学历和居住地;

用户兴趣的描述

有一些网站会让用户用文字描述他们的兴趣;

站外行为数据

比如用户通过豆瓣、新浪微博的账号登录,就可以在得到用户同意的情况下获取用户在豆瓣或者新浪微博的一些行为数据和社交网络数据

基于注册信息的个性化推荐流程基本如下:


获取用户的注册信息

根据用户的注册信息对用户分类

给用户推荐他所属分类中用户喜欢的物品

如图所示新用户,资料显示他是一位28岁的男性,是一位物理学家。然后,查询3张离线计算好的相关表:


性别-电视剧相关表。从中可以查询男性最喜欢的电视剧;

年龄-电视剧相关表,从中可以查询到28岁用户最喜欢的电视剧;

职业-电视剧相关表,可以查询到物理学家最喜欢的电视剧。

然后,我们可以将用这3张相关表查询出的电视剧列表按照一定权重相加,得到给用户的最终推荐列表。

45.png

基于用户注册信息的推荐算法其核心问题是计算每种特征的用户喜欢的物品。也就是说,对于每种特征f ff,计算具有这种特征的用户对各个物品的兴趣程度p ( f , i ) p(f,i)p(f,i)。有计算两种方法:

46.png

其中,参数 α \alphaα 用于解决数据稀疏问题。比如有一个物品只被1个用户喜欢过,而这个用户刚好就有特征 f ff,那么就有 p ( f , i ) = 1 p(f,i)=1p(f,i)=1 。但是,这种情况并没有统计意义,因此我们为分母加上一个比较大的数,可以避免这样的物品产生比较大的权重。

通过p ( f , i ) p(f,i)p(f,i)我们就可以知道什么样的用户适合推荐什么样的物品,从而可以进行粗粒度推荐,在一定程度上缓解冷启动问题。


4.2. 提供非个性化推荐启动用户需求


解决用户冷启动问题的另一个方法是在新用户第一次访问推荐系统时,不立即给用户展示推荐结果,而是给用户提供一些物品,让用户反馈他们对这些物品的兴趣,用这些反馈启动用户兴趣,然后根据用户兴趣给提供个性化推荐。


一般来说,能够用来启动用户兴趣的物品需要具有以下特点:


比较热门

如果要让用户对一个物品进行反馈,就需要选用用户知晓的物品;

具有代表性和区分性

启动用户兴趣的物品不能是大众化或老少皆宜的,因为这样的物品对用户的兴趣没有区分性。;

具有多样性

在冷启动时,我们不知道用户的兴趣,而用户兴趣的可能性非常多,为了匹配多样的兴趣,我们需要提供具有很高覆盖率的启动物品集合,这些物品能覆盖几乎所有主流的用户兴趣。

上面这些因素都是选择启动物品时需要考虑的,但如何设计一个选择启动物品集合的系统呢?首先,给定一群用户,可以用这群用户对物品评分的方差来度量这群用户兴趣的一致程度。如果方差很大,说明这一群用户的兴趣不太一致,反之则说明这群用户的兴趣比较一致。令σ u ∈ U ′ \sigma_{u\in U'}σ u∈U ′为用户集合U ′ U'U

中所有评分的方差,可以通过如下方式度量一个物品的区分度D ( i ) D(i)D(i):

57.png

其中,N + ( i ) N^+(i)N + (i)是喜欢物品i ii的用户集合, N − ( i ) N^-(i)N

− (i)是不喜欢物品i ii的用户集合,N ‾ ( i ) \overline N(i) N

(i)是没有对物品i ii评分的用户集合。


应用上述公式计算所有物品,就可以从中找到具有最高区分度的物品i ii,然后将用户分成3类:喜欢该物品、不喜欢该物品、未评价该物品的用户。然后对每类用户再找到最具区分度的物品,然后将每一类用户又各自分为3类,如此反复组织成一颗树。


而在用户冷启动时,我们从根节点开始询问用户对该节点物品的看法,然后根据用户的选择将用户放到不同的分枝,直到进入最后的叶子节点,此时我们就已经对用户的兴趣有了比较清楚的了解,从而可以开始对用户进行比较准确地个性化推荐。


4.3. 利用物品内容信息


物品冷启动需要解决的问题是如何将新加入的物品推荐给对它感兴趣的用户。物品冷启动在新闻网站等时效性很强的网站中非常重要,因为那些网站中时时刻刻都有新加入的物品,而且每个物品必须能够在第一时间展现给用户,否则经过一段时间后,物品的价值就大大降低了。


一般来说,物品的内容可以通过向量空间模型表示,例如对于物品d dd,由于物品的内容信息中通常包含一些关键词,所以该模型会将物品表示成一个关键词向量

48.png

其中, e i e_ie i  就是关键词, w i w_iw i  是关键词对应的权重。

在给定物品内容的关键词向量后,物品的内容相似度可以通过向量之间的余弦相似度计算:

49.png


的物品。


不过需要注意的是,如果内容信息不足,关键词很少或者不同,向量空间模型就很难计算出准确的相似度。例如有两篇论文,它们的标题分别是“推荐系统的动态特性”和“基于时间的协同过滤算法研究”,这两篇文章的研究方向是类似的,但是它们标题中没有一样的关键词。换句话说,这两篇文章的关键词虽然不同,但关键词所属的话题是相同的。


在这种情况下,首先需要知道文章的话题分布,然后才能准确地计算文章的相似度。如何建立文章、话题和关键词的关系是话题模型(Topic Model)研究的重点。一种成熟的话题模型是LDA(Latent Dirichlet Allocation)模型。


该模型对一篇文档产生的过程进行了建模,它的基本思想是,一个人在写一篇文档的时候,会首先想这篇文章要讨论哪些话题,然后思考这些话题应该用什么词描述,从而最终用词写成一篇文章。因此,文章和词之间是通过话题联系的。


在使用LDA计算物品的内容相似度时,我们可以先计算出物品在话题上的分布,然后利用两个物品的话题分布计算物品的相似度。比如,如果两个物品的话题分布相似,则认为两个物品具有较高的相似度,反之则认为两个物品的相似度较低。计算话题分布的相似度可以利用KL散度:


54.png


4.4. 发挥专家的作用


为了在推荐系统建立时就让用户得到比较好的体验,很多系统都利用专家进行标注。例如让专家给电影进行标注,可以得到以下标注分类:


58.png


5. 推荐系统实例


5.1. 外围架构


推荐系统要发挥强大的作用,除了推荐系统本身,主要还依赖于两个条件——界面展示和用户行为数据,统称为外围架构。目前流行的推荐系统界面大致都包含如下共性:


通过一定方式展示物品

主要展示物品的标题、缩略图和介绍等

提供了推荐理由

向用户展示推荐理由可以增加用户对推荐结果的信任度

提供渠道让用户进行反馈

不断的反馈让推荐算法持续改善用户的个性化推荐体验

66.png

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


5.2. 推荐系统架构


推荐系统联系用户和物品的方式主要有如下图所示的3种。

67.png

在第三种方法中,推荐系统需要为用户生成特征,然后对每个特征找到和特征相关的物品,从而最终生成用户的推荐列表。因而,推荐系统的核心任务就被拆解成两部分,一个是如何为给定用户生成特征,另一个是如何根据特征找到物品。


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

678.png

这种做法有两个好处:

  • 方便增删引擎
    控制不同引擎对推荐结果的影响。
  • 可以实现推荐引擎级别的用户反馈
    每一个推荐引擎都代表了一种推荐策略,而不同的用户可能喜欢不同的推荐策略。


678.png

5.3. 推荐引擎架构


具体到每一种推荐引擎到架构,推荐引擎架构主要包括下图中到三部分:

68.png

图中A部分负责从数据库或缓存中拿到用户行为数据,通过分析不同行为,生成当前用户的特征向量,如果使用非行为特征,就不需要行为提取和分析模块了,该模块的输出就是用户特征向量。

图中B部分负责将用户的特征向量通过特征-物品相关矩阵转化为初始推荐物品列表。

图中C部分负责对初始的推荐列表进行过滤、排名等处理,从而生成该引擎的最终推荐结果。

A部分输出的特征向量一般有两种类型,一种是用户的注册信息中可以提取出来的,主要包括用户的人口统计学特征。另一种特征则主要是从用户的行为中计算出来的。


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


用户行为的种类

在一个网站中,用户可以对物品产生很多不同种类的行为,不同行为对物品特征的权重产生到影响不同,大多时候很难确定什么行为更加重要,一般的标准就是用户付出代价越大的行为权重越高。

用户行为产生的时间

一般来说,用户近期的行为比较重要,而用户很久之前的行为相对比较次要。

用户行为的次数

有时用户对一个物品会产生很多次行为。因此用户对同一个物品的同一种行为发生的次数也反映了用户对物品的兴趣,行为次数多的物品对应的特征权重越高。

物品的热门程度

如果用户对一个很热门的物品产生了行为,反之,如果用户对一个不热门的物品产生了行为,就说明了用户的个性需求。

对于B部分到特征-物品相关推荐而言。在得到用户的特征向量后,可以根据事先训练好的相关表和候选物品集合得到初始推荐列表。


离线相关表存储在数据库中,其存储格式如下:

src_id dst_id weight
特征ID 物品ID 权重

候选物品集合用于保证推荐结果只包含候选物品集合中的物品,即进行筛选。另外,特征—物品相关推荐模块除了给用户返回物品推荐列表,还需要给推荐列表中的每个推荐结果产生一个解释列表,表明这个物品是因为哪些特征推荐出来的。


在得到初步的推荐列表后,接着按照产品需求对结果进行过滤,过滤掉那些不符合要求的物品。

候选物品集合与过滤都可以对推荐物品进行筛选,那么应该如何选用呢?

一般来说,如果可供推荐的物品较少,那么可以考虑候选物品集合的方法。但是如果可供推荐的物品非常多,那么可以考虑在初始推荐列表中加上过滤模块筛选掉一些不满足条件的物品。

它们最主要的区别在于候选物集合会影响初始推荐列表的生成,而过滤模块是在初始推荐列表上进行操作的。过滤模块可以对推荐结果进行比候选物集合更加精细的控制。

一般来说,过滤模块会过滤掉以下物品:


用户已经产生过行为的物品

因为推荐系统的目的是帮助用户发现物品,因此没必要给用户推荐他已经知道的物品;

候选物品以外的物品

候选物品集合一般有两个来源,一个是产品需求,另一个是用户的选择,过滤模块需要过滤掉不满足这两个条件的物品

某些质量很差的物品

为了提高用户的体验,推荐系统需要给用户推荐质量好的物品,那么对于一些绝大多数用户反馈都很差的物品,推荐系统需要过滤掉。

经过过滤后的推荐结果可以在进行排名,一般排名模块需要包括很多不同的子模块,例如:

44444.png

新颖性排名

新颖性排名模块的目的是给用户尽量推荐他们不知道的、长尾中的物品。例如通过使用如下公式对推荐结果中热门的物品进行降权:

热门物品;

内容多样性

一是可以将推荐结果按照某种物品的内容属性分成几类,然后在每个类中都选择该类中排名最高的物品进行组合;二是可以让推荐结果尽量来自不同的特征。

时间多样性

提高时间多样性最关键的地方在于保证推荐系统对用户行为响应的实时性;其次是要在用户没有新的行为时,保证推荐结果每天都有变化,一种实现方法是:记录用户曾经看过的推荐结果,然后对当前推荐结果中将已经看过的推荐结果进行降权。

用户反馈

用户反馈模块主要通过分析用户之前和推荐结果的交互日志,预测用户会对什么样的推荐结果比较感兴趣。


6. 全书代码实现


书中有很多关于推荐系统的算法片断,作者Magic-Bubble在他的github:RecommendSystemPractice 对全书的代码做了较好的总结,可以参考实现

相关文章
|
搜索推荐 算法 数据挖掘
# 【推荐系统入门到项目实战】(三):矩阵分解和ALS算法
# 【推荐系统入门到项目实战】(三):矩阵分解和ALS算法
# 【推荐系统入门到项目实战】(三):矩阵分解和ALS算法
|
8月前
|
机器学习/深度学习 分布式计算 算法
推荐系统入门之使用ALS算法实现打分预测
本场景介绍如何使用ALS算法实现用户音乐打分预测。
725 0
|
9月前
|
搜索推荐 算法 Python
【Python入门系列】第十九篇:Python基于协同过滤推荐系统的实现
推荐系统是现代互联网平台中的重要组成部分,它可以根据用户的兴趣和行为,向其推荐个性化的内容。协同过滤是推荐系统中常用的一种方法,它基于用户的行为数据,通过计算用户之间的相似度,找到相似用户的喜好,从而给用户推荐相似的内容。
194 0
|
12月前
|
机器学习/深度学习 算法 搜索推荐
一文入门推荐系统——推荐系统实践读书笔记(中)
一文入门推荐系统——推荐系统实践读书笔记(中)
|
12月前
|
机器学习/深度学习 存储 搜索推荐
一文入门推荐系统——推荐系统实践读书笔记(上)
一文入门推荐系统——推荐系统实践读书笔记(上)
|
机器学习/深度学习 搜索推荐 算法
# 【推荐系统入门到项目实战】(五):SVD矩阵分解 -
# 【推荐系统入门到项目实战】(五):SVD矩阵分解
# 【推荐系统入门到项目实战】(五):SVD矩阵分解 -
|
数据采集 算法 搜索推荐
# 【推荐系统入门到项目实践】(四):Baseline和Slope one算法
# 【推荐系统入门到项目实践】(四):Baseline和Slope one算法
# 【推荐系统入门到项目实践】(四):Baseline和Slope one算法
|
6月前
|
搜索推荐 算法 前端开发
旅游管理与推荐系统Python+Django网页平台+协同过滤推荐算法
旅游管理与推荐系统Python+Django网页平台+协同过滤推荐算法
160 0
|
4月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
114 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
13天前
|
算法 搜索推荐 数据挖掘
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集
MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集