Elasticsearch est doté de nouvelles fonctionnalités pour vous aider à créer les meilleures solutions de recherche pour votre cas d'utilisation. Apprenez à les exploiter dans notre webinaire pratique dédié à la création d’une expérience Search AI moderne. Vous pouvez aussi démarrer un essai gratuit sur le cloud ou tester Elastic dès maintenant sur votre machine locale.
Dans notre précédent article de blog, nous avons présenté le cadre des récupérateurs remanié de A à Z, qui permet de créer des pipelines de classement complexes. Nous avons également étudié la manière dont le récupérateur Reciprocal Rank Fusion (RRF) permet une recherche hybride en fusionnant les résultats de différentes requêtes. Bien que la méthode RRF soit facile à mettre en œuvre, elle présente une limitation notable : elle se concentre uniquement sur les rangs relatifs, sans tenir compte des scores réels. Cela rend le réglage fin et l'optimisation difficiles.
Rencontrez le retriever linéaire !
Dans ce billet, nous vous présentons le linear retriever, notre dernier ajout pour soutenir la recherche hybride ! Contrairement à rrf, le récupérateur linear calcule une somme pondérée de toutes les requêtes correspondant à un document. Cette approche préserve l'importance relative de chaque document dans un ensemble de résultats tout en permettant un contrôle précis de l'influence de chaque requête sur le score final. Il s'agit donc d'un moyen plus intuitif et plus souple d'affiner la recherche hybride.
Définition d'un récupérateur linéaire où le score final sera calculé comme suit :
C'est aussi simple que cela :
Vous avez remarqué à quel point c'est simple et intuitif ? (et très similaire à rrf!) Cette configuration vous permet de contrôler précisément la contribution de chaque type de requête au classement final, contrairement à rrf, qui s'appuie uniquement sur les classements relatifs.
Une mise en garde subsiste : les scores knn peuvent être strictement limités, en fonction de la métrique de similarité utilisée. Par exemple, avec la similarité en cosinus ou le produit de points de vecteurs normalisés en unités, les scores se situeront toujours dans l'intervalle [0, 1]. En revanche, les scores sur bm25 sont moins prévisibles et n'ont pas de limites clairement définies.
Mise à l'échelle des scores : kNN vs BM25
L'une des difficultés de la recherche hybride réside dans le fait que les différents outils de recherche produisent des résultats sur des échelles différentes. Prenons par exemple le scénario suivant :
La requête A obtient un score :
| doc1 | doc2 | doc3 | doc4 | |
|---|---|---|---|---|
| knn | 0.347 | 0.35 | 0.348 | 0.346 |
| bm25 | 100 | 1.5 | 1 | 0.5 |
Les résultats de la requête B :
| doc1 | doc2 | doc3 | doc4 | |
|---|---|---|---|---|
| knn | 0.347 | 0.35 | 0.348 | 0.346 |
| bm25 | 0.63 | 0.01 | 0.3 | 0.4 |
Vous pouvez voir la disparité ci-dessus : les scores de kNN se situent entre 0 et 1, tandis que les scores de bm25 peuvent varier considérablement. Cette différence rend difficile l'établissement de poids statiques optimaux pour la combinaison des résultats.
La normalisation à la rescousse : le normalisateur MinMax
Pour y remédier, nous avons introduit un normalisateur minmax facultatif qui adapte les scores, indépendamment pour chaque requête, à la plage [0, 1] en utilisant la formule suivante :
Cela permet de préserver l'importance relative de chaque document dans l'ensemble des résultats d'une requête, ce qui facilite la combinaison des scores obtenus par différents extracteurs. Avec la normalisation, les scores deviennent :
La requête A obtient un score :
| doc1 | doc2 | doc3 | doc4 | |
|---|---|---|---|---|
| knn | 0.347 | 0.35 | 0.348 | 0.346 |
| bm25 | 1.00 | 0.01 | 0.005 | 0.000 |
Les résultats de la requête B :
| doc1 | doc2 | doc3 | doc4 | |
|---|---|---|---|---|
| knn | 0.347 | 0.35 | 0.348 | 0.346 |
| bm25 | 1.00 | 0.000 | 0.465 | 0.645 |
Tous les scores se situent désormais dans la fourchette [0, 1] et l'optimisation de la somme pondérée est beaucoup plus simple car nous capturons désormais l'importance (relative à la requête) d'un résultat au lieu de son score absolu et nous maintenons la cohérence entre les requêtes.
Exemple de récupérateur linéaire
Prenons maintenant un exemple pour illustrer ce qui précède et la façon dont le récupérateur linear comble certaines lacunes de rrf. RRF se base uniquement sur les rangs relatifs et ne prend pas en compte les différences de score réelles. Par exemple, compte tenu de ces scores :
| doc1 | doc2 | doc3 | doc4 | |
|---|---|---|---|---|
| knn | 0.347 | 0.35 | 0.348 | 0.346 |
| bm25 | 100 | 1.5 | 1 | 0.5 |
| score du rrf | 0.03226 | 0.03252 | 0.03200 | 0.03125 |
rrf classerait les documents comme suit :
Cependant, doc1 a un score bm25 nettement plus élevé que les autres, ce que rrf ne parvient pas à capturer car il ne tient compte que des rangs relatifs. L'outil linear retriever, combiné à la normalisation, prend correctement en compte les scores et leurs différences, ce qui permet d'obtenir un classement plus significatif :
| doc1 | doc2 | doc3 | doc4 | |
|---|---|---|---|---|
| knn | 0.347 | 0.35 | 0.348 | 0.346 |
| bm25 | 1 | 0.01 | 0.005 | 0 |
Comme nous pouvons le voir ci-dessus, l'excellent classement de doc1 et score pour bm25 est correctement pris en compte et reflété dans les notes finales. En outre, tous les scores se situent désormais dans la fourchette [0, 1], ce qui nous permet de les comparer et de les combiner de manière beaucoup plus intuitive (et même de mettre en place des processus d'optimisation hors ligne).
La mise en place de l'ensemble
Pour tirer pleinement parti de l'outil de recherche linear et de la normalisation, la demande de recherche devrait ressembler à ce qui suit :
Cette approche combine le meilleur des deux mondes : elle conserve la flexibilité et la notation intuitive du linear retriever, tout en garantissant une mise à l'échelle cohérente des scores grâce à la normalisation MinMax.
Comme tous nos retrievers, le retriever linear peut être intégré à n'importe quel niveau d'un arbre hiérarchique de retrievers, avec une prise en charge de l'explicabilité, de la mise en évidence des correspondances, du regroupement des champs, etc.
Quand choisir le retriever linéaire et pourquoi cela fait une différence
Le linear retriever :
- Préserve l'importance relative en s'appuyant sur les scores réels, et pas seulement sur les rangs.
- Permet un réglage fin avec des contributions pondérées de différentes requêtes.
- Améliore la cohérence grâce à la normalisation, ce qui rend la recherche hybride plus robuste et plus prévisible.
Conclusion
Le récupérateur linear est déjà disponible sur Elasticsearch Serverless, et les versions 8.18 et 9.0 ! D'autres exemples et paramètres de configuration sont également disponibles dans notre documentation. Essayez-le et voyez comment il peut améliorer votre expérience de la recherche hybride - nous attendons vos commentaires. Bonne recherche !
Questions fréquentes
Comment le récupérateur linéaire améliore-t-il la recherche hybride par rapport à l'approche précédente de fusion de rangs réciproques (RRF) ?
Le récupérateur linéaire offre plusieurs avantages par rapport au RRF dans la recherche hybride. Alors que le RRF se concentre uniquement sur les rangs relatifs et ignore les scores réels, le récupérateur linéaire calcule une somme pondérée entre les requêtes, préservant ainsi l'importance relative de chaque document. Cette approche permet un contrôle plus précis de la contribution des différents types de requêtes au classement final. En outre, l'extracteur linéaire prend en charge des techniques de normalisation telles que MinMax, ce qui facilite la combinaison des résultats de différents extracteurs et l'optimisation du résultat final de la recherche. Cette flexibilité et ce contrôle offrent une expérience de recherche hybride plus intuitive et plus fine.




