Retour à l'accueil

Systèmes RAG : Rerankers, embeddings, précision LLM

Étudiez les principes des systèmes RAG, le rôle des bases de données vectorielles, embeddings et rerankers dans l'amélioration de la précision des réponses des grands modèles de langage. Pour les spécialistes IT.

Optimisation RAG : Comment les rerankers améliorent la précision des réponses LLM
Advertisement 728x90

Optimiser la précision des LLM avec les rerankers dans les systèmes RAG

Les grands modèles de langage (LLM) démontrent des capacités impressionnantes de génération de texte, mais leur propension aux « hallucinations » – la production d'informations fausses ou non vérifiées – reste un défi majeur. Pour y remédier, l'architecture RAG (Retrieval-Augmented Generation) est largement utilisée. Le RAG permet aux LLM de s'appuyer sur des sources de données externes et vérifiées, améliorant considérablement la fiabilité et la pertinence des réponses générées. Cet article explore les principes de fonctionnement du RAG, en examinant ses composants clés tels que les embeddings, les bases de données vectorielles, les retrievers, et en se concentrant particulièrement sur le rôle crucial des rerankers pour équilibrer la vitesse de recherche et la précision de l'information.

Principes fondamentaux du RAG : Des hallucinations aux faits

Le problème des hallucinations des LLM provient du fait que ces modèles sont entraînés sur de vastes ensembles de données, ce qui leur permet de générer des textes plausibles même lorsqu'ils manquent de connaissances spécifiques sur un sujet donné. Les systèmes RAG y remédient en donnant au modèle accès à des informations à jour et pertinentes provenant d'une base de connaissances externe. Le processus implique deux étapes principales : la Récupération (Retrieval) et la Génération (Generation). Pendant la phase de récupération, le système extrait de la base de données des extraits de texte les plus pertinents par rapport à la requête de l'utilisateur, puis les transmet au LLM comme contexte additionnel pour générer une réponse.

Pour une utilisation efficace des données externes, celles-ci doivent être préparées. Les documents longs sont décomposés en segments plus petits et significatifs, ou chunks (morceaux). Ceci est essentiel car les LLM ont une fenêtre de contexte limitée, c'est-à-dire la quantité maximale de texte qu'ils peuvent traiter en une seule fois. Pour maintenir la cohérence de l'information entre les chunks adjacents, une technique de chevauchement (overlap) est utilisée, où une petite partie du segment précédent est incluse au début du suivant. Cela aide le modèle à mieux comprendre le contexte lorsqu'il travaille avec des parties de texte individuelles.

Google AdInline article slot

Bases de données vectorielles et Embeddings : La recherche sémantique

Au cœur d'un système RAG se trouve le mécanisme de recherche de fragments de données pertinents. Les ordinateurs ne peuvent pas comprendre directement le sens des mots ; ils fonctionnent avec des nombres. Par conséquent, les textes sont transformés en représentations numériques appelées embeddings ou vecteurs. Un embedding est un vecteur multidimensionnel (une séquence de nombres) qui encode le sens sémantique d'un mot, d'une phrase ou d'un segment de texte entier. Les mots ou phrases de sens similaire auront des vecteurs situés à proximité les uns des autres dans un espace multidimensionnel.

Le processus de création des embeddings est réalisé à l'aide de modèles d'embedding spécialisés, qui sont entraînés sur de vastes corpus de texte. Ces modèles apprennent à mapper les mots et leur contexte à des représentations numériques uniques. Par exemple, si vous prenez les vecteurs pour « roi », « homme » et « femme », le vecteur pour « reine » sera très proche du résultat de l'opération « vecteur(roi) - vecteur(homme) + vecteur(femme) ». Cela démontre la capacité des embeddings à capturer des relations sémantiques et syntaxiques complexes dans le langage.

Les embeddings générés sont stockés dans des bases de données vectorielles. Ces bases de données sont optimisées pour des recherches rapides des plus proches voisins. Lorsqu'un utilisateur pose une question, sa requête est également transformée en un embedding, puis la base de données vectorielle trouve les fragments de texte dont les embeddings sont les plus similaires à l'embedding de la requête. La similarité vectorielle est généralement mesurée à l'aide de métriques telles que la similarité cosinus.

Google AdInline article slot

Voici un exemple de code Python démontrant la création d'embeddings à l'aide de l'API OpenAI :

# Pour exécuter cet exemple, vous devez installer la bibliothèque openai et obtenir une clé API
from openai import OpenAI
import os

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

text = "A fluffy cat named Whiskers enjoys telling tales of ancient explorers."

response = client.embeddings.create(
    model="text-embedding-3-small",
    input=text,
    dimensions=768  # explicitly set the dimensionality
)

vector = response.data[0].embedding
print(f"Vector dimensionality: {len(vector)}")  # will output 768
print("First 20 numbers:", vector[:20])
print("... and so on up to the 768th number")

Ce code transforme une phrase textuelle en un vecteur numérique de 768 éléments, qui peut ensuite être utilisé pour la recherche dans une base de données vectorielle.

Retrievers et mise à l'échelle : Les défis de performance

Un retriever (ou récupérateur) est un composant d'un système RAG chargé d'extraire un ensemble initial de documents ou de fragments pertinents d'une base de données vectorielle. Il utilise l'embedding de la requête de l'utilisateur pour trouver les embeddings les plus similaires des chunks stockés. Pour de petites collections de documents, un retriever peut effectuer une recherche par force brute, en comparant l'embedding de la requête avec tous les vecteurs stockés. Cependant, à mesure que les volumes de données augmentent (des milliards de fragments), cette approche devient inefficace et trop lente.

Google AdInline article slot

Pour résoudre le problème de la mise à l'échelle, divers algorithmes de plus proches voisins approximatifs (ANN) sont employés. Ces algorithmes créent des index spéciaux, tels que IVF (Inverted File Index), HNSW (Hierarchical Navigable Small World) ou LSH (Locality Sensitive Hashing). Les index ANN accélèrent considérablement les recherches en sacrifiant un léger degré de précision. Ils trouvent des voisins non pas parfaitement exacts, mais très proches en beaucoup moins de temps. Ainsi, un compromis émerge entre le rappel (exhaustivité, c'est-à-dire la capacité à trouver tous les éléments pertinents) et la latence (délai, c'est-à-dire la vitesse de réponse).

Malgré les optimisations de vitesse, les résultats renvoyés par un retriever ne sont pas toujours idéaux. Les retrievers peuvent extraire des fragments sémantiquement proches de la requête mais qui ne sont pas les plus pertinents ou précis pour former la réponse finale. Cela est dû au fait que les embeddings utilisés pour la recherche sont souvent unidirectionnels (bi-encodeurs), ce qui signifie que la requête et les documents sont encodés indépendamment, puis leurs vecteurs sont comparés. Bien qu'efficace pour des recherches rapides, cette approche peut manquer des connexions contextuelles subtiles.

Améliorer la précision avec les Rerankers

Pour surmonter les limitations des retrievers et améliorer la précision des réponses des systèmes RAG, des rerankers (ou réordonnanceurs) sont employés. Un reranker est un composant additionnel qui reçoit un petit ensemble (par exemple, 10-100) de fragments potentiellement pertinents du retriever et les réordonne en fonction d'une évaluation de pertinence plus approfondie. Il agit comme un filtre, écartant les résultats moins utiles et plaçant les plus significatifs en tête.

Contrairement aux modèles d'embedding utilisés par les retrievers, les rerankers utilisent souvent des cross-encodeurs. Les cross-encodeurs prennent des paires « requête-document » en entrée et les traitent conjointement, évaluant leur pertinence mutuelle. Cela leur permet de capturer des interactions plus complexes et nuancées entre la requête et le contexte que de simples comparaisons de vecteurs. Bien que les cross-encodeurs soient significativement plus lents que les modèles d'embedding bi-encodeurs, ils sont appliqués à un ensemble de documents déjà filtré et de petite taille, ce qui rend leur utilisation faisable d'un point de vue computationnel.

Ainsi, les rerankers aident à trouver un équilibre optimal entre vitesse et précision. Un retriever rapide avec des index ANN sélectionne rapidement un large éventail de chunks potentiellement pertinents, puis un reranker plus lent mais plus précis réévalue cet ensemble limité, garantissant que le LLM reçoit le contexte de la plus haute qualité pour générer une réponse. Cette approche multi-étapes améliore considérablement la qualité et la fiabilité des informations fournies par un système RAG, minimisant le risque d'hallucinations et améliorant la satisfaction globale de l'utilisateur.

Points clés à retenir

  • Les systèmes RAG permettent aux LLM d'exploiter des données externes pour générer des réponses précises et fiables, luttant contre le problème des « hallucinations ».
  • Les embeddings transforment le texte en vecteurs numériques qui encodent le sens sémantique, facilitant les recherches de similarité dans les bases de données vectorielles.
  • Les retrievers utilisent les embeddings et les index ANN pour extraire rapidement un ensemble initial de fragments pertinents, trouvant un équilibre entre vitesse et rappel.
  • Les rerankers (souvent basés sur des cross-encodeurs) réévaluent les résultats des retrievers, filtrant les fragments moins pertinents et améliorant la précision du contexte pour le LLM.
  • La combinaison d'un retriever rapide et d'un reranker précis permet d'atteindre un équilibre optimal entre performance et qualité dans les systèmes RAG.

— Editorial Team

Advertisement 728x90

Lire ensuite