《推荐系统实践》

前言

目录

第 1 章 好的推荐系统
1.1 什么是推荐系统
1.2 个性化推荐系统的应用
1.3 推荐系统测评

** 第 2 章 利用用户行为数据**
2.1 用户行为数据简介
2.2 用户行为分析

第 3 章 推荐系统冷启动问题
3.1 冷启动问题简介
3.2 利用用户注册信息
3.3 选择何时的物品启动用户的兴趣
3.4 利用物品的内容信息
3.5 发挥专家的作用

第 4 章 利用用户标签数据
4.1 UGC 标签系统的代表应用
4.2 标签系统中的推荐问题
4.3 基于标签的推荐系统
4.4 给用户推荐标签

第 5 章 利用上下文信息
5.1 时间
5.2 地点

第 6 章 利用社交网络数据
6.1 获取社交网络数据的途径
6.2 社交网络数据简介
6.3 基于社交网络的推荐
6.4 给用户推荐好友
6.5 拓展阅读

第 7 章 推荐系统实例

7.1 外围架构
7.2 推荐系统架构
7.3 推荐引擎架构

第 1 章 好的推荐系统

1.1 什么是推荐系统

背景:这个时代,无论是信息消费者还是信息生产者都遇到了很大的挑战:对于信息消费者,从大量信息中找到自己感兴趣的信息是一件非常困难的事情;对于信息生产者,让自己生产的信息脱颖而出,受到广大用户的关注,也是一件非常困难的事情。

推荐系统的任务就是自动联系用户和信息,一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息生产者的双赢。

分类目录、搜索引擎,也是解决用户面对信息过载,快速查询目标信息的解决方案。前者只能涵盖有限数量的内容,而后者要求用户对于目标内容非常清晰。推荐系统通过分析用户历史行为,给用户的兴趣建模,从而能主动满足用户没有明确目的时,帮助用户发现他们感兴趣的内容。

**推荐系统的优势:**主流商品往往代表了绝大多数用户的需求,而长尾商品往往代表了一小部分用户的个性化需求。因此,如果要通过发掘长尾提高销售额,就必须充分研究用户的兴趣,而这正是个性化推荐系统主要解决的问题。

常规处理方式:社会化推荐(好友给自己推荐);自主搜索;榜单查看 -
基于相似用户行为查看(协同过滤推荐)

1.2 个性化推荐系统的应用

广泛利用推荐系统的领域包括电子商务、电影和视频、音乐、社交网络、阅读、基于位置的服务、个性化邮件和广告等,几乎所有的推荐系统应用都是由前台的展示页面、后台的日志系统以及推荐算法系统3部分构成的。
通常包含内容:
推荐结果的标题、缩略图等内容属性(what)
推荐评分(rank)
推荐的原因(why)
用户态度与反馈(feedback)

形式:猜你喜欢,相关推荐,热门推荐,好友推荐,附近推荐,

1.3 推荐系统测评

好的推荐系统设计,能够让推荐系统本身收集到高质量的用户反馈,不断完善推荐的质量,增加用户和网站的交互,提高网站的收入。

好的推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不那么容易发现的东西。

一个推荐系统,通常可以通过这类指标进行测评,如准确度、覆盖度、新颖度、惊喜度、信任度、透明度等

第 2 章 利用用户行为数据

2.1 用户行为数据简介

听其言,观其行”,也就是说可以通过用户留下的文字和行为了解用户兴趣和需求。基于用户行为数据的应用其实早在个性化推荐系统诞生之前就已经在互联网上非常流行了,其中最典型的就是各种各样的排行榜。学术界一般将这种类型的算法称为协同过滤算法。顾名思义,协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。

大量原始日志 (raw log)按照用户行为汇总为 会话日志(session log),每个会话对应一次用户行为和对应服务。可以展示的,则为展示日志(impression log)用于记录查询和返回结果。如果用户点击了某个结果,这个点击信息会被服务器截获并存储在点击日志中。一个并行程序会周期性地展示日志和点击日志,得到的绘画日志中每个消息是一个用户提交的查询,得到的结果,以及点击。

2.2 用户行为分析

用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)。显性反馈行为包括用户明确表示对物品喜好的行为。和显性反馈行为相对应的是隐性反馈行为。隐性反馈行为指的是那些不能明确反应用户喜好的行为。最具代表性的隐性反馈行为就是页面浏览行为。

用户行为的统一表示:
用户唯一标识 user id;
产生行为的对象唯一标识 item id;
用户行为种类 behavior type;
产生行为的上下文 time place;
行为的权重 behavior weight (视频的观看市场,打分分数等)
行为的内容 behavior content (文本、标签等)

基于领域的方法主要包含
基于用户的协同过滤算法:给用户推荐和他兴趣相似的其他用户喜欢的物品。
基于物品的协同过滤算法:给用户推荐和他之前喜欢的物品相似的物品。

第 3 章 推荐系统冷启动问题

3.1 冷启动问题简介

应用背景:没有大量的用户数据,在开始阶段就希望有个性化推荐的应用网站。如何在没有大量用户数据的情况下设计个性化推荐系统并且让用户对推荐结果满意从而愿意使用推荐系统,就是冷启动的问题。

冷启动问题(cold start)主要分3类:
用户冷启动主要解决如何给新用户做个性化推荐的问题。当新用户到来时,我们没有他的行为数据,所以也无法根据他的历史行为预测其兴趣,从而无法借此给他做个性化推荐。
物品冷启动主要解决如何将新的物品推荐给可能对它感兴趣的用户这一问题。
系统冷启动主要解决如何在一个新开发的网站上(还没有用户,也没有用户行为,只有一些物品的信息)设计个性化推荐系统,从而在网站刚发布时就让用户体验到个性化推荐服务这一问题。

1、提供非个性化的推荐,最简单例子就是热门排行榜,我们可以给用户推荐热门排行榜,然后等到用户数据收集到一定的时候,再切换为个性化推荐。
2、利用用户注册时提供的年龄、性别等数据做粗粒度的个性化。
利用用户的社交网络账号登录(需要用户授权),导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的物品。
3、要求用户在登录时对一些物品进行反馈,收集用户对这些物品的兴趣信息,然后给用户推荐那些和这些物品相似的物品。
4、对于新加入的物品,可以利用内容信息,将它们推荐给喜欢过和它们相似的物品的用户。
5、在系统冷启动时,可以引入专家的知识,通过一定的高效方式迅速建立起物品的相关度表。

3.2 利用用户注册信息

人口统计学信息 包括用户的年龄、性别、职业、民族、学历和居住地。
用户兴趣的描述 有一些网站会让用户用文字描述他们的兴趣。
从其他网站导入的用户站外行为数据 比如用户通过豆瓣、新浪微博的账号登录,就可以在得到用户同意的情况下获取用户在豆瓣或者新浪微博的一些行为数据和社交网络数据。

基于注册信息的个性化推荐算法,基本流程如下:
1、获取用户的注册信息;
2、根据用户的注册信息对用户进行分类;
3、给用户推荐他所属分类中用户喜欢的物品

3.3 选择合适的物品启动用户的兴趣

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

一般来说,能够用来启动用户兴趣的物品需要具有以下特点:
1、比较热门
如果要让用户对一个物品进行反馈,前提是用户知道这个物品是什么东西。以电影为例,如果一开始让用户进行反馈的电影都很冷门,而用户不知道这些电影的情节和内容,也就无法对它们做出准确的反馈。
2、具有代表性和区分性
3、启动物品集合需要有多样性

3.4 利用物品的内容信息

物品冷启动需要解决的问题是如何将新加入的物品推荐给对它感兴趣的用户。UserCF和ItemCF算法。

首先需要指出的是,UserCF算法对物品冷启动问题并不非常敏感。因为,UserCF在给用户进行推荐时,会首先找到和用户兴趣相似的一群用户,然后给用户推荐这一群用户喜欢的物品。解决第一推动力最简单的方法是将新的物品随机展示给用户,但这样显然不太个性化,因此可以考虑利用物品的内容信息,将新物品先投放给曾经喜欢过和它内容相似的其他物品的用户。

ItemCF算法会每隔一段时间利用用户行为计算物品相似度表(一般一天计算一次),在线服务时ItemCF算法会将之前计算好的物品相关度矩阵放在内存中。因此,当新物品加入时,内存中的物品相关表中不会存在这个物品,从而ItemCF算法无法推荐新的物品。解决这一问题的办法是频繁更新物品相似度表,但基于用户行为计算物品相似度是非常耗时的事情,主要原因是用户行为日志非常庞大。而且,新物品如果不展示给用户,用户就无法对它产生行为,通过行为日志计算是计算不出包含新物品的相关矩阵的。

3.5 发挥专家的作用

很多推荐系统在建立时,既没有用户的行为数据,也没有充足的物品内容信息来计算准确的物品相似度。那么,为了在推荐系统建立时就让用户得到比较好的体验,很多系统都利用专家进行标注。

4.1 UGC 标签系统的代表应用

常见三种推荐方式
1、利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品,这就是前面提到的基于物品的算法。
2、利用和用户兴趣相似的其他用户,给用户推荐那些和他们兴趣爱好相似的其他用户喜欢的物品,这是前面提到的基于用户的算法。
3、通过一些特征(feature)联系用户和物品,给用户推荐那些具有用户喜欢的特征的物品。

根据给物品打标签的人的不同,标签应用一般分为两种:一种是让作者或者专家给物品打标签;另一种是让普通用户给物品打标签,也就是UGC(User Generated Content,用户生成的内容)的标签应用。UGC的标签系统是一种表示用户兴趣和物品语义的重要方式。当一个用户对一个物品打上一个标签,这个标签一方面描述了用户的兴趣,另一方面则表示了物品的语义,从而将用户和物品联系了起来。

4.2 标签系统中的推荐问题

首先是社会维度,有些用户标注是给内容上传者使用的(便于上传者组织自己的信息),
而有些用户标注是给广大用户使用的(便于帮助其他用户找到信息)

4.3 基于标签的推荐系统

用户对标签的兴趣对帮助用户理解为什么给他推荐某个物品更有帮助;
用户对标签的兴趣和物品标签相关度对于帮助用户判定自己是否喜欢被推荐物品具有同样的作用;
物品标签相关度对于帮助用户判定被推荐物品是否符合他当前的兴趣更有帮助;
客观事实类标签相比主观感受类标签对用户更有作用。

4.4 给用户推荐标签

当用户浏览某个物品时,标签系统非常希望用户能够给这个物品打上高质量的标签,这样才能促进标签系统的良性循环。
给用户推荐标签的好处?
1、方便用户输入标签
2、提高标签质量
同一个语义不同的用户可能用不同的词语来表示。这些同义词会使标签的词表变得很庞大,而且会使计算相似度不太准确。而使用推荐标签时,我们可以对词表进行选择,首先保证词表不出现太多的同义词,同时保证出现的词都是一些比较热门的、有代表性的词。

如何给用户推荐标签?
1、给用户u推荐整个系统里最热门的标签(这里将这个算法称为PopularTags)
2、给用户推荐物品i上最热门的标签
3、给用户推荐他自己常适用的标签
4、融合前2-3种

标签在推荐系统中的应用主要集中在两个问题上,一个是如何利用用户打标签的行为给用户推荐物品,另一个是如何给用户推荐标签。

第 5 章 利用上下文信息

时间、地点、心情等因素对于用户访问推荐系统同样具有非常重要的影响。讨论如何将时间信息和地点信息建模到推荐算法中,从而让推荐系统能够准确预测用户在某个特定时刻及特定地点的兴趣。

5.1 时间

时间信息对用户兴趣的影响表现在以下几个方面
1、用户兴趣是变化的
2、物品也是有生命周期的,不同系统的物品具有不同的生命周期,比如新闻的生命周期很短暂,而电影的生命周期相对较长。
3、季节效应

研究一个时变系统,需要首先研究这个系统的时间特性

**数据集每天独立用户数的增长情况 **
有些网站处于快速增长期,它们每天的独立用户数都在线性(甚至呈指数级)增加。而有些网站处于平稳期,每天的独立用户数都比较平稳。还有一些网站处于衰落期,每天的用户都在流失。

系统的物品变化情况
有些网站,比如新闻网站,每天都会出现大量新的新闻,而每条热门的新闻其时间周期都不会太长,今天热门的新闻也许明天就被人忘记了。

用户访问情况 有些网站用户来一次就永远不来了,有些网站用户每周来一次,而有些网站用户每天都来。为了度量这些特性,我们可以统计用户的平均活跃天数,同时也可以统计相隔T天来系统的用户的重合度。

物品的生存周期和系统的时效性
相隔T天系统物品流行度向量的平均相似度
推荐系统的实时性
一个实时的推荐系统需要能够实时响应用户新的行为,让推荐列表不断变化,从而满足用户不断变化的兴趣。

实现推荐系统的实时性除了对用户行为的存取有实时性要求,还要求推荐算法本身具有实时性,而推荐算法本身的实时性意味着:

实时推荐系统不能每天都给所有用户离线计算推荐结果,然后在线展示昨天计算出来的结果。所以,要求在每个用户访问推荐系统时,都根据用户这个时间点前的行为实时计算推荐列表。

推荐算法需要平衡考虑用户的近期行为和长期行为,既要让推荐列表反应出用户近期行为所体现的兴趣变化,又不能让推荐列表完全受用户近期行为的影响,要保证推荐列表对用户兴趣预测的延续性。

推荐算法的时间多样性
在证明了时间多样性对推荐系统的正面意义之后,下面的问题就是如何在不损失精度的情况下提高推荐结果的时间多样性。

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

对于第一步,又可以分成两种情况进行分析。
第一,是从推荐系统的实时性角度分析。
有些推荐系统会每天离线生成针对所有用户的推荐结果,然后在线直接将这些结果展示给用户。这种类型的系统显然无法做到在用户有了新行为后及时调整推荐结果。
第二,即使是实时推荐系统,由于使用的算法不同,也具有不同的时间多样性。对于不同算法的时间多样性。

如何保证给用户的推荐结果具有一定的时间多样性呢?
在生成推荐结果时加入一定的随机性。比如从推荐列表前20个结果中随机挑选10个结果展示给用户,或者按照推荐物品的权重采样10个结果展示给用户。

记录用户每天看到的推荐结果,然后在每天给用户进行推荐时,对他前几天看到过很多次的推荐结果进行适当地降权。

每天给用户使用不同的推荐算法。可以设计很多推荐算法,比如协同过滤算法、内容过滤算法等,然后在每天用户访问推荐系统时随机挑选一种算法给他进行推荐。

5.2 地点

除了时间,地点作为一种重要的空间特征,也是一种重要的上下文信息。不同地区的用户兴趣有所不同,用户到了不同的地方,兴趣也会有所不同。在中关村逛街逛累了,希望寻找美食时,你可能会考虑几个因素,包括距离、价位、口味和口碑,而在这些因素里,最重要的因素可能是距离。

同时,它将用户也分成两类,一类是有空间属性的,比如给出了用户现在的地址(国家、城市、邮编等),另一类用户并没有相关的空间属性信息。它使用的数据集有3种不同的形式。

LARS在计算用户u对物品i的兴趣度RecScore(u, i)时,首先对用户每一个曾经评过分的物品(一般是餐馆、商店、景点),找到和它距离小于一个阈值d 的所有其他物品,然后将这些物品的集合作为候选集,然后再利用上面的公式计算最终的RecScore

第 6 章 利用社交网络数据

美国著名的第三方调查机构尼尔森调查了影响用户相信某个推荐的因素。调查结果显示,90%的用户相信朋友对他们的推荐,70%的用户相信网上其他用户对广告商品的评论。从该调查可以看到,好友的推荐对于增加用户对推荐结果的信任度非常重要。

第一种广告的推荐理由没有社会化信息,仅仅是表示该品牌受到了51930个用户的关注,
而第二种广告的推荐理由是用户的某些好友关注了这个广告。
第三种广告比较特别,它是在用户的好友关注该品牌时,就在用户的信息流中加入一条信息,告诉用户他的某个好友关注了一个品牌。

6.1 获取社交网络数据的途径

1、获取社交网络数据的途径:电子邮件;用户注册信息;位置数据;论坛讨论组;即时聊天工具;社交网站

6.2 社交网络数据简介

3 种不同的社交网络数据:
1、双向确认的社交网络数据;
2、单向关注的社交网络数据;
3、基于社区的社交网络数据;

6.3 基于社交网络的推荐

社会化推荐之所以受到很多网站的重视,是缘于如下优点。
1、好友推荐可以增加推荐的信任度
2、社交网络可以解决冷启动问题,

测试基于社交关系的推荐
利用一个虚假的邮箱注册推荐系统,从而保证这些新账号没有任何历史行为。
利用新注册的账号给电影、图书进行评分。
查看推荐列表。
如果一开始的推荐列表中没有符合用户兴趣的物品,用户将被要求从该网站中搜索到至少一个令他们感兴趣的物品,如果实在找不到,可以停止搜索。
回答调查问卷

信息流推荐是社会化推荐领域的新兴话题,它主要针对Twitter和Facebook这两种社交网站。在这两种社交网站中,每个用户都有一个信息墙,展示了用户好友最近的言论。这个信息墙无疑已经是个性化的,但是里面还是夹杂了很多垃圾信息。

一个会话被你熟悉的好友最近产生过重要的行为,它就会有比较高的权重。
信息路推荐中社会兴趣和个性化兴趣之间的关系:(排名算法中考虑了如下因素)
1、会话的长度
2、话题相关性
3、用户的熟悉程度

6.4 给用户推荐好友

1、基于内容
2、基于共同兴趣的好友推荐
3、基于社交网络图的好友推荐
4、基于用户调查的好友推荐算法对比

6.5 拓展阅读

六度原理讲的是社会中任意两个人都可以通过不超过6个人的路径相互认识,如果转化为图的术语,就是社交网络图的直径为6。

社交网络研究中有两个最著名的问题。第一个是如何度量人的重要性,也就是社交网络顶点的中心度(centrality),第二个问题是如何度量社交网络中人和人之间的关系,也就是链接预测。

推荐系统架构

7.1 外围架构

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

实时存取的角度上看,购买、收藏、评论、评分、分享等行为都是需要实时存取的,因为只要用户有了这些行为,界面上就需要体现出来,比如用户购买了商品后,用户的个人购买列表中就应立即显示用户购买的商品。有些行为不需要显示。数据能否实时存取在推荐系统中非常重要,因为推荐系统的实时性主要依赖于能否实时拿到用户的新行为。只有快速拿到大量用户的新行为,推荐系统才能够实时地适应用户当前的需求,给用户进行实时推荐。

7.2 推荐系统架构

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

推荐系统的核心任务就被拆解成两部分,一个是如何为给定用户生成特征,另一个是如何根据特征找到物品。

用户特征种类
人口统计学特征 包括用户的年龄、性别、国籍和民族等用户在注册时提供的信息。
用户的行为特征 包括用户浏览过什么物品、收藏过什么物品、给什么物品打过什么样的分数等用户行为相关的特征。同时,用户行为从时间上也可以分为用户近期的行为和长期的行为
用户的话题特征可以根据用户的历史行为利用话题模型(topic model)将电视剧和电影聚合成不同的话题,并且计算出每个用户对什么话题感兴趣。

推荐协同的推荐任务:
最新加入的物品推荐给用户。
将商业上需要宣传的物品推荐给用户。
** 给用户推荐不同种类的物品,**比如亚马逊会推荐图书、音像、电子产品和服装等
给用户混合推荐有时需要将图书和音像制品放到一个推荐列表中展示给用户
对于不同的产品推荐不同新颖度的物品
考虑到用户访问推荐系统的上下文

7.3 推荐引擎架构

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

1、可以方便地增加/删除引擎
2、可以实现推荐引擎级别的用户反馈
我们可以将每一种策略都设计成一个推荐引擎,然后通过分析用户对推荐结果的反馈了解用户比较喜欢哪些引擎推荐出来的结果,从而对不同的用户给出不同的引擎组合权重

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

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

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

生成用户特征向量
1、用户行为种类。
在一个网站中,用户可以对物品产生很多不同种类的行为。用户可以浏览物品、单击物品的链接、收藏物品、给物品打分、购买物品、评论物品、给物品打上不同的标签、和好友分享物品、搜索不同的关键词等。这些行为都会对物品特征的权重产生影响,但不同行为的影响不同,大多时候很难确定什么行为更加重要,一般的标准就是用户付出代价越大的行为权重越高。

2、用户行为产生的时间,如:最近一次消费
3、用户行为的次数,如:对一个物品产生很多次行为
4、物品的热门程度

过滤模块
得到初步的推荐列表后,还不能把这个列表展现给用户,首先需要按照产品需求对结果进行过滤,过滤掉那些不符合要求的物品。
1、用户已经使用过的产品
2、候选物品意外的物品
3、某些质量很差的物品

排名模块
经过过滤后的推荐结果直接展示给用户一般也没有问题,但如果对它们进行一些排名,则可以更好地提升用户满意度,一般排名模块需要包括很多不同的子模块,下面将对不同的模块分别加以介绍。
1、新颖性排名
2、多样性
3、时间多样性
4、用户反馈(基于用户行为产生的排名序列)