Toutes les publications

Recherche hybride : deux façons de chercher, un seul résultat

RAGRechercheArchitectureTutoriel2025-09-1610 min

Chercher par le sens rate les numéros d'article. Chercher par les mots rate les reformulations. Les deux ensemble corrigent la moitié des mauvaises réponses.

Le défaut que la recherche vectorielle ne voit pas

Une recherche fondée uniquement sur le sens échoue systématiquement sur les références exactes : numéros d'article, codes produit, identifiants de dossier. C'est la cause la plus fréquente de mauvaise réponse que je diagnostique.

Le symptôme est reconnaissable. L'utilisateur demande « que dit l'article 12.3 », et le système remonte des passages qui parlent du même sujet sans contenir l'article demandé. La réponse est plausible et fausse.

La raison est structurelle. Un modèle d'embarquement encode le sens ; « 12.3 » et « 12.4 » ont un sens presque identique pour lui. La distinction qui compte pour l'utilisateur est précisément celle qu'il ne fait pas.

Une question interrogeant un index lexical et un index vectoriel, puis fusion des scores
Deux index complémentaires, une seule liste de résultats fusionnée.

Le défaut symétrique de la recherche par mots-clés

Une recherche lexicale échoue dès que l'utilisateur formule autrement que le document. C'est le défaut inverse, connu depuis longtemps et tout aussi bloquant.

Un document parle de « résiliation anticipée », l'utilisateur demande « comment arrêter le contrat avant la fin ». Aucun mot commun, aucun résultat. C'est précisément ce que la recherche vectorielle a résolu, et c'est pourquoi elle s'est imposée.

Les deux méthodes ont donc des angles morts exactement complémentaires. Combiner les deux ne relève pas du raffinement : c'est la configuration par défaut qui aurait dû être adoptée dès le départ, et elle est absente de la majorité des systèmes que je reprends.

Le gain constaté est important : sur un corpus contenant des références numérotées, réglementaire, contractuel, technique, la recherche hybride corrige souvent la moitié des échecs de récupération, comme le montre la démarche de découper un document.

Comment fusionner les deux listes

  • Par fusion de rangs, qui combine les positions plutôt que les scores. C'est robuste et ne demande aucun réglage.
  • Sans pondération savante au départ. Une pondération égale fonctionne bien ; l'ajuster demande un jeu de tests. Voir construire un jeu de tests en une journée.
  • En dédupliquant sur l'identifiant du passage, un même extrait pouvant remonter dans les deux listes.
  • En gardant la trace de la voie d'arrivée, ce qui rend les échecs diagnosticables.

Le cas particulier des identifiants, qui mérite un traitement à part

Quand la question contient un identifiant reconnaissable, il faut le rechercher exactement et privilégier le résultat, avant même toute fusion. C'est une règle simple qui règle une classe entière de problèmes.

La mise en œuvre tient en quelques lignes. On détecte dans la question les motifs d'identifiant du domaine, article suivi d'un nombre, code produit, numéro de dossier, et on lance une recherche exacte sur ce motif. Si elle donne un résultat, il passe en tête.

Ce traitement paraît rustique et il est remarquablement efficace, parce que les questions contenant un identifiant sont précisément celles où l'utilisateur attend une réponse exacte et où l'à-peu-près est le plus dommageable.

J'y ajoute une règle de refus : si l'identifiant demandé n'existe pas dans le corpus, le système doit le dire plutôt que de répondre sur un article voisin. Le principe est développé dans le refus de répondre est une fonctionnalité.

Ce que ça coûte à mettre en place

Un index lexical s'ajoute à un système existant en une journée et n'augmente ni la latence perceptible ni le coût par requête. C'est le rapport bénéfice-effort le plus favorable de toute la chaîne de récupération.

La recherche lexicale est peu coûteuse en calcul et ne fait appel à aucun modèle. Les deux recherches peuvent tourner en parallèle, ce qui laisse la latence inchangée.

Le coût réel est ailleurs : il faut réindexer le corpus, ce qui demande du temps de traitement mais aucun développement particulier.

Le seul travail de conception porte sur la fusion et sur la détection d'identifiants, soit une journée pour quelqu'un qui connaît le domaine. Comparé au gain, souvent la moitié des échecs de récupération, c'est le chantier que je recommande en premier sur tout système documentaire existant.

Le test qui révèle le besoin en cinq minutes

Poser dix questions contenant une référence exacte, un numéro d'article, un code produit, et vérifier que le bon passage remonte. Si le système répond sur un voisin, l'index lexical manque, et aucun réglage de prompt ne le remplacera.

Ce qu'il ne faut pas attendre de cette combinaison

La recherche hybride améliore la récupération, elle ne corrige ni un corpus désordonné ni un découpage inadapté. Il faut la situer correctement dans la chaîne.

Si le corpus contient trois versions d'une même procédure sans indication de validité, les deux index remonteront les trois. La hiérarchie des sources est une décision humaine, pas un problème de recherche.

Si le découpage sépare une clause de sa condition, aucune méthode de recherche ne les réunira. Le passage remonté sera correct et incomplet.

L'ordre d'intervention qui fonctionne est donc : corpus d'abord, découpage ensuite, recherche hybride en troisième. Inverser cet ordre produit des améliorations qui ne se voient pas, parce qu'un problème amont masque le gain aval.

Questions fréquentes

Pourquoi la recherche vectorielle rate-t-elle les numéros d'article ?

Parce qu'elle encode le sens : « 12.3 » et « 12.4 » ont un sens presque identique pour un modèle d'embarquement. La distinction qui compte pour l'utilisateur est celle qu'il ne fait pas.

Comment fusionner les deux listes de résultats ?

Par fusion de rangs, qui combine les positions plutôt que les scores. Une pondération égale fonctionne bien au départ ; l'ajuster demande un jeu de tests.

Combien coûte l'ajout d'un index lexical ?

Une journée de travail et une réindexation du corpus. La latence reste inchangée si les deux recherches tournent en parallèle, et le coût par requête n'augmente pas.

Qu'est-ce que la recherche hybride ne corrige pas ?

Un corpus contenant plusieurs versions sans indication de validité, et un découpage qui sépare une clause de sa condition. Ces deux problèmes sont en amont de la recherche.