如果数据量小,推荐策略不需要太复杂,一般情况,没有百万级用户不需要推荐。
推荐系统中包括两个主要模块,召回和精排。
召回:从百万甚至千万级别物品中快速,全面的迭代出百级别的候选物品,数据候选集大,模型特征简单,考虑时间开销和时效性,所以一般采用多路召回。
精排:对召回结果进行精细化打分,推荐给用户,一般使用复杂的模型和特征。
一、从系统架构方面考虑,分为离线和在线部分
-
离线架构
- (1)内容源的收集与规范,(如淘宝的商家上架的物品,头条中的文章(一般需经过人工审核后进入非结构化数据库如mongodb),审核内容包括政治,涉黄,时效性,算法分类错误)
- (2)日志的收集与规范化
- (3)训练数据的收集
- (4)模型训练与更新
两种主流训练方式:增量更新,全量更新
(1.4.1)模型增量更新(天/小时级别)
在推荐场景下,用户行为变化比较快,所以需要及时更新模型。增量更新时不重新初始化,而是在前一次(前一天或前一个小时)的基础上继续训练。
(1.4.2 )模型每隔一段时间全量手动更新
即全量更新模型的参数,如lr的w,神经网络的权重矩阵,需重新初始化参数。
通常是两者结合在一起,如每隔一个月全量更新,每天增量更新。
1.2、在线架构
引擎端是实时的,压力较大,召回是异步的,所以业务规则较多的情况下,将规则放入召回。为什么可以这么做?召回模块压力不大吗?
因为召回一般是异步召回,提前离线计算好写入缓存db,如redis后等待调用即可,所以这儿可以做业务规则的过滤。更多关于召回的技术迭代参考:https://zhuanlan.zhihu.com/p/351716045