qdrant-hybrid-search-combining

Utiliser quand quelqu'un demande « RRF ou DBSF ? », « comment combiner sparse et dense », « comment combiner les scores de plusieurs recherches ? », « fusion personnalisée », ou « la fusion ne produit pas de bons résultats »

npx skills add https://github.com/qdrant/skills --skill qdrant-hybrid-search-combining

Combiner les résultats de Prefetch

La requête externe fusionne les listes de candidats classées de tous les prefetches parallèles en une seule liste classée de résultats. Les méthodes de fusion diffèrent selon qu'elles utilisent le rang, le score ou directement les représentations vectorielles des candidats (leur similarité avec la requête externe) et selon que le score final intègre les métadonnées de payload. Toutes les méthodes supportent les structures prefetch plates (une étape de fusion) et imbriquées (multi-étapes).

Les scores ne sont pas comparables entre les Prefetches et vous voulez une base de référence facile

À utiliser quand : les recherches produisent des scores sur des échelles différentes, comme BM25 et cosine sur des embeddings denses.

RRF

  • RRF (Reciprocal Rank Fusion) — basée sur le rang, ignore la magnitude des scores, une bonne valeur par défaut pour commencer.
  • Ajustez k pour contrôler la sensibilité au rang dans la fusion RRF.
  • Ajoutez des poids par prefetch quand une recherche doit dominer, en utilisant Weighted RRF. Les poids doivent être personnalisés par collection et distributions de scores des retrievers !

DBSF

  • DBSF (Distribution-Based Score Fusion) — normalise les distributions de scores par prefetch avant de les fusionner, pour cela, utilise la moyenne +- 3 déviations au lieu de min-max sur la liste des scores récupérés. Évitez de compter sur les scores absolus résultants, car les scores dans DBSF sont normalisés par prefetch (c'est-à-dire par liste de résultats de recherche récupérée), et pourraient être incomparables entre les requêtes.

Besoin d'une fusion personnalisée

À utiliser quand : l'actualité, la popularité ou d'autres valeurs de payload doivent affecter le classement fusionné aux côtés des scores des candidats ou vous avez besoin d'une fusion personnalisée.

Avec formula query, accédez au score de chaque prefetch et, si désiré, aux valeurs des champs de payload.

Si vous voulez implémenter une fusion personnalisée sur le score de chaque prefetch :

  • Utilisez la décroissance ou toute autre expression disponible pour normaliser les distributions de scores avant de les fusionner.
  • Les paramètres de ces expressions doivent être basés sur la collection et les distributions de scores du retriever (par exemple, en ajustant ces paramètres sur un sous-ensemble de requêtes réelles).
  • Formula query ne peut pas fournir les rangs pour les fusions personnalisées

Besoin d'un bon classement des candidats fusionnés et prêt à dépenser plus de ressources

À utiliser quand : vous voulez utiliser la similarité entre la requête et les représentations vectorielles des candidats comme combineur et classeur simultanément des prefetches. Plus gourmande en ressources que les fusions basées sur le score/rang, mais pourrait être nécessaire selon les exigences du cas d'usage ou le besoin d'une haute précision top-K des résultats (quand les prefetches parallèles ont globalement un bon recall des candidats récupérés).

Vous pouvez utiliser n'importe quel type de vecteur comme requête externe sur les prefetches, pour effectuer la fusion côté serveur en une seule requête QueryAPI : sparse, dense, multivector. Pour cela, le même type de représentations vectorielles pour les documents doit être stocké comme vecteurs nommés par point.

Au lieu d'utiliser la fusion côté client à travers des cross-encoders, une option populaire est Late interaction models-based fusion, à travers le reranking sur multivectors (par ex. ColBERT pour le texte, ColPali et ColQwen pour les images).

  • La plus précise mais avec l'usage de calcul/ressources le plus élevé.
  • Configurez les multivectors utilisés pour la fusion à travers le reranking avec HNSW désactivé comme dans le Hybrid Search with Reranking tutorial.

Ce qu'il NE FAUT PAS faire

  • Utiliser une fusion linéaire pondérée sur des plages de scores incomparables. Pourquoi pas.
  • Utiliser des poids définis au "feeling" dans Weighted RRF. Les poids doivent être affinés par dataset et pipelines de retrieval.
  • Choisir un type de fusion sans expériences comparatives.
  • Utiliser des multivectors Late interaction pour la fusion sans évaluer des analogues moins chers, par exemple, MUVERA. Plus dans le cours multi-vector Qdrant search