与双编码器相比,使用交叉编码器进行重新排序的开销源于计算复杂性和延迟。双编码器独立生成查询和文档的嵌入,允许预先计算文档嵌入。这意味着搜索系统可以将嵌入存储在向量数据库中,并使用余弦相似度快速检索排名靠前的候选项。然而,交叉编码器在单个正向传递中一起处理查询和文档,这捕获了更丰富的交互,但需要实时处理每个候选项对。例如,使用交叉编码器重新排序 1,000 个结果将涉及 1,000 个单独的模型推理,而双编码器只需要对查询进行一次推理并依赖于预先计算的文档嵌入。这使得交叉编码器明显更慢且资源密集程度更高,尤其是在大规模情况下。
为了最大限度地减少这种开销,一种常见的策略是限制交叉编码器处理的候选数量。双编码器可以首先检索更大的候选集(例如,1,000 个结果),并且交叉编码器仅重新排序顶部子集(例如,100 个)。这减少了交叉编码器 90% 的工作量,同时仍然提高了结果质量。另一种方法是优化交叉编码器模型本身。诸如知识蒸馏之类的技术可以训练更小、更快的交叉编码器,这些编码器模仿更大模型的行为。例如,将基于 BERT 的交叉编码器提炼成 TinyBERT 变体可减少推理时间,而不会大幅降低准确性。此外,硬件优化(例如,使用 GPU 进行批量推理或使用 ONNX Runtime 等框架进行加速执行)可以进一步缩短延迟。
系统设计选择也起着关键作用。异步处理可以将初始检索和重新排序步骤分离,允许交叉编码器并行运行而不会阻止用户请求。缓存频繁的查询-文档对或在非高峰时段预先重新排序热门文档可以减少冗余计算。例如,新闻聚合器可能会隔夜预先计算热门文章的交叉编码器分数。最后,根据查询复杂性选择性地应用交叉编码器的混合系统(例如,使用分类器来检测模糊查询)确保仅在必要时才产生成本。通过结合这些策略,开发人员可以平衡交叉编码器提高的相关性与可管理的操作成本。