Une introduction à l'utilisation d'un graphe en addition à la recherche sémantique classique pour améliorer la récupération d'informations d'un RAG.
Ce genre de technique est de plus en plus populaire pour palier à la limite de la perte de contexte en plusieurs chunks.
Le plus difficile reste bien sûr de créer le graphe et de le faire évoluer. (Je pense qu'il y a moyen d'utiliser un LLM pour ça)
Les LogProbs sont des métadonnées retournées avec la génération et elles indiquent la confiance du modèle dans le texte généré.
Dans le cas d'un RAG cela est extrêmement utile car ces informations peuvent nous aider à renvoyer un score de pertinence de la réponse généré.
Par exemple, si le prompt ne contient pas suffisamment d'informations pour répondre à la question, au mieux la réponse sera incomplète, au pire elle sera pleine d'hallucination.
Avec les LogProbs, il est possible de savoir quel degré de confiance accorder à cette réponse et de transmettre cette information à l'utilisateur ou de basculer sur un autre processus (nouvelle requête, prompt différent, etc)
Cet article utilise l'API d'OpenAI mais techniquement c'est possible de le faire avec n'importe quel modèle (pour peu que l'API retournent ces métadonnées)
2 modèles de re-ranking open source ont été release par Jina.
Pour rappel, le re-ranking est une méthode supplémentaire utilisée pour noter la pertinence de documents retrouvés dans la partie retrieval d'un RAG.
Ce sont de plus petits modèles de langue qui coûtent beaucoup moins cher à faire fonctionner et qui donne une note de similarité supplémentaire en plus de la simple recherche vectorielle.
Ça me rappelle le temps des modèles comme BERT par exemple.
Une collection de datasets pour évaluer un RAG est disponible chez LlaMa Hub.
Par exemple, ce dataset contient 44 questions et réponses basées sur les articles de Paul Graham. (Pas forcément le meilleur car il y a de fortes chances que ces articles soient dans les données d'entraînement de votre LLM)
Les évaluations se font entre autre avec le module LabelledRagDataset de LlaMaIndex.
On peut aussi créer ses propres datasets bien sûr.
Une méta-étude sur les RAG.
Au programme les techniques pour chaque étape:
- pre-retrieval: query extension, data modification
- retrieval
- post-retrieval: re-ranking, filtering
- generation
- evaluation
RAGAS est un framework pour évaluer les RAG.
Il propose d'évaluer les deux aspects importants du RAG, à savoir:
- le retrieval: le RAG est-il capable de retrouver les documents pertinents?
- la génération: le RAG est-il capable de générer une réponse à la question?
Il y a plusieurs évaluateurs de disponible pour évaluer ces deux critères.
Pour tout ce qui est évaluation de la réponse à la question, RAGAS propose d'utiliser GPT4.
A noter aussi, le framework ARES
Une compétition de RAG. Je trouve ça intéressant de garder sous la main les 8 types de questions:
-
Question simple : questions demandant des faits simples, comme la date de naissance d'une personne et les auteurs d'un livre.
-
Question simple avec certaines conditions : questions demandant des faits simples avec certaines conditions données, telles que le cours de l'action à une certaine date et les films récents d'un réalisateur dans un certain genre.
-
Set Question: Questions qui attendent un ensemble d'entités ou d'objets comme réponse. Un exemple : quels sont les continents de l’hémisphère sud ?
-
Question de comparaison : des questions qui peuvent comparer deux entités, comme par exemple qui a commencé à se produire plus tôt, Adele ou Ed Sheeran ?
-
Question d'agrégation : questions qui peuvent nécessiter une agrégation des résultats de récupération pour répondre, par exemple, combien d'Oscars Meryl Streep a-t-elle remportés ?
-
Questions multi-sauts : questions qui peuvent nécessiter d'enchaîner plusieurs éléments d'information pour composer la réponse, comme par exemple qui a joué dans le dernier film d'Ang Lee ?
-
Question de post-traitement : questions qui nécessitent un raisonnement ou un traitement des informations récupérées pour obtenir la réponse, par exemple : combien de jours Thurgood Marshall a-t-il été juge à la Cour suprême ?
-
Question à faux prémisse : questions comportant une fausse préposition ou hypothèse ; par exemple, quel est le nom de l'album rap de Taylor Swift avant sa transition vers la pop ? (Taylor Swift n'a sorti aucun album de rap.)
Une méta étude sur les RAG avec notamment:
- Sentence-window retrieval
- Document summary index
- HyDE
- Multi-query
- Maximal Marginal Relevance
- Cohere Re-ranker
- LLM-based Re-ranker
L'étude montre que la combinaisons des méthodes Sentence Window Retrieval, LLM Rerank, Cohere Rerank et HyDE donnent les meilleurs résultats.
Dommage que l'étude ne parle pas des techniques qui limitent le chunking et d'autre chose méthode que les seules Vector Database pour récupérer les documents comme Elasticsearch par exemple.
Une méthode très intéressante pour améliorer les performances d'un RAG avec du fine tuning de modèle.
En gros on va créer un dataset contenant:
- une question
- un document pertinent pour y répondre
- un document non pertinent ("distractor")
- la réponse générée depuis le document pertinent
- une chaine de pensée (Chain of Thought) expliquant le raisonnement (généré par GPT4 par exemple)
Ensuite il faut fine tuner un modèle avec ce dataset (Voir ce LlamaPack ou un exemple sur Azure AI)
Ils ont des résultats avec Llama2 7B qui sont meilleurs que GPT3.5 + RAG.
Dommage qu'ils n'aient pas comparés avec GPT4 + RAG mais c'est surement parce que GPT4 est meilleur. Il faudrait fine tuner un modèle de 4è génération Open Source comme Mistral ou GPT4 via l'API de fine tuning pour arriver à des résultats vraiment bons.
Un article que j'ai écrit pour parler de la hype autour des bases de données vectorielles et de pourquoi il vaut mieux utiliser une base de données classique avec fonctionnalité de recherche vectorielle comme Elasticsearch ou Postgres.
Nvidia se fait de la pub en lançant une application de RAG locale qui utilise un de ses GPU pour fonctionner.
Sous le capot c'est Llama 2 et une simple DB vectorielle (Faiss).
Bref, plus une démo marketing qu'un vrai produit :-)
Pinecone propose un RAG sur étagère avec ingestion de données puis conversation en quelques commandes depuis un terminal.
Sous le capot ça va ingérer les données d'un répertoire dans Pinecone (embeddings OpenAI ou autre) et permettre de les utiliser dans un RAG conversationnel.
L'outil expose aussi un serveur d'API pour une intégration dans une application.
Un article très technique sur la création d'un RAG.
L'auteur explore notamment plusieurs techniques pour le chunking sur la taille des chunks, le nombre de chunks retrouvés avec des métriques de qualité.
Un article sur l'architecture d'un RAG qui revient en détails sur les 4 composants principaux:
- data layer: ingestion des données et contrôle d'accès
- LLM layer: génération de la réponse augmentée
- reporting layer: monitoring et statistiques d'utilisation du RAG
- application layer: API et interfaces utilisateur
Un autre outil de RAG pour la documentation orienté développeurs.
C'est utilisable autant pour les questions internes d'une équipe sur son produit que par des développeurs externes intégrant des API.
Un RAG de recherche dans une documentation.
Ça permet de faire une recherche "instantanée" comme avec Algolia par exemple mais aussi un RAG avec réponse en langage naturel à partir des sources/
Une méta-étude qui regroupe les différents travaux autour des RAG.
C'est un inventaire assez exhaustif de toutes les techniques de construction et d'amélioration d'un RAG et donc un must-read avant de se lancer en production.
Un exemple pratique d'un RAG hybride avec recherche vectorielle + recherche "classique" avec scoring par mots clés et filtres.
C'est ce qu'on pourrait aussi avoir en utilisant Elasticsearch avec ses fonctions de scoring et sa recherche vectorielle knn.
Les résultats sont bien sur meilleurs que du vectoriel classique.
Un projet soutenu par Firefox qui sauvegarde les sites que vous visitez puis les utilise dans un RAG local construit avec PrivateGPT.
Cela permet de chercher dans les sites qu'on a pu visiter plutôt que tout internet.
Une vidéo qui résume les nouvelles fonctionnalités de Github Copilot.
On a notamment des Agents qu'il est capable d'invoquer pour poser des questions spécifiques. Ce sont des RAGs.
Par exemple @workspace
permet de poser des questions avec les fichiers du projet pour trouver un composant en particulier.
https://code.visualstudio.com/blogs/2023/11/13/vscode-copilot-smarter