这道题其实问的是,在推荐系统里,召回到底在解决什么问题?说白了,它不是找最准的,而是在海量候选里用最快速度圈出有可能相关的,把筛子放到精排面前。所以核心是效率与效果的平衡,你要在几十毫秒内从百万甚至亿级池子里捞出几百个,不能漏掉好的,但也不能因为追求精确而把系统搞慢。
具体到方法,我一般从几个维度来看。先说协同过滤,它依赖用户和物品的交互矩阵,找相似用户或者相似物品。优势很明显,不需要特征工程,靠群体行为就能挖掘关联。但它的局限也很突出,冷启动完全没法处理,新用户新物品进来矩阵是空的,另外就是热门偏置,容易推的都是爆款,长尾很难出来。所以它适合用户行为已经很丰富的成熟业务,比如电商里用户购买记录多的场景。
再一个就是向量召回,现在工业界用得最多的[[双塔]]结构。用户塔和物品塔分别编码,最后算向量内积近似。它的好处是泛化能力强,能利用用户和物品的属性做语义匹配,而且可以增量更新。但训练成本高,负样本怎么选很关键,选不好模型就学偏了。另外它有个风险,就是可能过度泛化,比如用户点过一次某个内容,向量召回能推出完全不相关的类似风格,但实际用户并不感兴趣。所以它更适合大规模、需要语义理解的场景,比如新闻推荐或者视频推荐。
图召回和规则召回算是两种补充。图召回构建用户和物品的异构图,用GNN传播高阶信号,能捕获多跳关系,比如朋友的朋友这种。它特别适合社交产品,因为社交关系天然就是图结构。但计算复杂,图构建和更新成本很高,实时性是个挑战。规则召回就简单粗暴了,人工定策略,比如热门、新品、运营干预。它的好处是可控可解释,上线快,能兜底。但天花板低,很难个性化,维护起来也累。所以规则召回一般用在冷启动阶段或者新用户引导,作为保底。
真正落地的时候,你会发现没有一种方法能包打天下。工业实践里,主流是多路召回加粗排的架构。多路召回就是让协同过滤、向量、图、规则这些并行跑,各自出一些候选,然后合并去重。为什么需要多路?因为不同方法擅长不同维度,协同过滤抓住群体偏好,向量抓住语义相似,图抓住社交关系,规则保证基本覆盖。合并之后再用粗排快速过滤掉明显不相关的,最后才交给精排。这个架构的核心是保证召回的多样性,因为精排只能从送进来的候选里选,如果召回本身就很窄,精排再强也没用。
这里有个容易被忽略的点,就是召回多样性怎么量化?我一般会看召回集合的覆盖率和熵,如果某个来源占比太高,就要调整权重或者加一些随机采样。另外冷启动阶段,我会特别关注规则召回和向量召回的配合,比如新用户先用热门规则兜底,同时用少量行为做向量召回试探兴趣。
总的来说,我更倾向把召回看作一个系统工程,不是选哪个方法最好,而是怎么组合才能平衡效率、效果和多样性。面试官如果感兴趣,我可以展开讲讲多路召回里权重怎么动态调整,或者向量召回中负采样的一些实践。