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.

Juste A. Gnimavo (Thales) & Claude | March 26, 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

Thales & Claude deblo

Le Step Zero ne suffisait pas : comment valider un constructeur sans valider le runtime a fait tomber toutes les sessions vocales de Déblo l’heure où nous avons livré le streaming caméra temps réel

La phase 14 a livré Déblo Eyes — streaming caméra temps réel via LiveKit vers Gemini Live native audio. Le premier deploy a fait tomber toutes les sessions vocales en production en quatre-vingt-dix secondes parce que notre Step 0 avait validé le constructeur sans exercer le runtime. Le build log de comment Déblo a eu des yeux, ce qu’un pré-vol incomplet a coûté, et quels points de polish ont été livrés ou reportés.

33 min May 20, 2026
debloclaude-opus-4.7claude-codegemini-live +25
Thales & Claude deblo

Le tiret cadratin qui a tué la production : comment un slogan marketing dans un header HTTP a fait tomber le chat de Déblo pendant 24 heures

Deux jours avant la soumission App Store, tout le produit chat de Déblo s’est cassé silencieusement. Pas de spinner, pas de toast, aucune erreur dans l’UI — juste un silence radio. L’incident de 24 heures se résumait à un seul « é » dans la valeur d’un header HTTP qui levait une UnicodeEncodeError avant qu’aucune requête vers OpenRouter ne quitte le backend. Post-mortem d’une fausse hypothèse, d’une trace Sentry, et d’un fix de six lignes qui a débloqué le lancement.

30 min May 19, 2026
debloclaude-opus-4.7claude-codeincident +19
Thales & Claude deblo

Six heures, d’une page blanche à la review Apple — Comment nous avons soumis Déblo à l’App Store, en direct

Marche à marche en direct de la soumission de Déblo à l’App Store iOS en six heures : ce que les validateurs d’Apple ont rejeté (un superscript Unicode), ce que nous avons corrigé (un Promotional Text gaspillé sur des marques tierces), et les rouages de l’ASO iOS que presque tout le monde rate.

30 min May 13, 2026
debloclaude-opus-4.7claude-codeapp-store +16