网站导航

《推荐系统实践》 原文笔记

#原文笔记

作者简介

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

序二

大多数学术论文都把推荐问题看做评分预测问题,而实际应用中最常见的是TopN推荐,虽然TopN推荐问题可以归约成评分问题,但并不是每种评分预测算法都能直接用来解决TopN推荐问题。

前言

一般认为,推荐系统这个研究领域源于协同过滤算法的提出。

可以按照数据分成协同过滤、内容过滤、社会化过滤,也可以按照算法分成基于邻域的算法、基于图的算法、基于矩阵分解或者概率模型的算法。

第1章 好的推荐系统

首先,本章将介绍什么是推荐系统、推荐系统的主要任务、推荐系统和分类目录以及搜索引擎的区别等

1 什么是推荐系统

用户在有明确需求的情况下,面对信息过载所采用的措施。

此时,你遇到了信息过载的问题,需要一个人或者工具来帮助你做筛选,给出一些建议供你选择。

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

推荐系统的基本任务是联系用户和物品,解决信息过载的问题

基于协同过滤(collaborative filtering)的推荐。

推荐系统就是自动联系用户和物品的一种工具

2 个性化推荐系统的应用

而个性化推荐系统在这些网站中的主要作用是通过分析大量用户行为日志,给不同用户提供不同的个性化页面展示,来提高网站的点击率和转化率。

几乎所有的推荐系统应用都是由前台的展示页面、后台的日志系统以及推荐算法系统3部分构成的。

亚马逊的推荐系统深入到了其各类产品中,其中最主要的应用有个性化商品推荐列表和相关商品的推荐列表。

推荐结果的平均分 平均分反应了推荐结果的总体质量,也代表了大部分用户对这本书的看法。

基于物品的推荐算法(item-based method),该算法给用户推荐那些和他们之前喜欢的物品相似的物品

亚马逊有两种相关商品列表,一种是包含购买了这个商品的用户也经常购买的其他商品(如图1-6所示),另一种是包含浏览过这个商品的用户经常购买的其他商品(如图1-7所示)。

亚马逊有20%~30%的销售来自于推荐系统。

在该领域成功使用推荐系统的一家公司就是Netflix,它和亚马逊是推荐系统领域最具代表性的两家公司。

有60%的用户是通过其推荐系统找到自己感兴趣的电影和视频的。

YouTube曾经做过一个实验,比较了个性化推荐的点击率和热门视频列表的点击率,实验结果表明个性化推荐的点击率是热门视频点击率的两倍。

个性化推荐的成功应用需要两个条件。第一是存在信息过载,因为如果用户可以很容易地从所有物品中找到喜欢的物品,就不需要个性化推荐了。第二是用户大部分时候没有特别明确的需求,因为用户如果有明确的需求,可以直接通过搜索引擎找到感兴趣的物品。

它们都不允许用户点歌,而是给用户几种反馈方式——喜欢、不喜欢和跳过。经过用户一定时间的反馈,电台就可以从用户的历史行为中习得用户的兴趣模型,从而使用户的播放列表越来越符合用户对歌曲的兴趣。

Pandora的算法主要基于内容,其音乐家和研究人员亲自听了上万首来自不同歌手的歌,然后对歌曲的不同特性(比如旋律、节奏、编曲和歌词等)进行标注,这些标注被称为音乐的基因

Last.fm没有使用专家标注,而是主要利用用户行为计算歌曲的相似度。

Facebook最宝贵的数据有两个,一个是用户之间的社交网络关系,另一个是用户的偏好信息。

Facebook开发了EdgeRank算法对这些会话排序,使用户能够尽量看到熟悉的好友的最新会话。

首先,互联网上的文章非常多,用户面临信息过载的问题;其次,用户很多时候并没有必须看某篇具体文章的需求,他们只是想通过阅读特定领域的文章了解这些领域的动态。

Google Reader是一款流行的社会化阅读工具。它允许用户关注自己感兴趣的人,然后看到所关注用户分享的文章。

位置是一种很重要的上下文信息,基于位置给用户推荐离他近的且他感兴趣的服务,用户就更有可能去消费。

基于位置的服务往往和社交网络结合在一起

通过分析用户阅读邮件的历史行为和习惯对新邮件进行重新排序,从而提高用户的工作效率。

个性化广告投放和狭义个性化推荐的区别是,个性化推荐着重于帮助用户找到可能令他们感兴趣的物品,而广告推荐着重于帮助广告找到可能对它们感兴趣的用户,即一个是以用户为核心,而另一个以广告为核心。目前的个性化广告投放技术主要分为3种。

3 推荐系统评测

一个完整的推荐系统一般存在3个参与方(如图1-22所示):用户、物品提供者和提供推荐系统的网站。

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

在推荐系统中,主要有3种评测推荐效果的实验方法,即离线实验(offline experiment)、用户调查(user study)和在线实验(online experiment)。

离线实验的方法一般由如下几个步骤构成:(1) 通过日志系统获得用户行为数据,并按照一定格式生成一个标准的数据集;(2) 将数据集按照一定的规则分成训练集和测试集;(3) 在训练集上训练用户兴趣模型,在测试集上进行预测;(4) 通过事先定义的离线指标评测算法在测试集上的预测结果。

离线实验的指标和实际的商业指标存在差距,比如预测准确率和用户满意度之间就存在很大差别,高预测准确率不等于高用户满意度。

AB测试是一种很常用的在线评测算法的实验方法。它通过一定的规则将用户随机分成几组,并对不同组的用户采用不同的算法,然后通过统计不同组用户的各种不同的评测指标比较不同算法,比如可以统计不同组用户的点击率,通过点击率比较不同算法的性能。

切分流量是AB测试中的关键,不同的层以及控制这些层的团队需要从一个统一的地方获得自己AB测试的流量,而不同层之间的流量应该是正交的。

首先,需要通过离线实验证明它在很多离线指标上优于现有的算法。[插图] 然后,需要通过用户调查确定它的用户满意度不低于现有的算法。[插图] 最后,通过在线的AB测试确定它在我们关心的指标上优于现有的算法。

用户作为推荐系统的重要参与者,其满意度是评测推荐系统的最重要指标。但是,用户满意度没有办法离线计算,只能通过用户调查或者在线实验获得。

更一般的情况下,我们可以用点击率、用户停留时间和转化率等指标度量用户的满意度。

预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。这个指标是最重要的推荐系统离线评测指标

评分预测的预测准确度一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算。

覆盖率(coverage)描述一个推荐系统对物品长尾的发掘能力。覆盖率有不同的定义方法,最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例。

在信息论和经济学中有两个著名的指标可以用来定义覆盖率。第一个是信息熵:

如果系统的流行度很平均,那么SA就会很小,从而基尼系数很小。如果系统物品流行度分配很不均匀,那么SA就会很大,从而基尼系数也会很大。

社会学领域有一个著名的马太效应,即所谓强者更强,弱者更弱的效应。如果一个系统会增大热门物品和非热门物品的流行度差距,让热门的物品更加热门,不热门的物品更加不热门,那么这个系统就有马太效应。

评测推荐系统是否具有马太效应的简单办法就是使用基尼系数。如果G1是从初始用户行为中计算出的物品流行度的基尼系数,G2是从推荐列表中计算出的物品流行度的基尼系数,那么如果G2 > G1,就说明推荐算法具有马太效应。

列表中有10部动作片,没有动画片;B列表中有10部动画片,没有动作片;C列表中有8部动作片和2部动画片;D列表有5部动作片和5部动画片。在这个例子中,一般认为C列表是最好的,因为它具有一定的多样性,但又考虑到了用户的主要兴趣。A满足了用户的主要兴趣,但缺少多样性,D列表过于多样,没有考虑到用户的主要兴趣。B列表即没有考虑用户的主要兴趣,也没有多样性,因此是最差的。

新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。在一个网站中实现新颖性的最简单办法是,把那些用户之前在网站中对其有过行为的物品从推荐列表中过滤掉

评测新颖度的最简单方法是利用推荐结果的平均流行度,因为越不热门的物品越可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。

通过牺牲精度来提高多样性和新颖性是很容易的,而困难的是如何在不牺牲精度的情况下提高多样性和新颖性。

如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。

同样的推荐结果,以让用户信任的方式推荐给用户就更能让用户产生购买欲,而以类似广告形式的方法推荐给用户就可能很难让用户产生购买的意愿。

首先需要增加推荐系统的透明度(transparency),而增加推荐系统透明度的主要办法是提供推荐解释。

在很多网站中,因为物品(新闻、微博等)具有很强的时效性,所以需要在物品还具有时效性时就将它们推荐给用户。

实时性的第二个方面是推荐系统需要能够将新加入系统的物品推荐给用户。

健壮性(即robust,鲁棒性)指标衡量了一个推荐系统抗击作弊的能力。

行为注入攻击(profile injection attack)

设计推荐系统时尽量使用代价比较高的用户行为。比如,如果有用户购买行为和用户浏览行为,那么主要应该使用用户购买行为,因为购买需要付费,所以攻击购买行为的代价远远大于攻击浏览行为。

一般来说,最本质的商业目标就是平均一个用户给公司带来的盈利。

设计推荐系统时需要考虑最终的商业目标,而网站使用推荐系统的目的除了满足用户发现内容的需求,也需要利用推荐系统加快实现商业上的指标。

如何优化离线指标来提高在线指标是推荐系统研究的重要问题

对于可以离线优化的指标,我个人的看法是应该在给定覆盖率、多样性、新颖性等限制条件下,尽量优化预测准确度

用户维度 主要包括用户的人口统计学信息、活跃度以及是不是新用户等。
 物品维度 包括物品的属性信息、流行度、平均分以及是不是新加入的物品等。
 时间维度 包括季节,是工作日还是周末,是白天还是晚上等。

第2章 利用用户行为数据

首先,现在的自然语言理解技术很难理解用户用来描述兴趣的自然语言;其次,用户的兴趣是不断变化的,但用户不会不停地更新兴趣描述;最后,很多时候用户并不知道自己喜欢什么,或者很难用语言描述自己喜欢什么。

用户的行为不是随机的,而是蕴含着很多模式。

这个故事说明用户行为数据中蕴涵着很多不是那么显而易见的规律,而个性化推荐算法的任务就是通过计算机去发现这些规律,从而为产品的设计提供指导,提高用户体验。

基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为协同过滤算法。

1 用户行为数据简介

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

用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)

隐性反馈行为指的是那些不能明确反应用户喜好的行为。最具代表性的隐性反馈行为就是页面浏览行为。

显性反馈数据和隐性反馈数据的比较

正反馈指用户的行为倾向于指用户喜欢该物品,而负反馈指用户的行为倾向于指用户不喜欢该物品。

它将一个用户行为表示为6部分,即产生行为的用户和行为的对象、行为的种类、产生行为的上下文、行为的内容和权重。

无上下文信息的隐性反馈数据集 每一条行为记录仅仅包含用户ID和物品ID。Book-Crossing就是这种类型的数据集。

2 用户行为分析

互联网上的很多数据分布都满足一种称为Power Law的分布,这个分布在互联网领域也称长尾分布。

物品的流行度指对物品产生过行为的用户总数

从而证明不管是物品的流行度还是用户的活跃度,都近似于长尾分布,特别是物品流行度的双对数曲线,非常接近直线。

一般认为,新用户倾向于浏览热门的物品,因为他们对网站还不熟悉,只能点击首页的热门物品,而老用户会逐渐开始浏览冷门的物品。

基于用户的协同过滤算法 这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品。
 基于物品的协同过滤算法 这种算法给用户推荐和他之前喜欢的物品相似的物品。

3 实验设计和算法评测

TopN推荐的任务是预测用户会不会对某部电影评分,而不是预测用户在准备对某部电影评分的前提下会给电影评多少分。

为了保证评测指标并不是过拟合的结果,需要进行M次实验,并且每次都使用不同的测试集。然后将M次实验测出的评测指标的平均值作为最终的评测指标。

召回率描述有多少比例的用户—物品评分记录包含在最终的推荐列表中,而准确率描述最终的推荐列表中有多少比例是发生过的用户—物品评分记录。

覆盖率反映了推荐算法发掘长尾的能力,覆盖率越高,说明推荐算法越能够将长尾中的物品推荐给用户。

我们还需要评测推荐的新颖度,这里用推荐列表中物品的平均流行度度量推荐结果的新颖度。如果推荐出的物品都很热门,说明推荐的新颖度较低,否则说明推荐结果比较新颖。

4 基于邻域的算法

基于邻域的算法分为两大类,一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法。

基于用户的协同过滤算法是推荐系统中最古老的算法。可以不夸张地说,这个算法的诞生标志了推荐系统的诞生。

(1) 找到和目标用户兴趣相似的用户集合。(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。

可以首先建立物品到用户的倒排表,对于每个物品都保存对该物品产生过行为的用户列表

UserCF只有一个重要的参数K,即为每个用户选出K个和他兴趣最相似的用户,然后推荐那K个用户感兴趣的物品。

Random算法每次都随机挑选10个用户没有产生过行为的物品推荐给当前用户,MostPopular算法则按照物品的流行度给用户推荐他没有产生过行为的物品中最热门的10个物品。

流行度 可以看到,在3个数据集上K 越大则UserCF推荐结果就越热门。这是因为K 决定了UserCF在给你做推荐时参考多少和你兴趣相似的其他用户的兴趣,那么如果K 越大,参考的人越多,结果就越来越趋近于全局热门的物品。

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

这说明在计算用户兴趣相似度时考虑物品的流行度对提升推荐结果的质量确实有帮助。

基于物品的协同过滤(item-based collaborative filtering)算法是目前业界应用最多的算法

ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。

基于物品的协同过滤算法可以利用用户的历史行为给推荐结果提供推荐解释

基于物品的协同过滤算法主要分为两步。
(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。

和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。

ItemCF的一个优势就是可以提供推荐解释,即利用用户历史上喜欢的物品为现在的推荐结果进行解释。

归一化的好处不仅仅在于增加推荐的准确度,它还可以提高推荐的覆盖率和多样性。

一般来说,热门的类其类内物品相似度一般比较大。如果不进行归一化,就会推荐比较热门的类里面的物品,而这些物品也是比较热门的。因此,推荐的覆盖率就比较低。相反,如果进行相似度的归一化,则可以提高推荐系统的覆盖率。

UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度,而ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。

UserCF和ItemCF优缺点的对比

两个不同领域的最热门物品之间往往具有比较高的相似度。

5 隐语义模型

LFM(latent factor model)隐语义模型逐渐成为推荐系统领域耳熟能详的名词

它的核心思想是通过隐含特征(latent factor)联系用户兴趣和物品。

还有一种方法,可以对书和物品的兴趣进行分类。对于某个用户,首先得到他的兴趣分类,然后从分类中挑选他可能喜欢的物品。

隐含语义分析技术因为采取基于用户行为统计的自动聚类

pLSA、LDA、隐含类别模型(latent class model)、隐含主题模型(latent topic model)、矩阵分解(matrix factorization)

要计算这两个参数,需要一个训练集,对于每个用户u,训练集里都包含了用户u喜欢的物品和不感兴趣的物品,通过学习这个数据集,就可以获得上面的模型参数。

隐性反馈数据集,这种数据集的特点是只有正样本(用户喜欢什么物品),而没有负样本(用户对什么物品不感兴趣)。

我们发现对负样本采样时应该遵循以下原则。
 对每个用户,要保证正负样本的平衡(数目相似)。
 对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品。

LFM确实可以实现通过用户行为将物品聚类的功能。

在LFM中,重要的参数有4个:[插图] 隐特征的个数F;[插图] 学习速率alpha;[插图] 正则化参数lambda;[插图] 负样本/正样本比例 ratio。

当数据集非常稀疏时,LFM的性能会明显下降,甚至不如UserCF和ItemCF的性能。

理论基础 LFM具有比较好的理论基础,它是一种学习方法,通过优化一个设定的指标建立最优的模型。基于邻域的方法更多的是一种基于统计的方法,并没有学习过程。

6 基于图的模型

而相关性高的一对顶点一般具有如下特征:
 两个顶点之间有很多路径相连;
 连接两个顶点之间的路径长度都比较短;
 连接两个顶点之间的路径不会经过出度比较大的顶点。

基于随机游走的PersonalRank算法

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

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

1 冷启动问题简介

利用用户注册时提供的年龄、性别等数据做粗粒度的个性化。

2 利用用户注册信息

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

使用人口统计学信息相对于随机推荐能够获得更好的推荐效果

(1) 获取用户的注册信息;(2) 根据用户的注册信息对用户分类;(3) 给用户推荐他所属分类中用户喜欢的物品。

给用户推荐热门物品并不是推荐系统的主要任务,推荐系统应该帮助用户发现他们不容易发现的物品。

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

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

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

4 利用物品的内容信息

物品冷启动在新闻网站等时效性很强的网站中非常重要,因为那些网站中时时刻刻都有新加入的物品,而且每个物品必须能够在第一时间展现给用户,否则经过一段时间后,物品的价值就大大降低了。

UserCF算法对物品冷启动问题并不非常敏感

解决第一推动力最简单的方法是将新的物品随机展示给用户,但这样显然不太个性化,因此可以考虑利用物品的内容信息,将新物品先投放给曾经喜欢过和它内容相似的其他物品的用户。

我们只能利用物品的内容信息计算物品相关表,并且频繁地更新相关表(比如半小时计算一次)。

一般来说,物品的内容可以通过向量空间模型表示,该模型会将物品表示成一个关键词向量。

向量空间模型的优点是简单,缺点是丢失了一些信息,比如关键词之间的关系信息。不过在绝大多数应用中,向量空间模型对于文本的分类、聚类、相似度计算已经可以给出令人满意的结果。

首先通过建立关键词—物品的倒排表加速这一计算过程

这主要是因为内容过滤算法忽视了用户行为,从而也忽视了物品的流行度以及用户行为中所包含的规律,所以它的精度比较低,但结果的新颖度却比较高。

如果用户的行为强烈受某一内容属性的影响,那么内容过滤的算法还是可以在精度上超过协同过滤算法的

如何建立文章、话题和关键词的关系是话题模型(topic model)研究的重点。

5 发挥专家的作用

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

第4章 利用用户标签数据

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

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

1 UGC标签系统的代表应用

标签系统的最大优势在于可以发挥群体的智能,获得对物品内容信息比较准确的关键词描述,而准确的内容信息是提升个性化推荐系统性能的重要资源。

2 标签系统中的推荐问题

标签系统中的推荐问题主要有以下两个。
 如何利用用户打标签的行为为其推荐物品(基于标签的推荐)?
 如何在用户给物品打标签时为其推荐适合该物品的标签(标签推荐)?

首先是社会维度,有些用户标注是给内容上传者使用的(便于上传者组织自己的信息),而有些用户标注是给广大用户使用的(便于帮助其他用户找到信息)。另一个维度是功能维度,有些标注用于更好地组织内容,方便用户将来的查找,而另一些标注用于传达某种信息,比如照片的拍摄时间和地点等。

表明物品是什么 比如是一只鸟,就会有“鸟”这个词的标签;是豆瓣的首页,就有一个标签叫“豆瓣”;是乔布斯的首页,就会有个标签叫“乔布斯”。[插图]表明物品的种类 比如在Delicious的书签中,表示一个网页类别的标签包括article(文章)、blog(博客)、 book(图书)等。[插图]表明谁拥有物品 比如很多博客的标签中会包括博客的作者等信息。[插图]表达用户的观点 比如用户认为网页很有趣,就会打上标签funny(有趣),认为很无聊,就会打上标签boring(无聊)。[插图]用户相关的标签 比如my favorite(我最喜欢的)、my comment(我的评论)等。[插图]用户的任务 比如to read(即将阅读)、job search(找工作)等。

3 基于标签的推荐系统

一个用户标签行为的数据集一般由一个三元组的集合表示,其中记录(u, i, b) 表示用户u给物品i打上了标签b。

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

适当惩罚热门标签和热门物品,在增进推荐结果个性化的同时并不会降低推荐结果的离线精度。

标签扩展的本质是对每个标签找到和它相似的标签,也就是计算标签之间的相似度。

如果认为同一个物品上的不同标签具有某种相似度,那么当两个标签同时出现在很多物品的标签集合中时,我们就可以认为这两个标签具有较大的相似度。

不是所有标签都能反应用户的兴趣。比如,在一个视频网站中,用户可能对一个视频打了一个表示情绪的标签,比如“不好笑”,但我们不能因此认为用户对“不好笑”有兴趣,并且给用户推荐其他具有“不好笑”这个标签的视频

一般来说有如下标签清理方法:[插图] 去除词频很高的停止词;[插图] 去除因词根不同造成的同义词,比如recommender system和recommendation system;[插图] 去除因分隔符造成的同义词,比如collaborative_filtering和collaborative-filtering。

基于标签的推荐其最大好处是可以利用标签做推荐解释

客观事实类的标签优于主观感受类标签。

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

4 给用户推荐标签

第0种方法就是给用户u推荐整个系统里最热门的标签

第1种方法就是给用户u推荐物品i上最热门的标签

第2种方法是给用户u推荐他自己经常使用的标签

第3种算法是前面两种的融合(这里记为HybridPopularTags),该方法通过一个系数将上面的推荐结果线性加权,然后生成最终的推荐结果。

第一个思路是从物品的内容数据中抽取关键词作为标签。

5 扩展阅读

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

第5章 利用上下文信息

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

1 时间上下文信息

在给定时间信息后,推荐系统从一个静态系统变成了一个时变的系统,而用户行为数据也变成了时间序列。

相隔T天系统物品流行度向量的平均相似度

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

推荐系统每天推荐结果的变化程度被定义为推荐系统的时间多样性。时间多样性高的推荐系统中用户会经常看到不同的推荐结果。

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

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

物品相似度 用户在相隔很短的时间内喜欢的物品具有更高相似度。

一般来说,图上两个相关性比较高的顶点一般具有如下特征:[插图] 两个顶点之间有很多路径相连;[插图] 两个顶点之间的路径比较短;[插图] 两个顶点之间的路径不经过出度比较大的顶点。

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

以Facebook为代表的社交网络称为社会图谱(social graph),而以Twitter为代表的社交网络称为兴趣图谱(interest graph)。

3 基于社交网络的推荐

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

熟悉度可以用用户之间的共同好友比例来度量。

社会化推荐系统推荐结果的用户满意度明显高于主要基于协同过滤算法的几个真实推荐系统。

如果一个会话被你熟悉的好友最近产生过重要的行为,它就会有比较高的权重。

综合考虑用户的社会兴趣和个人兴趣对于提高用户满意度是有帮助的。

4 给用户推荐好友

好友推荐系统的目的是根据用户现有的好友、用户的行为记录给用户推荐新的好友,从而增加整个社交网络的稠密程度和社交网站用户的活跃度。

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

最简单的好友推荐算法是给用户推荐好友的好友。

5 扩展阅读

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

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

6 外围架构

推荐系统要发挥强大的作用,除了推荐系统本身,主要还依赖于两个条件——界面展示和用户行为数据

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

从实时存取的角度上看,购买、收藏、评论、评分、分享等行为都是需要实时存取的,因为只要用户有了这些行为,界面上就需要体现出来,比如用户购买了商品后,用户的个人购买列表中就应立即显示用户购买的商品。而有些行为,比如浏览网页的行为和搜索行为并不需要实时存取。

一般来说,需要实时存取的数据存储在数据库和缓存中,而大规模的非实时地存取数据存储在分布式文件系统(如HDFS)中。

7 推荐系统架构

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

推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一类特征和一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或者优先级合并、排序然后返回(如图7-8所示)。

8 推荐引擎的架构

一般的标准就是用户付出代价越大的行为权重越高

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

用户已经产生过行为物品

新颖性排名模块的目的是给用户尽量推荐他们不知道的、长尾中的物品。

第一种提高多样性的方法是将推荐结果按照某种物品的内容属性分成几类,然后在每个类中都选择该类中排名最高的物品组合成最终的推荐列表。

第二种提高推荐结果多样性的方法是控制不同推荐结果的推荐理由出现的次数。

时间多样性主要是为了保证用户不要每天来推荐系统都看到同样的推荐结果

记录用户每次登陆推荐系统看到的推荐结果。
 将这些结果发回日志系统。这种数据不需要实时存储,只要能保证小于一天的延时就足够了。
 在用户登录时拿到用户昨天及之前看过的推荐结果列表,从当前推荐结果中将用户已经看到的推荐结果降权。

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

如果推荐系统的目标是提高用户对推荐结果的点击率,那么可以利用点击模型(click model)预测用户是否会点击推荐结果。

后记

(1) 确定你真的需要推荐系统。推荐系统只有在用户遇到信息过载时才必要。