内容提要
本文介绍Qdrant中混合搜索的调优方法。混合搜索结合稠密与稀疏检索,通过融合算法排序。调优前需确认融合优于单一检索,并比较RRF与DBSF融合方法。根据查询相关文档数量选择k值,最后调整权重。需在保留查询集上验证配置,确保效果稳定。调优顺序:确认融合优势、选择融合方法、设定k值、调整权重、验证结果。
延伸解读
融合并非总是更优
文章通过五个数据集对比发现,混合搜索并非在所有场景下都优于单一检索。例如,在DBPedia-entity数据集上,融合的nDCG@10比单独稠密检索低0.0039,且置信区间跨越零,说明差异不显著。因此,调优前应先用带标签的查询集验证融合是否真的带来提升,否则可能徒增索引和延迟成本。
k值选择与相关文档数量相关
Qdrant默认k=2,但原论文建议k=61,两者差异显著。实验表明,当每个查询的相关文档数较少(约1个)时,k=2或5效果较好;当相关文档数较多(几十到几百)时,k=20或61更优。因此,应根据标签集中每个查询的平均相关文档数来初步确定k值范围,再通过扫描进一步优化。
权重调优需在k值确定后进行
权重对结果的影响依赖于k值。例如,在WANDS数据集上,k=5时权重(2,4)优于等权重,但k=61时等权重反而更好。因此,调优顺序应为:先确定k值,再扫描权重对。此外,权重为0并不会移除该预取结果,而是将其分数置零,文档仍会出现在融合列表底部。
验证配置需使用留出查询集
在选定配置后,必须用未参与调优的查询集进行验证,否则可能过拟合。文章指出,在SciFact数据集上,所有配置的95%置信区间都包含零,说明提升不显著;而在随机分割中,选中的配置在留出集上仅保留67%至95%的增益。因此,若验证不通过,保留默认配置也是合理选择。
Q&A
在Qdrant中,混合搜索是如何工作的?
混合搜索通过两个预取(prefetch)分别检索稠密向量和稀疏向量,得到两个候选列表,然后通过融合算法(如RRF或DBSF)将两个列表合并为一个排序结果。只有出现在至少一个预取列表中的文档才能出现在最终结果中。
调优Qdrant混合搜索的步骤是什么?
调优顺序为:1. 确认融合优于单一预取;2. 在标签上比较RRF和DBSF,选择融合方法;3. 根据每个查询的相关文档数量设定k值;4. 在选定k值下调整权重;5. 在保留查询集上验证配置。
RRF和DBSF在融合信号上有什么区别?
RRF只使用候选在预取列表中的位置,不考虑分数差距;DBSF则对每个查询将两个列表的分数归一化到同一尺度,保留分数差距的信息。因此,RRF对分数尺度不敏感,而DBSF可能受异常分数影响。
如何选择k值?
k值的选择取决于每个查询的相关文档数量。如果每个查询只有少量相关文档(如1个),k=2或5较好;如果相关文档数量较多(如几十或几百),k=20或61更合适。建议在标签集上统计每个查询的相关文档数,然后从对应范围开始尝试。
为什么权重调整要放在最后?
因为权重对每个预取列表内的位置进行缩放,其效果依赖于k值。不同的k值下,最优权重可能不同。因此,需要先确定k值,再在固定k值下调整权重,否则权重设置可能不适用。
如何验证调优后的配置是否有效?
需要在保留的查询集上验证,而不是仅依赖用于调优的查询集。可以使用bootstrap区间检查每查询增益的置信区间是否排除零,并将数据分为选择集和保留集,确保在保留集上增益仍然存在。
在Qdrant中,RRF的k值默认是多少?与原始论文有何不同?
Qdrant默认k=2,而原始RRF论文使用k=60(对应Qdrant中的k=61)。Qdrant的公式使用零基位置,因此需要调整。
如果DBSF在标签上表现更好,还需要调整k和权重吗?
不需要。DBSF没有k和权重参数,这些参数仅适用于RRF。如果DBSF在标签上胜出,可以直接跳到保留查询集验证步骤。