CSDDN特约专稿:个性化推荐技术漫谈

  • 来源:本站
  • 发布时间:2019-08-13
  • 79已阅读
您现在的位置:首页 >> 西方诗歌 >> 文章
简介 )。 它是协同过滤最著名的研究项目之一。 第一代的协同过滤技术,又被称为基于用户(User-based)的协同过滤。 基于用户的协同过滤,基本原理是基于用户行为选择的相关性。

CSDDN特约专稿:个性化推荐技术漫谈

)。

它是协同过滤最著名的研究项目之一。

第一代的协同过滤技术,又被称为基于用户(User-based)的协同过滤。 基于用户的协同过滤,基本原理是基于用户行为选择的相关性。

用户的行为选择这里指的是下载、购买、评价等等能够显式或者隐式体现出用户喜好的行为。 在一个典型的基于协同过滤技术的推荐系统中,输入数据通常可以表述为一个m×n的用户内容矩阵R,m是用户数,n是内容数。

矩阵的值与内容的类型有关,通常由行为记录模块决定。 如果内容是网上书店中的书,则矩阵的值可以表示用户购买与否,例如1表示购买,0表示没有购买;或者表示用户对它的评价有多高,这样的评价值就可以有几个等级,比如常见的1~5级评价制。

基于用户的协同过滤,通过比较目标用户的一系列行为选择和其他用户之间的相似性,来识别出一组相互具有类似喜好的用户,又可以称为“同好”。

一旦系统能够识别一个用户的同好用户,就能够将他们最感兴趣的内容作为当前用户的推荐结果推荐给这个用户。 也就是说,以前的行为选择与你相似的用户,在以后的行为中很可能也会和你相似。

因此将这些用户做为基准来向你推荐内容。 协同过滤的核心问题是寻找与目标用户兴趣相近的一组用户。 这种相似用户通常被称为最近邻居(NearestNeighbor)。 用户之间的相似度是通过比较两个用户的行为选择矢量得到的。 目前,比较行为选择矢量的相似度计算方法有许多种,比较经典的算法包括泊松相关系数(PersonCorrelationCoefficient)和余弦相似性(Cosine-basedSimilarity)。 “最近邻居”产生后,我们就能够计算得到用户最可能感兴趣的内容集(也叫做TopN推荐集)。

为了得到推荐集,分别统计“最近邻居”中的用户对不同内容的兴趣度,取其中排在最前面的内容作为推荐集。

下面是一个简化的示例:假如用户张三有两个同好:李四和王五。

张三喜欢看电影A;李四喜欢看电影A,B,C和D;王五喜欢看电影A,B,D,E和F;这样,推荐系统就能够过滤出相似用户都喜欢的电影B和D作为张三最可能也会喜欢的电影推荐给张三。

基于用户的协同过滤技术在个性化推荐系统中获得了极大的成功,但它有自身的局限性。 推荐集的产生方式意味着一个内容只有已经被用户选择(购买)后才有机会被推荐给其他用户。

对于一个网上书店来说,新上架的书因为还没有被相当数量的用户购买或者评价的记录,便很少有机会被用户的“最近邻居”筛选进入推荐集。

这个问题,也被称之为协同过滤的“冷启动”问题。 此外,因为计算用户的相似度时,是通过将目标用户的历史行为记录与其他每一个用户的记录相比较得出的,所以对于一个现实的推荐系统来说,扩展性将成为非常严重的问题。

设想一下,对于一个拥有上百万用户的网站来说,每计算一个用户都将涉及到上百万次的比较,更不要说其中会带来的大量数据库IO操作的开销。

于是第二代基于内容项(Item-based)的协同过滤技术就产生了。 与基于用户的技术不同的是,这种方法比较的是内容项与内容项之间的相似度。

Item-based方法同样需要进行三个步骤获得推荐:1)得到内容项(Item)的历史评分数据;2)针对内容项进行内容项之间的相似度计算,找到目标内容项的“最近邻居”;3)产生推荐。

这里内容项之间的相似度是通过比较两个内容项上的用户行为选择矢量得到的。 举个例子,假设用户和内容项如下:电影A电影B电影C电影D张三喜欢李四喜欢喜欢喜欢喜欢王五不喜欢不喜欢不喜欢赵六喜欢喜欢喜欢可以看出,电影A与D是最相似的。 因为张三喜欢A,所以电影D就可以推荐给张三。 和基于用户的推荐系统相比,基于内容项的推荐系统最大的改进是更具有扩展性。

基于内容项的方法通过计算内容项之间的相似性来代替用户之间的相似性。

对于通常的互联网应用来说,提供的内容项数量相对较为稳定。

比如一个大型网上书店,可能出售的书籍数量也就在几十万上下,而用户数量就可能达到几百万。

所以,比起用户,内容项之间的相似性计算需要的计算量要少很多,从而大大降低了在线计算量,提高系统性能。 基于内容项的推荐系统应用最为成功的是Amazon。

Amazon为此还申请了一项专利叫做”Collaborativerecommendationsusingitem-to-itemsimilaritymappings”不论是第一代的基于用户方法,还是第二代的基于内容项方法,都不可避免的遇到数据稀疏的问题。

在任何一个网站中,用户的评分记录或者购买记录,相对整个可供选择的内容集来说,都是很小的一部分。

所以在许多推荐系统中,每个用户涉及的数据量相当有限,在一些大的系统如Amazon中,用户最多不过就评价过上百万本书的1%,造成评估数据相当稀疏。 当用户评价过的内容之间找不到交集时,就难以判断用户的口味是否相似,难以找到相似用户集,导致推荐效果大大降低。

为了解决用户数据的稀疏问题,最方便的办法就是将用户对没有选择过的内容项的评分设为一个固定的缺省值,例如用户的平均评分。

针对如何预测遗漏的评分业内又提出了很多种方法,不过一般来说采用最简单的改进方法就可以有效地提高协同过滤推荐系统的准确度。

另外一方面,即便采用了基于内容项的方法,在数据量巨大的时候,计算复杂度仍然成为性能瓶颈。

为了进一步解决协同过滤技术的扩展性能问题,目前比较有效的办法是在用户评分数据上做一次聚类分析(clustering)。

聚类技术首先将具有相似兴趣爱好的用户分配到相同的分类中。 聚类产生之后,它或者将“最近邻居”搜索对象限制在最相近的聚类中,根据类中其他用户的评价预测目标用户的评价,或者用聚类的中心作为近似提取推荐结果。 由于用户之间的分类相对变化比较小,因此聚类过程往往可以离线进行,而无需实时计算,这样就大大降低了实时推荐的计算压力,提高推荐系统的速度。 一般来说,聚类将用户分为多少个类,推荐系统的整体速度就能够提高多少倍。

具体选择什么样的聚类算法,又会因应用领域和数据的分布特性而不同。

如果聚类算法选择不当,反而会降低推荐的准确性。 近年来,推荐系统的算法技术的发展也有了一些新的方向,比如SlopeOne,SVD等方法,就不一一列举了。 在我看来,一个商用推荐系统的尤其关键之处在于对海量用户数据的处理。 因为推荐系统是数据优先,数据的积累越多对推荐的精度就越有好处。 而当用户的行为数据真正积累到上百万甚至上亿时,如何在合理时间内得出有效的推荐,就是对推荐技术最大的考验。

除此之外,一个优秀的推荐系统需要能够结合内容相似与用户行为相。

传统的协同过滤方法是忽略内容本身的属性的,这一方面固然是对数据要求少的优点,但另一方面也带来了难以避免的“冷启动”问题。

其实,随着标签系统在互联网上的广泛应用,标签本身就不失为是一种很好的内容属性。 如何利用也是值得大家探讨的。

充分利用到内容本身的属性,将不同的相似性结合起来,这会给基于协同过滤的推荐技术带来新的动力。

最后一点,设计良好的推荐技术要能够从用户对推荐内容的反馈中自行调整和学习。 因为实际上每个用户对于推荐的内容都有不同的要求,比如有的用户可能偏好比较热门的内容,有的用户更愿意发现冷门的内容。 针对不同用户的反馈来不断学习每个用户的特征,才能够避免所采用算法本身先天的偏差,获得较为理想的效果。

本文为音乐八宝盒()co-funder 大为提供。