Le Meilleur Système RAG Open-Source !

Regarez la vidéo!

Bon matin ! Ici Louis-François, cofondateur de Towards AI, et aujourd'hui, on va plonger dans ce qui pourrait être le meilleur système de génération augmentée par récupération ou RAG (Retrieval-Augmented Generation en anglais), grâce à une étude fantastique de Wang et collègues, 2024. C’est une véritable mine d’or pour construire des systèmes de RAG optimaux, et on va décortiqué tout ça.

Alors, qu'est-ce qui rend un système de RAG puissant? Les composants, bien sûr ! Voyons ensemble les meilleurs composants et comment ils fonctionnent pour que vous puissiez aussi rendre votre système de RAG exceptionnel, et on finira avec un bonus sur la multimodalité. Je vais aussi assumer que vous connaissez ce qu’est le RAG et si non, j’ai un autre blogue pour vous!

Section 1 : Classification des invites

Commençons par la classification des invites ou prompts. Toutes les invites ne sont pas égales. Certaines n’ont même pas besoin de récupération car le modèle de langage connaît déjà la réponse. Par exemple, si vous demandez "Qui est Messi ?", le LLM a déjà la réponse. Pas besoin de récupération !

Wang et ses collègues ont créé 15 catégories de tâches, déterminant si une invite fournissait suffisamment d’informations ou si une récupération était nécessaire. Ils ont entraîné un classificateur binaire pour séparer les tâches, étiquetant "suffisant" lorsque la récupération n’était pas nécessaire, et "insuffisant" lorsqu’elle l'était. Sur cette image, le jaune signifie les cas où il n’y a pas besoin de récupération, et le rouge signifie qu’il faut aller chercher des documents !

Section 2 : Fragmentation

Ensuite : la fragmentation. Le défi ici est de trouver la taille de fragment parfaite pour vos données, c’est-à-dire comment vous séparé vos textes en plus petits morceaux. Trop long ? Vous ajoutez du bruit et des coûts inutiles. Trop court ? Vous perdez du contexte.

Ils ont trouvé que des tailles de fragments compris entre 256 et 512 tokens étaient les meilleures. Mais n’oubliez pas, cela varie selon les données. Assurez-vous donc d’effectuer vos évaluations ! Petit conseil : utilisez la méthode small2big  où on commence par de petits fragments pour la recherche, puis passez à de plus grands pour la génération) ou essayez les fenêtres coulissantes (ou sliding window) pour faire se chevaucher les tokens entre les fragments.

Section 3 : Métadonnées et Recherche Hybride

Exploitez vos métadonnées ! Ajoutez des éléments comme des titres, des mots-clés ou même des questions hypothétiques. Associez cela à la recherche hybride, qui combine la recherche vectorielle (pour la correspondance sémantique) et le bon vieux BM25 pour la recherche par mots-clés traditionnelle, et vous obtenez un excellent résultat.

Il y a aussi la technique HyDE qui génère des pseudo-documents pour améliorer la récupération qui est intéressante et donne même de meilleurs résultats, mais c’est super inefficace. Pour l’instant, restez sur la recherche hybride — elle a un meilleur équilibre, surtout pour les prototypes.

Section 4 : Modèle d’Embedding

Choisir le bon modèle d’embedding ou en français de vecteurs contextuels, c’est comme trouver la paire de chaussures parfaite. Vous ne voulez pas de chaussures de foot pour jouer au tennis. LLM-Embedder de FlagEmbedding était le meilleur choix dans cette étude — un excellent équilibre entre performance et taille. Pas trop grand, pas trop petit — juste ce qu’il faut. J’ai mis le lien dans la description ci-dessous.

Notez juste qu'ils n'ont testé que des modèles open-source, donc Cohere et OpenAI n’étaient pas dans le jeu. Cohere est probablement votre meilleure option sinon.

Section 5 : Base de données vectorielle

Pour ce qui est de la base de données, pour un usage à long terme, Milvus est leur base de données vectorielle de référence. Elle est open source, fiable, et une excellente option pour maintenir le bon fonctionnement de votre système de récupération. Le lien est également dans la description ci-dessous.

Section 6 : Transformation des invites

Avant la récupération, il faut transformer ces invites utilisateur ! Que ce soit via la réécriture des invites pour plus de clarté, la décomposition des invites pour diviser les questions complexes en sous-questions et récupérer pour chacune d’elles, ou même générer des pseudo-documents (comme le fait HyDE) et les utiliser dans le processus de récupération. Cette étape est cruciale pour améliorer la précision. Rappelez-vous juste que plus de transformation peut ajouter de la latence, en particulier avec des techniques comme HyDE…

Section 7 : Reclassement

Passons maintenant au reclassement, ou reranking. Une fois les documents récupérés, il faut s’assurer que les plus pertinents se trouvent en haut de la pile. C’est là qu’intervient le reclassement.

Dans cette étude, monoT5 s’est révélé être la meilleure option pour équilibrer performance et efficacité. Ils affinent le modèle T5 pour réorganiser les documents en fonction de leur pertinence par rapport à la invite, garantissant que la meilleure correspondance arrive en premier. RankLLaMA a donné les meilleures performances globales, et TILDEv2 était le plus rapide, mais monoT5 reste le meilleur dans l’ensemble. Il y a plus d’informations à ce sujet dans l’article si cela vous intéresse.

Section 8 : Réorganisation des documents

Après le reclassement, il est nécessaire de faire une réorganisation des documents. Wang et son équipe recommandent la méthode « inversée », où les documents sont disposés dans un ordre croissant de pertinence. Liu et collègues (2024) ont découvert que cette approche — placer les informations pertinentes au début ou à la fin — améliore les performances. La réorganisation optimise la façon dont l’information est présentée au LLM pour la génération après le reclassement, afin d’aider le LLM à mieux comprendre les informations fournies dans un ordre plus cohérent plutôt que dans l’ordre théoriquement pertinent.

Section 9 : Résumé

Ensuite, avant d’appeler le modèle de langue, notre LLM, vous voudrez éliminer les informations inutiles avec un résumé. Les prompts longs envoyés au LLM sont coûteux et souvent inutiles. Le résumé aidera à supprimer les informations redondantes ou superflues et à réduire les coûts.

Utilisez des outils comme Recomp qui utilise la compression extractive afin de sélectionner les phrases utiles, et la compression abstractive pour synthétiser des informations à partir de plusieurs documents. Mais, si la vitesse est votre priorité, vous pourriez envisager de sauter cette étape.

Section 10 : Ajustement fin du générateur

Enfin, devriez-vous affiner le LLM que vous utilisez pour la génération ? Absolument ! Affiner avec un mélange de documents pertinents et aléatoires améliore la capacité du générateur à gérer les informations non pertinentes. Cela rend le modèle plus robuste et lui permet de donner de meilleures réponses globalement. Aucun ratio exact n’a été fourni dans l’article, mais les résultats étaient clairs : l’affinement vaut l’effort ! Cela dépend évidemment aussi de votre domaine.

Section 11 : Multimodalité

Vous travaillez avec des images ? Implémentez la récupération multimodale. Pour le texte vers image, interroger une base de données pour obtenir des images similaires accélère le processus. Pour l’image vers texte, faire correspondre des images similaires récupère des légendes précises déjà stockées. Tout est une question de récupérer des informations réelles et vérifiées.

Conclusion

En résumé, cet article de Wang et collègues nous donne un excellent plan pour construire un système de RAG efficace. Gardez à l’esprit que ce n’est qu’un article et qu’il ne couvre pas tous les aspects système RAG. 

Par exemple, l’entraînement conjoint des récupérateurs et générateurs n’a pas été exploré, ce qui pourrait avoir encore davantage de potentiel. Ils n'ont pas non plus approfondi les techniques de fragmentation en raison des coûts, mais c'est une piste à explorer.

Je recommande vivement de consulter l'article complet pour plus d’informations. Nous avons également récemment publié notre livre "Building LLMs for Production", qui regorge d'astuces et d'exemples pratiques sur le RAG et l’affinement pour vous aider à construire et améliorer vos systèmes basés sur les LLM, mais il est uniquement en anglais. Le lien est aussi dans la description ci-dessous, pour les versions physiques et numériques du livre.

Et comme toujours, merci d’avoir lu l’article complet. Si vous avez trouvé ce résumé utile ou si vous avez des commentaires, n’hésitez pas à me le dire dans les commentaires ci-dessous, et on se retrouve dans le prochain blogue !

Louis-François Bouchard

Hello! Je suis Louis-François Bouchard, de Montréal, Canada, aussi connu sous le nom de 'What's AI' et j'essaie de partager et de vulgariser tout ce qui est en lien avec l'intelligence artificielle. Mon objectif est de démystifier la «boîte noire» de l'IA pour tous et de sensibiliser les gens aux risques de son utilisation.

https://www.youtube.com/channel/UCIUgms0TE2WhQijbU-IMYyw
Précédent
Précédent

Comment Évaluer et Optimiser Votre Système RAG : Métriques et Méthodes Essentielles

Suivant
Suivant

OpenAI o1 : L'IA Qui Réfléchit Avant de Parler !