内容提要
调整Qdrant集合前,需明确检索目标(如排名、延迟或内存),并确保向量和负载索引正确。检查稀疏向量IDF修饰符和BM25平均长度等设置,避免无效结果。根据症状选择调整方向,如混合搜索或重排序。使用带标签的查询集和合适指标(如nDCG@10)评估,确保标签能检测改进,并在新查询上验证结果。
延伸解读
先定目标再调参
调参前必须明确“更好的检索”对当前业务意味着什么:是排名第一的文档更准,还是为重排序提供更多候选,或是降低延迟和内存占用。不同目标对应的设置可能相互冲突,例如增大 hnsw_ef 会提升召回但增加查询时间。如果目标不清晰,后续的调参可能事倍功半。
静默设置可能破坏结果
某些设置错误不会报错,但会让结果无效。例如向量未索引、稀疏向量缺少 IDF 修饰符、BM25 平均长度设置错误等。在基准测试或对比设置前,务必检查这些前置条件,否则你测量的可能是配置错误而非真实性能差异。
指标选择影响调参结论
不同指标可能选出不同的最佳设置。文中测试显示,nDCG@10、MRR@10 和 Recall@100 在多个数据集上给出的最优设置不一致。选择指标需匹配产品体验:排名重要用 nDCG,单一正确答案用 MRR,首阶段召回用 Recall。同时注意 Recall 受相关文档数量上限影响,需先统计每查询的相关文档数。
标签集大小决定调参可见性
标签集需足够大才能区分真实改进与随机波动。文中给出参考:50 个标签可检测 0.038 的 nDCG 增益,但 0.02 以下的小增益需要更多标签。建议用自助法计算增益的 95% 置信区间,若区间包含零,则无法确认改进。
Q&A
调整Qdrant集合前,为什么需要先明确检索目标?
因为不同的检索目标(如排名、延迟、内存占用)会偏好不同的设置,明确目标后才能选择合适的调整方向,避免无效调整。
如何检查Qdrant集合中的向量是否已正确索引?
调用GET /collections/{collection_name}接口,比较indexed_vectors_count与points_count。在纯稠密集合中,两者应相等;在混合集合中,indexed_vectors_count应为points_count的两倍,因为每个点有一个稠密和一个稀疏向量。如果索引数较低,可能索引仍在运行或已停止,或某些段小于默认索引阈值。
稀疏向量使用IDF修饰符时需要注意什么?
对于BM25或miniCOIL生成的稀疏向量,应使用IDF修饰符,因为Qdrant会计算IDF并加权。但对于SPLADE模型,它已包含语料级词项加权,使用IDF修饰符会重复计算,因此不应使用。
BM25的avg_len参数应该如何设置?
avg_len应设置为BM25词干化并去除停用词后字段的平均词数,不能从原始词数估算。在测试的五个数据集中,词干化后的计数比原始低15%到43%,正确值范围在35.3到151.4之间,而默认值为256。应使用与集合相同的词干器和停用词设置来测量。
在混合搜索中,fusion放置位置对结果有什么影响?
在分片集合上,fusion放置位置很重要。在查询根部的fusion会在所有分片返回候选后运行一次;在prefetch内部的fusion会在每个分片上运行,每个分片只融合自己的候选,然后外层查询按分片局部融合分数排序。结果会随分片数量和点分布而变化,且没有错误提示。在单分片集合上,两种放置产生相同排序。
使用score_threshold时有哪些风险?
score_threshold应仅在已测量出该阶段的最低可接受分数时使用。从纯稠密搜索复制的阈值在根级RRF或DBSF查询中不安全,因为Qdrant会将其与融合分数比较,而不是稠密或稀疏分数。它可能静默截断结果列表或返回空结果。应在标记查询上验证,或保持未设置。
为什么在调整前需要建立带标签的查询集?
因为带标签的查询集能检测改进是否真实,如果标签无法检测到所追求的改进,就无法判断更改是否有帮助。此外,标签集的大小和代表性决定了调整的可见性。
如何选择评估检索质量的指标?
应根据产品体验选择指标。nDCG@k适合多个相关结果且排名重要的情况;MRR@k适合只有一个正确答案的查询;Recall@k适合评估第一阶段的召回。不同指标可能选出不同的最佳设置,因此需先确定指标。
调整Qdrant集合时,推荐的更改顺序是什么?
应从低成本更改开始,如调整融合方法、RRF k值或权重,这些不增加检索阶段。如果无效,再尝试增加检索深度(如hnsw_ef、prefetch limit)或使用精确扫描。最后才考虑添加新阶段(如稀疏预取、重排序)或重建(如更换嵌入模型、量化)。
如何验证调整后的设置是否真正有效?
将标记查询集分成两半,在一半上选择最佳设置,然后在另一半上测量其增益。重复多次,报告新鲜查询上的增益。同时,使用重采样估计平均增益的95%置信区间,如果区间包含零,则无法确认质量提升。