Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

BM25

ia

Définition

BM25 (Best Match 25) est un algorithme de ranking de documents pour la recherche d'information, développé par Robertson et Jones dans les années 1990 et toujours considéré comme l'algorithme de référence pour la recherche lexicale (full-text search). Il est utilisé par Elasticsearch, OpenSearch, Solr et la plupart des moteurs de recherche enterprise comme fonction de scoring par défaut. BM25 est une évolution de TF-IDF (Term Frequency-Inverse Document Frequency) qui corrige plusieurs de ses limitations. TF-IDF penalise les mots rares et récompense la fréquence des termes de requête dans le document, mais sans saturation : un document qui répète 100 fois un terme reçoit un score disproportionné. BM25 introduit deux facteurs de saturation — k1 (saturation TF, typiquement 1.2-2.0) et b (normalisation par longueur, typiquement 0.75) — et une normalisation par la longueur du document empêchant que les documents longs soient systématiquement favorisés. Dans les pipelines RAG modernes, BM25 est indispensable comme composant de la Hybrid Search (recherche hybride). La recherche purement sémantique (dense retrieval via embeddings) est excellente pour la similarité sémantique mais échoue sur les requêtes avec des mots-clés exacts (identifiants techniques, noms propres, acronymes, numéros de CVE). Un CVE-2024-12345 ne sera trouvé par un système sémantique que si l'embedding encode précisément cet identifiant — ce qui n'est généralement pas le cas pour des identifiants rares. La combinaison BM25 + dense retrieval via Reciprocal Rank Fusion (RRF) ou score hybride pondéré est maintenant le standard pour les systèmes RAG de production. Elasticsearch et OpenSearch proposent des hybrid search natifs combinant BM25 et kNN (k-nearest neighbors). Des bibliothèques Python comme BM25S (2024), rank_bm25 ou whoosh permettent d'intégrer BM25 facilement dans des pipelines RAG custom.

Formule BM25

Score(D, Q) = Σᵢ IDF(qᵢ) × (f(qᵢ,D) × (k1+1)) / (f(qᵢ,D) + k1 × (1-b+b×|D|/avgdl))

Où : f(qᵢ,D) = fréquence du terme qᵢ dans D, |D| = longueur du document, avgdl = longueur moyenne, k1 et b = paramètres de saturation.

Implémentation Hybrid Search

from rank_bm25 import BM25Okapi
import numpy as np

# Index BM25
tokenized_corpus = [doc.split() for doc in documents]
bm25 = BM25Okapi(tokenized_corpus)

def hybrid_search(query, vectorstore, k=4, alpha=0.5):
    # BM25 scores
    bm25_scores = bm25.get_scores(query.split())
    bm25_normalized = (bm25_scores - bm25_scores.min()) / (bm25_scores.max() - bm25_scores.min() + 1e-8)

    # Semantic scores (cosine similarity)
    query_embedding = embed_model.encode([query])[0]
    semantic_scores = np.dot(doc_embeddings, query_embedding)

    # Fusion hybride
    hybrid_scores = alpha * bm25_normalized + (1 - alpha) * semantic_scores
    top_k_indices = np.argsort(hybrid_scores)[-k:][::-1]
    return [documents[i] for i in top_k_indices]

Quand utiliser BM25 seul vs Hybride

  • BM25 seul : requêtes avec identifiants exacts (CVE, codes), domaines très techniques, corpus homogène
  • Dense seul : questions en langage naturel, similarité conceptuelle, multilingue
  • Hybride (recommandé) : la plupart des cas enterprise (CRM, documentation, support)

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis