4. 召回策略精讲:多路召回策略、向量召回(Embedding)、图召回(Graph Embedding)
各位同学,欢迎来到召回策略这一讲。说实话,召回是整个推荐系统的第一道关卡,也是我最喜欢跟人聊的部分。为什么?因为这里面的门道太多了,而且每一条路都有它独特的脾气。
我刚开始做推荐那会儿,团队里有个老哥跟我说过一句话,我一直记到现在:「召回做不好,排序再牛也白搭。」你想想看,如果候选集里压根没有用户喜欢的东西,你排序模型再强,也只能在矮子里拔将军。所以,这一章咱们把召回策略彻底吃透。
4.1 多路召回策略:老牌劲旅,依然能打
多路召回,说白了就是「多条腿走路」。每一路召回策略负责一个维度的候选集,最后合并去重,交给排序层。
我个人习惯把多路召回分成三类:
- 基于热度的召回:比如全局热门、分类热门。简单粗暴,但能兜底。
- 基于协同过滤的召回:比如 ItemCF、UserCF。利用用户行为,找到「和你口味相似的人喜欢什么」。
- 基于内容的召回:比如标签匹配、关键词匹配。适合冷启动场景。
核心要点:多路召回的关键不是「路数多」,而是「互补」。每一路都要覆盖不同的用户偏好维度,避免重叠。
我在项目中遇到过一个问题:某一路召回特别强,占了 80% 的候选集,其他几路基本没发挥作用。结果就是用户看到的推荐越来越窄,陷入信息茧房。后来我们给每路召回加了配额限制,强制保证多样性,效果才好转。
避坑指南:我曾经踩过一个坑——多路召回的分数归一化没做好。不同路的分数量级不一样,直接合并会导致某一路主导。建议用分位数归一化或者 rank 归一化,把分数映射到 [0,1] 区间。
4.2 向量召回(Embedding):从离散到连续
向量召回,是这几年最火的方向。它把用户和物品都映射到一个低维向量空间,然后用向量相似度来召回。
为什么会这么火?因为传统的多路召回,每一路都是「硬匹配」——要么匹配上,要么匹配不上。但向量召回是「软匹配」,可以找到语义上相似但标签不完全匹配的物品。
举个例子:用户看了《流浪地球》,传统召回可能只推荐科幻片。但向量召回能发现《星际穿越》《火星救援》这些「硬科幻」电影,甚至能关联到《地心引力》这种太空题材。这就是 Embedding 的魅力。
常用的向量召回模型有:
| 模型 | 核心思想 | 适用场景 |
|---|---|---|
| Word2Vec | 利用序列共现关系学习向量 | 行为序列、文本 |
| Item2Vec | 把物品当词,用户行为序列当句子 | 物品推荐 |
| DSSM | 双塔结构,分别编码用户和物品 | 大规模召回 |
| YouTube DNN | 经典工业级召回模型 | 视频推荐 |
嗯,这里要注意:向量召回虽然强大,但也不是万能的。它最大的问题是「冷启动」——新物品没有行为数据,向量学不好。所以我在实际项目中,通常把向量召回和多路召回结合起来用。
注意事项:向量召回的计算量很大。如果物品数量上亿,全量计算相似度是不现实的。一定要用近似最近邻搜索(ANN),比如 Faiss、HNSW。我见过有人直接暴力计算,结果线上延迟飙到 500ms,直接被老板叫去喝茶。
4.3 图召回(Graph Embedding):挖掘关系网络
图召回,是向量召回的进阶版。它不光看用户和物品的直接交互,还看它们之间的「关系网络」。
你想想看,用户 A 买了商品 X,用户 B 也买了商品 X,同时用户 B 还买了商品 Y。传统的协同过滤只能发现「A 和 B 相似」,但图召回能发现「A 可能也喜欢 Y」——因为 A 和 B 通过 X 建立了连接,而 B 和 Y 也有连接。
这就是图召回的核心:利用图结构,让信息沿着边传播。
常用的图召回方法:
- DeepWalk:在图上随机游走,生成节点序列,然后用 Word2Vec 学向量。简单有效。
- Node2Vec:在 DeepWalk 基础上,引入了 BFS 和 DFS 的平衡参数,可以控制游走是偏向「广度探索」还是「深度探索」。
- GCN / GAT:图神经网络,直接聚合邻居节点的信息。效果更好,但训练成本也更高。
个人经验:我在做电商推荐时,用 Node2Vec 构建了「用户-商品」二部图。效果比纯 Item2Vec 提升了 12% 的召回率。原因很简单——图结构能捕捉到「间接关联」,比如「看了又看」「买了又买」这类行为模式。
不过,图召回也有坑。我曾经遇到过一个情况:图太大,随机游走的路径太长,导致向量质量下降。后来我们把游走长度控制在 5-10 步,效果反而更好。嗯,有时候「少即是多」。
4.4 三种策略如何选?
很多同学会问:这三种策略到底怎么选?我的建议是:
- 业务初期:多路召回就够了。简单、可控、好解释。
- 业务中期:加入向量召回。提升语义匹配能力,突破多路召回的瓶颈。
- 业务成熟期:引入图召回。挖掘深层关系,进一步提升召回质量。
但说实话,工业界最常用的做法是「三管齐下」。多路召回兜底,向量召回提效,图召回挖深。最后合并去重,交给排序层。
小技巧:我习惯在合并召回结果时,给不同路分配不同的权重。比如向量召回权重 0.5,多路召回权重 0.3,图召回权重 0.2。这个权重可以通过线上 A/B 实验来调优。
好了,这一讲的内容就到这里。下一讲我们会深入排序策略,看看怎么从候选集中选出最合适的物品。到时候见。