Aller au contenu principal

Recherche lexicale BM25

La recherche semantique seule ne renvoie pas toujours les meilleurs resultats. Parfois, vous avez besoin de correspondances exactes de mots-cles que la recherche semantique peut manquer. La solution : combiner la recherche semantique avec la recherche lexicale via BM25.

Le probleme de la recherche semantique seule

Si vous cherchez un identifiant d’incident specifique comme “INC-2023-Q4-011”, la recherche semantique pourrait renvoyer des sections non pertinentes qui semblent semantiquement similaires mais ne contiennent pas l’information specifique recherchee. La recherche semantique se concentre sur le sens plutot que sur les correspondances exactes de texte.

Strategie de recherche hybride

La solution : executer les deux recherches en parallele puis fusionner les resultats.

  • Recherche semantique : trouve du contenu conceptuellement relie via les embeddings
  • Recherche lexicale : trouve des correspondances exactes de mots-cles
  • Resultats fusionnes : combine les deux pour une meilleure pertinence globale

Comment fonctionne BM25

BM25 (Best Match 25) est un algorithme populaire de recherche lexicale. Les etapes cles :

  1. Tokeniser la requete : decomposer la question en termes individuels
  2. Compter la frequence des termes : voir combien de fois chaque terme apparait dans tous les documents
  3. Ponderer par rarete : les termes moins frequents recoivent des scores d’importance plus eleves
  4. Noter les documents : trouver les chunks contenant plus d’instances des termes les plus ponderes

Insight cle : les termes rares comme “INC-2023-Q4-011” sont beaucoup plus importants que les mots courants comme “le” ou “de”.

Implementation

# Creer un store BM25
store = BM25Index()

# Ajouter les documents
for chunk in chunks:
    store.add_document({"content": chunk})

# Rechercher
results = store.search("Que s'est-il passe avec INC-2023-Q4-011 ?", 3)

L’API BM25 est similaire a celle du store vectoriel (add_document() et search()), ce qui facilite l’utilisation conjointe des deux systemes.

Meilleurs resultats

Avec BM25, les sections contenant l’identifiant exact de l’incident sont correctement priorisees, au lieu de renvoyer du contenu non pertinent. L’etape suivante est de fusionner les resultats des deux systemes de recherche.