07 / 08 Le versant lexical : BM25 et recherche hybride
  1. ← Chercher par le sens : bases vectorielles et retrieval
  2. 00 Avant-propos
  3. 01 Embeddings et géométrie de la similarité
  4. 02 Recherche exacte et malédiction de la dimension
  5. 03 HNSW : naviguer dans un graphe de proximité
  6. 04 Le paysage des index ANN
  7. 05 Tester l'approximatif : l'oracle différentiel
  8. 06 Rendre l'index durable
  9. 07 Le versant lexical : BM25 et recherche hybride
  10. 08 Du retrieval au RAG
Chercher par le sens : bases vectorielles et retrieval · 07 / 08

Le versant lexical : BM25 et recherche hybride

La recherche par le sens, brillante sur les paraphrases, passe à côté d'un numéro de facture exact. Comment marier les vecteurs au monde des mots exacts, sans qu'une échelle de score écrase l'autre ?

Au chapitre précédent, on a rendu l’index durable et vérifié : il survit aux redémarrages, et un oracle de round-trip prouve qu’on le relit fidèlement. Toute la recherche qu’on a bâtie depuis le début de ce cours repose donc sur une fondation solide. Mais elle repose aussi sur une seule chose : le sens, capté par les vecteurs. Et il existe des requêtes où le sens, justement, ne suffit pas.

Imagine ta base documentaire personnelle, et cette requête : « facture 8831 ». Tu ne cherches pas un document qui parle vaguement de facturation. Tu cherches LA facture numéro 8831, exactement celle-là. Or pour un moteur sémantique, « 8831 » est un point comme un autre dans l’espace, voisin de « 8830 » et de « 2207 ». Il te rendra une pile de factures toutes très ressemblantes, sans savoir distinguer la bonne. La recherche par le sens vient de buter sur ce qu’elle ne voit pas : la lettre.

Deux angles morts, pas un seul

Le réflexe serait de dire : « revenons à la bonne vieille recherche par mot-clé, elle, elle trouve le numéro exact ». Vrai, mais on retomberait dans le piège qui a ouvert ce cours. La recherche par mot-clé est aveugle au sens : demande-lui « annuler un règlement », elle ne trouvera jamais un document intitulé « procédure de remboursement d’une commande », car pas un seul mot n’est partagé. C’est le désaccord de vocabulaire Désaccord de vocabulaire Situation où deux textes parlent de la même chose avec des mots entièrement différents (en anglais vocabulary mismatch). Par exemple « annuler un règlement » et « procédure de remboursement » ne partagent aucun mot : une recherche purement lexicale les croit étrangers, là où la recherche sémantique les rapproche. : deux textes peuvent parler de la même chose avec des mots entièrement différents.

On a donc deux angles morts, symétriques et complémentaires :

  • La recherche sémantique excelle sur les paraphrases et les synonymes, mais elle flotte sur les identifiants exacts, les noms propres rares, les références littérales. Elle voit le sens, pas la lettre.
  • La recherche lexicale (par les mots) épingle le token exact à coup sûr, mais elle est sourde aux synonymes. Elle voit la lettre, pas le sens.

L’idée de ce chapitre est de refuser le choix. Plutôt que d’opposer les deux mondes, on va les faire collaborer : c’est la recherche hybride Recherche hybride Stratégie de recherche qui combine un signal sémantique (proximité de sens entre vecteurs) et un signal lexical (correspondance de mots exacts, par exemple BM25), puis fusionne leurs classements. Elle vise à couvrir les angles morts complémentaires des deux approches : synonymes pour le sens, identifiants exacts pour la lettre. . Mais avant de marier deux scores, il faut d’abord savoir en construire un bon côté lexical. C’est le rôle de BM25.

BM25, le score de la lettre

Comment noter à quel point un document « colle » à une requête de mots-clés ? L’intuition de base : plus un mot de la requête apparaît dans le document, plus ce document est pertinent. On appelle ce comptage la fréquence de terme Fréquence de terme Nombre de fois qu'un terme apparaît dans un document donné (en anglais term frequency, TF). Plus elle est élevée, plus le document semble porter sur ce terme, mais BM25 fait saturer ce gain : la dixième occurrence apporte beaucoup moins que la première. . Mais cette intuition brute mène à trois pièges, et BM25 BM25 Fonction de score lexicale de référence en recherche d'information (Best Matching 25). Elle note la pertinence d'un document pour une requête de mots-clés en combinant trois ingrédients : la fréquence de terme saturée, la rareté du terme (IDF) et une normalisation par la longueur du document. Source : Robertson & Zaragoza, 2009 (pour « Best Matching 25 ») est précisément la formule qui les corrige tous les trois. Voyons-les un par un.

Premier piège : tous les mots ne se valent pas. Si ta requête est « le contrat de prestation », le mot « le » apparaît dans presque tous les documents : il ne discrimine rien. Le mot « prestation », lui, est rare et donc très informatif. BM25 pondère chaque terme par sa rareté grâce à la fréquence inverse de document Fréquence inverse de document Poids qui mesure la rareté d'un terme dans le corpus (en anglais inverse document frequency, IDF). Il croît quand le terme apparaît dans peu de documents : un mot rare et discriminant pèse fort, un mot banal présent partout pèse presque rien. Source : Spärck Jones, 1972 , ou IDF :

IDF(t)=ln ⁣(1+Nn(t)+0.5n(t)+0.5)\text{IDF}(t) = \ln\!\left(1 + \frac{N - n(t) + 0.5}{n(t) + 0.5}\right)

Cette équation se lit : le poids du terme tt est le logarithme d’une quantité qui grandit quand n(t)n(t), le nombre de documents contenant tt, est petit. Autrement dit, un terme présent dans peu de documents (comme « 8831 ») reçoit un grand poids ; un terme présent partout reçoit un poids minuscule. Le rare parle fort, le banal se tait.

Deuxième piège : la dixième occurrence ne vaut pas la première. Un document qui contient cinq fois « prestation » est plus pertinent qu’un document qui ne la contient qu’une fois. Mais est-il cinq fois plus pertinent ? Non. Le gain doit s’essouffler : passer de une à deux occurrences compte beaucoup, passer de neuf à dix presque rien. BM25 fait saturer la fréquence de terme via un paramètre k1k_1, qui règle la vitesse à laquelle on atteint ce plafond.

Troisième piège : les longs documents trichent. Un document très long a mécaniquement plus de chances de contenir n’importe quel mot, sans être plus pertinent pour autant. BM25 corrige ce biais par une normalisation par longueur Normalisation par longueur Correction qui empêche les documents longs de tricher. À fréquence de terme égale, un document plus long que la moyenne du corpus a mécaniquement plus de chances de contenir n'importe quel mot ; BM25 le pénalise via le paramètre b (0 = aucune correction, 1 = correction pleine). , dosée par un paramètre bb : à fréquence égale, un document plus long que la moyenne est pénalisé. Tout se rassemble dans une seule formule :

BM25(q,d)=tqIDF(t)f(t,d)(k1+1)f(t,d)+k1(1b+bdavgdl)\text{BM25}(q, d) = \sum_{t \in q} \text{IDF}(t) \cdot \frac{f(t,d)\,(k_1 + 1)}{f(t,d) + k_1\left(1 - b + b\,\dfrac{|d|}{\text{avgdl}}\right)}

Elle se lit ainsi : le score du document dd pour la requête qq est la somme, sur chaque terme tt de la requête, de son poids de rareté IDF(t)\text{IDF}(t) multiplié par une fréquence saturée. Au numérateur, f(t,d)f(t,d) est le nombre de fois où tt apparaît dans dd. Au dénominateur, le terme d/avgdl|d|/\text{avgdl} compare la longueur du document à la longueur moyenne du corpus : c’est lui qui pénalise les longs. Les valeurs usuelles sont k1=1,5k_1 = 1{,}5 et b=0,75b = 0{,}75.

Le piège de la fusion

On sait maintenant produire deux scores pour un même document : un score lexical BM25, et un score sémantique par similarité cosinus (celui du chapitre 1). La tentation est immédiate : additionnons-les, et le meilleur des deux mondes émergera.

C’est un piège, et il est subtil. Les deux scores ne vivent pas sur la même échelle. La similarité cosinus est bornée dans [0,1][0, 1]. BM25, lui, n’est pas borné : il grandit avec la rareté des termes et leur nombre, et atteint couramment des valeurs de 2, 10, 15. Additionner 0,90{,}9 (un excellent cosinus) avec 1414 (un fort BM25) donne 14,914{,}9 : le cosinus est noyé, il ne pèse plus rien. La somme naïve ne fusionne pas deux signaux, elle laisse le plus bruyant écraser l’autre. En pratique, elle se comporte presque comme une recherche purement lexicale déguisée.

La fusion par le rang : RRF

La parade est d’une élégance presque insolente : si le problème vient des échelles de score, alors n’utilisons plus les scores du tout. Utilisons seulement les rangs. Que tu sois premier avec un cosinus de 0,990{,}99 ou premier avec un BM25 de 1414, tu es premier, point. C’est l’idée de la fusion réciproque des rangs Fusion réciproque des rangs Méthode de fusion de plusieurs classements (en anglais Reciprocal Rank Fusion, RRF). Le score d'un document est la somme, sur chaque classement, de 1 / (k + rang), avec k souvent fixé à 60. Comme elle n'utilise que les rangs et jamais les scores bruts, elle est insensible à l'échelle : idéale pour fusionner un cosinus borné et un BM25 non borné. Source : Cormack et al., 2009 (Reciprocal Rank Fusion, RRF).

RRF(d)=i1k+ri(d)\text{RRF}(d) = \sum_{i} \frac{1}{k + r_i(d)}

Cette équation se lit : le score fusionné d’un document dd est la somme, sur chaque classement ii (ici le lexical et le sémantique), de l’inverse de k+ri(d)k + r_i(d), où ri(d)r_i(d) est le rang de dd dans le classement ii. Être bien classé (petit rang) donne une grosse contribution ; être mal classé en donne une petite. La constante kk, fixée classiquement à 6060, amortit l’écart entre les toutes premières places pour qu’un unique classement ne puisse pas tout décider à lui seul.

La beauté de cette formule, c’est qu’elle ne lit jamais un score brut. Multiplie tous les BM25 par mille : les rangs ne bougent pas, donc le résultat fusionné ne bouge pas. Le RRF est insensible à l’échelle par construction. Un document récompensé doit être bien classé dans les deux mondes à la fois ; c’est exactement ce qu’on attend d’une bonne fusion.

À toi de fusionner

Le composant ci-dessous met les trois classements côte à côte sur un petit corpus de documents : le classement lexical (BM25), le classement sémantique (cosinus), et le classement hybride. Bascule entre les deux requêtes, et surtout, bascule la méthode de fusion entre RRF et somme naïve pour voir l’échelle de BM25 prendre le pouvoir.

Requête

tokens lexicauxfacture8831

Méthode de fusion

Lexical (BM25)

  1. #1en tête
    2.049

    Facture FR-2024-8831, prestation de conseil

  2. #2
    0.684

    Facture FR-2024-2207, hébergement annuel

  3. #3
    0.684

    Facture FR-2023-1180, licence logicielle

  4. #4
    0.000

    Annuler ou se faire rembourser une commande

  5. #5
    0.000

    Règlement intérieur du personnel

  6. #6
    0.000

    Note de frais, déplacement à Lyon

  7. score nul : aucun token commun

Sémantique (cosinus)

  1. #1en tête
    1.000

    Facture FR-2024-8831, prestation de conseil

  2. #2
    0.998

    Facture FR-2024-2207, hébergement annuel

  3. #3
    0.990

    Facture FR-2023-1180, licence logicielle

  4. #4
    0.788

    Règlement intérieur du personnel

  5. #5
    0.643

    Note de frais, déplacement à Lyon

  6. #6
    0.407

    Annuler ou se faire rembourser une commande

Hybride

  1. #1en tête
    0.033

    Facture FR-2024-8831, prestation de conseil

  2. #2
    0.032

    Facture FR-2024-2207, hébergement annuel

  3. #3
    0.032

    Facture FR-2023-1180, licence logicielle

  4. #4
    0.031

    Règlement intérieur du personnel

  5. #5
    0.031

    Annuler ou se faire rembourser une commande

  6. #6
    0.031

    Note de frais, déplacement à Lyon

Ce que tu observes

Requête identifiant : BM25 isole d1 de façon décisive, alors que le cosinus rend d1, d2 et d3 quasi indiscernables. Le sens ne sait pas distinguer trois factures presque identiques ; le token rare 8831 si.

Trois questions à te poser en jouant :

  1. Sur la requête « facture 8831 », compare la colonne lexicale et la colonne sémantique. Laquelle place le bon document loin devant ? Laquelle hésite entre trois factures presque à égalité ? Pourquoi ?
  2. Passe à « annuler le règlement ». Quel document la colonne lexicale met-elle en tête, et est-ce le bon ? Que fait la colonne sémantique ?
  3. Toujours sur la paraphrase, bascule la fusion de RRF vers somme naïve. Le document en tête de la colonne hybride change-t-il ? Lequel des deux modes de fusion garde le bon document, et pourquoi l’autre se fait-il avoir ?

Exercices

En une phrase

La recherche par le sens et la recherche par la lettre ont des angles morts symétriques (l’une rate les identifiants exacts, l’autre les synonymes) ; on les réconcilie par une recherche hybride, à condition de fusionner non pas les scores bruts (dont les échelles incompatibles laissent BM25 écraser le cosinus) mais les rangs, via la fusion réciproque des rangs, insensible à l’échelle par construction.

Quiz
  1. 1. Pourquoi une recherche purement sémantique peut-elle rater la requête « facture 8831 » ?

  2. 2. À quoi sert le facteur IDF dans BM25 ?

  3. 3. Pourquoi fusionner par RRF plutôt que par somme des scores ?

Vers le chapitre 8

On sait maintenant retrouver les bons documents : par le sens, par la lettre, et par leur fusion robuste. Mais retrouver n’est pas répondre. Si tu poses une vraie question à ta base, tu ne veux pas une liste de documents à lire toi-même, tu veux une réponse rédigée, fondée sur ces documents. C’est tout l’enjeu du dernier chapitre : brancher notre moteur de recherche sur un modèle de langage. On lui donnera, en contexte, les meilleurs passages remontés par la recherche hybride, et il composera la réponse en s’appuyant dessus. C’est l’architecture qu’on appelle la génération augmentée par la recherche, le RAG, où tout ce qu’on a construit converge enfin.

Sources

  • Robertson, S. & Zaragoza, H. (2009). « The Probabilistic Relevance Framework: BM25 and Beyond. » Foundations and Trends in Information Retrieval 3(4), 333-389. DOI 10.1561/1500000019
  • Spärck Jones, K. (1972). « A Statistical Interpretation of Term Specificity and its Application in Retrieval. » Journal of Documentation 28(1), 11-21. DOI 10.1108/eb026526
  • Cormack, G. V., Clarke, C. L. A. & Büttcher, S. (2009). « Reciprocal Rank Fusion Outperforms Condorcet and Individual Rank Learning Methods. » SIGIR ‘09, 758-759. DOI 10.1145/1571941.1572114

Pour aller plus loin

  • Manning, C. D., Raghavan, P. & Schütze, H. (2008). Introduction to Information Retrieval. Cambridge University Press. Version en ligne libre