在双塔模型训练完成后,针对实时推荐新用户的场景,核心流程确实是两步:
- 实时生成用户Embedding:将新用户的特征输入用户塔,得到用户的实时Embedding。
- 相似度计算与召回:将该用户Embedding与预计算的商品Embedding库进行相似度计算(如点积、余弦相似度),返回Top-K最相似的商品。
不过,这个过程还有一些关键细节需要补充,以下是一个完整的流程说明:
1. 推荐流程详解
(1)离线预计算商品Embedding
- 物品塔预计算:对所有商品(如百万级或亿级),提前通过物品塔生成Embedding,并存储到向量数据库(如FAISS、HNSW、Annoy)。
- 为什么离线计算?
商品库数量庞大,直接在线计算所有商品Embedding延迟过高。预计算后,在线只需处理用户Embedding和相似度检索。
(2)在线实时生成用户Embedding
- 用户特征输入:当新用户访问时,系统会收集用户特征(如实时行为、基础画像)。
- 如果用户是全新用户(冷启动):可能只有基础特征(如设备类型、地理位置),需依赖冷启动策略(如默认Embedding、热门商品兜底)。
- 如果用户有实时行为(如最近点击的3个商品):可通过用户塔实时更新Embedding。
- 用户塔推理:将用户特征输入用户塔,实时生成用户Embedding(毫秒级延迟)。
(3)相似度检索(召回)
- 近似最近邻搜索(ANN):使用向量数据库快速检索与用户Embedding最相似的Top-K商品Embedding。
- 常见方法:FAISS的IVF-PQ、HNSW等算法,支持亿级向量毫秒级检索。
- 目标:从海量商品中筛选出几百到几千个候选集。
(4)返回召回结果
- 将Top-K商品ID返回给下游的排序模型(如精排模型),进一步结合交叉特征、上下文特征进行精准排序。
2. 举个实际例子
场景:用户刚注册抖音,首次打开APP,系统需实时推荐视频。
-
用户特征:
- 冷启动特征:设备类型=iPhone,地理位置=北京,注册时间=今天。
- 实时行为(暂无)。
-
生成用户Embedding:
- 用户塔将冷启动特征转换为Embedding(如
[0.1, -0.3, 0.5, ...])。
- 用户塔将冷启动特征转换为Embedding(如
-
相似度检索:
- 从预计算的视频Embedding库中,找到与用户Embedding最相似的1000个视频。
-
冷启动兜底:
- 如果模型对新用户Embedding置信度低,可混合热门视频、地域相关视频作为召回结果。
-
最终推荐:
- 召回结果经过排序模型,生成最终推荐的10个视频。
3. 关键问题与解决方案
(1)新用户冷启动问题
- 策略:
- 使用默认Embedding(如全零向量 + 用户基础特征)。
- 融合非个性化召回(如热门商品、地域趋势)。
- 实时行为补偿:当用户产生首次点击后,立即更新Embedding。
(2)用户特征的实时性
- 动态行为序列:
- 用户最近点击/观看的N个商品ID,需实时拼接成序列输入用户塔(如通过Flink实时处理)。
- 例如:用户点击商品A后,Embedding会立即偏向与商品A相似的物品。
(3)物品库的更新
- 动态更新Embedding:
- 新增商品需定期(如每天)通过物品塔生成Embedding,并更新到向量数据库。
- 旧商品Embedding可保持不变(除非模型重新训练)。
4. 总结
你的理解完全正确!双塔模型的在线推荐本质是:
- 用户侧实时:用户特征→用户塔→用户Embedding。
- 物品侧离线:预计算商品Embedding库(提前离线计算好的商品的embedding,因为商品量巨大,实时计算有延迟)。
- 相似度桥梁:通过向量检索连接用户与商品。
这种架构平衡了效果与效率,是工业界大规模推荐系统的标配方案。