根据响应用户行为的速度不同,推荐系统大致分为基于离线训练在线训练的推荐系统。

离线推荐

离线训练通常是指使用历史一段时间(一周/几周)的数据进行训练,模型迭代周期较长,模型拟合的是用户的中长期兴趣

推荐系统架构:

  • 学习系统
    • 数据上报
    • 离线训练
  • 预测系统
    • 实时计算推荐
    • A/B测试
  • 在线存储:存储模型和模型所需要的特征信息,供实时计算模块调用

1. 数据上报

搜集业务数据组成训练样本,一般分为收集、验证、清洗和转换几个步骤。将收集的数据转化为训练所需要的样本格式存储到离线数据模块
**

2. 离线训练

细分为离线存储和离线计算,实际业务中的推荐系统通常需要处理海量的用户行为数据,所以离线存储模块需要有一个分布式的文件系统或者存储平台。离线计算常见操作包括:样本抽样、特征工程、模型训练、相似度计算等
**

3. 在线存储

线上服务对于时延有严格要求,耗时长会影响用户体验。通常要求推荐系统在几十毫秒内处理用户请求返回推荐结果。因此,针对线上服务,需要有一个专门的在线存储模块,负责存储用于线上使用的模型和特征数据
**

4. 实时推荐

实时推荐模块的功能是对业务的新请求进行预测,包括:

  1. 获取用户特征
  2. 调用推荐模型
  3. 结果排序

在实际应用中,由于业务的物品列表太大,如果实时计算对每个物品使用复杂模型打分,会导致耗时过长影响用户满意度。所以,常见做法是将推荐列表生成分为召回和排序两步。

召回(分类、协同过滤
是从大量的候选物品中(几百万)
筛选一批用户较可能喜欢的候选集(几百)。

排序 (GBDT, LR)
对召回得到的相对较小的候选集使用排序模型进行打分。

重排过滤 (多样性,兴趣)
在得到排序列表后,为了多样性和运营的考虑,加入第三部重排过滤,用于对精排后的推荐列表进行处理。

5. A/B 测试

AB Test 实验一般有 2 个目的:

  1. 判断哪个更好:例如,有 2 个 UI 设计,究竟是 A 更好一些,还是 B 更好一些,我们需要实验判定
  2. 计算收益:例如,最近新上线了一个直播功能,那么直播功能究竟给平台带了来多少额外的 DAU,多少额外的使用时长,多少直播以外的视频观看时长等

我们一般比较熟知的是上述第 1 个目的,对于第 2 个目的,对于收益的量化,计算 ROI,往往对数据分析师和管理者非常重要。

在推荐系统中,A/B测试可以帮助开发者评估新算法对客户行为的影响,除了离线的指标外,一个新的推荐算法上线前,一般会通过A/B测试来测试新算法的有效性。

各组件架构图


在线训练

对于业务来说,我们希望用户对于上一个广告的反馈(喜欢/不喜欢,是否点击)快速运用于下一次的广告推荐中,这就要求我们用在线训练的方法实现。

基于在线训练的推荐系统架构适用于广告和电商等高维度大数据量且实时性要求高的场景。基于在线训练的推荐系统不区分训练和测试阶段,每个回合都在学习,通过实时反馈来调整策略。

此外,在线训练不需要将所有训练数据都存储下来,所以不需要巨大的离线存储开销,使得系统具有良好的伸缩性,支持超大的数据量和模型。

主要流程与离线架构上相似,细分为如下部分:
**

  1. 样本处理

数据上报阶段进行样本处理,对样本去重、过滤和采样等实时计算

  1. 实时特征获取

特征拼接和特征工程,通过实时处理样本数据获取训练需要的特征
**

  1. 流式训练

使用实时训练样本更新模型,支持模型的稀疏存储。训练方面,在线模型并不是从0开始训练,而是可以将离线训练得到的模型参数作为基础,进行增量训练

  1. 模型存储和加载

模型通常存储在参数服务器中,模型更新后,将模型文件推送到线上存储,并由线上服务模块动态加载。