《推荐系统实践》 5. 推荐系统实例
Posted 推荐系统新视野
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《推荐系统实践》 5. 推荐系统实例相关的知识,希望对你有一定的参考价值。
5.1. 外围架构
推荐系统要发挥强大的作用,除了推荐系统本身,主要还依赖于两个条件——界面展示和用户行为数据,统称为外围架构。目前流行的推荐系统界面大致都包含如下共性:
-
通过一定方式展示物品 主要展示物品的标题、缩略图和介绍等 -
提供了推荐理由 向用户展示推荐理由可以增加用户对推荐结果的信任度 -
提供渠道让用户进行反馈 不断的反馈让推荐算法持续改善用户的个性化推荐体验
按照所收集用户行为数据的规模和是否需要实时存取,不同的行为数据将被存储在不同的媒介中。一般来说,需要实时存取的数据存储在数据库和缓存中,而大规模的非实时地存取数据存储在分布式文件系统(如HDFS)中。
5.2. 推荐系统架构
推荐系统联系用户和物品的方式主要有如下图所示的3种。
在第三种方法中,推荐系统需要为用户生成特征,然后对每个特征找到和特征相关的物品,从而最终生成用户的推荐列表。因而,推荐系统的核心任务就被拆解成两部分,一个是如何为给定用户生成特征,另一个是如何根据特征找到物品。
同时要考虑到,如果要在一个系统中把所有特征和任务都统筹考虑,那么系统将会非常复杂,而且很难通过配置文件方便地配置不同特征和任务的权重。因此,推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或者优先级合并、排序然后返回,如下图:
这种做法有两个好处:
-
方便增删引擎 控制不同引擎对推荐结果的影响。 -
可以实现推荐引擎级别的用户反馈 每一个推荐引擎都代表了一种推荐策略,而不同的用户可能喜欢不同的推荐策略。
5.3. 推荐引擎架构
具体到每一种推荐引擎到架构,推荐引擎架构主要包括下图中到三部分:
-
图中A部分负责从数据库或缓存中拿到用户行为数据,通过分析不同行为,生成当前用户的特征向量,如果使用非行为特征,就不需要行为提取和分析模块了,该模块的输出就是用户特征向量。 -
图中B部分负责将用户的特征向量通过特征-物品相关矩阵转化为初始推荐物品列表。 -
图中C部分负责对初始的推荐列表进行过滤、排名等处理,从而生成该引擎的最终推荐结果。
A部分输出的特征向量一般有两种类型,一种是用户的注册信息中可以提取出来的,主要包括用户的人口统计学特征。另一种特征则主要是从用户的行为中计算出来的。
一个特征向量由特征及其权重组成,在利用用户行为计算特征向量时需要考虑以下因素
-
用户行为的种类 在一个网站中,用户可以对物品产生很多不同种类的行为,不同行为对物品特征的权重产生到影响不同,大多时候很难确定什么行为更加重要,一般的标准就是用户付出代价越大的行为权重越高。 -
用户行为产生的时间 一般来说,用户近期的行为比较重要,而用户很久之前的行为相对比较次要。 -
用户行为的次数 有时用户对一个物品会产生很多次行为。因此用户对同一个物品的同一种行为发生的次数也反映了用户对物品的兴趣,行为次数多的物品对应的特征权重越高。 -
物品的热门程度 如果用户对一个很热门的物品产生了行为,反之,如果用户对一个不热门的物品产生了行为,就说明了用户的个性需求。
对于B部分到特征-物品相关推荐而言。在得到用户的特征向量后,可以根据事先训练好的相关表和候选物品集合得到初始推荐列表。
离线相关表存储在数据库中,其存储格式如下:
src_id | dst_id | weight |
---|---|---|
特征ID | 物品ID | 权重 |
候选物品集合用于保证推荐结果只包含候选物品集合中的物品,即进行筛选。另外,特征—物品相关推荐模块除了给用户返回物品推荐列表,还需要给推荐列表中的每个推荐结果产生一个解释列表,表明这个物品是因为哪些特征推荐出来的。
在得到初步的推荐列表后,接着按照产品需求对结果进行过滤,过滤掉那些不符合要求的物品。
候选物品集合与过滤都可以对推荐物品进行筛选,那么应该如何选用呢?一般来说,如果可供推荐的物品较少,那么可以考虑候选物品集合的方法。但是如果可供推荐的物品非常多,那么可以考虑在初始推荐列表中加上过滤模块筛选掉一些不满足条件的物品。它们最主要的区别在于候选物集合会影响初始推荐列表的生成,而过滤模块是在初始推荐列表上进行操作的。过滤模块可以对推荐结果进行比候选物集合更加精细的控制。
一般来说,过滤模块会过滤掉以下物品:
-
用户已经产生过行为的物品 因为推荐系统的目的是帮助用户发现物品,因此没必要给用户推荐他已经知道的物品; -
候选物品以外的物品 候选物品集合一般有两个来源,一个是产品需求,另一个是用户的选择,过滤模块需要过滤掉不满足这两个条件的物品 -
某些质量很差的物品 为了提高用户的体验,推荐系统需要给用户推荐质量好的物品,那么对于一些绝大多数用户反馈都很差的物品,推荐系统需要过滤掉。
经过过滤后的推荐结果可以在进行排名,一般排名模块需要包括很多不同的子模块,例如:
-
新颖性排名 新颖性排名模块的目的是给用户尽量推荐他们不知道的、长尾中的物品。例如通过使用如下公式对推荐结果中热门的物品进行降权: -
内容多样性 一是可以将推荐结果按照某种物品的内容属性分成几类,然后在每个类中都选择该类中排名最高的物品进行组合;二是可以让推荐结果尽量来自不同的特征。 -
时间多样性 提高时间多样性最关键的地方在于保证推荐系统对用户行为响应的实时性;其次是要在用户没有新的行为时,保证推荐结果每天都有变化,一种实现方法是:记录用户曾经看过的推荐结果,然后对当前推荐结果中将已经看过的推荐结果进行降权。 -
用户反馈 用户反馈模块主要通过分析用户之前和推荐结果的交互日志,预测用户会对什么样的推荐结果比较感兴趣
以上是关于《推荐系统实践》 5. 推荐系统实例的主要内容,如果未能解决你的问题,请参考以下文章