Back to flin
flin

Recherche hybride de documents : BM25 + sémantique

Comment FLIN combine la recherche par mots-clés BM25 avec la recherche vectorielle sémantique pour un classement hybride de documents -- obtenir la précision de la correspondance exacte de mots-clés et le rappel de la recherche basée sur le sens.

Thales & Claude | March 30, 2026 4 min flin
EN/ FR/ ES
flinsearchbm25semantichybrid

La recherche sémantique comprend le sens mais manque les termes exacts. Si un utilisateur cherche « error 504 » dans une base de connaissances, la recherche sémantique pourrait retourner des articles sur les timeouts de passerelle et les erreurs réseau mais les classer en dessous d'articles sur les erreurs HTTP en général. Le terme exact « 504 » n'est pas capturé dans l'embedding.

La recherche par mots-clés BM25 fait correspondre les termes exacts mais manque le sens. Chercher « how to fix slow database » avec BM25 trouve des articles contenant ces mots exacts mais manque un article intitulé « Optimizing Query Performance in PostgreSQL » -- qui est exactement ce dont l'utilisateur a besoin.

La recherche hybride combine les deux approches : BM25 pour la précision sur les termes exacts, recherche sémantique pour le rappel sur les concepts connexes. FLIN implémente cela comme une fonction hybrid_search() intégrée qui fusionne les résultats des deux méthodes en utilisant la fusion de rangs réciproques (Reciprocal Rank Fusion).

La fonction de recherche hybride

flinresults = hybrid_search("error 504 gateway timeout", {
    entity: DocumentChunk,
    text_field: "content",
    semantic_field: "content",
    limit: 10,
    bm25_weight: 0.4,
    semantic_weight: 0.6
})

La fonction effectue deux recherches en parallèle : une recherche BM25 pour la correspondance de mots-clés et une recherche sémantique pour la correspondance de sens. Les résultats sont fusionnés en utilisant la fusion de rangs réciproques pondérée (RRF).

Pourquoi la fusion de rangs réciproques

La RRF est préférée au calcul de moyenne simple des scores pour une raison critique : les scores BM25 et les scores de similarité cosinus sont sur des échelles complètement différentes. Un score BM25 de 15,7 et une similarité cosinus de 0,89 ne peuvent pas être moyennés de manière significative. La RRF normalise les deux classements sur une échelle commune en utilisant les positions de rang plutôt que les scores bruts.

Quand la recherche hybride gagne

La recherche hybride surpasse systématiquement chaque méthode seule dans trois scénarios :

Requêtes de termes exacts : BM25 identifie la correspondance exacte ; la sémantique ajoute des articles de dépannage connexes.

Requêtes conceptuelles : La sémantique fournit les résultats principaux ; BM25 booste ceux qui contiennent aussi des termes exacts.

Requêtes mixtes : Les deux méthodes contribuent. Les documents mentionnant les termes spécifiques ET discutant les concepts scorent le plus haut.

Réglage des poids

ApplicationPoids BM25Poids sémantiqueJustification
Recherche de code0,60,4Les identifiants exacts comptent
Documentation0,30,7Les concepts comptent plus que les mots exacts
E-commerce0,50,5Noms de produits et descriptions
Recherche juridique0,40,6Concepts avec termes spécifiques
Tickets de support0,30,7Les utilisateurs décrivent des problèmes

Performance

ComposantLatenceNotes
Recherche BM25 (100K docs)1-3 msRecherche dans l'index inversé
Recherche sémantique (100K docs)3-5 msPlus proches voisins approximatifs HNSW
Fusion RRF< 1 msCalcul de scores
Total recherche hybride5-10 msLes deux recherches s'exécutent en parallèle

La recherche hybride donne aux applications FLIN le meilleur des deux mondes : la précision de la correspondance par mots-clés pour les termes spécifiques et l'intelligence de la compréhension sémantique pour les requêtes conceptuelles.

Dans le prochain article, nous prenons du recul par rapport aux fonctionnalités spécifiques pour examiner la conception IA-first de FLIN -- les décisions philosophiques et pratiques qui rendent FLIN particulièrement adapté au développement assisté par IA.


Ceci est la partie 123 de la série « Comment nous avons construit FLIN », documentant comment un CEO à Abidjan et un CTO IA ont conçu et construit un langage de programmation à partir de zéro.

Navigation de la série : - [122] Découpage conscient du code pour le RAG - [123] Recherche hybride de documents : BM25 + sémantique (vous êtes ici) - [124] Conception d'un langage IA-first - [125] Analytique de recherche et mise en cache des résultats

Share this article:

Responses

Write a response
0/2000
Loading responses...

Related Articles