周一,我们讨论了基于线下离线计算的推荐架构,这也是最简单的一种推荐架构。我们了解了这种架构的优劣势,以及能够做的一些方案。
今天,我们来看另外一种也很常见的推荐系统架构,那就是基于多层搜索架构的推荐系统。
推荐架构需要解决的问题
周一我们详细讨论了推荐架构需要解决的问题,今天做一个简单的回顾。
推荐系统解决三个需求。
第一,推荐系统架构能够在一两百毫秒内给用户提供当前的推荐结果,即实时呈现推荐结果。
第二,推荐系统架构需要对用户和系统的交互结果做出响应。
第三,推荐系统架构需要考虑用户群体的覆盖率问题。
我们周一次讲到的基于离线计算的推荐架构,可以很好地解决第一个问题。解决思路就是先计算好所有的结果,然后存在某种存储空间里,当用户来到网站的时候,再直接显示事先已经计算好的结果。然而,这样的架构在第二和第三个需求面前,就显得有些捉襟见肘了。
基于多层搜索架构的推荐系统
我们前面在介绍搜索系统的时候,多次提到了多层搜索架构。一起来回顾一下这种架构。
首先,我们有一个索引,能够根据某些特性(比如关键字)来把所有的文档存储到里面,方便随时检索。
第一层或者叫第一轮打分,是发生在索引这个层面,我们通过一些简单的流程或者函数,往往是线性函数或者布尔值函数,来获取最相关的几百最多几千个文档。
紧接着,第二层或者叫第二轮打分,就是一个重排序的过程。这个时候,我们往往只需要针对几百个文档进行打分,所以可以使用相对比较复杂的函数,比如基于决策树的模型或者深度模型,以得到最终的结果。
有些时候,在第二轮打分之后,还有后面的轮数,主要是针对一些不同的商业规则,比如结果的多样性等等。
多层搜索架构可以支持搜索结果,自然地,对第一个需求,也就是在规定的时间内返回结果,有很好的支持。在搜索里面,用户输入查询关键词以后,大多数情况都希望能够快速得到结果。一般来说,我们把在所有文档里查找相关信息分解为两个步骤,先查找一个大概相关的集合,然后再在这个集合里进行重排序。特别是第一个步骤,往往是在索引上并行进行的,因此速度也相对比较快。
那么,多层搜索架构如何来解决第二和第三个需求呢?