推荐系统实践读书笔记(一)

第1章 好的推荐系统

在研究如何设计推荐系统前,了解什么是好的推荐系统至关重要。只有了解了优秀的推荐系统的特征,我们才能在设计推荐系统时根据实际情况进行取舍。

本章分3个步骤回答这个问题:

  1. 首先介绍了什么是推荐系统、推荐系统的主要任务、推荐系统和分类目录以及搜索引擎的区别等;
  2. 然后按照不同领域分门别类地介绍目前业界常见的个性化推荐应用;
  3. 最后介绍推荐系统的评测,通过介绍评测指标给出“好”的定义,从而最终解答“什么是好的推荐系统”这个问题。

1.1 什么是推荐系统

推荐系统产生的背景

随着信息技术和互联网的发展,人们逐渐从信息匮乏的时代走入了信息过载(overload)的时代。在这个时代,无论是信息消费者还是信息产生着都遇到了很大的挑战:作为信息消费者,如何从大量信息中找到自己感兴趣的信息是一件非常困难的的事情;作为信息产生者,如何让自己生产的信息脱颖而出,受到广大用户的关注,也是一件非常困难的事情。推荐系统就是解决这一矛盾的重要工具。

推荐系统的任务

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

推荐系统与搜索引擎的异同

众所周知,为了解决信息过载的问题,最具代表的解决方案是分类目录(雅虎)和搜索引擎(谷歌)。最初的分类目录网站将著名的网站分门别类,从而方便用户根据类别查找网站,然而随着互联网规模的不断扩大,门户网站也只能覆盖少量的热门网站,越来越不满足用户的需求。因此搜索引擎诞生了。但是搜索引擎需要用户主动提供准确的关键词来寻找信息,因此不能解决用户的很多其他需求,比如用户无法提供准确的关键词时,搜索引擎就无能为力了。

和搜索引擎一样,推荐系统也是一种帮助用户快速发现有用信息的工具。但和搜索引擎不同的是,推荐系统不需要用户提供明确的需求,而是通过分析用户的历史行为给用户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。因此从某种意义上说,推荐系统和搜索引擎对于用户来说是两个互补的工具。搜索引擎满足了用户有明确目的时的主动查找需求,而推荐系统能够在用户没有明确目的的时候他们发现感兴趣的新内容。

生活中常见的推荐过程

以看电影为例:

  1. 向朋友咨询。这种方式在推荐系统中称为社会化推荐(social recommendation),即让好友给自己推荐物品。
  2. 寻找与自己之前看过的电影在内容上相似的电影。这种推荐方式在推荐系统中称为基于内容的推荐(content-based filtering)
  3. 查看排行榜,看看别人都在看什么电影又或者看看和自己兴趣相近的人看什么电影。这种方式称为基于协同过滤(collaborative filtering)的推荐。

从上面三种方法可以看出,推荐算法的本质是通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式。

1.2 个性化推荐系统的应用

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

尽管不同的网站使用不同的推荐系统技术,但总地来说,几乎所有推荐系统应用都是由前台的展示页面后台的日志系统推荐算法系统3部分构成。

1.2.1 电子商务

著名的电子商务网站亚马逊(Amazon)是个性化推荐系统的积极应用者和推广者。Amazon的推荐系统融入到了其各类产品中,其中最主要的应用是个性化商品推荐列表和相关商品的推荐列表。

个性化推荐列表

基于物品的推荐算法(item-based method)

该算法给用户用户推荐那些和他们之前喜欢的物品相似的物品。

个性化推荐列表组成部分
  1. 推荐结果的标题、缩略图以及其他内容属性。
  2. 推荐结果的平均分。
  3. 推荐理由。并且允许用户修正这一推荐
基于好友的推荐算法

该算法按照用户在Facebook的好友关系,给用户推荐他们的好友在亚马逊上喜欢的物品。
基于该种推荐算法生成的推荐列表的组成部分与基于物品的推荐列表类似,只不过这里的推荐理由换成了喜欢过相关物品的用户好友的头像。

相关推荐列表

Amazon有两种相关商品列表:

  • 包含购买了这个商品的用户也经常购买的其他商品
  • 包含浏览过这个商品的用户经常购买的其他商品

这两种相关推荐列表的区别就是使用了不同用户行为计算物品的相关性。
此外,相关推荐列表最重要的应用就是打包销售(cross selling)

1.2.2 电影和视频网站

代表公司Netflix、Youtube、Hulu。其中Netflix和Youtube的算法与Amazon的算法类似,也是基于物品的推荐算法,即给用户推荐和他们曾经喜欢的视频相似的视频。

1.2.3 个性化音乐网络电台

个性化推荐的成功应用需要两个条件:

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

在这两个条件下,个性化网络电台无疑是最合适的个性化推荐产品。
目前有很多知名的个性化音乐网络电台。国际上著名的有Pandora和Last.fm,国内的代表则是网易云音乐。这三种应用虽然都是个性化网络电台,但背后的技术却不太一样。

Pandora

Pandora背后的音乐推荐系统主要来自于一个叫做音乐基因工程的项目。Pandora的算法主要基于内容,其音乐家和研究人员亲自听了上万首来自不同歌手的歌,然后对歌曲的不同特性(比如旋律、节奏、编曲和歌词等)
进行标注,这些标注被称为音乐的基因。然后,Pandora会根据专家标注的基因计算歌曲的相似度,并给用户推荐和他之前喜欢的音乐在基因上相似的其他音乐。

Last.fm

Last.fm记录了所有用户的听歌记录以及用户对歌曲的反馈,在这一基础上计算出不同用户在歌曲上的喜好相似度,从而给用户推荐和他有相似听歌爱好的其他用户喜欢的歌曲。同时,Last.fm也建立了一个社交网络,让用户能够和其他用户建立联系,同时也能让用户给好友推荐自己喜欢的歌曲。和Pandora相比,Last.fm没有使用专家标注,而是主要利用用户行为计算歌曲的相似度。

音乐推荐的特点

2011年的Recsys大会专门要求了Pandora和研究人员对音乐推荐系统进行了演讲。演讲人总结了音乐推荐的如下特点:

  1. 物品空间大;
  2. 消费每首歌的代价很小;
  3. 物品种类丰富;
  4. 听一首歌耗时很少;
  5. 物品重用率很高;
  6. 用户充满激情;
  7. 上下文相关;
  8. 次序很重要;
  9. 很多播放列表资源;
  10. 不需要用户全神贯注;
  11. 高度社会化;

上面这些特点决定了音乐是一种非常适合用来推荐的物品。因此,尽管现在很多推荐系统都是作为一个应用存在与网站中,比如Amazon的商品推荐和Netflix的电影推荐,但唯有音乐推荐系统可以支持独立的个性化推荐网站,比如Pandora、Last.fm和豆瓣网络电台。

1.2.4 社交网络

社交网络中的个性化推荐主要应用于3个方面:

  1. 利用用户的社交网络信息对用户进行个性化的物品推荐;
  2. 信息流的会话推荐;
  3. 给用户推荐好友;

1.2.5 个性化阅读

个性化阅读同样符合前面提出的需要个性化推荐的两个因素:首先,互联网上的文章很多,用户面临信息过载的问题;其次,用户很多时候并没有必须看某篇具体文章的需求,他们只是想通过阅读特定领域的文章了解这些领域的动态。

Google Reader

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

Zite

和Google Reader不同,个性化阅读工具Zite则是收集用户对文章的偏好信息。在每篇文章右侧,Zite都允许用户给出喜欢或不喜欢的反馈,然后通过分析用户的反馈数据不停地更新用户的个性化文章列表。

Digg

Digg是一家著名的新闻阅读网站。Digg首先根据用户的Digg历史计算用户之间的兴趣相似度,然后给用户推荐和他兴趣相似的用户喜欢的文章。

1.2.6 基于位置的服务

随着移动设备的飞速发展,用户的位置信息已经非常容易获取,而位置是一种很重要的上下文信息,基于位置给用户推荐离他近的且他感兴趣的服务,用户就更有可能去消费。

Foursquare

基于位置的服务往往和社交网络结合在一起。其中Foursquare推出了探索功能,给用户推荐好友在附近的行为。

1.2.7 个性化邮件

使对用户重要的邮件能够让用户优先浏览。

Tapestry

目前在文献中能够查到的第一个推荐系统Tapestry就是一个个性化邮件推荐系统,它通过分析用户阅读邮件的历史行为和习惯对新邮件进行重新排序,从而提高用户的工作效率。

1.2.8 个性化广告

个性化广告投放目前已经成为了一门独立的学科——计算广告,但该学科和推荐系统在很多基础理论和方法上是相通的,比如它们的目的都是联系用户和物品,只是在个性化广告中,物品就是广告。

个性化广告投放和狭义个性化推荐的区别

个性化推荐着重于帮助用户找到可能令他们感兴趣的物品,而广告推荐着重于帮助广告找到可能对它们感兴趣的用户,即一个是以用户为核心,而另一个是以广告为核心。

个性化广告投放技术

目前个性化广告投放技术主要分为3种:

  1. 上下文广告。通过分析用户正在浏览的网页内容,投放和网页内容相关的广告。代表系统是谷歌的Adsense。
  2. 搜索广告。通过分析用户在当前会话中的搜索记录,判断用户的搜索目的,投放和用户目的相关的广告。
  3. 个性化展示广告。我们经常在很多网站看到大量的展示广告(就是那些大的横幅图片),它们是根据用户的兴趣,对不同用户投放不同的展示广告。

Yahoo发表了大量个性化广告方面的论文,而最成功的则是Facebook。

1.3 推荐系统评测

一个完整的推荐系统一般存在3个参与方:用户、物品提供者和提供推荐系统的网站。同时好的推荐系统设计,能够让推荐系统本身收集到高质量的用户反馈,不断完善推荐的质量,增加用户和网站的交互,提高网站的收入。因此在评测一个推荐算法时,需要同时考虑三方的利益,一个好的推荐系统是能够令三方共赢的系统。
在推荐系统的早期研究中,很多人将好的推荐系统定义为能够作出准确预测的推荐系统。但是,后来很多研究表明,准确的预测并不代表好的推荐。举个极端点的例子,某推荐系统预测明天太阳将从东方升起,虽然预测准确率为100%,却是一种没有意义的预测。所以,好的推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现那些他们可能会感兴趣,但却不那么容易发现的东西。
为了全面评测推荐系统对三方利益的影响,本章从不同角度出发,提出不同的指标。

1.3.1 推荐系统实验方法

首先介绍计算和获得这些指标的主要实验方法。推荐系统中主要有3种评测推荐效果的实验方法,即离线实验(offline experiment)、用户调查(user study)和在线实验(online experiment)

离线实验

离线实验的方法

离线实验的方法一般由如下几个步骤构成:

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

从上面的步骤可以看到,推荐系统的离线实验都是在数据集上完成的,也就是说它不需要一个实际的系统来供它实验,而只要有一个从实验系统日志中提取的数据集即可。

离线实验的优缺点

这种实验方法的好处是不需要真实用户参与,可以直接快速地计算出来,从而方便、快速地测试大量不同的算法。
它的主要缺点是无法获得很多商业上关注的指标,如点击率、转化率等,而找到和商业指标非常相关的离线指标也是很困难的事情。

用户调查

用户调查是推荐系统评测的一个重要工具,很多离线时没有办法评测的与用户主观感受有关的指标都可以通过用户调查获得。

用户调查的方法

用户调查需要有一些真实用户,让他们在需要测试的推荐系统上完成一些任务。在他们完成任务时,我们需要观察和记录他们的行为,并让他们回答一些问题。最后,我们需要通过分析他们的行为和答案了解测试系统的性能。

用户调查的优缺点

它的优点是可以获得很多体现用户主观感受的指标,相对在线实验风险很低,出现错误后很容易弥补。
缺点是招募测试用户代价较大,很难组织大规模的测试用户,因此会使测试结果的统计意义不足。此外,在很多时候设计双盲实验非常困难,而且用户在测试环境下的行为和真实环境下的行为可能有所不同,因而在测试环境下收集的测试指标可能在真实环境下无法重现。

在线实验

在完成离线实验和必要的用户调查后,可以将推荐系统上线做AB测试,将它和旧的算法进行比较。

在线实验的方法

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

网站http://www.abtests.com/给出了很多通过实际AB测试提高网站用户满意度的例子,从中我们可以学习到如何进行合理的AB测试。

在线实验的优缺点

AB测试的优点是可以公平获得不同算法实际在线时的性能指标,包括商业上关注的指标。
AB测试的缺点主要是周期比较长,必须进行长期的实验才能得到可靠的结果。因此一般不会用AB测试测试所有的算法,而只是用它测试那些在离线实验和用户调查中表现很好的算法。其次,一个大型网站的AB测试系统的设计也是一项复杂的工程。

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

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

1.3.2 评测指标

1.用户满意度

用户作为推荐系统的重要参与者,其满意度是评测推荐系统的最重要指标。但是,用户满意度没有办法离线计算,只能通过用户调查或在线实验方式获得。
用户调查获得用户满意度主要是通过调查问卷的形式。用户对推荐系统的满意度分为不同的层次。因此在设计问卷时需要考虑到用户各方面的感受,这样用户才能针对问题给出自己准确的回答。
在在线系统中,用户满意度主要通过一些对用户行为的统计得到。更一般的情况下,我们可以用点击率、用户停留时间和转化率等指标度量用户的满意度。

2.预测准确度

预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。
计算方法:在计算该指标时需要有一个离线的数据集,该数据集包含用户的历史行为记录。然后,将该数据集通过时间分为训练集和测试集。最后,通过在训练集上建立用户的行为和兴趣模型预测用户在测试集上的行为,并计算预测行为和测试集上实际行为的重合度作为预测准确度。
不同的研究方向有不同的预测准确度指标。

评分预测

预测用户对物品评分的行为称为评分预测。
评分预测的预测准确度一般通过均方根误差(RMSE)平均绝对误差(MAE)计算。对于测试集中的一个用户u和物品i,令$r_{ui}$是用户u对物品i的实际评分,而$\hat r_{ui}$是推荐算法给出的预测评分,那么RMSE的定义为:$$RMSE = \frac {\sqrt{\sum_{u,i \in T} (r_{ui} - \hat r_{ui})^2}}{|T|}$$

MAE采用绝对值计算预测误差,它的定义为:$$MAE=\frac{\sum_{u,i \in T}|r_{ui}-\hat r_{ui}|} {|T|}$$

假设我们用一个列表records存放用户评分数据,令records[i] = [u,i,rui,pui],其中rui是用户u对物品i的实际评分,pui是算法预测出来的用户u对物品i的评分,下面代码实现了RME和MAE的计算过程。

1
2
3
4
5
def RMSE(records):
return math.sqrt(sum([(rui - pui) * (rui - pui) for u,i,rui,pui in records])/float(len(records)))

def MAE(records):
return sum([abs(rui-pui) for u,i,rui,pui in records])/float(len(records))

关于RMSE和MAE这两个指标的优缺点,Netflix认为RMSE加大了对预测不准的用户物品评分的惩罚(平方项的惩罚),因而对系统的评测更加苛刻。研究表明,如果评分系统是基于基数建立的(即用户给的评分都是整数),那么对预测结果取整可能会降低MAE的误差。

TopN推荐

网站在提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做TopN推荐。TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。
$R(u)$是根据用户在训练集上的行为给用户作出的推荐列表,而$T(u)$是用户在测试集上的行为列表。那么,推荐结果的召回率定义为:$$Recall=\frac {\sum_{u \in U} |R(u) \cap T(u)|}{\sum_{u \in U} |T(u)|} $$
推荐结果的准确率定义为:$$Precision=\frac {\sum_{u \in U} |R(u) \cap T(u)|}{\sum_{u \in U} |R(u)|} $$
下面的Python代码同时计算出了一个推荐算法的准确率和召回率:

1
2
3
4
5
6
7
8
9
10
def PrecisionRecall(test, N):
hit = 0
n_recall = 0
n_precision = 0
for user, items in test.items():
rank = Recommend(user, N)
hit += len(rank & item) # hit是推荐列表与行为列表相交的部分
n_recall += len(items)
n_precision += N
return [hit/(1.0*n_recall),hit/(1.0*n_precision)]

有的时候,为了全面评测TopN推荐的准确率和召回率,一般会选取不同的推荐列表长度N,计算出一组准确率和召回率,然后画出准确率/召回率曲线(precision/recall curve)。

关于评分预测和TopN推荐的讨论

评分预测一直是推荐系统研究的热点,绝大多数推荐系统的研究都是基于用户评分数据的评分预测。这主要是因为,一方面推荐系统的早期研究组GroupLens的研究主要就是基于电影评分 数据MovieLens进行的,其次,Netflix大赛也主要面向评分预测问题。因而,很多研究人员都将 研究精力集中在优化评分预测的RMSE上。

对此,亚马逊前科学家Greg Linden有不同的看法。2009年, 他在Communications of the ACM 网站发表了一篇文章 (“What is a Good Recommendation Algorithm?”,参见http://cacm.acm.org/blogs/blog-cacm/22925-what-is-a-goodrecommendation-algorithm/fulltext/) ,指出电影推荐的目的是找到用户最有可能感兴趣的电影,而不是预测用户看了电影后会给电影什么样的评分。因此,TopN推荐更符合实际的应用需求。也许有一部电影用户看了之后会给很高的分数,但用户看的可能性非常小。因此,预测用户是否会看一部电影, 应该比预测用户看了电影后会给它什么评分更加重要。因此,本书主要也是讨论TopN推荐。

3.覆盖度

覆盖度(coverage)描述一个推荐系统对物品长尾的发掘能力。覆盖率有不同的定义方法,最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例。假设系统的用户集合为$U$,推荐系统给每个用户推荐一个长度为N的物品列表$R(u)$。那么推荐系统的覆盖率可以通过下面的公式计算:$$Coverage=\frac{| \bigcup_{u \in U} R(u)|}{|I|}$$
从上面的定义可以看到,覆盖率是一个内容提供商会关心的指标。一个好的推荐系统不仅需要有比较高的用户满意度,也要有较高的覆盖率。
但是上面的定义过于粗略。覆盖率为100%的系统可以有无数的物品流行度分布。为了更细致地描述推荐系统发掘长尾的能力,需要统计推荐列表中不同物品出现次数的分布。如果所有的物品都出现在推荐列表中,且出现的次数差不多,那么推荐系统发掘长尾的能力就很好。因此,可以通过研究物品在推荐列表中出现次数的分布描述推荐系统挖掘长尾的能力。如果这个分布比较平,那么说明推荐系统的覆盖率较高,而如果这个分布较陡峭,说明推荐系统的覆盖率较低。在信息论和经济学中有两个著名的指标可以用来定义覆盖率。
第一个是信息熵:$$H = -\sum_{i=1}^n p(i) \log p(i)$$
这里$p(i)$是物品i的流行度除以所有物品的流行度之和。
第二个是基尼系数(Gini Index):$$G = \frac{1}{n-1} \sum_{j=1}^n (2j-n-1)p(i_j)$$
这里$i_j$是按照物品流行度$p()$从小到大排序的物品列表中第j个物品。
下面代码用来计算给定物品流行度分布后的基尼系数:

1
2
3
4
5
6
7
def GiniIndex(p):
j = 1
n = len(p)
G = 0
for item, weight in sorted(p.items(), key=itemgetter(1)):
G += (2 * j - n - 1) * weight
return G / float(n - 1)

基尼系数的计算原理

社会学领域有一个著名的马太效应,即所谓强者更强,弱者更弱的效应。推荐系统的初衷是希望消除马太效应,使得各种物品都能被展示给对它们感兴趣的某一类人群。但是,很多研究表明现在主流的推荐算法(比如协同过滤算法)是具有马太效应的。评测推荐系统是否具有马太效应的简单办法就是使用基尼系数。如果G1是从初始用户行为中计算出的物品流行度的基尼系数,G2是从推荐列表中计算出的物品流行度的基尼系数,那么如果G2 > G1,就说明推荐算法具有马太效应。

4.多样性

为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴趣领域,即推荐结果需要具有多样性。多样性推荐列表的好处用一句俗话表述就是“不在一棵树上吊死”。尽管用户的兴趣在较长的时间跨度中是一样的,但具体到用户访问推荐系统的某一刻,其兴趣往往是单一的,那么如果推荐列表只能覆盖用户的一个兴趣点,而这个兴趣点不是用户这个时刻的兴趣点,推荐列表就不会让用户满意。反之,如果推荐列表比较多样,覆盖了用户绝大多数的兴趣点,那么就会增加用户找到感兴趣物品的概率。因此给用户的推荐列表也需要满足用户广泛的兴趣,即具有多样性。
多样性描述了推荐列表中物品两两之间的不相似性。因此,多样性和相似性是对应的。假设$s(i,j) \in [0,1]$定义了物品i和j之间的相似度,那么用户u的推荐列表$R(u)$的多样性定义如下:$$Diversity=1-\frac {\sum_{i,j \in R(u),i \neq j} s(i,j)}{\frac{1}{2}|R(u)|(|R(u)|-1)}$$
而推荐系统的整体多样性可以定义为所有用户推荐列表多样性的平均值:$$Diversity=\frac{1}{|U|} \sum_{u \in U}Diversity(R(u))$$
从上面的定义可以看到,不同的物品相似度度量函数$s(i, j)$可以定义不同的多样性。如果用内容相似度描述物品间的相似度,我们就可以得到内容多样性函数,如果用协同过滤的相似度函数描述物品间的相似度,就可以得到协同过滤的多样性函数。

5.新颖性

新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。在一个网站中实现新颖性的最简单办法是,把那些用户之前在网站中对其有过行为的物品从推荐列表中过滤掉。
O’scar Celma在博士论文“Music Recommendation and Discovery in the Long Tail”(参见“Music Recommendation and Discovery in the Long Tail”,地址为http://mtg.upf.edu/static/media/PhD_ocelma.pdf) 中研究了新颖度的评测。评测新颖度的最简单方法是利用推荐结果的平均流行度,因为越不热门的物品越可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。
但是,用推荐结果的平均流行度度量新颖性比较粗略,因为不同用户不知道的东西是不同的。因此,要准确地统计新颖性需要做用户调查。
最近几年关于多样性和新颖性的研究越来越受到推荐系统研究人员的关注。ACM的推荐系统会议在2011年有一个专门的研讨会讨论推荐的多样性和新颖性。 (参见“International Workshop on Novelty and Diversity in Recommender Systems”,地址为http://ir.ii.uam.es/divers2011/) 该研讨会的组织者认为,通过牺牲精度来提高多样性和新颖性是很容易的,而困难的是如何在不牺牲精度的情况下提高多样性和新颖性。关心这两个指标的读者可以关注一下这个研讨会最终发表的论文。

6.惊喜度

惊喜度(serendipity)是最近这几年推荐系统领域最热门的话题。惊喜度和新颖度作为推荐系统的指标,它们之间的区别并非两个词在中文里含义的区别而是意义上的区别。
可以举一个例子说明这两种指标的区别。假设一名用户喜欢周星驰的电影,然后我们给他推荐了一部叫做《临歧》的电影(该电影是1983年由刘德华、周星驰、梁朝伟合作演出的,很少有人知道这部有周星驰出演的电影),而该用户不知道这部电影,那么可以说这个推荐具有新颖性。但是,这个推荐并没有惊喜度,因为该用户一旦了解了这个电影的演员,就不会觉得特别奇怪。但如果我们给用户推荐张艺谋导演的《红高粱》,假设这名用户没有看过这部电影,那么他看完这部电影后可能会觉得很奇怪,因为这部电影和他的兴趣一点关系也没有,但如果用户看完电影
后觉得这部电影很不错,那么就可以说这个推荐是让用户惊喜的。这个例子的原始版本来自于Guy Shani的论文(参见Guy Shani和 Asela Gunawardana的“Evaluating Recommendation Systems”) ,他的基本意思就是,如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。
目前并没有什么公认的惊喜度指标定义方式,这里只给出一种定性的度量方式。上面提到,令用户惊喜的推荐结果是和用户历史上喜欢的物品不相似,但用户却觉得满意的推荐。那么,定义惊喜度需要首先定义推荐结果和用户历史上喜欢的物品的相似度,其次需要定义用户对推荐结果的满意度。前面也曾提到,用户满意度只能通过问卷调查或者在线实验获得,而推荐结果和用户历史上喜欢的物品相似度一般可以用内容相似度定义。也就是说,如果获得了一个用户观看电影的历史,得到这些电影的演员和导演集合A,然后给用户推荐一个不属于集合A的导演和演员创作的电影,而用户表示非常满意,这样就实现了一个惊喜度很高的推荐。因此提高推荐惊喜度需要提高推荐结果的用户满意度,同时降低推荐结果和用户历史兴趣的相似度。惊喜度的问题最近几年获得了学术界的一定关注,但这方面的工作还不是很成熟。相关工作可以参考Yuan Cao Zhang等的论文(参见Yuan Cao Zhang、Diarmuid Ó Séaghdha、Daniele Quercia和 Tamas Jambor的“Auralist: introducing serendipity into music recommendation.”)和Tomoko Murakami等的论文 (参见Tomoko Murakami、 Koichiro. Mori和Ryohei Orihara的“ Metrics for evaluating the serendipity of recommendationlists”)。

7.信任度

对于基于机器学习的自动推荐系统,同样存在信任度(trust)的问题,如果用户信任推荐系统,那就会增加用户和推荐系统的交互。
度量推荐系统的信任度只能通过问卷调查的方式,询问用户是否信任推荐系统的推荐结果。
提高推荐系统的信任度主要有两种方法。首先需要增加推荐系统的透明度(transparency)(参见Henriette Cramer、Vanessa Evers、 Satyan Ramlal、 Maarten van Someren、Lloyd Rutledge、 Natalia Stash、Lora Aroyo和Bob Wielinga的“ The effects of transparency on trust in and acceptance of a content-based art recommender”) , 而增加推荐系统透明度的主要办法是提供推荐解释。只有让用户了解推荐系统的运行机制,让用 户认同推荐系统的运行机制,才会提高用户对推荐系统的信任度。其次是考虑用户的社交网络 信息,利用用户的好友信息给用户做推荐,并且用好友进行推荐解释。这是因为用户对他们的 好友一般都比较信任,因此如果推荐的商品是好友购买过的,那么他们对推荐结果就会相对比较信任。
关于推荐系统信任度的研究(参见Paolo Massa和 Paolo Avesani的“Trust-aware recommender systems”)主要集中在评论网站Epinion的推荐系统上。这是因为Epinion创建了一套用户之间的信任系统来建立用户之间的信任关系,帮助用户判断是否信任当前用户对某一个商品的评论。

8.实时性

在很多网站中,因为物品(新闻、微博等)具有很强的时效性,所以需要在物品还具有时效性时就将它们推荐给用户。
推荐系统的实时性包括两个方面。首先,推荐系统需要实时地更新推荐列表来满足用户新的行为变化。很多推荐系统都会在离线状态每天计算一次用户推荐列表,然后于在线期间将推荐列表展示给用户。这种设计显然是无法满足实时性的。与用户行为相应的实时性,可以通过推荐列表的变化速率来评测。如果推荐列表在用户有行为后变化不大,或者没有变化,说明推荐系统的实时性不高。
实时性的第二个方面是推荐系统需要能够将新加入系统的物品推荐给用户。这主要考验了推荐系统处理物品冷启动的能力。

9.健壮性

健壮性(即robust,鲁棒性)指标衡量了一个推荐系统抗击作弊的能力。
算法健壮性的评测主要利用模拟攻击。首先,给定一个数据集和一个算法,可以用这个算法给这个数据集中的用户生成推荐列表。然后,用常用的攻击方法向数据集中注入噪声数据,然后利用算法在注入噪声后的数据集上再次给用户生成推荐列表。最后,通过比较攻击前后推荐列表的相似度评测算法的健壮性。如果攻击后的推荐列表相对于攻击前没有发生大的变化,就说明算法比较健壮。
在实际系统中,提高系统的健壮性,除了选择健壮性高的算法,还有以下方法。

  • 设计推荐系统时尽量使用代价比较高的用户行为。
  • 在使用数据前,进行攻击检测,从而对数据进行清理。

10.商业目标

不同的网站会根据自己的盈利模式设有不同的商业目标。因此,设计推荐系统时需要考虑最终的商业目标,而网站使用推荐系统的目的除了满足用 户发现内容的需求,也需要利用推荐系统加快实现商业上的指标。

11.总结

总结获取各种评测指标的途径
对于可以离线优化的指标,作者的看法是应该在给定覆盖率、多样性、新颖性等限制条件下,尽量优化预测准确度。用一个数学公式表达,离线实验的优化目标是:
​ 最大化预测准确度
​ 使得 覆盖率 > A
​ 多样性 > B
​ 新颖性 > C
其中,A、B、C的取值应该视不同的应用而定。

1.3.3 评测维度

除了应该考虑评测指标,还应考虑评测维度。增加评测维度的目的就是知道一个推荐算法在什么情况下性能最好。这样可以为融合不同推荐算法取得最好的整体性能带来参考。
一般情况下,评测维度分为如下3种:

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

如果能够在推荐系统评测报告中包含不同维度下的系统评测指标,就能帮我们全面地了解推荐系统性能,找到一个看上去比较弱的算法的优势,发现一个看上去比较强的算法的缺点。