系列文章传送门
(1)工业界推荐系统-小红书推荐场景及内部实践【业务指标、链路、ItemCF】
(2)工业界推荐系统-小红书推荐场景及内部实践【UserCF、离线特征处理】
(3)工业界推荐系统-小红书推荐场景及内部实践【矩阵补充、双塔模型】
(4)工业界推荐系统-小红书推荐场景及内部实践【正负样本选择】
(5)工业界推荐系统-小红书推荐场景及内部实践【线上召回和模型更新】
(6)工业界推荐系统-小红书推荐场景及内部实践【其他召回通道】
该系列文章根据小红书搜推算法工程师、团队负责人王树森B站上主讲的《工业界的推荐系统》之小红书业务场景及内部实践整理而得。感谢大佬分享工业界前沿的推荐系统实战技术!
双塔模型:线上召回和更新
线上召回
将物品的 representation 向量离线存储到向量数据库中:
离线存储
- 完成训练之后,用物品塔计算每个物品的特征向量 𝐛 。
- 把几亿个物品向量 𝐛 存入向量数据库(比如 Milvus、 Faiss、HnswLib )。
- 向量数据库建索引,以便加速最近邻查找。
线上召回
- 给定用户ID和画像,线上用神经网络算用户向量 𝐚。
- 最近邻查找:
- 把向量 𝐚 作为 query,调用向量数据库做最近邻查找。
- 返回余弦相似度最大的 k 个物品,作为召回结果。
事先存储物品向量 𝐛,线上现算用户向量 𝐚,why?
- 每做一次召回,用到一个用户向量 𝐚 ,几亿物品向量 𝐛 。
(线上算物品向量的代价过大。) - 用户兴趣动态变化【需要实时更新用户特征】,而物品特征相对稳定。(可以离线 存储用户向量,但不利于推荐效果。)
模型更新
全量更新:今天凌晨,用昨天全天的数据训练模型
- 在昨天模型参数的基础上做训练。(不是随机初始化)
- 用昨天的数据,训练 1 epoch,即每天数据只用一遍。
- 发布新的用户塔神经网络和物品向量,供线上召回使用。
- 全量更新对数据流、系统的要求比较低。
增量更新:做 online learning 更新模型参数
- 用户兴趣会随时发生变化。
- 实时收集线上数据,做流式处理,生成 TFRecord 文件。
- 对模型做 online learning,增量更新 ID Embedding 参数。 (不更新神经网络其他部分的参数。)
- 发布用户 ID Embedding,供用户塔在线上计算用户向量。(增量模型通常不更新物品塔)
增量更新:是在当天全量模型更新的基础上更新的,到下一天全量模型上线后,自动废止。
问题:能否只做增量更新,不做全量更新?
- 小时级数据有偏;分钟级数据偏差更大。
- 全量更新:random shuffle 一天的数据,做 1 epoch 训练。
- 增量更新:按照数据从早到晚的顺序,做 1 epoch 训练。
- 随机打乱优于按顺序排列数据,全量训练优于增量训练。