推荐系统--系统架构
这段时间公司的事情比较多,没有时间继续写推荐系统相关的内容。现在继续来学习推荐系统,这篇作为推荐系统第一阶段(不知道还有没有第二阶段)的结束篇,讲一讲推荐系统架构。
为什么将系统架构,因为之前说了,学习推荐系统主要是围绕《推荐系统实践》这本书,而这本书呢,是12年就写了,在技术的细节上,稍微是有些过时的(现在推荐系统的套路变化也不大),通过阅读,我觉得前三章内容是需要单独讲讲的,也是推荐系统里面都会遇到的问题。从第四章到第六章,在讲如何利用数据的问题(用户标签,上下文,社交网络),这些是提供了思路,并不是作为一个很普适性的问题,所以就不写关于这些的内容了。
到了第七章,是一章实例,也是讲推荐系统的架构,我好好看了一下这章内容,虽然这本书有些内容有些过时,但是这个架构一直延续再用,下面开始聊聊。
1. 实现框架
一个常见的实现框架一般来说,每个网站都会有一个UI系统,UI系统负责给用户展示网页并和用户交互。网站会通过日志系统将用户在UI上的各种各样的行为记录到用户行为日志中。日志可能存储在内存缓存里,也可能存储在数据库中,也可能存储在文件系统中。而推荐系统通过分析用户的行为日志,给用户生成推荐列表,最终展示到网站的界面上。
2.推荐系统框架
推荐系统联系用户和物品用户和物品之间的联系(也可以认为是推荐算法)总体来说有三种,如果认为用户喜欢的物品也是一种用户特征,或者和用户兴趣相似的其他用户也是一种用户特征,那么用户就和物品通过特征相联系。
所以根据以上的三种方法,可以设计一种基于特征的推荐系统架构。当用户到来之后,推荐系统需要为用户生成特征,然后对每个特征找到和特征相关的物品,从而最终生成用户的推荐列表。因而,推荐系统的核心任务就被拆解成两部分,一个是如何为给定用户生成特征,另一个是如何根据特征找到物品。
是不是很像神经网络,没错,其实现在用深度学习做推荐就是这样做。
那么,我们的任务就是需要收集用户的特征了(前面的第四章到第六章可以用起来了),比如说可以收集
- 用户的注册信息:年龄性别民族等
- 用户的行为特征:浏览记录,收藏记录,点赞记录等
- 用户的话题特征:对什么感兴趣
因为推荐系统的推荐任务有很多,比如说将最新的物品推荐给用户,VIP产品推荐给用户,把用户感兴趣的东西推荐给用户等等n多任务。
如果要在一个系统中把上面提到的各种特征和任务都统筹考虑,那么系统将会非常复杂,而且很难通过配置文件方便地配置不同特征和任务的权重。因此,推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一类特征和一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或者优先级合并、排序然后返回。
推荐系统架构
为什么要这样设计,因为这样做有两个好处
- 可以方便地增加/删除引擎,控制不同引擎对推荐结果的影响。对于绝大多数需求,只需要通过不同的引擎组合实现。
- 可以实现推荐引擎级别的用户反馈。每一个推荐引擎其实代表了一种推荐策略,而不同的用户可能喜欢不同的推荐策略。有些用户可能喜欢利用他的年龄性别作出的推荐,有些用户可能比较喜欢看到新加入的和他兴趣相关的视频,有些用户喜欢比较新颖的推荐,有些用户喜欢专注于一个邻域的推荐,有些用户喜欢多样的推荐。我们可以将每一种策略都设计成一个推荐引擎,然后通过分析用户对推荐结果的反馈了解用户比较喜欢哪些引擎推荐出来的结果,从而对不同的用户给出不同的引擎组合权重。
所以接下来就要设计推荐引擎了。
3.推荐引擎架构
推荐引擎架构图推荐引擎主要分三个部分:
部分A负责从数据库或者缓存中拿到用户行为数据,通过分析不同行为,生成当前用户的特征向量。不过如果是使用非行为特征,就不需要使用行为提取和分析模块了。该模块的输出是用户特征向量。
部分B负责将用户的特征向量通过特征-物品相关矩阵转化为初始推荐物品列表。
部分C负责对初始的推荐列表进行过滤、排名等处理,从而生成最终的推荐结果。
这里三个模块中,A、B模块太细节,每个推荐系统都要单独设计,在C模块中,过滤和排名是很重要的。
3.1 过滤
得到初步的推荐列表之后,并不能把所有的物品都推荐给用户,一般要过滤掉那些不符合要求的物品,比如
- 用户已经产生过行为的物品
- 候选物以外的物品(比如不符合产品需求)
- 质量很差的物品(依据历史评价)
3.2 排名
经过过滤后的推荐结果直接展示给用户一般也没有问题,但如果对它们进行一些排名,则可以更好地提升用户满意度。排名的选择,主要看设计的策略,比如新颖度排名,多样性排名,时间多样性排名和用户反馈情况。
推荐系统--结束语
这个系列写了四篇文章,到这里就结束了。写完总体感受是,推荐系统的工程问题应该优于推荐算法考虑,其中的内容非常的深,也不是看几本书就能掌握的,项亮的这本书,只是带着读者大概了解了一下推荐系统的基本问题,所以想要继续了解,必须要充分的实践。
以后就是第一阶段的内容,后面有机会的话,应该会从工程的角度来谈推荐系统.