我把91网页版的推荐逻辑拆给你看:其实一点都不玄学(细节决定一切)

打开一个内容平台,首页推荐总给人“神似懂我”的感觉——背后并非什么天意,而是大量工程和策略的组合。下面按实际工程落地的顺序,把一个完整的网页版推荐系统拆解给你看,从数据采集到线上冷启动、从候选生成到最终排序与回流策略。目标是把看起来玄学的“推荐结果”变成可复制、可调优的工程流程。
一、先看系统的基本分层(把复杂问题拆成几块)
- 数据层:日志埋点、用户画像、内容素材库、实时事件流
- 候选生成层:召回(多路召回并合并)
- 排序层:CTR/转化率模型 + 商业价值整合
- 后处理层:去重、禁限、曝光控制(冷启动、新鲜度、多样性)
- 实时服务层:缓存、Feature Store、在线模型服务
- 评估与实验平台:AB、离线回放、评估指标
二、数据是根基:埋点比算法更能决定成败 哪些行为要埋?
- 点击、播放、停留、滑动、收藏、分享、订阅、跳出、举报
- 会话级事件(session start/end、滑动路径、曝光顺序)
- 页面停留长度、视频观看完成率、滚动深度
- 推荐位位置信息(首页、中部、底部、频道页) 注意:
- 时间戳尽量同步到毫秒,便于做时序特征。
- 保留稀疏ID映射(用户ID、设备ID、内容ID)并做历史索引。
- 对于隐私敏感的数据要做好脱敏与合规处理。
三、候选生成:宽召回,多路并举 单一召回往往覆盖不足。常见召回策略:
- 基于内容的召回(content-based):相似内容检索,基于标签/Embedding的向量检索。
- 协同过滤召回(CF):基于用户-内容交互图,Item2Item 或 UserCF。
- 基于行为序列的召回:Session-based、RNN/Transformer生成候选。
- 热门/趋势召回:实时热度榜、话题聚合。
- 个性化策略:基于用户兴趣簇、冷启动的兴趣推断。 工程要点:
- 使用向量检索(FAISS、Milvus)做Embedding相似检索,控制召回数量(比如每路200-500条)。
- 给不同召回路打tag,便于下游控制与分析。
四、特征工程:从静态到实时
- 静态特征:内容标签、作者信息、发布时间、内容类型
- 行为聚合特征:最近7天点击率、上次交互距今时间、用户偏好分布
- 实时特征:最近1小时热度、当前会话行为、曝光次数
- 时序特征:在不同时间段的活跃度、内容的生命周期曲线
- 交叉特征:用户×内容、用户×渠道、时间×内容类型 工程建议:
- 离线批量计算复杂聚合(Hadoop/Spark),实时补丁用流式计算(Flink/Beam)。
- 建立Feature Store,保证训练与线上特征一致。
五、排序模型:CTR/CTCVR与多目标优化 常用模型:
- 逻辑回归(LR):快速、可解释,用作基线或召回打分。
- GBDT(XGBoost/LightGBM/CatBoost):特征组合效果好,工程成熟。
- DNN(MLP、Wide&Deep、DSSM、DIN、DIEN、Transformer-based):处理稀疏高维特征和序列有优势。
- 排序级别(Learning to Rank):LambdaRank、RankNet 对排序损失优化更直接。 目标不只CTR:
- CTR、播放完成率、留存、付费率等都需要纳入目标函数或后处理权重。
- 可以用多任务学习(MTL)或带权合成评分:score = αCTR + βCVR + γ*商业价值。 在线调控:
- 做score校准(Platt scaling/Isotonic regression)来统一不同模型分值。
- 引入探索机制(ε-greedy、UCB、贝叶斯探索)保证长期学习。
六、后处理:细节决定用户体验
- 去重:同一作者/同一系列内容避免短时间内重复曝光。
- 新鲜度控制:对新内容设置额外曝光上限,帮助冷启动。
- 多样性规则:控制同主题占比,提升覆盖面。
- 规避与合规:敏感内容过滤、地域/年龄限制。
- 曝光频率控制:同一内容/作者在一定周期内的曝光上限。 这些规则通常用规则引擎或带权惩罚加入最终分数。
七、实时工程与在线服务
- 模型服务:把模型导出为ONNX/TF-Serving/PyTorch-Serve,响应时间控制在几百毫秒内。
- 缓存策略:热门候选缓存、用户模板缓存、上游召回缓存,减少在线计算压力。
- Feature Store:在线Feature服务做冷/热特征合并,保证训练/线上一致性。
- 并发与弹性:异步召回并行化、流量控制、降级策略(模型不可用时返回热门+规则)。
八、评估:不只看CTR,回归与长期价值得分 关键指标:
- 即时指标:CTR、点击时长、播放完成率、转化率
- 长期指标:次日留存、7日留存、付费ARPU、用户生命周期价值(LTV)
- 用户体验指标:举报率、跳出率、页面停留时间 实验设计:
- 多臂实验,分层和分桶要避免信息泄露(例如按用户ID一致hash)。
- 留意冷启动偏差与流量切分带来的长期影响。
- A/B持续时间要覆盖周周期,特别是有明显周末/工作日差异的平台。
九、常见问题与解决思路(实战心得)
- 新内容冷启动弱:对新内容强制短期加权↑,并利用相似内容的表现做冷启动预测。
- 流量倾斜到少数内容:施加多样性/去重约束,给长尾更多实验机会。
- 模型过拟合短期行为:把短期和长期特征分层,或采用多任务训练。
- 指标冲突(例如CTR高但留存低):用多目标优化或后向价值校准,将长期价值纳入权衡。
- 在线下/线上数据偏差:用离线回放日志构造在线环境并做校验。
十、落地checklist(启动一个可迭代的推荐体系)
- 完整的事件埋点与数据回流通道搭好。
- 多路召回体系与向量检索引擎上线。
- 建立Feature Store与离线/在线特征一致性检查。
- 一个可扩展的排序训练流水线(自动化特征、训练、验证、模型上线)。
- 实时模型服务与容错/降级策略。
- AB实验与长期指标追踪体系。
- 规则与合规审查流程。
结语 把推荐系统拆开看,你会发现它是一套工程、统计与产品目标的集合。核心不是某个神奇公式,而是数据质量、召回覆盖、特征稳定性、模型泛化能力和后处理规则的协同。每一处细节(数据粒度、曝光频次、冷启动策略)都能显著影响用户体验与商业结果。把这些模块做好并持续迭代,就能把“看起来神奇”的推荐,变成可控、可优化的产品能力。
如果你想,我可以根据你现有的日志样本给出具体的候选召回配置、关键特征清单或一个离线训练流水线的模板。要哪一部分先拆?