GitHub地址:SparrowRecSys @王喆
简介
SparrowRecSys是较为完善的推荐系统,包括工程结构、深度推荐模型、多路召回、排序等部分;推荐包括online、nearlin、offline。
技术栈
TensorFlow:搭建Model、部署上线(通过TensorFlow serving)
Flink:批处理
Spark:数据处理和基本模型搭建、训练
Redis:内存数据库,保存embedding数据,供online推荐使用
Jetty:java实现的轻量级服务器
前端部分:HTML、CSS、JS
技术架构
关键过程
推荐系统的主要关键过程包括:读取候选物品、多路召回、排序、补充算法、生成候选物品列表。召回recall和排序sort是核心。
- 召回
从候选物品集合(千万、百万量级)中筛选出少量的物品(万、千量级),目的是提高实时性。
- 排序
对召回的物品打分,取高分的前N个(百、十)生成结果。在工程实践中,会使用多路召回,即使用很多种不同的召回策略,join生成候选集;排序之后的结果也会针对实时性、召回物品的特征进行筛选、打散等操作。
- offline:
使用全量数据训练复杂的Model,复杂意味着更高的查准率(recall)和查全率(precision),也意味着更长的训练时间,更多的参数,更大的模型。在实际的工程中,内存可能会成为瓶颈,同时也限制了端上智能(可以简单理解为APP上的神经网络)。
技术选型:spark
- online:
实时性强,表现在两个方面:模型处理速度快;能够响应用户的最新操作。一般使用低复杂度的算法。
技术选型:基于规则的推荐
- nearline
通过时间窗口对一段时间的缓存数据进行批处理,处于offline和online中间。
技术选型:Flink