
RAG avec recherche hybride : comment fonctionne la recherche par mot clé ?
j’ai beaucoup parlé de Reterival Augmented Generation (RAG). En particulier, j’ai couvert les bases de la méthodologie RAG, ainsi qu’un certain nombre de concepts pertinents, tels que le découpage, l’intégration, le reclassement et l’évaluation de récupération.
La méthodologie RAG traditionnelle est très utile car elle permet de rechercher des parties de texte pertinentes dans une vaste base de connaissances, sur la base de signification du texte plutôt que des mots exacts. De cette façon, cela nous permet d’utiliser la puissance de l’IA sur nos documents personnalisés. Ironiquement, aussi utile que soit cette recherche de similarité, elle ne parvient parfois pas à récupérer des parties de texte qui sont correspondances exactes à l’invite de l’utilisateur. Plus précisément, lors d’une recherche dans une vaste base de connaissances, des mots-clés spécifiques (tels que des termes ou des noms techniques spécifiques) peuvent être perdus et des éléments pertinents peuvent ne pas être récupérés même si la requête de l’utilisateur contient les mots exacts.
Heureusement, ce problème peut être facilement résolu en utilisant une ancienne technique de recherche basée sur des mots clés, comme BM25 (meilleure correspondance 25). Ensuite, en combinant les résultats de la recherche de similarité et de la recherche BM25, nous pouvons essentiellement obtenir le meilleur des deux mondes et améliorer considérablement les résultats de notre pipeline RAG.
. . .
Dans les systèmes de recherche d’informations, BM25 est une fonction de classement utilisée pour évaluer la pertinence d’un document par rapport à une requête de recherche. Contrairement à la recherche de similarité, BM25 évalue la pertinence du document par rapport à la requête de l’utilisateur, non pas sur la base de la signification sémantique du document, mais plutôt sur les mots réels qu’il contient. Plus précisément, le BM25 est un modèle de sac de mots (BoW)ce qui signifie qu’il ne prend pas en compte l’ordre des mots dans un document (d’où émerge le sens sémantique), mais plutôt la fréquence avec laquelle chaque mot apparaît dans le document.
Le score BM25 pour une requête donnée q contenant des termes t et un document d peut être (pas si) facilement calculé comme suit :

😿
Puisque cette expression peut être un peu écrasante, prenons du recul et regardons-la petit à petit.
. . .
Commencer simplement avec TF-IDF
Le concept sous-jacent de base du BM25 est TF-IDF (Term Frequency – Inverse Document Frequency). TF-IDF est un concept fondamental de recherche d’informations visant à mesurer l’importance d’un mot dans un document spécifique dans une base de connaissances. En d’autres termes, il mesure dans combien de documents de la base de connaissances un terme apparaît, permettant ainsi d’exprimer à quel point un terme est spécifique et informatif sur un document spécifique. Plus un terme est rare dans la base de connaissances, plus il est considéré comme informatif pour un document spécifique.
En particulier, pour un document d dans une base de connaissances et un terme tle Terme Fréquence TF(t,d) peut être défini comme suit :

et la fréquence inverse des documents IDF

Ensuite, le score TF-IDF peut être calculé comme le produit de TF et IDF comme suit :

. . .
Faisons un exemple rapide pour avoir une meilleure maîtrise de TF-IDF. Supposons une petite base de connaissances contenant trois films avec les descriptions suivantes :
- « Un thriller de science-fiction sur le voyage dans le temps et une aventure dangereuse à travers des réalités alternatives. »
- « Un drame romantique sur deux inconnus qui tombent amoureux lors d’un voyage dans le temps inattendu. »
- « Une aventure de science-fiction mettant en scène un explorateur extraterrestre obligé de voyager à travers les galaxies. »
Après avoir supprimé les mots vides, nous pouvons considérer les termes suivants dans chaque document :
- document 1 : science-fiction, thriller, temps, voyage, dangereux, aventure, alternatif, réalités
- taille du document 1, |d1| = 8
- document 2 : romantique, drame, deux, inconnus, automne, amour, inattendu, temps, voyage
- taille du document 2, |d2| = 9
- document 3 : science-fiction, aventure, mettant en vedette, extraterrestre, explorateur, forcé, voyage, galaxies
- taille du document 3, |d3| = 8
- nombre total de documents dans la base de connaissances N = 3
On peut alors calculer le f(t,d) pour chaque terme de chaque document :

Ensuite, pour chaque document, nous calculons également la Fréquence des Documents et la Fréquence Inverse des Documents :

Et puis enfin nous calculons le score TF-IDF de chaque terme.

Alors, est-ce qu’on en sort ? Jetons par exemple un coup d’œil aux scores TF-IDF du document 1. Le mot « voyage » n’est pas du tout informatif, puisqu’il est inclus dans tous les documents de la base de connaissances. D’un autre côté, des mots comme « thriller » et « dangereux » sont très instructifs, notamment pour le document 1, puisqu’ils ne sont inclus que dans celui-ci.
De cette manière, le score TF-IDF fournit un moyen simple et direct d’identifier et de quantifier l’importance des termes dans chaque document d’une base de connaissances. En d’autres termes, plus le score total des termes d’un document est élevé, plus les informations contenues dans ce document sont rares par rapport aux informations contenues dans tous les autres documents de la base de connaissances.
. . .
Comprendre le score BM25
Dans BM25, nous utilisons le concept TF-IDF afin de quantifier le degré d’information (rare ou important) de chaque document dans une base de connaissances, par rapport à une requête spécifique. Pour ce faire, pour le calcul BM25, nous prenons uniquement en compte les termes de chaque document contenus dans la requête de l’utilisateur, et effectuons un calcul un peu similaire à TF-IF.
BM25 utilise le concept TF-IDF, mais avec quelques ajustements mathématiques afin d’améliorer deux principales faiblesses de TF-IDF.
. . .
Le premier problème de TF-IDF est que TF est linéaire avec le nombre de fois par trimestre t apparaît dans un document d, f(t,d), comme n’importe quelle fonction de la forme :

Cela signifie que plus un terme t apparaît dans un document d, plus TF grandit linéairementce qui, comme vous pouvez l’imaginer, peut poser problème pour les documents volumineux, dans lesquels un terme apparaît encore et encore sans nécessairement être plus important en conséquence.
Un moyen simple de résoudre ce problème consiste à utiliser une courbe de saturation au lieu d’une fonction linéaire. Cela signifie que la sortie augmente avec l’entrée mais se rapproche d’une limite maximale. asymptotiquement, contrairement à la fonction linéaire, où la sortie augmente pour toujours avec l’entrée :

Ainsi, nous pouvons essayer de réécrire TF sous cette forme comme suit, en introduisant un paramètre k1, qui permet de contrôler l’échelle de fréquence. Ainsi, le paramètre K1 permet d’introduire des rendements décroissants. Autrement dit, la 1ère occurrence du terme t dans un document a un impact important sur le score TF, alors que la 20ème apparition n’ajoute qu’un petit gain supplémentaire.

Néanmoins, cela donnerait des valeurs comprises entre 0 et 1. Nous pouvons modifier cela un peu plus et ajouter un (k1 + 1) dans le nominateur, de sorte que les valeurs résultantes de TF soient comparables à la définition initiale de TF utilisée dans TD-IDF.

. . .
Jusqu’ici, tout va bien, mais une information essentielle qui manque encore dans cette expression est la taille du document |d| qui a été inclus dans le calcul initial du TF. Néanmoins, avant d’ajouter le |d| terme, nous devons également le modifier un peu car c’est le deuxième problème de l’expression TF-IDF initiale. Plus précisément, le problème est qu’une base de connaissances va contenir des documents de longueurs variables |d|, ce qui fait que des scores de termes différents ne sont pas comparables. BM25 résout ce problème en normalisant |d|. Autrement dit, au lieu de |d|, l’expression suivante est utilisée :

où avg(dl) est la longueur moyenne des documents de la base de connaissances. De plus, b est un paramètre dans [0,1] qui contrôle la normalisation de la longueur, avec b = 0 correspondant à aucune normalisation et b = 1 correspondant à une normalisation complète.
Ainsi, en ajoutant l’expression normalisée de |d|, nous pouvons obtenir la version plus sophistiquée de TF utilisée dans BM25. Ce sera comme suit :

Habituellement, les valeurs des paramètres utilisées sont k₁ ≈ 1,2 à 2,0 et b ≈ 0,75.
. . .
BM52 utilise également une expression légèrement modifiée pour le calcul de l’IDF comme suit :

Cette expression est dérivée en posant une meilleure question. Dans le calcul initial de l’IDF, nous demandons :
« À quel point le terme est-il rare ?
Au lieu de cela, lorsque nous essayons de calculer l’IDF pour BM25, nous demandons :
« Dans quelle mesure ce terme est-il plus probable dans les documents pertinents que dans les documents non pertinents ? »
La probabilité qu’un document contienne le terme t, dans une base de connaissances de N documents, peut s’exprimer comme suit :

Nous pouvons alors exprimer les chances qu’un document contienne un terme t ou ne le contienne pas comme suit :

Et puis en prenant l’inverse, on obtient :

De la même manière que l’IDF typique, nous obtenons le journal de cette expression pour compresser les valeurs extrêmes. Une transformation exotique appelée Lissage Robertson-Sparck Jones est également effectuée, et de cette façon, nous obtenons finalement l’expression IDF utilisée dans BM25.
. . .
En fin de compte, nous pouvons calculer le score BM25 pour un document spécifique d pour une requête q donnée contenant plusieurs termes t.

De cette manière, nous pouvons noter les documents disponibles dans une base de connaissances en fonction de leur pertinence par rapport à une requête spécifique, puis récupérer les documents les plus pertinents.
Tout cela c’est juste pour dire que le score BM52 est quelque chose comme le score TD-IDF beaucoup plus facile à comprendre, mais un peu plus sophistiqué. Ainsi, le BM52 est très populaire pour effectuer des recherches par mots clés et est également utilisé dans notre cas pour les recherches par mots clés dans un système RAG.
RAG avec recherche hybride
Ainsi, maintenant que nous avons une idée de la façon dont BM25 fonctionne et note les différents documents dans une base de connaissances en fonction de la fréquence des mots-clés, nous pouvons examiner plus en détail comment les scores BM25 sont incorporés dans un pipeline RAG traditionnel.
Comme indiqué dans plusieurs de mes articles précédents, un pipeline RAG très simple ressemblerait à ceci :

Un tel pipeline utilise un score de similarité (comme la similarité cosinus) des intégrations afin de rechercher, trouver et récupérer des morceaux sémantiquement similaires à la requête de l’utilisateur. Bien que la recherche de similarité soit très utile, elle peut parfois manquer des correspondances exactes. Ainsi, en incorporant une recherche par mot clé, en plus de la recherche de similarité dans le pipeline RAG, nous pouvons identifier les éléments pertinents de manière plus efficace et plus complète. Cela modifierait notre paysage comme suit :

Pour chaque morceau de texte, outre l’intégration, nous calculons désormais également un index BM25, permettant un calcul rapide des scores BM25 respectifs sur diverses requêtes utilisateur. De cette façon, pour chaque requête utilisateur, nous pouvons identifier les fragments avec les scores BM25 les plus élevés, c’est-à-dire les fragments qui contiennent les termes les plus rares et les plus informatifs par rapport à la requête de l’utilisateur par rapport à tous les autres fragments de la base de connaissances.
Remarquez comment nous faisons désormais correspondre la requête de l’utilisateur à la fois avec les intégrations dans le magasin de vecteurs (recherche sémantique) et avec l’index BM25 (recherche par mot clé). Différents fragments sont récupérés sur la base de la recherche sémantique et de la recherche par mot clé. Les fragments récupérés sont ensuite combinés, dédupliqués et classés à l’aide de fusion de rangs.
. . .
Dans mon esprit
L’intégration de la recherche par mot-clé BM25 dans un pipeline RAG nous permet d’obtenir le meilleur des deux mondes : la compréhension sémantique des intégrations et la précision de la correspondance exacte des mots-clés. En combinant ces approches, nous pouvons récupérer de manière plus fiable les éléments les plus pertinents, même à partir d’une base de connaissances plus vaste, en garantissant que les termes critiques, les expressions techniques ou les noms ne soient pas négligés. De cette façon, nous pouvons améliorer considérablement l’efficacité de notre processus de récupération et garantir qu’aucune information pertinente importante n’est laissée de côté.
Vous avez adoré cet article ? Soyons amis ! Rejoignez-moi sur :



