Un guide sur 12 stratégies d’ajustement pour des applications RAG prêtes pour la production

Un guide des 12 meilleures stratégies d'adaptation pour des applications RAG prêtes pour la production

Comment améliorer les performances de votre pipeline de génération augmentée par la récupération (RAG) grâce à ces “hyperparamètres” et stratégies de réglage

Stratégies de réglage pour les applications de génération augmentée par la récupération

La science des données est une science expérimentale. Elle commence par le “Théorème du repas gratuit”, qui affirme qu’il n’y a pas d’algorithme universel qui convient à tous les problèmes. Et cela conduit les scientifiques des données à utiliser des systèmes de suivi des expériences pour les aider à régler les hyperparamètres de leurs projets d’apprentissage automatique (ML) pour obtenir les meilleures performances.

Cet article examine un pipeline de génération augmentée par la récupération (RAG) à travers les yeux d’un scientifique des données. Il aborde les “hyperparamètres” potentiels sur lesquels vous pouvez expérimenter pour améliorer les performances de votre pipeline RAG. Tout comme l’expérimentation en apprentissage profond, où, par exemple, les techniques d’augmentation de données ne sont pas un hyperparamètre mais un bouton que vous pouvez régler et expérimenter, cet article couvrira également différentes stratégies que vous pouvez appliquer, qui ne sont pas nécessairement des hyperparamètres à part entière.

Génération augmentée par la récupération (RAG) : de la théorie à l’implémentation dans LangChain

De la théorie du document académique original à son implémentation en Python avec OpenAI, Weaviate et LangChain

towardsdatascience.com

Cet article traite des “hyperparamètres” suivants, classés par étape pertinente. Dans l’étape de l’ingestion d’un pipeline RAG, vous pouvez obtenir des améliorations de performance en :

Et dans l’étape d’inférence (récupération et génération), vous pouvez régler :

Notez que cet article couvre les cas d’utilisation du RAG liés au texte. Pour les applications RAG multimodales, d’autres considérations peuvent s’appliquer.

Étape d’ingestion

L’étape d’ingestion est une étape de préparation pour la construction d’un pipeline RAG, similaire aux étapes de nettoyage des données et de prétraitement dans un pipeline d’apprentissage automatique. Généralement, l’étape d’ingestion comprend les étapes suivantes :

  1. Collecter les données
  2. Segmenter les données
  3. Générer des plongements vectoriels des segments
  4. Stocker les plongements vectoriels et les segments dans une base de données vectorielle
Étape d'ingestion d'un pipeline RAG

Cette section discute des techniques et hyperparamètres impactants que vous pouvez appliquer et ajuster pour améliorer la pertinence des contextes récupérés lors de l’étape d’inférence.

Nettoyage des données

Comme pour tout pipeline en science des données, la qualité de vos données a un impact significatif sur le résultat de votre pipeline RAG [8, 9]. Avant de passer à l’une des étapes suivantes, assurez-vous que vos données répondent aux critères suivants :

  • Propre : Appliquez au moins certaines techniques de nettoyage de données de base couramment utilisées en traitement du langage naturel, telles que vous assurer que tous les caractères spéciaux sont encodés correctement.
  • Correct : Assurez-vous que vos informations sont cohérentes et factuellement précises pour éviter que des informations contradictoires ne perturbent votre LLM.

Segmentation

La segmentation de vos documents est une étape préparatoire essentielle pour votre source de connaissances externe dans un pipeline RAG, pouvant avoir un impact sur les performances [1, 8, 9]. Il s’agit d’une technique permettant de générer des extraits logiquement cohérents d’informations, généralement en subdivisant de longs documents en sections plus petites (mais elle peut également combiner de plus petits extraits en paragraphes cohérents).

Un aspect à prendre en compte est le choix de la technique de segmentation. Par exemple, dans LangChain, différents séparateurs de texte divisent les documents selon différentes logiques, telles que par caractères, par jetons, etc. Cela dépend du type de données que vous avez. Par exemple, vous devrez utiliser des techniques de segmentation différentes si vos données d’entrée sont du code source, par rapport à un fichier Markdown.

La longueur idéale de votre segment (chunk_size) dépend de votre cas d’utilisation : si votre cas d’utilisation est la réponse à une question, vous aurez peut-être besoin de segments spécifiques plus courts, mais si votre cas d’utilisation est la synthèse, vous aurez peut-être besoin de segments plus longs. De plus, si un segment est trop court, il pourrait ne pas contenir suffisamment de contexte. En revanche, si un segment est trop long, il pourrait contenir trop d’informations non pertinentes.

De plus, vous devrez réfléchir à une “fenêtre glissante” entre les segments (overlap) pour introduire un peu de contexte supplémentaire.

Modèles d’incorporation

Les modèles d’incorporation sont au cœur de votre recherche. La qualité de vos incorporations a un impact significatif sur vos résultats de recherche [1, 4]. Généralement, plus la dimensionnalité des incorporations générées est élevée, plus la précision de vos incorporations est élevée.

Pour avoir une idée des modèles d’incorporation alternatifs disponibles, vous pouvez consulter le classement des incorporations de texte massif (MTEB) Leaderboard, qui recense 164 modèles d’incorporation de texte (au moment de la rédaction de cet article).

Classement MTEB – un espace Hugging Face par mteb

Découvrez des applications d’apprentissage automatique étonnantes créées par la communauté

huggingface.co

Alors que vous pouvez utiliser des modèles génériques d’incorporation tels quels, il peut être judicieux de réajuster votre modèle d’incorporation à votre cas d’utilisation spécifique dans certains cas afin d’éviter des problèmes hors domaine plus tard [9]. Selon des expériences menées par LlamaIndex, le réajustement de votre modèle d’incorporation peut entraîner une amélioration de 5 à 10 % des métriques d’évaluation de la récupération [2].

Notez que vous ne pouvez pas affiner tous les modèles d’incorporation (par exemple, OpenAI text-embedding-ada-002 ne peut pas être affiné pour le moment).

Métadonnées

Lorsque vous stockez des embeddings vectoriels dans une base de données vectorielle, certaines bases de données vectorielles vous permettent de les stocker avec des métadonnées (ou des données qui ne sont pas vectorisées). L’annotation d’embeddings vectoriels avec des métadonnées peut être utile pour un post-traitement supplémentaire des résultats de recherche, tels que le filtrage des métadonnées [1, 3, 8, 9]. Par exemple, vous pouvez ajouter des métadonnées telles que la date, le chapitre ou la référence au sous-chapitre.

Multi-indexation

Si les métadonnées ne sont pas suffisantes pour fournir des informations supplémentaires permettant de séparer différents types de contextes de manière logique, vous pouvez expérimenter avec plusieurs index [1, 9]. Par exemple, vous pouvez utiliser différents index pour différents types de documents. Notez que vous devrez incorporer un certain cheminement d’index lors de la récupération [1, 9]. Si vous êtes intéressé par une plongée plus profonde dans les métadonnées et les collections séparées, vous voudrez peut-être en savoir plus sur le concept de multi-tenance natif.

Algorithmes d’indexation

Pour permettre une recherche de similarité ultrarapide à grande échelle, les bases de données vectorielles et les bibliothèques d’indexation vectorielle utilisent une recherche d’approximation du plus proche voisin (ANN) plutôt qu’une recherche des k plus proches voisins (kNN). Comme son nom l’indique, les algorithmes ANN approximent les plus proches voisins et peuvent donc être moins précis qu’un algorithme kNN.

Il existe différents algorithmes ANN avec lesquels vous pouvez expérimenter, tels que Facebook Faiss (clustering), Spotify Annoy (arbres), Google ScaNN (compression vectorielle) et HNSWLIB (graphes de proximité). De plus, bon nombre de ces algorithmes ANN disposent de paramètres que vous pouvez ajuster, tels que ef, efConstruction et maxConnections pour HNSW [1].

De plus, vous pouvez activer la compression vectorielle pour ces algorithmes d’indexation. À l’instar des algorithmes ANN, vous perdrez une certaine précision avec la compression vectorielle. Cependant, en fonction du choix de l’algorithme de compression vectorielle et de son réglage, vous pourrez optimiser cela également.

Cependant, en pratique, ces paramètres sont déjà ajustés par les équipes de recherche des bases de données vectorielles et des bibliothèques d’indexation vectorielle lors d’expériences de référence et non par les développeurs de systèmes RAG. Cependant, si vous souhaitez expérimenter avec ces paramètres pour optimiser les performances, je vous recommande de commencer par cet article :

Un aperçu de l’évaluation RAG | Weaviate – base de données vectorielle

weaviate.io

Étape d’inférence (récupération et génération)

Les principaux composants du pipeline RAG sont la récupération et les composants de génération. Cette section traite principalement des stratégies visant à améliorer la récupération (Transformations de requête, paramètres de récupération, stratégies de récupération avancées et modèles de re-classement) car c’est le composant le plus impactant des deux. Mais elle aborde également brièvement certaines stratégies pour améliorer la génération (LLM et ingénierie des invitations).

Étape d'inférence d'un pipeline RAG

Transformations de requête

Étant donné que la requête de recherche pour récupérer du contexte supplémentaire dans un pipeline RAG est également intégrée dans l’espace vectoriel, sa formulation peut également avoir un impact sur les résultats de recherche. Ainsi, si votre requête de recherche ne donne pas de résultats satisfaisants, vous pouvez expérimenter différentes techniques de transformation de requête [5, 8, 9], telles que:

  • Reformulation: Utilisez un LLM pour reformuler la requête et réessayer.
  • Embeddings de documents hypothétiques (HyDE): Utilisez un LLM pour générer une réponse hypothétique à la requête de recherche et utilisez les deux pour la récupération.
  • Sous-requêtes: Divisez les requêtes plus longues en plusieurs requêtes plus courtes.

Paramètres de récupération

La récupération est un élément essentiel du pipeline RAG. La première considération concerne la question de savoir si la recherche sémantique sera suffisante pour votre cas d’utilisation ou si vous souhaitez expérimenter la recherche hybride.

Dans ce dernier cas, vous devez expérimenter la pondération de l’agrégation des méthodes de récupération éparses et denses dans la recherche hybride [1, 4, 9]. Ainsi, il sera nécessaire d’ajuster le paramètre alpha, qui contrôle la pondération entre la recherche sémantique (alpha = 1) et la recherche basée sur les mots-clés (alpha = 0).

towardsdatascience.com

Aussi, le nombre de résultats de recherche à récupérer jouera un rôle essentiel. Le nombre de contextes récupérés aura un impact sur la longueur de la fenêtre de contexte utilisée (voir Prompt Engineering). De plus, si vous utilisez un modèle de réévaluation, vous devez prendre en compte combien de contextes entrer dans le modèle (voir Modèles de réévaluation).

Notez que, bien que la mesure de similarité utilisée pour la recherche sémantique soit un paramètre que vous pouvez modifier, vous ne devriez pas expérimenter avec celui-ci, mais plutôt le définir en fonction du modèle d’embedding utilisé (par exemple, text-embedding-ada-002 prend en charge la similarité cosinus ou multi-qa-MiniLM-l6-cos-v1 prend en charge la similarité cosinus, le produit par points et la distance euclidienne).

Stratégies avancées de récupération

Cette section pourrait techniquement être un article à part entière. Pour cette vue d’ensemble, nous la garderons aussi concise que possible. Pour une explication détaillée des techniques suivantes, je recommande ce cours DeepLearning.AI:

Construction et évaluation d’applications RAG avancées

Apprenez des méthodes comme la récupération de fenêtres de phrases et la fusion automatique de récupération, améliorant les performances de votre pipeline RAG…

www.deeplearning.ai

L’idée sous-jacente de cette section est que les fragments de récupération ne doivent pas nécessairement être les mêmes fragments utilisés pour la génération. Idéalement, vous incorporeriez de plus petits fragments pour la récupération (voir Chunking), mais récupérez de plus grands contextes. [7]

  • Récupération de fenêtres de phrases: Ne récupérez pas seulement la phrase pertinente, mais la fenêtre de phrases appropriées avant et après celle récupérée.
  • Fusion automatique de récupération: Les documents sont organisés dans une structure semblable à un arbre. Au moment de la requête, des fragments séparés mais liés peuvent être consolidés en un contexte plus grand.

Modèles de révision de classement

Alors que la recherche sémantique récupère le contexte en fonction de sa similarité sémantique avec la requête de recherche, “plus similaire” ne signifie pas nécessairement “plus pertinent”. Les modèles de révision de classement, tels que le modèle Rerank de Cohere, peuvent aider à éliminer les résultats de recherche non pertinents en calculant un score de pertinence de la requête pour chaque contexte récupéré [1, 9].

“plus similaire” ne signifie pas nécessairement “plus pertinent”

Si vous utilisez un modèle de révision de classement, vous devrez peut-être ajuster à nouveau le nombre de résultats de recherche pour l’entrée du modèle de révision de classement et le nombre de résultats réordonnés que vous souhaitez intégrer dans le LLM.

Tout comme avec les modèles d’incorporation, vous pouvez également expérimenter avec l’ajustement fin du modèle de révision de classement en fonction de votre cas d’utilisation spécifique.

LLMs

Le LLM est le composant central pour générer la réponse. Tout comme avec les modèles d’incorporation, il existe un large éventail de LLM parmi lesquels vous pouvez choisir en fonction de vos besoins, tels que des modèles ouverts vs propriétaires, des coûts d’inférence, la longueur du contexte, etc. [1]

Tout comme avec les modèles d’incorporation ou les modèles de révision de classement, vous pouvez également expérimenter avec l’ajustement fin du LLM en fonction de votre cas d’utilisation spécifique pour incorporer des expressions spécifiques ou un ton de voix.

Ingénierie de la requête

La façon dont vous formulez ou concevez votre requête aura un impact significatif sur l’achèvement du LLM [1, 8, 9].

Veuillez baser votre réponse uniquement sur les résultats de recherche et rien d'autre !

Très important ! Votre réponse DOIT être basée sur les résultats de recherche fournis. Veuillez expliquer pourquoi votre réponse est basée sur les résultats de recherche !

De plus, l’utilisation d’exemples à quelques tirs dans votre requête peut améliorer la qualité des résultats.

Comme mentionné dans Paramètres de récupération, le nombre de contextes intégrés à la requête est un paramètre sur lequel vous devriez expérimenter [1]. Bien que les performances de votre pipeline RAG puissent s’améliorer avec l’augmentation du contexte pertinent, vous pouvez également rencontrer un effet de “Perdu au Milieu” [6] où le contexte pertinent n’est pas reconnu comme tel par le LLM s’il est placé au milieu de nombreux contextes.

Résumé

À mesure que de plus en plus de développeurs acquièrent de l’expérience dans le prototypage de pipelines RAG, il devient de plus en plus important de discuter des stratégies pour amener les pipelines RAG à des performances prêtes pour la production. Cet article a abordé différents “hyperparamètres” et autres paramètres sur lesquels vous pouvez ajuster un pipeline RAG selon les étapes pertinentes :

Cet article a traité des stratégies suivantes dans l’ étape d’ingestion:

  • Nettoyage des données : Assurez-vous que les données sont propres et correctes.
  • Segmentation : Choix de la technique de segmentation, taille des segments (chunk_size) et recouvrement des segments (overlap).
  • Modèles d’incorporation : Choix du modèle d’incorporation, y compris la dimensionnalité, et s’il convient de l’ajuster finement.
  • Métadonnées : Utilisation ou non de métadonnées et choix des métadonnées.
  • Multi-indexation : Décider d’utiliser ou non plusieurs index pour différentes collections de données.
  • Algorithmes d’indexation : Choix et ajustement des algorithmes ANN et de compression vectorielle, qui peuvent être ajustés mais ne le sont généralement pas par les praticiens.

Et les stratégies suivantes dans la phase d’inférence (récupération et génération) :

  • Transformations de requête : Expérimentez avec la reformulation, HyDE ou les sous-requêtes.
  • Paramètres de récupération : Choix de la technique de recherche (alpha si vous avez activé la recherche hybride) et le nombre de résultats de recherche récupérés.
  • Stratégies de récupération avancées : Utilisation ou non de stratégies de récupération avancées, telles que la fenêtre de phrases ou la fusion automatique de récupération.
  • Modèles de re-classement : Utilisation ou non d’un modèle de re-classement, choix du modèle de re-classement, nombre de résultats de recherche à entrer dans le modèle de re-classement et possibilité d’affiner le modèle de re-classement.
  • LLMs : Choix de LLM et possibilité de l’affiner.
  • Ingénierie de la formulation : Expérimentez avec différentes formulations et des exemples peu nombreux.

Vous avez aimé cette histoire ?

Abonnez-vous gratuitement pour recevoir une notification lorsque je publie une nouvelle histoire.

Recevez un e-mail chaque fois que Leonie Monigatti publie.

Recevez un e-mail chaque fois que Leonie Monigatti publie. En vous inscrivant, vous créerez un compte VoAGI si vous ne l’avez pas déjà…

VoAGI.com

Retrouvez-moi sur LinkedIn, Twitter et Kaggle !

Références

Littérature

[1] Connor Shortenet Erika Cardenas (2023). Weaviate Blog. Aperçu de l’évaluation RAG (consulté le 27 novembre 2023)

[2] Jerry Liu (2023). LlamaIndex Blog. Affinage des embeddings pour RAG avec des données synthétiques (consulté le 28 novembre 2023)

[3] Documentation LlamaIndex (2023). Construction d’applications RAG performantes pour la production (consulté le 28 novembre 2023)

[4] Voyage AI (2023). Les embeddings déterminent la qualité de RAG : étude de cas de Chat.LangChain (consulté le 5 décembre 2023)

[5] Documentation LlamaIndex (2023). Transformations de requête (consulté le 28 novembre 2023)

[6] Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., & Liang, P. (2023). Perdu dans le milieu : Comment les modèles de langage utilisent de longs contextes. Article pré-impression arXiv : 2307.03172.

[7] DeepLearning.AI (2023). Construction et évaluation d’applications RAG avancées (consulté le 4 décembre 2023)

[8] Ahmed Besbes (2023). Vers Data Science. Pourquoi votre RAG n’est pas fiable dans un environnement de production (consulté le 27 novembre 2023)

[9] Matt Ambrogi (2023). Vers Data Science. 10 façons d’améliorer les performances des systèmes de génération augmentée par récupération (consulté le 27 novembre 2023)

Images

À moins d’indication contraire, toutes les images sont créées par l’auteur.

We will continue to update IPGirl; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Recherche en IA

Groupe de recherche Eleuther AI démontre comment le Guidage sans classificateur (CFG) peut être utilisé avec LLMs

Récemment, les énormes modèles de langage ont montré d’impressionnantes capacités génératives, leur permettant ...

AI

Nvidia teste une intelligence artificielle générative pour ses ingénieurs

Bill Dally de Nvidia a déclaré que l'entreprise est en train de tester si elle peut augmenter la productivité de ses ...

AI

IA générative et agents multi-modaux dans AWS La clé pour débloquer une nouvelle valeur sur les marchés financiers

Les données multi-modales sont un composant précieux de l'industrie financière, englobant les données de marché, écon...

AI

Kick Ass Midjourney Prompts avec Poe

Essayez ce chatbot Poe pour affiner vos stimuli Midjourney et obtenir (espérons-le ?) des résultats impressionnants d...