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 thales

Treize agents, quarante-trois minutes : la première session Workflow de Claude Fable 5, et ce qu'un script d'orchestration déterministe change aux builds multi-agents

Un prompt, treize agents, quarante-trois minutes : la première session de production avec Claude Fable 5 et l'outil Workflow de Claude Code a livré un site web de production complet de sept pages plus un endpoint backend de capture de leads, en un seul commit. Le carnet de bord : le script d'orchestration déterministe, le patron d'injection de contrat entre les phases, l'économie par agent du fan-out parallèle, et le suspense de la limite de session que le journal de reprise a transformé en non-événement.

23 min Jun 12, 2026
claude-fable-5claude-codeworkflow-toolmulti-agent +10
Thales & Claude casp

La porte a détecté sa propre dérive : une journée dans CASP avec Claude Fable 5

Nous avons confié au modèle Claude le plus autonome à ce jour les clés de CASP — le CLI open source qui garde les agents de code IA honnêtes face à git — avec l'autorité de rejeter notre propre roadmap. Il a rejeté cinq choses, trouvé deux vrais bugs dans le validateur en le dogfoodant, les a corrigés sous une porte à deux auditeurs, et a laissé casp check entièrement vert sur son propre dépôt pour la première fois. CASP 0.3.0 en est le résultat.

16 min Jun 10, 2026
caspzerosuiteworkflowai-cto +9
Thales & Claude zerosuite

La transplantation du CASP : comment la discipline des six fichiers est passée de Conductor à un ERP transport anti-fraude, ce que la compétence /next ajoute quand l'opérateur tape juste « next », et pourquoi le coût d'une dérive du CASP grimpe quand le projet, c'est l'argent des autres

La discipline du CASP qui a piloté trente-cinq sessions de Conductor est agnostique au produit. Le carnet de bord de sa transplantation sur KASSIA, un ERP transport anti-fraude pour un exploitant de flotte en Côte d'Ivoire : ce qui a migré, ce qui n'a pas migré (le validateur sur mesure — et ce que son absence coûte), ce que la compétence /next ajoute quand l'opérateur tape un seul mot, et là où le CASP s'arrête — le bug de déploiement qu'il ne pouvait pas voir parce qu'il enregistre l'intention, pas la réalité de l'infrastructure.

23 min Jun 8, 2026
kassiaerp-kassia-transport-logistiquezerosuiteCASP +15