RAG : Retrieval Augmented Generation
Comment resoudre:
- cut off date des LLMs
- contexte window limité
- hallucinations
Idée:
Ajouter la bonne info dans le prompt
Principe:
- trouver l’extrait de texte avec la bonne info : Retrieval
- l’ajouter dans le prompt
<Question>
prends en compte le texte ci-dessous pour répondre
<Information, retrieved>
Donc super simple.
La difficulté n’est pas dans le prompt mais dans la partie retrieval
Comment indentifier les documents relatifs a la question / query
- combien de documents
- est ce que l’info est complete
- contradictions entre divers documents
- versions des documents
Premiere approche
on part d’un corpus de document
- scinder les documents en extraits qui font sens : phrases, paragraphe(s), sections, etc
- vectoriser les documents a l’aide d’un modèle approprié
- stocker le tout dans une base de donnée vectorielle comme weaviate
L’utilisateur pose sa question : la query
- vectoriser la query avec le meme modele
- trouver les N documents dont les vecteurs sont proches du vecteur de la question
distance entre deux textes vectorisés : cosine similarity

A ce stade on a 2 questions non résolues
- comme chunker le texte original.
- combien de documents prendre en compte
Chunk
On peut jouer sur
- la taille des extraits
- overlaper entre les extraits
[ p1 + p2 + p3, p2 + p3 + p4, p3 + p4 + p5, ... ] - transformer les extraits pour mettre en avant l’information importante
- ajouter des meta données : titre section ou chapitre, categorie, version etc
Vectorisation
Il y a de nombreux modeles de vectorisation disponibles
voici la strategie de choix selon Mistral
Les points 1, 2, 3 et 7 me semble importants
Stratégie pour choisir un modèle d’embeddings en RAG
1. Langues
- Anglais : Modèles optimisés (
text-embedding-3-large,bge-large-en-v1.5). - Français : Modèles multilingues (
multilingual-e5-large) ou spécifiques (camembert-base).
2. Taille des chunks
- Courts (phrases) : Modèles légers (
all-MiniLM-L6-v2). - Longs (paragraphes) : Modèles avec grande fenêtre contextuelle (
text-embedding-ada-002,bge-large-en-v1.5). - Chevauchement : 10-20% pour éviter la perte de contexte.
3. Open-source vs Propriétaire
- Open-source : Contrôle total, personnalisation possible (
bge-large-en-v1.5,e5-mistral-7b-instruct). - Propriétaire : Performances optimisées, déploiement simplifié (
text-embedding-3-large).
4. Installation locale vs API
- Locale : Idéal pour confidentialité ou hors ligne (
sentence-transformers,FlagEmbedding). - API : Pratique pour un déploiement rapide et scalable (OpenAI, Cohere).
5. Performances
- Précision : Vérifier les benchmarks (MTEB) pour la langue/le domaine.
- Vitesse : Modèles légers pour le temps réel (
all-MiniLM-L6-v2). - Modèles récents :
text-embedding-3-large,bge-large-en-v1.5,multilingual-e5-large.
6. Adaptation au domaine
- Fine-tuning sur des données spécifiques (ex :
camembert-basepour le juridique en français).
7. Outils d’évaluation
À retenir :
- Pour l’anglais, privilégiez
text-embedding-3-largeoubge-large-en-v1.5. - Pour le français, testez
multilingual-e5-largeou un modèle fine-tuné. - Pour des documents longs, utilisez des modèles avec une grande fenêtre contextuelle.
Merci Mistral
Nouveau element ; comment evaluer les resultats ?
- RAGAS
- MTEB
Mais reste la question
Combien de documents inclure dans le prompt
100% empiririque
- limite de la fenetre de contexte du LLM
- taille des chunks
- seuil de score de similarité
t > 0.75(totallement arbitraire) - evaluation en bout de chaine en fonction du nombre de doc
Reranking
Le systeme retourne N documents similaires en contenu a la question de depart a partir d’un modele de vectorisation censé conserver la semantique des documents. ces modeles sont generiques
Global Embedding Models (Fine-Tuned for Semantic Similarity)
Output: A vector representation (embedding) for each text input. The dimensionality of this vector is fixed (e.g., 768 dimensions). This vector is meant to represent the overall semantic meaning of the text. Efficiency: Optimized for fast encoding, as it needs to process the entire corpus and encode queries in real-time. Global Semantic Space: Aims to create a consistent and meaningful global representation of semantic relationships across all texts.
Similarity Metric: Relies on a distance metric (e.g., cosine similarity, dot product) to compare the embeddings and determine similarity.
Reranking Models (Fine-Tuned for Semantic Similarity), including Cross-Encoders
Technical Goal: To directly assess the semantic relatedness between a specific query and a specific document.
The model learns to predict a relevance score for each query-document pair.
Loss functions like mean squared error (MSE) or cross-entropy loss are used to train the model to accurately predict these relevance scores.
Fine-Tuning Approach (Cross-Encoders):
Architecture: A cross-encoder takes both the query and the document as input simultaneously. The query and document are fed into the same transformer network (e.g., BERT, RoBERTa) and processed together. This allows the model to directly attend to the interactions between the query and the document.
Joint Encoding (Cross-Encoders): The query and document are processed together, allowing the model to capture fine-grained interactions and contextual relationships.
Higher Accuracy, Higher Cost: Generally more accurate than embedding models for relevance ranking but also significantly more computationally expensive. They are not suitable for encoding the entire corpus.
recap

Evaluation avec RAGAS
- multiple metriques
- multiples datasets pour l’evaluation
Vector Store
Comment matcher 2 vecteurs le plus vite possible
- query
- corpus (milliers de documents)
Calculer le cosine sim de la query vs tous les documents => prends trop de temps