Dans le premier volet de cette série en deux parties, nous examinons comment des modèles d'intégration sous-optimaux, des stratégies de segmentation inefficaces et un manque de filtrage des métadonnées peuvent rendre difficile l'obtention de réponses pertinentes de votre LLM. Voici comment surmonter ces défis.
Créer des applications d'IA générative qui utilisent
Nous diviserons ce processus en deux parties principales. Le premier, que nous aborderons dans ce premier article de la série, est le pipeline d'intégration, qui remplit le
Ici, nous examinerons trois domaines principaux qui peuvent conduire à de mauvais résultats : des modèles d'intégration sous-optimaux, des stratégies de segmentation inefficaces et un manque de filtrage des métadonnées. (Dans le prochain article, nous examinerons l'interaction réelle avec le LLM et examinerons certains problèmes courants qui y surviennent et peuvent conduire à de mauvais résultats.)
Votre choix d'un modèle d'intégration aura un impact significatif sur la pertinence globale et la convivialité de votre application RAG. En tant que tel, cela nécessite une compréhension nuancée des capacités de chaque modèle et une analyse de la manière dont ces capacités s'alignent sur les exigences de votre application.
Si vous êtes relativement nouveau dans RAG et dans les intégrations en général, l'une des meilleures ressources à connaître est la
Le classement peut vous aider à identifier les modèles les plus performants pour votre cas d'utilisation spécifique.
L'une des raisons les plus courantes des mauvaises performances de RAG est que les développeurs nouveaux dans cet espace effectuent une recherche sur Google pour trouver des exemples de génération d'intégration. Ils trouvent souvent des exemples utilisant des modèles d'intégration tels que Word2Vec, sBERT et RoBERTa qui constituent de mauvais choix pour les cas d'utilisation de récupération.
Si vous avez trouvé cet article parce que vous déboguez des résultats de pertinence médiocres et que vous avez utilisé quelque chose comme sBERT pour générer vos intégrations, alors nous avons probablement identifié la cause de vos problèmes de pertinence.
Si tel est le cas, la prochaine question que vous vous poserez probablement est de savoir quels modèles d'intégration vous pouvez utiliser pour améliorer vos résultats de recherche de similarité. Sans connaître les détails de votre cas d’utilisation, les trois que nous recommandons sont :
Avec une longueur maximale de séquence d'entrée allant jusqu'à 8 192 jetons, il vous permet également de créer des intégrations pour des morceaux de texte beaucoup plus longs que les modèles alternatifs. C'est à la fois une bénédiction et une malédiction.
Avoir une grande taille de séquence simplifie le processus de création d'intégrations pour une plus grande partie de votre contenu textuel et permet au modèle d'intégration d'identifier les relations entre les mots et les phrases dans un corps de texte plus grand.
Cependant, cela entraîne également des recherches de similarité qui peuvent devenir plus floues lorsque l'on compare la similarité de deux longs documents lorsque vous recherchez des éléments de contexte pertinents pour faciliter le processus de génération.
Il y a deux gros inconvénients d'Ada v2. La première est qu’il ne peut pas être exécuté localement. Vous devez utiliser l'API d'OpenAI pour créer l'intégration. Cela peut non seulement introduire des goulots d'étranglement dans les cas où vous souhaitez créer des intégrations pour de nombreux éléments de contenu, mais cela ajoute également un coût de 0,0001 $ pour 1 000 jetons.
La seconde est que les intégrations créées à partir du modèle Open AI comportent chacune 1 536 dimensions. Si vous utilisez une base de données vectorielles cloud, cela peut considérablement augmenter vos coûts de stockage vectoriel.
Quand choisir : vous souhaitez une solution simple qui ne nécessite qu'un appel d'API, vous devrez potentiellement vectoriser des documents volumineux et le coût n'est pas un problème.
Jina v2 est un nouveau modèle d'intégration open source qui vous offre la même prise en charge de 8 000 séquences d'entrée qu'Ada v2 et obtient en fait des résultats légèrement meilleurs dans les cas d'utilisation de récupération.
Jina v2 fournit un antidote aux problèmes d'Ada v2. Il est open source sous licence Apache 2.0 et peut être exécuté localement, ce qui, bien sûr, constitue également un inconvénient si vous ne cherchez pas à exécuter votre propre code pour ce faire. Il produit également un vecteur d'intégration avec la moitié des dimensions d'Ada v2.
Ainsi, non seulement vous obtenez des performances de récupération légèrement meilleures sur les cas d'utilisation de référence, mais vous obtenez également ces résultats améliorés avec des exigences de stockage et de calcul inférieures du point de vue d'une base de données vectorielle.
Quand choisir : vous souhaitez utiliser une solution open source et avez potentiellement besoin de vectoriser des documents volumineux et êtes à l'aise pour exécuter des pipelines d'intégration localement. Vous souhaitez réduire les coûts des bases de données vectorielles avec des intégrations de dimensions inférieures.
bge-large-en-v1.5 est open source sous licence MIT et est actuellement le modèle d'intégration le mieux classé dans le classement MTEB pour les cas d'utilisation de récupération. Avec une séquence d'entrée plus petite, cela vous obligera à réfléchir davantage à votre stratégie de segmentation, mais offre en fin de compte les meilleures performances globales pour les cas d'utilisation de récupération.
Quand choisir : vous souhaitez utiliser une solution open source et êtes prêt à consacrer plus de temps aux stratégies de segmentation pour rester dans les limites de la taille d'entrée. Vous êtes à l’aise avec l’intégration de pipelines localement. Vous souhaitez le modèle d'intégration le plus performant pour les cas d'utilisation de récupération.
Bien que cela n'entre pas dans le cadre de cet article, vous souhaiterez peut-être approfondir les 15 critères du classement MTEB pour identifier celui qui ressemble le plus à votre situation spécifique.
Bien qu'il existe certainement des tendances en termes de performances des différents modèles d'intégration dans les différents benchmarks, il existe souvent des modèles spécifiques qui se démarquent dans chacun d'eux. Si vous devez affiner davantage votre sélection d’intégration, il s’agit d’un domaine possible d’investigation plus approfondie.
La segmentation ou le « découpage » du texte saisi est un facteur essentiel qui influence considérablement la pertinence et l’exactitude du résultat généré. Diverses stratégies de segmentation offrent des avantages uniques et sont adaptées à des types de tâches spécifiques. Ici, nous approfondissons ces méthodologies et fournissons des lignes directrices pour leur application, en intégrant quelques considérations clés :
Quand l’utiliser – À moins que votre contenu lui-même ne soit très structuré et d’une longueur fixe, vous souhaitez généralement vous appuyer sur une stratégie de segmentation plus utile comme celles qui suivent.
Considération technique : bien que très simple à mettre en œuvre, cette stratégie de segmentation va généralement conduire à de mauvais résultats dans les applications RAG.
Informations supplémentaires Si vous utilisez une stratégie de longueur fixe avec votre application RAG et que vous rencontrez des difficultés pour récupérer le contexte pertinent, vous devriez envisager de passer à une approche de segmentation différente.
Quand l'utiliser – Cette stratégie est efficace lorsque chaque phrase du texte saisi est riche en sens et en contexte. Cela permet au modèle de se concentrer sur les subtilités de chaque phrase, générant ainsi des réponses plus cohérentes et contextuellement pertinentes. Vous aurez rarement recours au regroupement au niveau des phrases pour les cas d'utilisation de RAG.
Considération technique : la segmentation au niveau de la phrase implique souvent une tokenisation basée sur les limites des phrases, qui peut être réalisée à l'aide de bibliothèques de traitement du langage naturel (NLP).
Informations supplémentaires : le regroupement au niveau des phrases peut être particulièrement utile lorsque vous recherchez des déclarations spécifiques, comme dans la transcription d'une réunion où vous essayez de trouver des déclarations sémantiquement similaires à un morceau de texte donné.
Quand l’utiliser : utilisez cette stratégie lorsque le texte saisi est organisé en sections ou paragraphes distincts, chacun encapsulant une idée ou un sujet distinct. Cela permet au modèle de se concentrer sur les informations pertinentes dans chaque paragraphe.
Considération technique - L'identification des limites d'un paragraphe implique généralement la détection de caractères de nouvelle ligne ou d'autres délimiteurs signifiant la fin d'un paragraphe.
Informations supplémentaires : la segmentation au niveau des paragraphes peut être utile lorsque vous disposez de documents qui couvrent de nombreux aspects différents du même sujet. Par exemple, une page de documentation produit peut présenter une fonctionnalité du produit, expliquer quand l'utiliser, expliquer comment la configurer et donner des exemples de différentes configurations.
L'utilisation de la segmentation au niveau des paragraphes peut vous aider à identifier la partie la plus pertinente du document à fournir au LLM comme contexte.
Quand l'utiliser - Optez pour cette stratégie lorsque la pertinence de sections spécifiques du texte est primordiale. Par exemple, dans les documents juridiques, la segmentation du texte en fonction de clauses ou de sections peut donner lieu à des réponses plus spécifiques au contexte.
Considération technique : cette approche peut nécessiter des techniques avancées de PNL pour comprendre les limites sémantiques du texte.
Informations supplémentaires : la segmentation basée sur le contenu est particulièrement utile lorsqu'il s'agit de données structurées ou semi-structurées, car des fragments spécifiques peuvent être combinés avec un filtrage de métadonnées pour une récupération plus précise.
Par exemple, dans un document juridique, vous souhaiterez peut-être extraire toutes les clauses de garantie ou d'indemnisation, et lorsque vous stockez des intégrations de morceaux dans une base de données vectorielle, vous pouvez utiliser des métadonnées pour faciliter la recherche de contenu d'un type donné lors de la création d'un document juridique. Cas d'utilisation de RAG.
Quand l’utiliser : la segmentation récursive divise les données en morceaux de plus en plus petits, en utilisant une approche hiérarchique. Par exemple, lorsque vous décomposez un document texte, vous pouvez d'abord diviser le texte en paragraphes, puis en phrases et enfin en mots.
Une fois que les données ont été divisées en premier ensemble de morceaux, vous pouvez ensuite appliquer de manière récursive le processus de segmentation à chacun des plus petits morceaux, en répétant jusqu'à ce que vous atteigniez la plus petite taille de morceau qui vous intéresse.
Considération technique : la mise en œuvre du regroupement récursif peut impliquer une stratégie d'analyse multiniveau dans laquelle les fragments sont ensuite divisés en sous-morceaux en fonction de critères supplémentaires. Si vous utilisez
Informations supplémentaires : cette approche permet au modèle de comprendre le contexte à plusieurs niveaux, depuis les thèmes de haut niveau jusqu'aux nuances détaillées, ce qui le rend particulièrement utile pour les documents complexes tels que les articles universitaires, les manuels techniques ou les contrats juridiques. Cela apporte des avantages en termes de flexibilité puisque les recherches de similarité peuvent identifier un texte similaire pour des requêtes plus larges et plus courtes.
Cependant, cela signifie également qu'il est possible que des morceaux similaires provenant du même document source finissent également par être surreprésentés dans les recherches de similarité, surtout si vous optez pour un chevauchement plus long entre les morceaux dans votre configuration de séparation de texte.
De manière générale, avant d'essayer de décomposer un gros corpus et de le vectoriser, vous devriez envisager de faire des expérimentations ad hoc avec vos données.
Inspectez manuellement les documents que vous souhaitez récupérer pour une requête donnée, identifiez les morceaux qui représentent le contexte idéal que vous souhaiteriez fournir au LLM, puis expérimentez des stratégies de segmentation pour voir laquelle vous donne les morceaux qui vous semblent les plus pertinents. pour le LLM.
La fenêtre contextuelle disponible d'un LLM est un facteur important dans la sélection d'une stratégie de segmentation. Si la fenêtre contextuelle est petite, vous devrez être plus sélectif dans les éléments que vous introduisez dans le modèle pour garantir que les informations les plus pertinentes sont incluses.
À l’inverse, une fenêtre contextuelle plus grande offre plus de flexibilité, permettant l’inclusion de contextes supplémentaires susceptibles d’améliorer les résultats du modèle, même si tout cela n’est pas strictement nécessaire.
En expérimentant ces stratégies de segmentation et en tenant compte de ces considérations, vous pouvez évaluer leur impact sur la pertinence des résultats générés. La clé est d'aligner la stratégie choisie avec les exigences spécifiques de votre application RAG, de préserver l'intégrité sémantique de l'entrée et d'offrir une compréhension globale du contexte.
Cela vous permettra de trouver le bon processus de segmentation pour des performances optimales.
À mesure que le nombre d'intégrations dans votre index de recherche augmente, les voisins les plus proches approximatifs (ANN) deviennent moins utiles lorsque vous recherchez un contexte pertinent à inclure dans vos invites. Supposons que vous ayez indexé des intégrations pour 200 articles dans votre base de connaissances.
Si vous pouvez identifier le voisin le plus proche avec une précision de 1 %, vous obtiendrez probablement des résultats assez pertinents, car 1 % représente les deux premiers articles sur ces 200, et vous obtiendrez l'un de ces deux.
Considérons maintenant un index de recherche contenant chaque article de Wikipédia. Cela représenterait environ 6,7 millions d'articles. Si votre voisin le plus proche figure dans le top 1 % des articles les plus similaires, cela signifie que vous obtenez l'un des 67 000 articles les plus similaires.
Avec un corpus comme Wikipédia, cela signifie que vous pourriez encore vous retrouver très loin du compte.
Le filtrage des métadonnées vous permet d'affiner les éléments de contenu en filtrant d'abord les documents, puis en appliquant l'algorithme du voisin le plus proche. Dans les cas où vous avez affaire à un grand nombre de correspondances possibles, ce pré-filtrage initial peut vous aider à affiner les options possibles avant de récupérer les voisins les plus proches.
Dans la suite, nous plongerons dans l'interaction avec le LLM et examinerons certains problèmes courants qui peuvent conduire à de mauvais résultats.
Essayer
Par Chris Latimer, DataStax
Également publié ici