本文将深入介绍推荐系统的工作原理,和其中涉及的各种推荐机制,以及它们各自的优缺点和适用场景,帮助用户清楚的了解和快速构建适合自己的推荐系统。
0 系列文章目录
0.1 基于协同过滤算法的电影推荐系统设计(一) - 项目简介
0.2 基于协同过滤算法的电影推荐系统设计(二) - 推荐系统介绍
1 主动发现信息
随着 Web 2.0 的发展, Web 已经变成数据分享的平台,如何让人们在海量的数据中想要找到他们需要的信息将变得越来越难。
在这样的情形下,搜索系统(Google,百度等等)成为大家快速找到目标信息的最好途径。在用户对自己需求相对明确的时候,用搜索系统很方便的通过关键字搜索很快的找到自己需要的信息。
但搜索系统并不能完全满足用户对信息发现的需求,那是因为在很多情况下,用户其实并不明确自己的需要,或者他们的需求很难用简单的关键字来表述。又或者他们需要更加符合他们个人口味和喜好的结果,因此出现了推荐系统,与搜索系统对应,大家也习惯称它为推荐系统。
随着推荐系统的出现,用户获取信息的方式从简单的目标明确的数据的搜索转换到更高级更符合人们使用习惯的信息发现。
如今,随着推荐技术的不断发展,推荐系统已经在电子商务 (E-commerce,例如 Amazon,阿里 ) 和一些基于 social 的社会化站点 ( 包括音乐,电影和图书分享,例如豆瓣 ) 都取得很大的成功。
这也进一步的说明了,Web2.0 环境下,在面对海量的数据,用户需要这种更加智能的,更加了解他们需求,口味和喜好的信息发现机制。
2 推荐系统
推荐系统利用特殊的信息过滤技术,将不同的物品或内容推荐给可能对它们感兴趣的用户。
这里将推荐系统看作黑盒,输入是推荐的数据源,一般推荐系统所需数据源包括
- 要推荐物品或内容的元数据
例如关键字,基因描述等 - 系统用户的基本信息
例如性别,年龄等 - 用户对物品或者信息的偏好
根据应用本身的不同,可能包括用户对物品的评分,用户查看物品的记录,用户的购买记录等
用户的偏好信息可以分为两类
- 显式的用户反馈
用户在网站上自然浏览或者使用网站以外,显式的提供反馈信息
例如用户对物品的评分,或者对物品的评论
显式的用户反馈能准确的反应用户对物品的真实喜好,但需要用户付出额外的代价 - 隐式的用户反馈
用户在使用网站时产生的数据,隐式的反应了用户对物品的喜好
例如用户购买了某物品,用户查看了某物品的信息等
隐式的用户反馈,通过一些分析和处理,也能反映用户的喜好,只是数据不是很精确,有些行为的分析存在较大的噪音,但只要选择正确的行为特征,隐式的用户反馈也能得到很好的效果,只是行为特征的选择可能在不同的应用中有很大的不同,例如在电子商务的网站上,购买行为其实就是一个能很好表现用户喜好的隐式反馈。
推荐系统根据不同的推荐机制可能用到数据源中的一部分,然后根据这些数据,分析出一定的规则或者直接对用户对其他物品的喜好进行预测计算.这样推荐系统可以在用户进入的时候给他推荐他可能感兴趣的物品。
3 分类
可以根据很多指标
3.1 是否为不同用户推荐不同数据
- 大众推荐系统
对每个用户都给出同样的推荐
这些推荐可以是静态的由系统管理员人工设定的;
或者基于系统所有用户的反馈统计计算出的当下比较流行的物品 - 个性化推荐系统
对不同的用户,根据他们的口味和喜好给出更加精确的推荐
这时,系统需要了解需推荐内容和用户的特质,或者基于社会化网络,通过找到与当前用户相同喜好的用户,实现推荐
这是最基本的推荐系统分类
,其实大部分人们讨论的推荐系统都是关于个性化的推荐系统,因为从根本上说,只有个性化的推荐系统才是更加智能的信息发现过程。
3.2 数据源
这里讲的是如何发现数据的相关性
大部分推荐系统的工作原理是基于物品或者用户的相似集进行推荐
那么参考前面给出的推荐系统工作原理图,根据不同的数据源发现数据相关性的方法可以分为以下几种:
- 根据系统用户的基本信息
发现用户的相关程度,这种被称为基于人口统计学的推荐(Demographic-based Recommendation) - 根据推荐物品或内容的元数据
发现物品或者内容的相关性,这种被称为基于内容的推荐(Content-based Recommendation) - 根据用户对物品或者信息的偏好
发现物品或者内容本身的相关性,或者是发现用户的相关性,这种被称为基于协同过滤
的推荐(Collaborative Filtering-based Recommendation)
3.3 推荐模型的建立方式
在海量物品和用户的系统中,推荐系统的计算量是相当大的,要实现实时的推荐务必需要建立一个推荐模型,关于推荐模型的建立方式可以分为
基于物品和用户本身的
将每个用户和每个物品都当作独立的实体,预测每个用户对于每个物品的喜好程度,这些信息往往是用一个二维矩阵描述的
由于用户感兴趣的物品远远小于总物品的数目,这样的模型导致大量的数据空置,即我们得到的二维矩阵往往是一个很大的稀疏矩阵。同时为了减小计算量,我们可以对物品和用户进行聚类, 然后记录和计算一类用户对一类物品的喜好程度,但这样的模型又会在推荐的准确性上有损失。
基于关联规则的推荐(Rule-based Recommendation)
主要是挖掘一些数据的依赖关系,典型的场景就是“购物篮问题”,通过关联规则的挖掘,可以找到哪些物品经常被同时购买,或者用户购买了一些物品后通常会购买哪些其他的物品,当挖掘出这些关联规则之后,可以基于这些规则给用户进行推荐。
基于模型的推荐(Model-based Recommendation)
典型的机器学习的问题,可以将已有的用户喜好信息作为训练样本,训练出一个预测用户喜好的模型,这样以后用户在进入系统,可以基于此模型计算推荐
这种方法的问题在于如何将用户实时或者近期的喜好信息反馈给训练好的模型,从而提高推荐的准确度。
其实在现在的推荐系统中,很少有只使用了一个推荐策略的推荐系统,一般都是在不同的场景下使用不同的推荐策略从而达到最好的推荐效果
例如 Amazon 的推荐,它将基于用户本身历史购买数据的推荐,和基于用户当前浏览的物品的推荐,以及基于大众喜好的当下比较流行的物品都在不同的区域推荐给用户,让用户可以从全方位的推荐中找到自己真正感兴趣的物品。