一文看懂推荐系统:物品冷启04:Look-Alike 召回,从广告到推荐的工程化落地

张开发
2026/6/13 6:47:37 15 分钟阅读
一文看懂推荐系统:物品冷启04:Look-Alike 召回,从广告到推荐的工程化落地
1. Look-Alike技术的前世今生从广告到推荐第一次听说Look-Alike这个词是在2016年的一次广告技术分享会上。当时一位来自某头部广告平台的技术负责人正在讲解他们如何帮助广告主精准触达目标用户。他举了个例子某奢侈品牌想投放新品广告但只有5万VIP客户数据通过Look-Alike技术最终找到了50万潜在客户投放ROI提升了3倍多。这个案例让我印象深刻。后来在做推荐系统时我发现新物品冷启动面临的问题简直如出一辙一个新上架的物品只有少量初始用户与之交互如何快速找到更多可能喜欢的用户于是我开始尝试将广告领域的Look-Alike技术迁移到推荐系统。核心思想其实很简单物以类聚人以群分。无论是广告还是推荐本质上都是在解决如何找到相似人群的问题。广告领域用种子用户如已购买客户找相似人群进行投放推荐系统则用种子用户如点击过新物品的用户找相似人群进行推荐。但具体实现上推荐系统的Look-Alike有几点特殊之处动态性更强广告的种子用户通常较稳定而推荐系统的种子用户会随着物品曝光不断变化实时性要求高广告可以接受小时级更新推荐系统通常需要分钟级响应特征维度更丰富除了用户画像还要考虑用户行为序列、上下文特征等2. 工程化落地的三大核心问题2.1 种子用户的选择与处理在小红书的实践中我们发现种子用户的选择直接影响最终效果。最初我们简单地将所有有过正向交互点击、点赞、收藏等的用户都作为种子结果发现效果并不理想。后来通过数据分析发现行为深度很重要收藏用户的权重应该大于点赞用户点赞用户权重大于点击用户时间衰减很关键最近3天的交互比1个月前的交互更有参考价值异常用户要过滤某些点赞狂魔用户会干扰种子群体的代表性最终我们的种子用户处理流程如下def process_seed_users(item_id): # 获取最近7天有过交互的用户 raw_users get_interacted_users(item_id, days7) # 按行为类型加权 weighted_users [] for user in raw_users: weight 0 if user.has_clicked(): weight 1 if user.has_liked(): weight 3 if user.has_collected(): weight 5 if user.has_shared(): weight 8 weighted_users.append((user, weight)) # 过滤异常用户交互频次超过3σ mean np.mean([w for _,w in weighted_users]) std np.std([w for _,w in weighted_users]) filtered_users [u for u,w in weighted_users if w mean 3*std] return filtered_users2.2 用户相似度的计算艺术计算用户相似度是Look-Alike的核心。我们尝试过多种方法基于用户画像的相似度优点可解释性强缺点稀疏特征效果差且很多用户画像不完整基于协同过滤的相似度使用UserCF计算共同交互物品问题新物品的种子用户本身交互少数据稀疏基于Embedding的相似度使用双塔模型输出的用户向量最终方案结合短期行为序列和长期兴趣的混合向量我们最终采用的方案是动态权重混合相似度sim(u1, u2) α·sim_embedding(u1, u2) β·sim_behavior(u1, u2) γ·sim_profile(u1, u2)其中α、β、γ根据物品冷启阶段动态调整冷启初期交互100α0.8, β0.2, γ0中期100-1000α0.5, β0.3, γ0.2后期1000α0.3, β0.3, γ0.42.3 近线更新与向量检索的工程实践在线上服务时我们遇到了几个关键挑战挑战1特征向量实时性初期方案每天全量更新一次问题新物品黄金曝光期在前6小时日更完全不够解决方案构建近线更新管道更新延迟5分钟挑战2向量检索性能需要支持1000QPS平均延迟20ms对比测试了多种向量数据库数据库百万级检索延迟准确率内存占用FAISS15ms98%2GBAnnoy25ms95%1.5GBHNSW10ms99%3GB最终选择HNSW作为线上引擎并做了以下优化分层构建索引热物品在内存冷物品在SSD异步刷新机制每5分钟增量更新索引动态剪枝自动淘汰14天无交互的物品向量3. 小红书的具体实现案例3.1 整体架构设计小红书的Look-Alike召回通道架构分为三个主要部分信号收集层实时消费用户行为日志过滤无效交互如误点击生成种子用户集合特征计算层从用户特征库获取种子用户向量计算加权平均向量作为物品表征加入时间衰减因子最近交互权重更高在线服务层向量检索服务HNSWAB测试分流降级策略当新物品无足够种子用户时3.2 关键参数调优在灰度测试阶段我们通过大量AB测试确定了最优参数组合种子用户数量阈值10不启用Look-Alike信号太少10-50放宽相似度阈值σ1.550严格相似度阈值σ1.0向量更新策略初始冷启阶段每新增5个种子用户触发更新稳定阶段每5分钟定时更新爆款物品每分钟强制更新召回数量控制根据物品冷启阶段动态调整公式recall_num min(50, max(10, sqrt(seed_users)*5))3.3 效果评估与迭代上线后关键指标变化指标前7天均值上线后变化新物品CTR1.2%35%新物品7日留存15%22%冷启时长72小时缩短至28小时但我们也发现了一些问题某些垂类如美妆效果显著但其他类目如数码提升有限凌晨时段效果较差可能与用户活跃度有关长尾物品的种子用户积累过慢针对这些问题我们做了以下优化类目差异化策略美妆类降低相似度阈值数码类增加内容特征权重引入时间上下文在用户向量中加入时段特征结合内容特征当行为信号不足时用物品内容embedding辅助4. 避坑指南与实用建议在实际落地过程中我们踩过不少坑这里分享几个关键经验坑1种子用户质量不均现象某些物品的种子用户都是低活用户导致扩散效果差解决方案增加种子用户活跃度过滤只选择月活≥15天的用户坑2冷启动阶段的马太效应现象少数物品获得大量曝光多数物品得不到足够种子用户应对策略设置单物品最大曝光上限人工运营干预给优质长尾物品初始流量坑3特征穿越问题发现用未来数据计算历史相似度导致离线评估虚高修复严格按时间切分训练/评估数据对于想要尝试Look-Alike技术的团队我的建议是从小场景开始先选择一个特定类目或场景试点监控种子用户质量建立种子用户画像分析报表动态调整策略不同冷启阶段需要不同参数结合其他召回方式Look-Alike不是银弹需要与内容召回、协同过滤等配合使用最后分享一个实用技巧当新物品完全没有种子用户时可以用物品发布者的粉丝用户作为初始种子这在小红书场景下特别有效因为用户与创作者的关系往往暗示了兴趣偏好。

更多文章