外围架构
一般来说,每个网站都有一个 UI 系统,UI 系统负责给用户展示网页并和用户交互。网站会通过日志系统将用户在 UI 上的各种各样的行为记录到用户行为日志中。
从上面的结构可以看到,除了推荐系统本身,主要还依赖两个条件--界面展示和用户行为数据。
推荐系统架构
推荐系统联系用户和物品的主要方式如下图所示。如果将这三种方式都抽象一下就可以发现,如果认为用户喜欢的物品也是一种用户特征,或者和用户兴趣相似的其他用户也是一种用户特征,那么用户就和物品通过特征相联系。
根据上面的抽象,可以设计一种基于特征的推荐系统架构。当用户到来后,推荐系统需要为用户生成特征,然后对每个特征找到和特征相关的物品,从而最终生成用户的推荐列表。因而,推荐系统的核心任务就被拆解成两部分,一个是如何为给定用户生成特征,另一个是如何根据特征找到物品。
用户的特征非常多,主要包括以下几类:
人口的统计学特征:包括用户的年龄,性别,国籍,民族等用户注册时提供的信息。
用户的行为特性: 包括用户浏览过什么商品,购买,收藏,评分等用户行为相关的特征。
用户的话题特征: 可以根据用户的历史行为利用话题模型将电视剧和电影聚合成不同的话题,计算用户对什么话题感兴趣。
如果要在一个系统中把上面提到的特征和任务都统筹考虑,那么推荐系统会非常复杂,而且很难通过配置文件方便的配置不同特征和任务的权重。因此,推荐系统需要由多个推荐引擎组成,每个引擎负责一类特征和一种任务。推荐系统的任务就是将不同的推荐引擎的结果按照一定的权重或者优先级合并,排序然后返回。推荐系统架构如图:
可以方便的增加/删除引擎,控制不同引擎对推荐结果的影响。
可以实现推荐引擎级别的用户反馈。每一个推荐引擎其实代表了一种推荐策略,而不同的用户可以喜欢不同的推荐策略。
推荐引擎的架构
如图所示,推荐引擎架构主要分为 3 部分:
部分 A 主要负责从数据库或者缓存中拿到用户行为数据,通过分析不同的行为,生成当前用户的特征向量。
部分 B 负责将用户的特征向量通过特征-物品相关矩阵转化为初始推荐物品列表。
部分 C 负责对初始化的推荐列表进行过滤、排名等处理,从而生成最终的推荐结果。
生成用户特征向量:在利用用户行为计算特征向量时需要考虑以下因素
用户行为的种类-- 在一个网站中,用户可以对物品产生很多种不同种类的行为。如浏览,购买,评分等。一般标准就是用户付出代价越大的行为权重越高。比如,用户购买行为需要掏钱,所以用户会三思而后行,因此购买行为最重要。
用户产生行为的时间 -- 一般来说,近期的行为比过去重要。
用户行为的次数 -- 有时用户对一个物品会产生多次行为,行为次数多的物品对应的特征权重越高。
物品的热门程度 -- 用户对不热门的物品产生的行为更能代表用户的个性。
特征-物品相关推荐:从架构图可以看出,特征-物品相关推荐可以接受一个候选物品集合。候选物品集合的目的是保证推荐结果只包括含候选物品集合中的物品。比如有些产品要求给用户推荐最近一周加入的新的物品,那么候选物品集合就包括最近一周新加的物品。
过滤和排名:将初始推荐列表中一些用户已经看过的,或者总体评分低的,质量差的,或者推荐后用户可以自己根据条件刷选的(比如价格区间)的物品过滤掉,并按照一定的排序规则(比如新颖度)展现给用户,生成最终的推荐结果。