Fork me on GitHub

浅谈流式模型训练体系

作者: 陈文强

1、前言

训练数据流式生成,模型增量训练,及时捕获用户不断变化的实时兴趣是提升推荐系统性能和效果的重要方式。

preview

2、流式训练数据生产

曝光 topic、scorer stream topic 和各类行为数据实时接入,流式关联特征数据,生成训练样本。

preview

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 维护一份特征编码映射表。举例:

201902110900 user field 的特征个数是 1,000,000,则给 user_field 维护一个特征映射编码表,形如:<feature_id, feature_index, last_hit_timestamp>

preview

201902110930 时,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。

preview

4、在线模型更新

tf-serving 自动检测新模型,天然支持模型文件增量更新。特征文件的更新方式同现有方式。

preview


本文地址:https://www.6aiq.com/article/1582912096690
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出