“ 本文从流式数据产生,离线增量模型训练,在线模型更新方面简要介绍了流式模型的训练体系。”
本文来源:陈文强 https://zhuanlan.zhihu.com/p/89512081
1、前言
训练数据流式生成,模型增量训练,及时捕获用户不断变化的实时兴趣是提升推荐系统性能和效果的重要方式。
2、流式训练数据生产
曝光topic、scorer stream topic和各类行为数据实时接入,流式关联特征数据,生成训练样本。
2.1 数据来源说明
scorer stream包含的是scorer关联好实时特征后下发的形如<trace_id, uid, mid, real-time features>的日志,保证实时特征,例如用户浏览过的item ID list,不会因为延迟等待而不准确。
impression stream、click stream等各类行为数据形如<trace_id, uid, mid, timestamp>
各类topic通过<trace_id, _[ uid, mid ] _ >关联,生成训练样本<uid, aid, mid, label>。
因此,需要保证各类topic的trace_id有效。
2.2 样本关联的延迟等待问题
现象: 线上环境复杂,某些数据源可能迟到,导致某段时间内正负样本比例失真。
解决: pair-wise sampling。曝光缓存在N分钟池和2N分钟池,等待各种正样本。正样本到来后关联N分钟缓存池的曝光,并从2N分钟缓存池负采样。
2.3 流式特征关联
根据uid/mid/aid关联各类特征。
2.4 特征编码
tensorflow不支持kv形式的参数,需要对特征进行0-max feature_size的连续编码。
一种可行的特征编码方案是给每个field维护一份特征编码映射表。举例:
「20190211」 0900 user field的特征个数是1,000,000,则给user_field维护一个特征映射编码表,形如:<feature_id, feature_index, last_hit_timestamp>
「20190211」 0930时,user field有一个user新点击了一个feed:「USER@1005001#6496196953679594497」 , 此时替换特征编码映射表中最远不被命中的feature_id,「USER@1003001#7487, 为USER@1005001#6496196953679594497。」
如此,user field的feature_index大小仍然是1,000,000。
3、离线增量模型训练
历史7天数据pretrain, 再接入mini-batch数据fine-tune。初期不考虑parameter server。
4、在线模型更新
tf-serving自动检测新模型,天然支持模型文件增量更新。特征文件的更新方式同现有方式。
(完)