AGI
Pouvoir des rerankers et de la recherche à deux étapes pour la génération augmentée de récupération

By
Aayush Mittal Mittal
Lorsqu’il s’agit de traitement automatique des langues (TAL) et de recherche d’informations, la capacité à récupérer efficacement et avec précision les informations pertinentes est primordiale. Alors que le domaine continue d’évoluer, de nouvelles techniques et méthodologies sont développées pour améliorer les performances des systèmes de récupération, en particulier dans le contexte de la Génération Augmentée de Récupération (RAG). Une telle technique, connue sous le nom de recherche à deux étapes avec rerankers, est émergée comme une solution puissante pour répondre aux limitations inhérentes aux méthodes de récupération traditionnelles.
Dans cet article, nous discutons des complexités de la recherche à deux étapes et des rerankers, en explorant leurs principes sous-jacents, les stratégies de mise en œuvre et les avantages qu’ils offrent pour améliorer la précision et l’efficacité des systèmes RAG. Nous fournirons également des exemples pratiques et des extraits de code pour illustrer les concepts et faciliter une compréhension plus approfondie de cette technique de pointe.
Comprendre la Génération Augmentée de Récupération (RAG)
Avant de plonger dans les spécificités de la recherche à deux étapes et des rerankers, révisons brièvement le concept de Génération Augmentée de Récupération (RAG). La RAG est une technique qui étend les connaissances et les capacités des grands modèles de langage (LLM) en leur fournissant l’accès à des sources d’informations externes, telles que des bases de données ou des collections de documents. Référez-vous à l’article “A Deep Dive into Retrieval Augmented Generation in LLM” pour plus d’informations.
Le processus RAG typique implique les étapes suivantes :
- Requête : Un utilisateur pose une question ou fournit une instruction au système.
- Récupération : Le système interroge une base de données vectorielle ou une collection de documents pour trouver des informations pertinentes pour la requête de l’utilisateur.
- Augmentation : Les informations récupérées sont combinées avec la requête ou l’instruction d’origine de l’utilisateur.
- Génération : Le modèle de langage traite l’entrée augmentée et génère une réponse, en exploitant les informations externes pour améliorer la précision et la complétude de sa sortie.
Bien que la RAG ait prouvé être une technique puissante, elle n’est pas sans défis. L’un des principaux problèmes réside dans l’étape de récupération, où les méthodes de récupération traditionnelles peuvent échouer à identifier les documents les plus pertinents, conduisant à des réponses sous-optimales ou inexactes du modèle de langage.
Le besoin de recherche à deux étapes et de rerankers
Les méthodes de récupération traditionnelles, telles que celles basées sur la correspondance de mots clés ou les modèles d’espace vectoriel, ont souvent du mal à capturer les relations sémantiques nuancées entre les requêtes et les documents. Cette limitation peut entraîner la récupération de documents qui ne sont que superficiellement pertinents ou manquent d’informations cruciales qui pourraient considérablement améliorer la qualité de la réponse générée.
Pour relever ce défi, les chercheurs et les praticiens se sont tournés vers la recherche à deux étapes avec des rerankers. Cette approche implique un processus en deux étapes :
- Récupération initiale : Dans la première étape, un ensemble relativement large de documents potentiellement pertinents est récupéré à l’aide d’une méthode de récupération rapide et efficace, telle qu’un modèle d’espace vectoriel ou une recherche basée sur des mots clés.
- Reranking : Dans la deuxième étape, un modèle de reranking plus sophistiqué est employé pour réorganiser les documents récupérés initialement en fonction de leur pertinence pour la requête, promouvant ainsi les documents les plus pertinents au sommet de la liste.
Le modèle de reranking, souvent un réseau neuronal ou une architecture basée sur des transformateurs, est spécifiquement formé pour évaluer la pertinence d’un document par rapport à une requête donnée. En exploitant les capacités avancées de compréhension du langage naturel, le reranker peut capturer les nuances sémantiques et les relations contextuelles entre la requête et les documents, aboutissant à un classement plus précis et plus pertinent.
Avantages de la recherche à deux étapes et des rerankers
L’adoption de la recherche à deux étapes avec des rerankers offre plusieurs avantages significatifs dans le contexte des systèmes RAG :
- Précision améliorée : En réorganisant les documents récupérés initialement et en promouvant les plus pertinents au sommet, le système peut fournir des informations plus précises et plus précises au modèle de langage, conduisant à des réponses générées de haute qualité.
- Problèmes de domaine atténués : Les modèles d’incrustation utilisés pour la récupération traditionnelle sont souvent formés sur des corpus de texte à usage général, qui peuvent ne pas capturer adéquatement le langage et la sémantique spécifiques au domaine. Les modèles de reranking, en revanche, peuvent être formés sur des données spécifiques au domaine, atténuant ainsi le problème “hors du domaine” et améliorant la pertinence des documents récupérés dans des domaines spécialisés.
- Évolutivité : L’approche à deux étapes permet une évolutivité efficace en exploitant des méthodes de récupération rapides et légères dans la première étape, tout en réservant le processus de reranking plus intensif en calcul pour un sous-ensemble plus petit de documents.
- Flexibilité : Les modèles de reranking peuvent être remplacés ou mis à jour indépendamment de la méthode de récupération initiale, offrant ainsi de la flexibilité et de l’adaptabilité aux besoins évolutifs du système.
ColBERT : Interaction tardive efficace et efficiente
L’un des modèles les plus remarquables dans le domaine des rerankers est ColBERT (Contextualized Late Interaction over BERT). ColBERT est un modèle de reranking de documents qui exploite les capacités de compréhension du langage profond de BERT tout en introduisant un mécanisme d’interaction novateur appelé “interaction tardive”.
Le mécanisme d’interaction tardive dans ColBERT permet une récupération efficace et précise en traitant les requêtes et les documents séparément jusqu’aux dernières étapes du processus de récupération. Plus précisément, ColBERT encode indépendamment la requête et le document à l’aide de BERT, puis emploie une étape d’interaction légère mais puissante qui modèle leur similarité fine. En retardant mais en conservant cette interaction fine, ColBERT peut exploiter l’expressivité des modèles de langage profonds tout en gagnant la capacité de précalculer les représentations de documents hors ligne, ce qui accélère considérablement le traitement des requêtes.
L’architecture d’interaction tardive de ColBERT offre plusieurs avantages, notamment une efficacité computationnelle améliorée, une évolutivité avec la taille de la collection de documents et une applicabilité pratique pour les scénarios du monde réel. De plus, ColBERT a été amélioré avec des techniques telles que la supervision bruyante et la compression résiduelle (dans ColBERTv2), qui affinent le processus de formation et réduisent l’empreinte spatiale du modèle tout en maintenant une efficacité de récupération élevée.
Cet extrait de code montre comment configurer et utiliser le modèle jina-colbert-v1-en pour indexer une collection de documents, en exploitant sa capacité à gérer des contextes longs de manière efficace.
Mise en œuvre de la recherche à deux étapes avec des rerankers
Maintenant que nous avons une compréhension des principes sous-jacents de la recherche à deux étapes et des rerankers, explorons leur mise en œuvre pratique dans le contexte d’un système RAG. Nous allons exploiter des bibliothèques et des cadres populaires pour démontrer l’intégration de ces techniques.
Configuration de l’environnement
Avant de plonger dans le code, configurons notre environnement de développement. Nous allons utiliser Python et plusieurs bibliothèques NLP populaires, notamment Hugging Face Transformers, Sentence Transformers et LanceDB.
# Installer les bibliothèques requises !pip install datasets huggingface_hub sentence_transformers lancedb
Préparation des données
À des fins de démonstration, nous allons utiliser le jeu de données “ai-arxiv-chunked” de Hugging Face Datasets, qui contient plus de 400 articles d’ArXiv sur l’apprentissage automatique, le traitement automatique des langues et les grands modèles de langage.
from datasets import load_dataset
dataset = load_dataset("jamescalam/ai-arxiv-chunked", split="train")
<pre>
Ensuite, nous allons prétraiter les données et les diviser en morceaux plus petits pour faciliter une récupération et un traitement efficaces.
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts
chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)
Pour l'étape de récupération initiale, nous allons utiliser un modèle de transformateur de phrase pour encoder nos documents et requêtes en représentations vectorielles denses, puis effectuer une recherche de plus proches voisins approximatifs à l'aide d'une base de données vectorielle comme LanceDB.
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Charger le modèle de transformateur de phrase
model = SentenceTransformer('all-MiniLM-L6-v2')
# Créer un magasin de vecteurs LanceDB
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())
# Indexer les documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Charger le modèle de transformateur de phrase
model = SentenceTransformer('all-MiniLM-L6-v2')
# Créer un magasin de vecteurs LanceDB
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())
# Indexer les documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)
Avec nos documents indexés, nous pouvons effectuer la récupération initiale en trouvant les plus proches voisins d’un vecteur de requête donné.
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts
chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)
Reranking
Après la récupération initiale, nous allons employer un modèle de reranking pour réorganiser les documents récupérés en fonction de leur pertinence pour la requête. Dans cet exemple, nous allons utiliser le modèle de reranking ColBERT, un modèle de transformateur rapide et précis spécifiquement conçu pour le classement de documents.
from lancedb.rerankers import ColbertReranker reranker = ColbertReranker() # Reranker les documents initiaux reranked_docs = reranker.rerank(query, initial_docs)
La liste reranked_docs contient maintenant les documents réorganisés en fonction de leur pertinence pour la requête, telle que déterminée par le modèle de reranking ColBERT.
Augmentation et génération
Avec les documents réorganisés et pertinents en main, nous pouvons procéder aux étapes d’augmentation et de génération du pipeline RAG. Nous allons utiliser un modèle de langage de la bibliothèque Hugging Face Transformers pour générer la réponse finale.
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("t5-base")
model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
# Augmenter la requête avec les documents réorganisés
augmented_query = query + " " + " ".join(reranked_docs[:3])
# Générer la réponse à partir du modèle de langage
input_ids = tokenizer.encode(augmented_query, return_tensors="pt")
output_ids = model.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(response)
Dans l’extrait de code ci-dessus, nous augmentons la requête d’origine avec les trois premiers documents réorganisés, créant ainsi une requête augmentée. Nous passons ensuite cette requête augmentée à un modèle de langage T5, qui génère une réponse basée sur le contexte fourni.
La variable response contiendra la sortie finale, en exploitant les informations externes des documents récupérés et réorganisés pour fournir une réponse plus précise et plus complète à la requête d’origine.
Techniques avancées et considérations
Alors que la mise en œuvre que nous avons couverte fournit une base solide pour intégrer la recherche à deux étapes et les rerankers dans un système RAG, il existe plusieurs techniques avancées et considérations qui peuvent améliorer encore les performances et la robustesse de l’approche.
- Expansion de requête : Pour améliorer l’étape de récupération initiale, vous pouvez employer des techniques d’expansion de requête, qui consistent à augmenter la requête d’origine avec des termes ou des phrases liés. Cela peut aider à récupérer un ensemble plus diversifié de documents potentiellement pertinents.
- Reranking d’ensemble : Au lieu de s’appuyer sur un seul modèle de reranking, vous pouvez combiner plusieurs modèles de reranking en un ensemble, en exploitant les forces de différents modèles pour améliorer les performances globales.
- Ajustement fin des rerankers : Alors que les modèles de reranking préformés peuvent être efficaces, les ajuster sur des données spécifiques au domaine peut encore améliorer leur capacité à capturer les sémantiques et les signaux de pertinence spécifiques au domaine.
- Récupération et reranking itératifs : Dans certains cas, une seule itération de récupération et de reranking peut ne pas être suffisante. Vous pouvez explorer des approches itératives, où la sortie du modèle de langage est utilisée pour affiner la requête et le processus de récupération, conduisant à un système plus interactif et dynamique.
- Équilibre entre pertinence et diversité : Alors que les modèles de reranking visent à promouvoir les documents les plus pertinents, il est essentiel de trouver un équilibre entre la pertinence et la diversité. L’intégration de techniques favorisant la diversité peut aider à prévenir le fait que le système soit trop étroit ou biaisé dans ses sources d’informations.
- Métriques d’évaluation : Pour évaluer l’efficacité de votre approche de recherche à deux étapes et de reranking, vous devrez définir des métriques d’évaluation appropriées. Celles-ci peuvent inclure des métriques de récupération d’information traditionnelles comme la précision, la recall et le rang réciproque moyen (MRR), ainsi que des métriques spécifiques à la tâche adaptées à votre cas d’utilisation.
Conclusion
La Génération Augmentée de Récupération (RAG) est émergée comme une technique puissante pour améliorer les capacités des grands modèles de langage en exploitant des sources d’informations externes. Cependant, les méthodes de récupération traditionnelles ont souvent du mal à identifier les documents les plus pertinents, conduisant à des performances sous-optimales.
La recherche à deux étapes avec des rerankers offre une solution convaincante à ce défi. En combinant une étape de récupération initiale rapide avec un modèle de reranking plus sophistiqué, cette approche peut considérablement améliorer la précision et la pertinence des documents récupérés, aboutissant finalement à des réponses générées de haute qualité par le modèle de langage.
J'ai passé les cinq dernières années à me plonger dans le monde fascinant de l'apprentissage automatique et de l'apprentissage profond. Ma passion et mon expertise m'ont conduit à contribuer à plus de 50 projets de génie logiciel divers, avec un accent particulier sur l'IA/ML. Ma curiosité permanente m'a également attiré vers le traitement automatique des langues, un domaine que je suis impatient d'explorer plus en détail.
You may like
-


Prédiction 2026 – Le logiciel open source chevauchera la vague de l’IA vers son prochain âge d’or
-


Pourquoi la plupart des applications modernes seront inutiles à l’ère de l’IA
-


Gemini 3.1 Pro réalise des gains de raisonnement records
-


Code humain de 2020 écrase les agents codés par vibe dans les tests d’agents
-
Google Présente Gemini 3 Pro avec des Performances à la Pointe de la Technologie
-


Préparation à la publicité dans les grands modèles de langage

