与购物网站内部的搜索对应,购物网站一般还会有推荐引擎。因为在很多情况下,用户其实并不明确自己的需要,或者他们的需求很难用简单的关键字来表述。又或者他们需要更加符合他们个人口味和喜好的结果。最早将推荐引擎投入大规模使用的是亚马逊,它采用了一种关联推荐机制:当用户购买了一本书之后,页面上会出现这样一个框:你可能对这几本书也有兴趣。
根据推荐引擎是否为不同的用户推荐不同的数据可分为基于大众行为的推荐引擎(千人一面)和个性化推荐引擎(类似千人千面),题主说的应该主要是个性化的推荐引擎。
a1.根据大众行为的推荐引擎,对每个用户都给出同样的推荐,这些推荐可以是静态的由系统管理员人工设定的,或者基于系统所有用户的反馈统计计算出的当下比较流行的物品。
a2.个性化推荐引擎,对不同的用户,根据他们的口味和喜好给出更加精确的推荐,这时,系统需要了解需推荐内容和用户的特质,或者基于社会化网络,通过找到与当前用户相同喜好的用户,实现推荐。
一、推荐引擎的工作原理
一般情况下,推荐引擎所需要的数据源包括:
显式的用户反馈能准确的反应用户对物品的真实喜好,但需要用户付出额外的代价,而隐式的用户行为,通过一些分析和处理,也能反映用户的喜好,只是数据不是很精确,有些行为的分析存在较大的噪音。但只要选择正确的行为特征,隐式的用户反馈也能得到很好的效果,只是行为特征的选择可能在不同的应用中有很大的不同,例如在电子商务的网站上,购买行为其实就是一个能很好表现用户喜好的隐式反馈。
二、个性化推荐引擎的分类
1.基于人口统计学的推荐(Demographic-basedRecommendation)
好处是适合新用户、不依赖物品本身数据,
缺点是粗糙且涉及一些敏感个人信息。
2.基于内容的推荐(Content-basedRecommendation)
即如甲喜欢金庸的武侠,而古龙的书和金庸的武侠像,那么把古龙的书也推荐给甲。
这种基于内容的推荐机制的好处在于它能很好的建模用户的口味,能提供更加精确的推荐。也很适用于新产品。
但它也存在以下几个问题:
·需要对物品进行分析和建模,推荐的质量依赖于对物品模型的完整和全面程度(关键词和标签Tag被认为是描述物品元数据的一种简单有效的方法)——需设定物品的关键词和标签化
·分析仅仅依赖于物品本身的特征,没有考虑人对物品的态度;
·因为需要基于用户以往的喜好历史做出推荐,所以对于新用户有“冷启动”的问题,
虽然这个方法有很多不足和问题,但他还是成功的应用在一些电影,音乐,图书的社交站点,有些站点还请专业的人员对物品进行基因编码。
3.基于协同过滤的推荐(CollaborativeFiltering-basedRecommendation)【有点志趣相投的意思】
可以分为三个子类:基于用户的推荐、基于商品的推荐和基于模型的推荐。
3.1基于用户的协同过滤推荐(User-basedRecommendation)
基于用户的协同过滤推荐的基本原理是,根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,在一般的应用中是采用计算“K-邻居”的算法;然后,基于这K个邻居的历史偏好信息,为当前用户进行推荐。【基于个体偏好而非背景上的人的相似度】
甲乙爱好相似(“邻居”),且甲喜欢AB,乙喜欢ABC,那么把C推荐给A(C可能和AB毫无关系)。
——与基于人口统计学的推荐的区别:基于人口统计学的机制只考虑用户本身的特征,而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度,它的基本假设是,喜欢类似物品的用户可能有相同或者相似的口味和偏好。
3.2基于商品的协同过滤推荐(Item-basedRecommendation,又称基于项目的)
基于商品的协同过滤推荐的基本原理也是类似的,只是说它使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。【基于全体偏好发现物的相似度,再根据个体偏好推荐】
——与基于内容的推荐的区别:基于内容的推荐仅根据物的相似度,不考虑个体偏好。
即如:发现金庸和古龙的武侠比较相似,甲喜欢金庸和古龙的武侠,而乙喜欢金庸的武侠,那么把古龙的武侠也推荐给乙(甲乙可能毫无关系)
——与机遇用户的协同过滤推荐的对比:其实基于商品的协同过滤推荐机制是Amazon在基于用户的机制上改良的一种策略,因为在大部分的Web站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定,同时基于商品的机制比基于用户的实时性更好一些。但如在一些新闻推荐系统则相反。
3.3基于模型的协同过滤推荐(Model-basedRecommendation)
基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,计算推荐。【降维建模,有点高大上的AI向】
基于用户和基于商品的协同过滤推荐有一个大问题:它们太死了,就是说,它们能发现都喜欢同一样东西的人,但却忽略了爱好非常相似的潜在用户组合。比如说你喜欢莫奈的睡莲。那么,在这个法国印象派大师画的250幅睡莲中,你最喜欢哪一幅?在一群喜欢莫奈的人当中,完全可能每个人喜欢的睡莲都不相同,而基本的算法就有可能识别不出这些人都有着共同的爱好。【基于属性的表象而非内涵?】
此时需要降维(DimensionalityReduction)的方法。我们来看看你爱吃的东西,以及如何把它跟其他一百万人爱吃的东西做比较。你可以把这些信息用一个巨型矩阵表示出来,每一条竖线代表一样食物,每个人爱吃什么东西就自然形成了一行。在你的这一行上面或许会显示你给了烤牛排5颗星、红烧小排4星半、烤鸡翅2颗星、冻豆腐卷1颗星、奶酪烤蘑菇5颗星、盐水毛豆4颗星,等等。
然而,使用这个矩阵的推荐算法并不关心你给哪种食物评了多少颗星。它想要了解的是你一般而言的喜好,这样它可以将这个信息应用到更丰富多样的食物上。比如说,基于你上面给出的信息,算法可能会认为你喜欢牛肉、咸的东西和烤制菜品,不喜欢鸡肉和任何油炸的东西,不喜欢也不讨厌蔬菜,依此类推【降维找到本质!】。你爱吃的食物所拥有的特点或者说维度,它的数量和符合你要求的食物的数量比起来要小得多——至多可能50或100。通过查对这些维度,推荐算法可以迅速决定你是否会喜欢一种新的食物(比方说盐焗排骨),方法就是把这种食物的各项维度(咸的、牛肉做的、不是鸡肉、不是炒的、不是蔬菜、不是烤的)同你的资料进行比对。这种更为一般性的呈现使得推荐算法能准确的发现有着相似但不同喜好的用户。而且,它大幅压缩了矩阵的规模,使算法变得更加高效。
基于协同过滤的推荐应用最广泛,而它也存在以下几个问题:
3.1Amazon
Amazon作为推荐引擎的鼻祖,其推荐的核心是通过数据挖掘算法和比较用户的消费偏好与其他用户进行对比,借以预测用户可能感兴趣的商品。Amazon采用的是分区的混合的机制,并将不同的推荐结果分不同的区显示给用户。
另外,Amazon很多推荐是基于用户的profile计算出来的,用户的profile中记录了用户在Amazon上的行为,包括看了那些物品,买了那些物品,收藏夹和wishlist里的物品等等,当然Amazon里还集成了评分等其他的用户反馈的方式,它们都是profile的一部分,同时,Amazon提供了让用户自主管理自己profile的功能,通过这种方式用户可以更明确的告诉推荐引擎他的品味和意图是什么。
3.2豆瓣
豆瓣的推荐是通过“豆瓣猜”,官方介绍——"你的个人推荐是根据你的收藏和评价自动得出的,每个人的推荐清单都不同。你的收藏和评价越多,豆瓣给你的推荐会越准确和丰富。每天推荐的内容可能会有变化。随着豆瓣的长大,给你推荐的内容也会越来越准。”
这一点让我们可以清晰明了的知道,豆瓣必然是基于社会化的协同过滤的推荐,这样用户越多,用户的反馈越多,那么推荐的效果会越来越准确。
相对于Amazon的用户行为模型,豆瓣电影的模型更加简单,就是“看过”和“想看”,这也让他们的推荐更加专注于用户的品味,毕竟买东西和看电影的动机还是有很大不同的。
另外,豆瓣也有基于物品本身的推荐,当你查看一些电影的详细信息的时候,他会给你推荐出“喜欢这个电影的人也喜欢的电影”,这是一个基于协同过滤的应用。