Phase d’enrichissement de segment RAG
Après avoir divisé vos documents en une collection de blocs, l’étape suivante consiste à enrichir chaque bloc en le nettoyeant et en l’augmentant avec des métadonnées. Le nettoyage des blocs vous permet d’obtenir de meilleures correspondances pour les requêtes sémantiques dans une recherche vectorielle. L’ajout de métadonnées vous permet de prendre en charge les recherches des blocs qui vont au-delà des recherches sémantiques. Le nettoyage et l’augmentation impliquent tous deux l’extension du schéma pour le segment.
Cet article décrit différentes façons d’augmenter vos blocs, y compris certaines opérations de nettoyage courantes que vous pouvez effectuer sur des segments pour améliorer les comparaisons de vecteurs. Il décrit également certains champs de métadonnées courants que vous pouvez ajouter à vos blocs pour augmenter votre index de recherche.
Cet article fait partie d’une série. Voici l’introduction.
L’exemple de code suivant montre des blocs enrichis avec des données.
Nettoyage des données
La segmentation de vos données permet à votre charge de travail de trouver les blocs les plus pertinents, généralement en vectorisant ces blocs et en les stockant dans une base de données vectorielle. Une recherche vectorielle optimisée retourne uniquement les lignes de la base de données qui ont les correspondances sémantiques les plus proches à la requête. L’objectif du nettoyage des données est de prendre en charge les correspondances de proximité en éliminant les différences potentielles qui ne sont pas matérielles à la sémantique du texte. Voici quelques procédures courantes de nettoyage.
Remarque
Vous devez retourner le bloc d’origine, non nettoyé comme résultat de la requête. Vous devez donc ajouter un champ supplémentaire pour stocker les données nettoyées et vectorisées.
Implémentez des stratégies de mise en minuscules. La mise en minuscules permet aux mots capitalisés, tels que ceux en début de phrase, de correspondre aux mots similaires dans la phrase. Les embeddings sont généralement sensibles à la casse, ainsi « Cheetah » et « cheetah » donneraient lieu à un vecteur différent pour le même mot logique. Par exemple, pour la requête encodée « qu’est-ce qui est plus rapide, une guépard ou un puma ? », l'encodage « les guépards sont plus rapides que les pumas » est une correspondance plus proche que « Les guépards sont plus rapides que les pumas ». Certaines stratégies de conversion en minuscules mettent tous les mots en minuscules, y compris les noms propres, tandis que d’autres stratégies ne mettent en minuscules que les premiers mots des phrases.
Supprimez les mots vides. Les mots vides sont des mots tels que « a », « an » et « the ». Vous pouvez les supprimer afin de réduire la dimensionnalité du vecteur résultant. Si vous supprimez les mots vides dans l’exemple précédent, « un guépard est plus rapide qu’un puma » et « le guépard est plus rapide que le puma » sont vectoriellement égaux à « cheetah plus rapide puma ». Toutefois, il est important de comprendre que certains mots vides contiennent une signification sémantique. Par exemple, « not » pourrait être considéré comme un mot vide, mais il possède une signification sémantique importante. Vous devez tester afin de déterminer l’effet de la suppression des mots vides.
Corrigez les erreurs d’orthographe. Un mot mal orthographié ne correspond pas au mot correctement orthographié dans le modèle d’incorporation. Par exemple, « cheatah » n’est pas équivalent à « cheetah » dans l’embedding. Vous devez corriger les erreurs orthographiques pour résoudre ce problème.
Supprimez les caractères Unicode. La suppression de caractères Unicode peut réduire le bruit dans vos blocs et réduire la dimensionnalité. Comme les mots vides, certains caractères Unicode peuvent contenir des informations pertinentes. Il est important d’effectuer des tests pour comprendre l’impact de la suppression de caractères Unicode.
Normaliser le texte. La normalisation du texte selon des normes telles que l’expansion des abréviations, la conversion de nombres en mots et l’expansion des contractions, par exemple, le développement de « je suis » en « je suis », peut contribuer à augmenter les performances des recherches vectorielles.
Augmentation des segments
Les recherches sémantiques sur les blocs vectorisés fonctionnent bien pour certains types de requêtes, mais pas aussi pour d’autres. Selon les types de requêtes que vous devez prendre en charge, vous devrez peut-être augmenter vos blocs avec des informations supplémentaires. Les champs de métadonnées supplémentaires sont tous stockés dans la même ligne que vos incorporations et peuvent être utilisés dans la solution de recherche en tant que filtres ou dans le cadre d’une recherche.
L’image suivante montre le JSON du contenu entièrement enrichi et décrit comment les métadonnées peuvent être utilisées par une plateforme de recherche.
Les colonnes de métadonnées que vous devez ajouter dépendent de votre domaine de problème, notamment le type de données que vous avez et les types de requêtes que vous souhaitez prendre en charge. Vous devez analyser l’expérience utilisateur, les données disponibles et la qualité des résultats que vous essayez d’atteindre. À partir de là, vous pouvez déterminer les métadonnées qui peuvent vous aider à répondre aux exigences de votre charge de travail.
Voici quelques champs de métadonnées courants, ainsi que le texte de bloc d’origine, des conseils sur leurs utilisations potentielles et des outils ou techniques couramment utilisés pour générer le contenu des métadonnées.
ID. Un ID identifie de façon unique un bloc. Un ID unique est utile pendant le traitement pour déterminer si un bloc existe déjà dans le magasin. Un ID peut être un hachage d’un champ de clé. Outils : Une bibliothèque de hachage.
Titre. Un titre est une valeur de retour utile pour un segment. Il fournit un résumé rapide du contenu dans la section. Le résumé peut également être utile pour interroger avec une recherche indexée, car il peut contenir des mots clés pour la correspondance. Tools: modèle de langage.
Résumé. Le résumé est similaire au titre en tant que valeur de retour courante et peut être utilisé dans les recherches indexées. Les résumés sont généralement plus longs que les titres. Tools: modèle de langage.
Reformulation du segment. La réécriture d’un bloc peut être utile en tant que champ de recherche vectorielle, car la réécriture capte les variations dans la langue, telles que les synonymes et les paraphrases. Tools: modèle de langage.
Mots-clés. Les recherches de mots clés sont utiles pour les données qui ne sont pas textuelles, pour rechercher une correspondance exacte et quand un terme ou une valeur spécifique est important. Par exemple, un constructeur automobile peut avoir des avis ou des données de performances pour chacun de ses modèles sur plusieurs années. « La revue du produit X pour l’année 2009 » est sémantiquement semblable à « La revue du produit X pour 2010 » et « La revue du produit Y pour 2009 ». Dans ce cas, il est plus efficace de faire correspondre les mots clés pour le produit et l’année. Outils : Un modèle de langage, RAKE, KeyBERT, multi-rake.
Entités. Les entités sont des éléments d’information spécifiques, tels que des personnes, des organisations et des emplacements. Comme les mots clés, les entités sont bonnes pour les recherches exactes de correspondance ou lorsque des entités spécifiques sont importantes. Outils : spaCy, Stanford Named Entity Recognizer (Stanford NER), scikit-learn, Natural Language Toolkit (NLTK).
Texte de segment nettoyé. Le texte du segment nettoyé. Tools: modèle de langage.
Questions auxquelles le segment peut répondre. Parfois, la requête encodée n’est pas une correspondance étroite avec le segment encodé. Par exemple, la requête peut être petite par rapport à la taille de bloc. Il peut être préférable de formuler les requêtes auxquelles le segment peut répondre et effectuer une recherche vectorielle entre la requête réelle de l’utilisateur et les requêtes pré-formulées. Tools: modèle de langage.
Source. La source du segment peut s'avérer précieuse en réponse aux requêtes. Le retour de la source permet au querier de citer la source d’origine.
Langue. Le langage du bloc peut être utile en tant que filtre dans les requêtes.
Le coût de l’augmentation
L’utilisation de certains modèles de langage pour augmenter les blocs peut être coûteuse. Vous devez calculer le coût de chaque enrichissement que vous envisagez et le multiplier par le nombre estimé de blocs au fil du temps. Vous devez utiliser ces informations, ainsi que vos tests des champs enrichis, pour déterminer la meilleure décision commerciale.