Unité 3 / 11

Regroupement et préparation de documents

Gains :

  • Évaluer numériquement la taille des fragments, les chevauchements et les compromis sémantiques en matière de fragmentation
  • Choisir une stratégie de segmentation appropriée pour différents types de documents (PDF, tableau, code, journal de discussion)
  • Renforcez la qualité de la récupération et le filtrage en ajoutant des métadonnées à chaque morceau

C’est l’étape la plus négligée mais la plus décisive de RAG : la façon dont vous décomposez le document. C'est ce qu'on appelle le découpage. Même si vous donnez le même document au même modèle, en raison d'un mauvais regroupement, la récupération renvoie le mauvais morceau et le modèle ne produira jamais une bonne réponse. Dans cette unité, nous abordons les stratégies de fragmentation, comment les adapter en fonction du type de document et comment ajouter des métadonnées significatives à chaque fragment.

Pourquoi déchiquetons-nous ?

Il y a trois raisons. Premièrement, les modèles d'intégration convertissent le texte jusqu'à une certaine longueur en un vecteur significatif ; Si un chapitre entier de 40 pages est entassé dans un seul vecteur, le sens devient « flou ». Deuxièmement, nous voulons donner au modèle uniquement la partie nécessaire comme contexte ; remettre l’intégralité du document est coûteux et distrayant. Troisièmement, pour que la récupération soit précise, l'unité de recherche doit être petite et ciblée.

Le chunk est donc la plus petite unité de récupération. Il ne doit être ni trop grand ni trop petit – juste comme il faut.

Taille des morceaux et équilibre de chevauchement

Il existe deux paramètres principaux : la taille du morceau (combien de jetons/mots seront dans un morceau) et le chevauchement (la partie partagée par les morceaux voisins).

Très petits morceaux (par exemple 100 jetons) : ciblés mais déconnectés du contexte. Il dit "pendant 14 jours", mais ce que représentent 14 jours reste dans la phrase précédente. Très gros morceaux (par exemple 2 000 jetons) : préserve le contexte mais de nombreux threads sont mélangés ; l'intégration devient confuse et des sujets non pertinents se rassemblent.

Le chevauchement résout le problème des limites. Si une phrase tombe exactement à la frontière de deux parties, elle est divisée en deux sans se chevaucher et son sens est perdu. Un chevauchement de 50 à 100 jetons garantit que les informations tombant dans la limite restent intactes dans au moins une partie.

Taille du morceau

Avantage

Inconvénient

contenu approprié

Petit (100-250 jetons)

Haute sensibilité, concentré

Le contexte peut se briser

FAQ, articles courts, définitions

Moyen (300-600 jetons)

Solde ; la plupart des scénarios

Procédures, textes politiques

Grand (800-1500 jetons)

Intégrité du contexte

intégration floue

Narratif, longues explications

Astuce : si vous ne savez pas par où commencer, commencez par un bloc de 400 à 500 jetons et un chevauchement de 50 à 80 jetons ; puis mesurez et ajustez avec vos propres données. La « bonne » taille n’est pas universelle, elle dépend du contexte.

Stratégies de regroupement

Taille fixe : coupe le texte tous les N jetons. C'est simple et rapide, mais peut interrompre le milieu d'une phrase.

Basé sur un séparateur (récursif/séparateur) : divise en fonction des limites du paragraphe, puis de la phrase ; Cela préserve mieux l’intégrité du sens. La plupart des systèmes de production commencent par cela.

Segmentation sémantique : il examine les intégrations des phrases et les divise là où le changement de sujet se produit. Il s’agit de la méthode de la plus haute qualité mais la plus coûteuse ; Avec des volumes importants, les coûts de transaction augmentent.

Sensible à la structure : utilise la structure du document telle que les titres, les sections et les tableaux. Par exemple, diviser un document Markdown par titres garantit que chaque partie porte son propre titre.

Adaptation par type de document

Tous les documents ne sont pas identiques. La stratégie varie selon le type :

  • Texte PDF/politique : basé sur des signets, taille moyenne. Effacer les répétitions haut/bas de la page (en-tête/pied de page).
  • Tableaux : ne sortez pas la ligne de son contexte ; conservez chaque ligne avec les informations d’en-tête (« Article : X, Prix : Y, Stock : Z »). La conversion du tableau brut en texte brut est souvent essentielle.
  • Code : divisé par limites de fonction/classe ; Ne supprimez pas une fonction.
  • Enregistrement de chat/ticket : divisé par message ou cycle de conversation ; Maintenir la connaissance de qui a dit quoi.

# chunks (conceptuels) basés sur les crochets = bol( text, target_size=450, # token chevauchement=70, # token brackets=["\n\n", "\n", ". ", " "] # paragraphe en premier, mot en dernier)

Ajouter des métadonnées à chaque piste

Le découpage ne consiste pas simplement à « diviser » ; est d'enrichir chaque pièce. Chaque balise que vous attachez à la piste vaut son pesant d'or pour le filtrage futur et la citation de la source.

# Morceau enrichi (conceptuel){ "text": "Le congé annuel payé est de 14 jours avec 1 à 5 années de service...", "metadata": { "source": "ik_el_kitabi_v7.pdf", "section": "5.2 Congé annuel", "page": 23, "date": "2025-06", "department": "IK", "privacy": "interne" }}

Une autre technique puissante consiste à ajouter un en-tête contextuel : écrire le titre du chapitre auquel il appartient au début de chaque morceau. Ainsi, même un élément décousu comme « Pendant 14 jours » est à la fois mieux intégré et plus significatif que « Congé annuel – 14 jours ».

Morceaux faibles/morceaux forts

Faible (coupe aveugle, pas de métadonnées) :

Tronquez le texte tous les 1 000 caractères. Ne conserver que le texte.# Résultat : les tableaux sont fractionnés au milieu, "14 jours" reste sans contexte,# on ne sait pas de quel document il provient, aucun filtre ne peut être fait.

Puissant (sensible à la structure + en-tête + métadonnées) :

Divisez le document par titres ; ajouter un titre de section à chaque partie ; joindre des métadonnées sur la source, la page, la date et la confidentialité ; convertir les lignes de tableau en texte brut avec leurs en-têtes.# Résultat : ciblé, contextuel, filtrable, sourceable.

Trois mini-étuis

Cas 1 — Catastrophe de peinture. Une équipe financière a divisé la liste de prix de 200 pages avec un découpage aveugle ; les lignes du tableau ont été divisées de manière aléatoire. « Quel est le prix du produit X ? » Le modèle a lu la mauvaise ligne et donné le mauvais prix (9 cas sur 12 sont faux). Lorsque j'ai converti les lignes du tableau en texte brut au format "Produit : … | Prix : … | Unité : …", l'erreur est tombée à 0 sur 12.

Cas 2 — Morceau extrêmement gros. Dans un wiki, chaque page est constituée d'un seul morceau (certains disent 3 000 jetons). L'intégration est floue car il y a « congés », « heures supplémentaires » et « paie » sur une seule page ; La section sur les horaires de travail est également entrée en jeu concernant la question des congés. Lorsque les pages ont été divisées en taille moyenne par titre, le rappel@5 a augmenté de 64 % à 91 %.

Cas 3 — Phrase tronquée sans chevauchement. Coupe fixe de 250 jetons pour une équipe légale, pas de chevauchement. Une définition critique tombait à la frontière de deux parties et se scindait en deux ; Ni l’un ni l’autre ne contiennent la réponse complète. Lorsque 60 jetons de chevauchement ont été ajoutés, la même définition est restée intacte en un seul morceau et la bonne réponse a été renvoyée.

Erreurs courantes

  • Coupe fixe aveugle : divise les phrases et les tableaux au milieu ; le sens est perdu.
  • Laisser le chevauchement à zéro : les informations qui tombent sur la frontière sont divisées et perdues.
  • Ne pas ajouter de métadonnées : Le filtrage et l'affichage des sources deviennent impossibles.
  • Laisser les tables brutes : le modèle ne peut pas résoudre la structure des tables ; Convertissez les lignes en texte brut.
  • Imposer une seule stratégie : PDF, code et tableau ne sont pas découpés par la même méthode ; Adaptez-vous au genre.
Attention : ne configurez pas Chunking une seule fois et oubliez-le. Mesurez à nouveau la qualité de la récupération à mesure que de nouveaux types de documents arrivent (tickets provenant d'un nouveau système, PDF numérisés). De mauvaises données d'entrée signifient une mauvaise réponse ("garbage in, garbage out").

En résumé

  • Le morceau est la plus petite unité de récupération ; Ni trop grand, ni trop petit, il doit être équilibré en fonction du contenu.
  • La taille des fragments indique l’équilibre entre le contexte et le focus ; Le chevauchement gère la perte de limite.
  • Le chunking basé sur les brackets et prenant en compte la structure est le point de départ de la plupart des systèmes de génération ; le chunking sémantique est de bonne qualité mais coûteux.
  • Les types comme table, script et chat nécessitent leurs propres stratégies ; Convertissez les tableaux en texte brut.
  • Ajoutez des métadonnées source/date/chapitre/confidentialité et un titre de section à chaque piste ; C'est la base du filtrage et de la citation.

Tâche de candidature

Divisez une section du document que vous choisissez en trois manières différentes : (1) petits morceaux de 200 jetons, (2) morceaux moyens de 500 jetons (chevauchement de 70 jetons), (3) gros morceaux simples. Posez les 3 mêmes questions pour chaque stratégie, marquez manuellement quel élément apporter et notez le raisonnement pour lequel la stratégie fonctionne le mieux pour ce document. Ajoutez ensuite au moins quatre champs de métadonnées et un « titre de chapitre » à chaque piste. Si le document contient un tableau, convertissez une ligne du tableau en texte brut au format « champ : valeur ».

liste de contrôle

  • [ ] Je peux dire que ce morceau est la plus petite unité de récupération et que la taille est l'équilibre entre le contexte et le focus.
  • [ ] Je sais pourquoi Overlap empêche la perte de limite.
  • [ ] Je peux faire la distinction entre le chunking basé sur les parenthèses, sémantique et sensible à la structure.
  • [ ] Je peux adapter la stratégie pour la table, le code et le chat.
  • [ ] Je renforce la récupération en ajoutant des métadonnées et un titre de chapitre à chaque piste.