召回-召回聚合

Posted by OAA on November 28, 2024

1、召回聚合

用户的查询意图往往是复杂多样的,可能涉及到不同的领域、主题和语义层面。因此,召回体系中通常通过多路召回的方式从不同角度去理解和满足用户的查询需求。此外,多路召回通过各召回通道并行计算可以在海量数据中能够快速响应,同时实现负载均衡。

在面对多个差异化设计的召回通道同时触发并返回文档的情况下,需要充分发挥各通道的优势,从大量召回候选中筛选整合以实现各通道互补,最终在保障的系统效率的同时,提高召回的准确率和业务目标的达成率,确保整体效果的最优化。召回聚合通过采用轻量级的算法策略对召回结果筛选,最终将数千篇文档传递给粗排模块进行更精细的排序操作。

1.1、分数归一化

在进行加权融合之前,必须将不同物理意义的分数映射到同一量纲下。工业界常用的归一化方法有以下两种:

1.1.1、Min-Max 归一化

适用于分数边界比较确定的通道(如向量召回)。将分数线性映射到 $[0, 1]$ 区间:

\[S_{norm} = \frac{S_{raw} - S_{min}}{S_{max} - S_{min}}\]

其中 $S_{max}$ 和 $S_{min}$ 通常取该通道在最近一段时间内的统计最大/最小值(滑动窗口统计),以避免离群点影响。

1.1.2、Sigmoid 非线性映射

对于像 BM25 这种长尾分布且没有明确上界的分数,线性归一化容易导致大部分正常结果被压缩到极小的区间。业内常采用 Sigmoid 函数进行非线性映射,将分数平滑地压入 $(0, 1)$:

\[S_{norm} = \frac{1}{1 + e^{-\alpha (S_{raw} - \beta)}}\]
  • $\beta$:偏移量,通常设为该通道分数的均值或中位数
  • $\alpha$:缩放因子,控制 Sigmoid 函数的陡峭程度,用于调整区分度

1.2、融合策略

当分数归一化较难对齐,或者系统追求极致的低延迟时,基于排名的启发式融合是首选方案。

1.2.1、蛇形合并

蛇形合并策略通过交替、蛇形的方式将来自不同通道的候选项进行融合,通常会先选择一种通道的候选项,然后交替选择其他通道的候选项。

假设有三个召回通道(A、B、C),那么可以按如下方式选取:

  • 第1个候选项来自通道A
  • 第2个候选项来自通道B
  • 第3个候选项来自通道C
  • 第4个候选项再从通道A选取,以此类推

1.2.2、RRF 合并(Reciprocal Rank Fusion)

RRF 对来自不同召回通道的排序结果进行加权,赋予排名靠前的候选项更高的权重,最终生成一个综合排序。具体来说,对于每个检索结果,计算其在每个路径中的排名,然后取这些排名的倒数之和作为该结果的最终得分。

RRF 的计算公式如下:

\[{\mathrm{RRF~Score}}(d)=\textstyle{\sum_{i=1}^{k}{\frac{1}{\mathrm{Rank}_{i}(d)+K}}}\]

其中,$d$ 表示召回结果,$\mathrm{Rank}_{i}(d)$ 表示该结果在第 $i$ 条路径中的排名,$K$ 为调节参数(通常取值为60),用于平滑排名,使得即使排名较低的候选项也能获得一定的权重。

1.3、动态配额与截断

固定的融合比例(如 A 路 50%,B 路 50%)无法适应多变的用户意图。在 TikTok 或淘宝的实践中,基于意图的动态截断是提升下游粗排效率的关键。

1.3.1、基于意图的动态配额

利用上游 Query 意图识别的结果,动态调整各路召回的截断阈值。

  • 精准意图(Navigational Intent):如搜索 “肯德基”。
    • 策略:大幅增加倒排索引/POI召回的配额(如 90%),大幅压缩向量召回配额(如 10%),因为用户不需要模糊匹配
  • 泛浏览意图(Exploratory Intent):如搜索 “好听的歌”。
    • 策略:大幅提升向量召回/协同过滤的配额(如 70%),降低倒排配额,引入更多样化的语义结果

动态配额公式可表示为:

\[N_{quota}^{(i)} = N_{total} \cdot \text{Softmax}(\mathbf{W} \cdot \mathbf{v}_{intent} + \mathbf{b})_i\]

其中 \(\mathbf{v}_{intent}\) 是 Query 的意图向量,$N_{total}$ 是粗排允许的最大输入量。

1.3.2、系统负载感知的动态截断

在流量高峰期,为了保住系统的可用性,召回模块会自动触发降级截断:

  • Weak-AND 提速: 提高倒排链扫描的最低分数阈值
  • 通道剪枝: 直接丢弃耗时较长、收益较低的长尾召回通道(如深层 GNN 召回),仅保留核心的倒排和双塔召回

1.4、贝叶斯优化合并

贝叶斯调参可以帮助自动化调整融合策略中的参数,从而找到最优的合并方式。通过贝叶斯优化,我们可以根据召回合并过程中不同通道的重要性、权重等参数,寻找最佳的合并策略,以提升召回的质量和效率。

贝叶斯优化(Bayesian Optimization)是一种基于贝叶斯统计方法的全局优化算法,通常用于优化函数比较复杂、代价高昂、无法直接求导的情况。具体步骤如下:

  1. 定义目标函数:定义目标函数 $f(x)$ ($x$ 是超参数)用于评估召回合并策略的效果
    • \[f(\mathbf{w})=\mathbf{Metric}(\mathbf{Merge}(\mathrm{Recalls}(\mathbf{w})))\]
    • $\text{Recalls}(\mathbf{w}) = [R_1(w_1), R_2(w_2), \dots, R_n(w_n)]$ 表示来自不同通道的召回结果,每个 $R_i(w_i)$ 是通道 $i$ 根据权重 $w_i$ 所返回的候选集
    • $\text{Merge}(\cdot)$ 表示将各个通道的召回结果按权重加权融合
    • $\text{Metric}(\cdot)$ 是根据合并后的候选集评估的性能指标
  2. 设置参数空间:如果使用加权平均的合并方式,可以将每个通道的权重作为调节参数进行优化
    • 比如,设定权重参数 $\mathbf{w}=[w_{1},w_{2},\cdot\cdot\cdot,w_{n}]$,每个召回通道的权重 $w_{i}$ 影响候选项排名和选择
    • \[{\bf w}=[w_{1},w_{2},\cdot\cdot\cdot,w_{n}]\;\;\;\;\mathrm{with}\;\;\;\;\sum_{i=1}^{n}w_{i}=1,\;\;\;\;w_{i}\in[0,1]\]
  3. 初始化高斯过程:为待优化的参数空间设定先验分布,通常使用高斯过程(Gaussian Process, GP)作为先验,表示对参数空间的初步认识
    • \[p(f(\mathbf{w}))\sim{\mathcal{G P}}(m(\mathbf{w}),k(\mathbf{w},\mathbf{w}^{\prime}))\]
    • 其中 $m(\mathbf{w})$ 是目标函数的均值函数,通常假设为零;$ k(\mathbf{w}, \mathbf{w}’) $ 是协方差函数,用于表示不同参数配置之间的相似性
  4. 更新后验分布:在每次迭代中,根据当前的参数空间和目标函数值,更新高斯过程的后验分布,并基于当前的后验分布生成新的参数选择。贝叶斯调参使用获取函数(Acquisition Function)来选择下一个要评估的参数点。常见的获取函数如期望改进(Expected Improvement, EI)
    • \[\alpha(\mathbf{w}) = \mathbb{E}[ \Delta f(\mathbf{w}) ] = \mathbb{E}[ \max(0, f(\mathbf{w}_{\text{best}}) - f(\mathbf{w})) ]\]
    • $f(\mathbf{w}_{\text{best}})$ 是当前最好的目标函数值
    • $\Delta f(\mathbf{w})$ 是期望的改进
  5. 选择下一个评估点:通过最大化获取函数来决定下一个评估点。获取函数根据当前的后验分布选择一个最有可能提升目标函数值的参数组合,从而进行下一轮评估
    • \[\mathbf{w}^*=\arg \max _{\mathbf{w}} \alpha(\mathbf{w})\]
  6. 重复迭代:贝叶斯优化会根据每一轮评估的结果,调整先验分布,不断优化目标函数,最终找到全局最优的参数配置
    • \[p(f(\mathbf{w})\mid\mathbf{w}^{*},f(\mathbf{w}^{*}))\sim{\mathcal{G}}{\mathcal{P}}({\mu}(\mathbf{w}),\Sigma(\mathbf{w}))\]

最终,贝叶斯优化会返回最优的参数 $\mathbf{w}^*$。

此外,除了参数为各通道的权重,对于每篇文档的综合打分(Query-Doc 相关性、Doc 质量、Doc 时效性等分数)的融合公式的权重参数也可以采用贝叶斯优化的方式设定,以此通过对 Doc 打分实现排序。

1.5、基于超网络和进化策略的动态融合

为了解决多通道分数异构、上下文利用局限以及反馈滞后的问题,工业界演进出了一套 “超网络生成公式 + 线上进化策略 实时微调” 的融合排序架构(Aggregation Ranking)。

1.5.1、超网络与非线性乘法融合

传统的融合打分通常是线性的加权和($Score = \sum w_i \cdot score_i$),但这无法捕捉各路特征之间的乘性协同效应(例如:相关性极差时,即使质量分再高,总分也应该极低)。

业内前沿的做法是采用一种类似 Cobb-Douglas 生产函数的非线性乘法公式对各路召回分数进行融合:

\[Score = \prod_{i} (factor_i \cdot score_i + \alpha_i)^{\beta_i}\]

其中 $score_i$ 为底层各路召回或基础特征的原始打分(如相关性分、ANN 距离、质量分等)。$factor_i, \alpha_i, \beta_i$ 并非固定超参,而是千人千面、千词千面的。系统构建了一个深度模型(HyperNetwork),将用户的个性化特征和上下文特征作为输入,实时前向传播生成这些参数。模型不再直接输出最终打分,而是输出 “打分公式的权重”,实现了高度动态的意图适配。

1.5.2、离线 Listwise 排序学习

在离线模型训练阶段,为了让融合模型不仅能区分好坏,还能精确排列顺序,通常采用 Listwise 的排序学习方法。在样本构造上,根据用户的真实消费漏斗,将序列组装为 <点击, 仅曝光, 召回靠后未曝光> 的三阶偏序关系样本。使用 ListMLE 等全局序列排序损失函数直接优化 NDCG,使得模型输出的排列顺序逼近真实的用户满意度序列。

1.5.3、基于 CMA-ES 的线上实时进化微调

深度模型离线训练好后,在线上面临环境漂移问题,业内引入了进化策略(Evolution Strategy, ES),尤其是 CMA-ES(协方差矩阵自适应进化策略)进行线上探索与利用(Exploration & Exploitation)。

具体的,考虑到线上探测的稳定性和鲁棒性,系统在将模型推至线上后,会冻结底层深度网络的 Embedding 和隐藏层特征参数,仅对最后一层的融合权重 $\theta$(Top Weights)进行自然梯度更新。

黑盒试探与强化反馈流程:

  1. 动作下发 (Action): 系统根据协方差矩阵高斯分布 $\theta \sim \mathcal{N}(\mu, \Sigma)$,向不同的用户(User_i, User_j)下发带有微小扰动的融合权重变体 $\theta_i, \theta_j$
  2. 实时奖励 (Reward): 用户看到搜索结果后产生行为。通过底层 Flink 流式计算引擎,实时统计各权重组带来的业务收益(如:笔记点击率、视频完播率、停留时长)
  3. 种群进化 (CMA Update): 当样本量达到显著性阈值后,CMA-ES 算法根据累积奖励 $F_i$,反向更新权重的均值 $\mu$ 和协方差矩阵 $\Sigma$,筛选出表现最好的策略繁衍下一代权重

1.6、基于 DDPG 深度强化学习的连续空间动态融合

一些电商平台(如淘宝)在多路召回后,面对倒排、向量、I2I 等数百个通道,传统的分类/回归模型无法实现 GMV(成交总额)的全局最优化,因为点击和转化存在严重的 “延迟反馈”。为此,业内在融合与粗排阶段大规模落地了基于 Actor-Critic 架构的 DDPG(Deep Deterministic Policy Gradient)强化学习算法。

1.6.1、马尔可夫决策

融合问题被建模为一个连续动作空间的马尔可夫决策过程(MDP):

  • 状态空间 (State, $s_t$):用户的历史行为序列、实时画像、上下文以及当前 Query 的意图特征
  • 动作空间 (Action, $a_t$):Actor 网络根据当前状态 $s_t$,输出一个连续的权重向量 $\mathbf{a}_t = [w_1, w_2, \dots, w_K]$,代表 $K$ 个召回通道的动态融合权重
  • 融合打分公式:底层各路召回的原始得分 $score_k(d)$ 与 Actor 输出的权重进行加权(或非线性指数融合):
    • \[FinalScore(d) = \sum_{k=1}^K w_k \cdot score_k(d)\]
  • 奖励函数 (Reward, $r_t$):由真实的后验业务指标构成(如发生点击 $+1$,发生成交 $+ \text{Price}$):$r_t = \alpha \cdot \text{Click} + \beta \cdot \text{GMV}$

1.6.2、Actor-Critic 训练

模型包含两个网络:Critic 网络负责评估当前融合策略的 “钱景”(Q值),Actor 网络负责生成融合权重。

  • Critic 网络更新 (TD Error):最小化目标 Q 值与当前 Q 值的时序差分误差,学习预估未来的总收益:
    • \[L(\theta^Q) = \mathbb{E}_{s_t, a_t, r_t, s_{t+1}} \left[ \left( r_t + \gamma Q(s_{t+1}, \mu(s_{t+1}) | \theta^Q) - Q(s_t, a_t | \theta^Q) \right)^2 \right]\]
  • Actor 网络更新 (Policy Gradient):最大化 Critic 的打分,指引 Actor 输出能带来更高 GMV 的融合权重 $\mu$:
    • \[\nabla_{\theta^\mu} J \approx \mathbb{E}_{s_t} \left[ \nabla_a Q(s, a | \theta^Q)|_{s=s_t, a=\mu(s_t)} \nabla_{\theta^\mu} \mu(s | \theta^\mu)|_{s=s_t} \right]\]

1.6.3、工程架构

直接在线上用强化学习随机探索会导致 GMV 暴跌。如阿里构建了 Virtual-Taobao(虚拟淘宝模拟器),利用历史百亿级日志预训练一个世界模型(World Model),Actor-Critic 代理先在虚拟环境中交互几千万次,收敛后再推至线上。

线上推理时,Critic 网络被完全剥离。系统只运行极轻量级的 Actor 网络为当前请求生成专属的权重向量 $\mathbf{w}$,与底层检索引擎直接对接完成打分。

1.7、基于流式参数服务器的超实时多目标融合

对于短视频平台而言,意图演进极快(用户刷两三个视频,兴趣就转移了)。单纯依赖 T+1 或小时级更新的模型,哪怕是强化学习也太慢了。如字节跳动构建了基于 Monolith(千亿级参数服务器) 的实时流式在线学习(Streaming Online Learning)架构。

1.7.1、多目标融合公式

融合排序不仅仅是合并通道,更是对多个目标(点击率、完播率、点赞率、关注率)的联合预估与折算。模型采用类似 MMoE (Multi-gate Mixture-of-Experts) 的结构。

针对侯选视频 $i$,其最终融合分数为各任务预估值的动态加权:

\[Score_i = w_{ctr}(x) \cdot pCTR_i + w_{play}(x) \cdot \mathbb{E}[WatchTime_i] + w_{like}(x) \cdot pLike_i\]

这里的 $w(x)$ 并非人工指定的固定权重,而是由一个浅层超网络(Hyper-Network)根据当前用户实时上下文 $x$ 前向计算得出。

1.7.2、FTRL 超实时更新

在流式架构中,模型边服务边训练。为了在处理海量稀疏特征(如 Video ID)时保证模型的稀疏性和抗噪能力,字节大规模采用了 FTRL (Follow-The-Regularized-Leader) 在线优化算法。FTRL 更新公式:

\[\mathbf{w}_{t+1} = \mathop{\arg\min}_{\mathbf{w}} \left( \mathbf{g}_{1:t} \cdot \mathbf{w} + \frac{1}{2} \sum_{s=1}^t \sigma_s ||\mathbf{w} - \mathbf{w}_s||_2^2 + \lambda_1 ||\mathbf{w}||_1 \right)\]

其中 $\mathbf{g}_{1:t}$ 是历史梯度的累加,$\lambda_1$ 提供了强大的 L1 正则化。该公式保证了模型在吞吐海量流式数据时,既能迅速更新权重,又能自动剔除无效的稀疏特征(将其权重置为 0),防止模型体积无限膨胀。

秒级反馈闭环:客户端产生行为 $\rightarrow$ 埋点进入 Kafka $\rightarrow$ Flink 实时流拼接(将用户的点击/完播反馈与 5 分钟前下发的推荐特征快照 Join 在一起)$\rightarrow$ 生成一条带有 Label 的新鲜训练样本。

训练样本被喂入分布式的 Parameter Server (PS) 集群。Monolith 架构支持分钟级的特征过期淘汰机制。线上 Inference 时,检索模块直接从本地 PS 缓存拉取距现在不到 3 分钟前更新的最新融合权重 $\mathbf{w}$ 进行打分。

2、总结

在召回模块中,各召回通道通常会通过不同的算法、模型或策略获取候选文档。由于这些召回通道目标、算法和策略的差异,它们生成的候选项通常具有不同的质量和覆盖面。召回聚合的任务是将这些候选项通过一定的方式进行加权、排序和融合,动态控制各个通道的召回量配额,确保最终的候选集合既具有足够的多样性,又能保持较高的相关性。

参考文献

  1. Reciprocal Rank Fusion outperforms Condorcet and individual Rank Learning Methods
  2. Practical Bayesian Optimization of Machine Learning Algorithms