Sparrow Recsys技术架构图
数据和模型部分
- 选用 Item2Vec、Deep Walk等不同的 Embedding 方法,来生成物品Embedding向量。考虑到大数据条件下,数据处理与训练的一致性,在Sparrow Recsys中,我们会采用 Spark 进行数据处理,同时选择Spark MLlib进行Embedding的训练。
- 对于一些比较复杂的Embedding方案,比如特征种类很多,网络结构也更多样化的Embedding模型,业界也多采用Spark进行原始数据处理,生成训练样本后交由TensorFlow或PyTorch训练。
- 为了方便线上服务使用,我们还需要在生成Embedding后,把它们存入某个高可用的数据库。Sparrow Recsys选择了最主流的内存数据库Redis作为实现方案,这一部分的具体实现。同样业界也会使用Cassandra、RocksDB等不同的存储方案来实现 Embedding 向量的高效读取。
线上服务部分
-
物品库的建立
这里项目中的movieLens数据集直接载入到内存的,对于业界比较复杂的推荐业务来说,候选集的选取往往是有很多条件的。例如物品过期、下架、不可用或有没有其他过滤条件。工业级推荐系统往往会通过比较复杂的SQL查询,或者API查询来获取候选集。 -
召回层实现
物品的 Embedding 向量已经在离线生成,所以我们可以自然而然的使用Embedding召回的方法来完成召回层的实现。同时Sparrow Recsys也实现了基于物品metadata(元信息)的多路召回方法。 -
排序层实现
-
根据Embedding相似度进行推荐,是深度学习推荐系统最主流的解决方案,所以在Sparrow Recsys中,也是先根据召回层过滤出候选集,再从Redis中取出相应的Embedding向量,然后计算目标物品和候选物品之间的相似度,最后进行排序就可以了。因为Word2Vec定义的是内积相似度,所以这里选用的是内积相似度。
前端展示
- Sparrow Recsys的前端部分采用了最简单的HTML+AJAX(异步 JavaScript和XML请求)请求的方式。
- AJAX指的是不刷新整体页面,用JavaScript异步请求服务器端,更新页面中部分元素的技术。当前流行的JavaScript前端框架 React、Vue 等等也大多是基于AJAX来进行数据交互的。
- 输入http://localhost:6010/movie.html?movieId=1连接就可以看到玩具总动员这部电影的推荐页面了,如下图:
相似似电影推荐的结果和初步分析
常见推荐结果评估方法:
-
方法一:人肉测试(SpotCheck):
在一种Embedding结果出现之后,第一时间做一个抽样测试,看一看基于Embedding的相似推荐结果是不是符合你自己的常识。 -
方法二:指定Ground truth(可以理解为标准答案):
虽然相似影片的Ground truth因人而异。但如果只是为了进行初步评估,也可以指定一些比较权威的验证集。例如,用IMDB的more like this的结果进行验证。 -
方法三:利用商业指标进行评估:
对于一个商业网站来说,无非是提高点击率,播放量等等。因此,完全可以跃过评估相似度这样一个过程,直接去评估它的终极商业指标。例如,通过上线一个新的相似电影模型,让相似电影这个功能模块的点击率提高,假设提高了 5%,那就是一个成功的模型改进。