推荐系统——架构、算法与评估全链路解析

52 阅读2分钟

推荐系统——架构、算法与评估全链路解析

摘要:在面对亿级用户和海量内容时,如何让推荐系统既“算得快”又“推得准”?本文将从工业界实战角度,深度拆解搜推系统的漏斗架构、召回策略、排序样本构造(100:1的秘密)、以及GAUC与AA波动等核心评估指标。拒绝空谈理论,只讲工程落地。


一、 引言:一个“不可能完成”的任务

想象一下,你正在为抖音或淘宝设计推荐算法。

  • 输入:1 个用户(User)。
  • 候选集:1 亿个视频或商品(Item)。
  • 要求:在用户手指滑动的 200毫秒 内,算出这 1 亿个物品中,用户最想看哪一个。

如果我们训练一个精度极高的深度学习模型 F(User,Item)F(User, Item),把 1 亿个 Item 挨个喂进去算分,那服务器当场就会冒烟。

这就是推荐系统的核心矛盾:极致的精度 vs 有限的算力。

为了解决这个问题,工业界给出了一套标准解法:漏斗型架构(Funnel Architecture)


二、 宏观架构:分而治之的“漏斗”

我们将问题拆解为四个阶段,像漏斗一样层层筛选:

  1. 召回 (Recall) :海选阶段。从 亿级 -> 千级。用简单的规则或向量检索,快速圈定用户可能感兴趣的范围。
  2. 粗排 (Pre-ranking) :初赛阶段。从 千级 -> 百级。用双塔等轻量模型,统一各路召回的分数标准。
  3. 精排 (Ranking) :决赛阶段。从 百级 -> 十级。这是算力最集中的地方,使用复杂的深度网络(DeepFM, DIN等)进行精准的 CTR 预估。
  4. 重排 (Re-ranking) :调整阶段。加入业务规则(去重、打散、强插),生成最终列表。

三、 召回层:海选的艺术与“蛇形走位”

召回的核心任务是**“宁可错杀一千,不可放过一个” 。为了覆盖用户的多样化兴趣,我们通常采用多路召回**。

1. 主流召回策略

  • 倒排索引 (Inverted Index) :基于 Tag 的硬匹配。查“喜剧”Key,瞬间拉出所有喜剧视频。速度 O(1)O(1)

  • 双塔模型 (Two-Tower) :解决冷启动的神器。

    • 原理:左塔处理 User,右塔处理 Item(输入标题、封面等内容特征)。即使是新发布的视频(无交互历史),也能根据“长相”(内容特征)生成向量,被喜欢此类内容的用户召回。
    • 部署:利用 Faiss 等向量数据库,实现毫秒级检索。

2. 多路融合:为什么是“蛇形 Merge”?

当“热门召回”、“兴趣召回”、“新颖召回”三路人马汇合时,怎么排序?

  • 按分数排 (Global Sort) :热门内容 CTR 预估天然高,会导致“新颖”内容完全被淹没,丧失多样性。

  • 蛇形融合 (Round-Robin)

    • 逻辑:轮流坐庄。第一轮取各路 Top1,第二轮取各路 Top2...
    • 效果:确保了弱势但重要的召回源(如探索性召回)一定能进入候选池,就像发扑克牌一样雨露均沾

四、 精排层:魔鬼在细节中

精排模型(如 CTR 预估)是推荐系统的大脑。除了模型结构(DeepFM/DIN),样本工程才是决定生死的关键。

1. 负样本采样的黄金比例:100:1

在构建训练数据时,正样本是用户点击的,那负样本怎么选?

  • Easy Negative (简单负样本) :全局随机采样(比如桌子、椅子)。
  • Hard Negative (困难负样本) :用户看过但没点(比如和正样本很像的狼)。

工业界经验: 必须保持 Easy : Hard ≈ 100 : 1

  • 原因:真实世界中 99.9% 都是不相关的“垃圾”。如果 Hard 样本太多,模型会过拟合于分辨“细节”,而忘记了基础的“大是大非”,导致线上把完全不相关的东西推出来。

2. 特征服务:动静分离

  • User Feature必须实时。用户刚点了一个猫咪视频,下一个请求的特征里就必须包含这个行为。需要专门的高并发特征服务(Feature Service)。
  • Item Feature相对静态。价格、类目不会总变,不需要专门的实时服务,索引或缓存即可。

五、 评估体系:不要被 Global AUC 骗了

模型训好了,怎么评价它好不好?

1. 离线评估:GAUC > AUC

  • Global AUC 的陷阱:它把所有人的样本混在一起比。活跃用户分普遍高,不活跃用户分普遍低。AUC 可能会因为区分了活跃度而虚高。

  • GAUC (Group AUC)各算各的。先算每个用户自己的 AUC,再加权平均。

    • GAUC=wiAUCiwiGAUC = \frac{\sum w_i * AUC_i}{\sum w_i}
    • 含义:我们不关心张三的分数是否比李四高,我们只关心给张三推荐的列表里,好东西是不是排在了前面。这是个性化推荐的唯一真理。

2. 在线评估:AA 波动的底噪

上线做 A/B Test 时,如果新策略提升了 0.05%,能信吗?

  • AA 波动:把完全一样的老策略分给两个桶,它们之间天然存在的指标差异。
  • 判定标准:只有 ΔNew>AA波动\Delta_{New} > \text{AA波动} ,提升才是可信的。否则,你可能只是捕捉到了随机噪声(运气好)。

六、 避坑与选型建议

1. 框架选择:PyTorch 还是 TensorFlow?

  • TensorFlow 1.x:存量霸主,部署成熟(TF Serving),但开发极其痛苦,静态图调试难。维护旧系统选它。
  • TensorFlow 2.x:TFX 生态完善,适合 Google Cloud 重度用户。
  • PyTorch未来趋势。TorchRec 补齐了稀疏参数训练的短板,开发效率极高,学术界新模型落地最快。新项目首选。

2. 上线流程 S.O.P

切记“模型没验证,亲人两行泪”。标准流程如下:

  1. 离线:GAUC 涨了? -> Pass。
  2. 小流量 (Canary) :1% 流量跑 7 天,观察 CTR/GMV。
  3. 扩量 (Ramp Up) :扩到 10% 流量再跑 7 天。
  4. 全量 (Launch) :新算法成为新的 Base。

结语

推荐系统不是一个单纯的算法比赛,而是一个精密的工程体系。从漏斗架构的取舍,到蛇形融合的策略,再到100:1的样本细节,每一个环节都蕴含着对算力、精度和人性的平衡。