
生成式召回如果不是轻轻松松地拿到收益,大概率是做错了。
其实生成式比双塔简单
一方面,业界越来越多的人用生成式召回很快拿到了不小的业务结果;另一方面来与和传统召回对比,相比从零到一落地一套双塔召回,生成式召回在建模和 infra 上其实简单得多。这听起来有点反直觉:在一家推荐 Infra 足够成熟的公司里,上线一路双塔已经非常标准化,生成式召回反而容易被当成更新、更复杂的技术。但这只是因为业界在双塔上积累了接近十年的 Infra 和认知,很多今天看来理所当然的能力,当年都不是免费的。
如果你从零做过双塔,第一个要解决的就是向量索引。在还没有成熟向量检索库的时候,我有幸手搓过基于 K-Means 的搜索树做近似检索。今天有了 Faiss、HNSW 和各种向量检索系统,这件事被隐藏了起来,但它本身并不简单。双塔还有一个常被忽略的问题:用户塔和物品塔的一致性。用户向量一般可以实时计算,物品向量却往往需要异步或流式刷新,如果模型已经更新,向量库里的物品向量还来自旧模型,用户和物品就不再处于完全一致的向量空间,于是又需要向量刷新、模型版本管理、增量建索引和各种兜底机制。生成式召回在索引这件事上直接得多:只需要把 SID 到物品 ID 的映射存进 KV 或倒排索引,模型生成 SID 以后直接查回物品。
双塔看起来简单,并非是第一天起,而是它的复杂性已经沉到了 Infra 下面。
公平地说,生成式召回也把一部分成本转移到了别处:自回归解码加 beam search 的推理开销、延迟和 GPU 成本,明显高于一次用户塔前向加一次 ANN 检索,这是生成式召回在 serving 侧实打实的代价。但是今天模型是以 scaling 为基础的,GPU 上的推理应当是所有scalable 模型理应付出的成本。
除了infra,双塔在建模上并不简单,当时能一把做正的人也不算多。
双塔真正的难点:negative sampling
双理想情况下,我们希望建模一个 full softmax:
如果物品只有几千个,这没有任何问题。但工业推荐系统的候选集合可能有千万甚至上亿,不可能为每个样本计算完整分母,只能从某个采样分布 中采出少量物品,用一个很小的集合去近似整个物品空间。也就是说,从引入 sampling 的那一刻起,我们优化的就已经不是原始的 full softmax,而是它的近似。
早期 YouTubeDNN 用的是类似 Word2Vec 的 sampled softmax。词表只有几十万时,把采样表放进内存没什么问题;但候选集合变成上亿个持续变化的物品时,如何维护采样分布、如何高效采样,本身就是一个不轻的 Infra 问题。后来 In-batch Negative 极大地简化了这件事:直接把同一个 batch 里其他样本的正例当作当前样本的负例。问题也很明显,负例分布实际上对齐了正例分布,一个物品作为正例出现得越频繁,就越容易成为别人的负例,热门物品因此被额外打压。
《Sampling-Bias-Corrected Neural Modeling for Large Corpus Item Recommendations》提出了经典的 LogQ correction,直觉很简单:一个物品如果只是因为热门而更容易被采成负例,就不应该因为这种采样频率被再惩罚一次。但 LogQ 要求准确估计物品的采样概率,在流式系统里这远没有公式看上去那么简单,我在实际业务中就见过 LogQ 被反复实现错误。
而采样概率还只是第一层问题。一个好的 还必须覆盖真正重要的竞争物品:如果正例是一双运动鞋,负例大多是锅碗瓢盆,loss 很好优化,模型却几乎学不到有用的区分边界。于是又有了 hard negative、混合负样本、跨 batch 负样本,以及越来越复杂的 sampler。
更让人绝望的是,这并不是工程做到位就能彻底解决的问题。《Adaptive Sampled Softmax with Kernel Based Sampling》给出了一个很漂亮的结论:只有当采样分布恰好等于模型自己的 softmax 分布时,
sampled softmax 的梯度才是 full-softmax gradient 的无偏估计。现实中的均匀采样、热门度采样、In-batch Negative 都做不到这一点,LogQ 和更多负样本可以减小 bias,但有限采样本身始终是一种近似。所以召回领域有一句很形象的话:排序是特征的艺术,召回是样本的艺术。它背后的事实是,双塔的建模质量很大程度上取决于 negative sampling。
而生成式召回最重要的变化之一,就是直接绕开了这件事。
本文为订阅内容
订阅 RecsysFrontier,在 Substack 阅读本文全文
- 每天的 AI / 推荐系统前沿日报,第一时间读到
- 每周周报,一周重点一次看完
- 订阅期内所有日报周报全文