1.外围架构
推荐系统和其他系统之间的关系如图所示:
数据收集和存储:用户有不同的行为,不同行为产生的结果不同,有些行为产生后需要实时做出反映,例如用户购买商品等,在点击购买后,用户的购买列表中会出现商品,而浏览物品的行为不需要实时存储,根据是否需要实时存储以及数据规模将不同的数据存储在不同的媒介中,需要实时存储的数据存储在数据库和缓存中,大规模的非实时存取数据存储在分布式文件系统中。
2.推荐系统架构
推荐系统是联系用户和物品的媒介,推荐系统联系用户和物品的方式主要有3种:
可以将用户喜欢物品,以及用户相似兴趣的好友都视为一种特征,即可将用户和物品通过特征联系起来。推荐系统的核心任务就变为了两部分,一个是如何为用户生成特征,另一个是如何根据特征找到物品。
由于用户的特征种类和推荐系统的推荐任务都非常多,一个系统很难全部实现,因此一个推荐系统一般都是由多个搜索引擎组成,不同搜索引擎负责不同的任务,然后推荐系统将结果按一定权重和优先级合并排序。
3.推荐引擎的架构
推荐引擎使用一种或者几种用户的特征,按照一种推荐策略生成一种类型物品的推荐列表。推荐引擎主要包含三部分:
1.通过分析用户的行为,生成用户的特征向量
2.将用户的特征向量通过特征-物品相关矩阵转化为初始推荐物品列表
3.对初始的推荐列表进行过滤、排名等
3.1 生成用户特征向量
用户特征一般分两种:一种是用户的注册信息种可以提取出来的,另一种是从用户行为中计算出来,特征向量由特征和权重组成。
用户行为的种类:用户有很多种行为,比如浏览物品,收藏物品,评论,购买等,不同行为对物品特征权重的影响不同,一般是根据用户需要付出代价来衡量权重的大小,购买物品一般权重较大,而浏览的权重小。
用户行为产生时间:近期行为比远期行为权重更大
用户行为的次数:行为次数多的物品对应特征权重更大
物品的热门程度:会加重对不热门物品对应特征的权重
3.2 特征-物品相关推荐
得到用户特征向量后,对于用户的每个特征在相关表中存储和它最相关的N个物品,特征-物品相关表一般不止一张,最终推荐是按照权重将相关表相加得到。
候选物品集合代表推荐结果只包含候选物品集合中的东西,例如一个产品要求给用户推荐近一周新加入的物品,那么候选物品集合就只包括最近一周新加的物品。
3.3 过滤模块
在得到初步推荐列表后,还需要进一步进行过滤,过滤掉以下物品:1.用户已经产生过行为的物品,2.候选物品之外的物品,3.某些质量很差的物品
3.4 排名模块
一般排名模块包括很多不同的子模块:
1.新颖性排名:
新颖性排名模块的目的是给用户尽量推荐他们不知道的、长尾中的物品。因为准确了解用户是否知道物品很难做到,因此只能通过近似的方法如对热门物品进行降权:
仅仅在最后步骤中对热门物品降权是不够的,需要在过程中就考虑到新颖性,回想计算公式:
即主要取决于两个参数和,r为通过用户行为生成用户特征向量时计算,而是离线计算的物品相似度。分别对 和进行降权:
由于通过分析相似度矩阵可以得知,热门物品倾向于和热门物品相似,冷门物品和冷门物品相似,因此如果想推荐冷门物品,也需要对热门物品降权,相似度部分同样也进行降权:
2.多样性排名
增加多样性可以让推荐结果覆盖尽可能多的用户兴趣。但是也需要看应用场景,例如在音乐推荐中,用户某一时刻的兴趣是固定的,只想听到某种类型的歌曲。
第一种提高多样性的方法为将物品分为多类,然后每一类中选择排名最高的物品最后组成推荐列表。但是存在问题是 如成龙的电影到底属于动作片还是喜剧每个人想法不同,不一定能得到公认。
第二种方法为控制不同推荐结果的推荐理由出现的次数,推荐理由一般是产生推荐结果的重要特征,要提高多样性就需要推荐理由尽可能不同。
3.时间多样性
时间多样性主要是为了保证用户不要每天来推荐系统都看到同样的推荐结果,首先就是保证推荐系统的实时性,当用户有新的行为时,推荐系统能够对其做出反应。第二个方面是用户没有新行为时,也要对结果做出一些变化。通过以下实现:记录用户每次登录时看到的结果,然后将这些结果返回存储,当再次登录时对已经出现的结果做降权处理。
4.用户反馈
用户反馈模块主要通过分析用户之前和推荐结果的交互日志,预测用户对什么样的结果感兴趣。如果推荐系统的目标是提高用户对推荐结果的点击率,那么可以用点击模型(click model),预测用户是否会点击推荐。点击率预测可以用如下特征预测用户u会不会点击物品i: