Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Après avoir rassemblé vos documents et requêtes de test et effectué une analyse de document pendant la phase de préparation, la phase suivante consiste à segmenter. Décomposer les documents en blocs de taille appropriée qui contiennent chacun du contenu sémantiquement pertinent est crucial pour la réussite de votre implémentation de génération de Retrieval-Augmented (RAG). La transmission de documents entiers ou de blocs surdimensionnés est coûteuse, peut surcharger les limites de jeton du modèle et ne produit pas les meilleurs résultats. La transmission d’informations à un modèle de langage qui n’est pas pertinent pour la requête peut entraîner des réponses inexactes ou non liées. Vous devez optimiser le processus de transmission d’informations pertinentes et de suppression d’informations non pertinentes à l’aide de stratégies de segmentation et de recherche efficaces. Cette approche réduit les faux positifs et les faux négatifs, et optimise les vrais positifs et les vrais négatifs.
Les blocs trop petits et qui ne contiennent pas de contexte suffisant pour traiter la requête peuvent entraîner des résultats médiocres. Le contexte pertinent existant sur plusieurs segments peut ne pas être capturé. La clé consiste à implémenter des approches de segmentation efficaces pour vos types de documents spécifiques et leurs structures et leur contenu spécifiques. Il existe différentes approches de segmentation à prendre en compte, chacune ayant ses propres implications sur les coûts et l’efficacité, en fonction du type et de la structure du document auquel elles sont appliquées.
Cet article décrit différentes approches de segmentation et examine la façon dont la structure de vos documents peut influencer l’approche de segmentation que vous choisissez.
Cet article fait partie d’une série. Lisez l’introduction avant de continuer.
Économie de la segmentation
Lorsque vous déterminez votre stratégie globale de segmentation, vous devez prendre en compte votre budget et vos exigences en matière de qualité et de débit pour votre collection de documents. Il existe des coûts d’ingénierie pour la conception et l’implémentation de chaque implémentation de segmentation unique et les coûts de traitement par document qui diffèrent selon l’approche. Si vos documents comportent des médias intégrés ou liés, vous devez prendre en compte les aspects économiques du traitement de ces éléments. Pour la segmentation, ce traitement utilise généralement des modèles de langage pour générer des descriptions du média. Ces descriptions sont ensuite segmentées. Une autre approche pour certains média consiste à les transmettre en l’état à un modèle multimodal au moment de l’inférence. Toutefois, cette approche n’affecte pas l’économie de la segmentation.
Les sections suivantes examinent l'aspect économique de la segmentation d'images et la solution globale.
Économie du segmentage d'images
Il est coûteux d’utiliser un modèle de langage pour générer une description d’une image que vous segmentez. Par exemple, les services cloud tels qu’Azure OpenAI Service sont facturés par transaction ou par provisionnement prépayé. Les images plus grandes entraînent un coût plus élevé. Grâce à votre analyse de document, vous devez déterminer quelles images sont précieuses pour segmenter et quelles images vous devez ignorer. À partir de là, vous devez comprendre le nombre et la taille des images dans votre solution. Ensuite, vous devez peser la valeur de segmentation des descriptions d’images par rapport au coût de génération de ces descriptions.
Une façon de déterminer les images à traiter consiste à utiliser un service tel qu’Azure AI Vision pour classifier des images, étiqueter des images ou effectuer une détection de logo. Vous pouvez ensuite utiliser les résultats et les indicateurs de confiance pour déterminer si l'image ajoute une valeur contextuelle significative et doit être traitée. Les appels à Vision peuvent être moins coûteux que les appels aux modèles linguistiques. Cette approche peut donc entraîner des économies. Expérimentez pour déterminer les niveaux de confiance et les classifications ou balises qui fournissent les meilleurs résultats pour vos données. Une autre option consiste à créer votre propre modèle de classification. Si vous effectuez cette approche, veillez à prendre en compte les coûts de génération, d’hôte et de maintenance de votre propre modèle.
Une autre stratégie d’optimisation des coûts consiste à mettre en cache à l’aide du modèleCache-Aside. Vous pouvez générer une clé basée sur le hachage de l’image. Pour commencer, vérifiez si vous avez un résultat mis en cache à partir d’une exécution antérieure ou d’un document précédemment traité. Si c'est le cas, vous pouvez utiliser ce résultat. Cette approche élimine les coûts liés à l’appel d’un classifieur ou d’un modèle de langage. S'il n'y a pas de cache, lorsque vous appelez le classifieur ou le modèle de langage, vous mettez en cache le résultat. Les futurs appels pour cette image utilisent le cache.
Le flux de travail simple suivant intègre tous ces processus d’optimisation des coûts :
Vérifiez si le traitement de l’image est mis en cache. Si c'est le cas, utilisez les résultats mis en cache.
Exécutez votre classifieur pour déterminer si vous devez traiter l’image. Mettez en cache le résultat de la classification. Si votre logique de classification détermine que l’image ajoute de la valeur, passez à l’étape suivante.
Générez la description de votre image. Mettez le résultat en cache.
Économie de la solution globale
Tenez compte des facteurs suivants lorsque vous évaluez le coût de votre solution globale :
Nombre d’implémentations de segmentation uniques : Chaque implémentation unique a des coûts d’ingénierie et de maintenance. Veillez à prendre en compte le nombre de types de documents uniques dans votre collection et le coût par rapport aux compromis de qualité des implémentations uniques pour chacun d’eux.
Coût par document de chaque implémentation : Certaines approches de segmentation peuvent entraîner de meilleures segments de qualité, mais ont un coût financier et temporel plus élevé pour générer ces blocs. Par exemple, l’utilisation d’un modèle prédéfini dans Azure AI Document Intelligence a probablement un coût par document plus élevé qu’une implémentation d’analyse de texte pure, mais peut entraîner de meilleurs blocs.
Nombre de documents initiaux : Nombre de documents initiaux que vous devez traiter pour lancer votre solution.
Nombre de documents incrémentiels : Nombre et taux de nouveaux documents que vous devez traiter pour la maintenance continue du système.
Chargement et fractionnement
Lors de la segmentation, vous devez d’abord charger le document en mémoire dans un certain format. Le code de segmentation opère ensuite sur la représentation en mémoire du document. Vous pouvez combiner le code de chargement avec la segmentation ou séparer le chargement dans sa propre phase. L’approche que vous choisissez doit principalement être basée sur les contraintes architecturales et vos préférences. Les sections suivantes explorent brièvement les deux options et fournissent des recommandations générales.
Chargement et segmentation distincts
Il existe plusieurs raisons pour lesquelles vous pouvez choisir de séparer les phases de chargement et de segmentation. Vous pouvez vouloir encapsuler la logique dans le code de chargement. Vous souhaiterez peut-être conserver le résultat du code de chargement avant la segmentation, en particulier lorsque vous expérimentez différentes permutations de segmentation pour économiser du temps de traitement ou des coûts. Enfin, vous souhaiterez peut-être exécuter le code de chargement et de segmentation dans des processus distincts pour des raisons architecturales telles que la segmentation du traitement ou de la sécurité qui implique la suppression de données personnelles.
Encapsuler la logique dans le code de chargement
Vous pouvez choisir d'encapsuler la logique de prétraitement dans la phase de chargement. Cette approche simplifie le code de segmentation, car il ne nécessite aucun prétraitement. Le prétraitement peut être aussi simple que la suppression ou l’annotation de parties du document que vous souhaitez ignorer dans l’analyse de document, telles que les filigranes, les en-têtes et les pieds de page, à des tâches plus complexes telles que la reformatage du document. Par exemple, vous pouvez inclure les tâches de prétraitement suivantes dans la phase de chargement :
Supprimez ou annotez les éléments que vous souhaitez ignorer.
Remplacer les références d'images par des descriptions d'images. Pendant cette phase, vous utilisez un modèle de langage volumineux pour générer une description pour l’image et mettre à jour le document avec cette description. Si vous déterminez dans la phase d’analyse du document qu’il existe un texte environnant qui fournit un contexte précieux à l’image, passez ce texte, ainsi que l’image, au modèle de langue volumineux.
Téléchargez ou copiez des images dans le stockage de fichiers comme Azure Data Lake Storage pour être traitées séparément du texte du document. Si vous déterminez dans l’analyse du document qu’il y a du texte environnant qui fournit un contexte précieux à l’image, stockez ce texte avec l’image dans le stockage de fichiers.
Reformatez les tables afin qu’elles soient plus facilement traitées.
Conserver le résultat du code de chargement
Il existe plusieurs raisons pour lesquelles vous pouvez choisir de conserver le résultat du code de chargement. Une des raisons est que si vous souhaitez pouvoir inspecter les documents après leur chargement et prétraitement, mais avant l’exécution de la logique de segmentation. Une autre raison est que vous souhaiterez peut-être exécuter une logique de segmentation différente sur le même code prétraité pendant qu’il est en développement ou en production. La persistance du code chargé accélère ce processus.
Exécutez le code de chargement et de segmentation dans des processus distincts.
Séparez le code de chargement et de segmentation en processus distincts pour vous aider à exécuter plusieurs implémentations de segmentation sur le même code prétraité. Cette séparation vous permet également d'exécuter le code de chargement et de segmentation dans différents environnements de calcul et sur différents matériels. Vous pouvez utiliser cette conception pour mettre à l’échelle indépendamment le calcul utilisé pour le chargement et pour la segmentation.
Combiner le chargement et la segmentation
La combinaison du code de chargement et de segmentation est une implémentation plus simple dans la plupart des cas. La plupart des opérations que vous pourriez envisager de réaliser dans le cadre du prétraitement dans une phase de chargement distincte peuvent être effectuées dans la phase de segmentation. Par exemple, au lieu de remplacer les URL d’image par une description dans la phase de chargement, la logique de segmentation peut passer des appels au modèle de langage volumineux pour obtenir une description de texte et segmenter la description.
Lorsque vous avez des formats de document comme HTML qui ont des balises avec des références à des images, assurez-vous que le lecteur ou l’analyseur que le code de segmentation utilise ne supprime pas les balises. Le code de segmentation doit être en mesure d'identifier les références aux images.
Recommandations
Tenez compte des recommandations suivantes lorsque vous déterminez si vous devez combiner ou séparer votre logique de segmentation.
Commencez par combiner la logique de chargement et de segmentation. Séparez-les lorsque votre solution l'exige.
Évitez de convertir les documents dans un format intermédiaire si vous décidez de séparer les processus. Ce type d’opération peut entraîner une perte de données.
Approches de la segmentation
Cette section fournit une vue d’ensemble des approches courantes de segmentation. Vous pouvez utiliser plusieurs approches dans l’implémentation, telles que la combinaison de l’utilisation d’un modèle de langage pour obtenir une représentation textuelle d’une image avec la plupart des approches répertoriées.
Chaque approche est accompagnée d’une matrice de prise de décision résumée qui met en évidence les outils, les coûts associés et plus encore. L’effort d’ingénierie et les coûts de traitement sont subjectifs et inclus pour une comparaison relative.
Analyse basée sur les phrases
Cette approche simple décompose les documents texte en blocs composés de phrases complètes. Les avantages de cette approche incluent son coût d’implémentation faible, son coût de traitement faible et son applicabilité à tout document textuel écrit en prose ou en phrases complètes. L’un des inconvénients de cette approche est que chaque bloc peut ne pas capturer le contexte complet d’une idée ou d’une signification. Plusieurs phrases doivent souvent être prises ensemble pour capturer la signification sémantique.
Tools :spaCy sentence tokenizer, LangChain recursive text splitter, NLTK sentence tokenizer
Effort d’ingénierie : Bas
Coût de traitement : Bas
Cas d’usage : Documents non structurés écrits en prose ou en phrases complètes, et votre collection de documents contient un nombre prohibitif de différents types de documents qui nécessitent des stratégies de segmentation individuelles
Exemples: Contenu généré par l’utilisateur, comme des commentaires ouverts à partir d’enquêtes, de billets de forum, de commentaires, de messages électroniques, d’un roman ou d’un essai
Analyse de taille fixe, avec chevauchement
Cette approche décompose un document en blocs en fonction d’un nombre fixe de caractères ou de jetons et permet un chevauchement de caractères entre des blocs. Cette approche présente de nombreux avantages et inconvénients similaires à ceux de l’analyse basée sur les phrases. L’un des avantages de cette approche par rapport à l’analyse basée sur des phrases est la possibilité d’obtenir des blocs avec des significations sémantiques qui s’étendent sur plusieurs phrases.
Vous devez choisir la taille fixe des segments et la quantité de chevauchement. Étant donné que les résultats varient selon les différents types de documents, il est préférable d’utiliser un outil tel que le visualiseur de segments de visages hugging pour effectuer une analyse exploratoire. Vous pouvez utiliser des outils comme celui-ci pour visualiser la façon dont vos documents sont segmentés en fonction de vos décisions. Vous devez utiliser des jetons BERT au lieu du nombre de caractères lorsque vous utilisez l’analyse de taille fixe. Les jetons BERT sont basés sur des unités de langue significatives, donc ils préservent plus d’informations sémantiques que les comptes de caractères.
Outils :LangChain fractionneur de texte récursif, visualiseur de bloc Hugging Face
Effort d’ingénierie : Bas
Coût de traitement : Bas
Cas d’usage : Documents non structurés écrits en prose ou sans prose avec phrases complètes ou incomplètes. Votre collection de documents contient un nombre prohibitif de différents types de documents qui nécessitent des stratégies de segmentation individuelles
Exemples: Contenu généré par l’utilisateur, comme des commentaires ouverts à partir d’enquêtes, de billets de forum, de révisions, de messages électroniques, de notes personnelles, de notes de recherche, de listes
Code personnalisé
Cette approche analyse les documents à l’aide du code personnalisé pour créer des blocs. Cette approche est la plus efficace pour les documents textuels où la structure est connue ou peut être déduite et un degré élevé de contrôle sur la création de segments est nécessaire. Vous pouvez utiliser des techniques de parsing de texte comme les expressions régulières pour créer des segments basés sur des motifs dans la structure du document. L’objectif est de créer des segments de taille similaire et des segments ayant un contenu distinct. De nombreux langages de programmation prennent en charge les expressions régulières, et certains ont des bibliothèques ou des packages qui fournissent des fonctionnalités de manipulation de chaîne plus élégantes.
Tools :Python (re, regex, BeautifulSoup, lxml, html5lib, marko), R (stringr, xml2), Julia (Gumbo.jl)
Effort d’ingénierie : Moyen
Coût de traitement : Faible
Cas d’usage : Documents semi-structurés où la structure peut être déduite
Exemples: Dépôts de brevets, documents de recherche, polices d’assurance, scripts et scénarios
Augmentation du modèle de langage
Vous pouvez utiliser des modèles de langage pour créer des blocs. Par exemple, vous pouvez utiliser un modèle de langage volumineux, tel que GPT-4, pour générer des représentations textuelles d’images ou de résumés de tables qui peuvent être utilisées en tant que blocs. L’augmentation du modèle de langage est utilisée avec d’autres approches de segmentation telles que du code personnalisé.
Si votre analyse de document détermine que le texte avant ou après l’image permet de répondre à certaines questions requises, transmettez ce contexte supplémentaire au modèle de langage. Il est important d’expérimenter pour déterminer si ce contexte supplémentaire améliore les performances de votre solution.
Si votre logique de segmentation fractionne la description de l’image en plusieurs blocs, assurez-vous d’inclure l’URL de l’image dans chaque bloc. Incluez l’URL de l’image dans chaque bloc pour vous assurer que les métadonnées sont retournées pour toutes les requêtes que l’image sert. Cette étape est cruciale pour les scénarios où l’utilisateur final doit accéder à l’image source via cette URL ou utiliser des images brutes pendant l’inférence.
Outils :Azure OpenAI, OpenAI
Effort d’ingénierie : Moyen
Coût de traitement : Haut
Cas d’usage : Images, tables
Exemples: Générer des représentations textuelles de tables et d’images, synthétiser les transcriptions des réunions, des discours, des entrevues ou des podcasts
Analyse de la disposition de documents
Les bibliothèques et services d’analyse de disposition de documents combinent des fonctionnalités de reconnaissance optique de caractères avec des modèles d’apprentissage profond pour extraire à la fois la structure et le texte des documents. Les éléments structurels peuvent inclure les en-têtes, les pieds de page, les titres, les titres de section, les tableaux et les figures. L’objectif est de fournir une meilleure signification sémantique au contenu contenu dans les documents.
Les bibliothèques et services d’analyse de disposition de document exposent un modèle qui représente le contenu structurel et textuel du document. Vous devez toujours écrire du code qui interagit avec le modèle.
Remarque
Document Intelligence est un service cloud qui vous oblige à charger votre document. Vous devez vous assurer que vos réglementations en matière de sécurité et de conformité vous permettent de charger des documents sur ces services.
Outils :Modèles d’analyse de documents Intelligence Documentaire, Graphique en anneau, Analyseur de disposition
Effort d’ingénierie : Moyen
Coût de traitement : moyen
Cas d’usage : Documents semi-structurés
Exemples: Articles d’actualités, pages web, cv
Modèle prédéfini
Les services tels que Document Intelligence fournissent des modèles prédéfinis dont vous pouvez tirer parti pour différents types de documents. Certains modèles sont formés pour des types de documents spécifiques, tels que le formulaire fiscal U.S. W-2, tandis que d’autres ciblent un genre plus large de types de documents tels que les factures.
Outils : Modèles prédéfinis d'Intelligence Documentaire, le traitement intelligent des documents de Power Automate, LayoutLMv3
Effort d’ingénierie : Bas
Coût de traitement : Moyen/élevé
Cas d’usage : Documents structurés où existe un modèle prédéfini
Exemples spécifiques : Factures, reçus, cartes d’assurance maladie, formulaires W-2
Modèle personnalisé
Pour les documents hautement structurés où aucun modèle prédéfini n’existe, vous devrez peut-être construire un modèle personnalisé. Cette approche peut être efficace pour les images ou les documents hautement structurés, ce qui rend difficile l’utilisation de techniques d’analyse de texte.
Outils :Modèles personnalisés Intelligence Documentaire, Tesseract
Effort d’ingénierie : Haut
Coût de traitement : Moyen/élevé
Cas d’usage : Documents structurés où un modèle prédéfini n’existe pas
Exemples: Calendriers de réparation et de maintenance de l’automobile, transcriptions académiques, dossiers, manuels techniques, procédures opérationnelles, directives de maintenance
Structure du document
Les documents varient selon la quantité de structure dont ils disposent. Certains documents, comme les formulaires gouvernementaux, ont une structure complexe et connue, telle qu’une forme fiscale américaine W-2. À l’autre extrémité du spectre se trouvent des documents non structurés comme des notes libres. Le degré de structure d’un type de document est un bon point de départ pour déterminer une approche de segmentation efficace. Bien qu’il n’existe aucune règle spécifique, cette section vous fournit quelques instructions à suivre.
Documents structurés
Les documents structurés, parfois appelés documents à format fixe, ont des mises en page définies. Les données dans ces documents sont situées à des emplacements fixes. Par exemple, la date ou le nom de famille du client se trouvent au même endroit dans tous les documents du même format fixe. Un exemple de document de format fixe est le document fiscal américain W-2.
Les documents de format fixe peuvent être des images numérisées de documents originaux remplis à la main ou ayant des structures de disposition complexes. Ce format les rend difficiles à traiter à l’aide d’une approche d’analyse de texte de base. Une approche classique du traitement de structures de documents complexes consiste à utiliser des modèles Machine Learning pour extraire des données et appliquer une signification sémantique à ces données, le cas échéant.
Exemples: Formulaire W-2, carte d’assurance
Approches classiques : Modèles prédéfinis, modèles personnalisés
Documents semi-structurés
Les documents semi-structurés n’ont pas de format fixe ou de schéma, comme le formulaire W-2, mais ils fournissent une cohérence concernant le format ou le schéma. Par exemple, toutes les factures ne sont pas disposées de la même façon. Toutefois, ils ont généralement un schéma cohérent. Vous pouvez vous attendre à ce qu’une facture dispose d’un numéro de facture et d’une forme de nom et d’adresse facturer à et expédier à, entre autres données. Une page web peut ne pas avoir de consistances de schéma, mais elles ont des éléments structurels ou de disposition similaires, tels que le corps, le titre, H1 et p qui peuvent ajouter une signification sémantique au texte environnant.
Comme les documents structurés, les documents semi-structurés qui ont des structures de disposition complexes sont difficiles à traiter à l’aide de l’analyse de texte. Pour ces types de documents, les modèles d’apprentissage automatique sont une bonne approche. Il existe des modèles prédéfinis pour certains domaines qui ont des schémas cohérents tels que des factures, des contrats ou des documents d’assurance maladie. Envisagez de construire des modèles personnalisés pour des structures complexes où aucun modèle prédéfini n’existe.
Exemples: Factures, reçus, pages web, fichiers Markdown
Approches classiques : Modèles d’analyse de documents
Structure déduite
Certains documents ont une structure mais ne sont pas écrits en balisage. Pour ces documents, la structure doit être déduite. Un bon exemple est le document de réglementation de l’UE suivant.
Parce que vous pouvez clairement comprendre la structure du document, et qu’il n’y a pas de modèles connus pour cela, vous pouvez déterminer que vous pouvez écrire du code personnalisé. Un format de document tel que celui-ci peut ne pas justifier l’effort de création d’un modèle personnalisé, en fonction du nombre de différents documents de ce type que vous utilisez. Par exemple, si votre collection contient toutes les réglementations de l’UE, ou les lois des États-Unis ou des états américains, un modèle personnalisé peut être une bonne approche. Si vous travaillez avec un seul document, comme la réglementation de l’UE dans l’exemple, le code personnalisé peut être plus rentable.
Exemples: Documents juridiques, scripts, spécifications de fabrication
Approches classiques : Code personnalisé, modèles personnalisés
Documents non structurés
Une bonne approche pour les documents qui n’ont peu ou pas de structure est basée sur les phrases, ou de taille fixe avec chevauchement.
Exemples: Contenu généré par l’utilisateur, comme des commentaires ouverts à partir d’enquêtes, de billets de forum, de révisions, de messages électroniques, de notes personnelles, de notes de recherche
Approches classiques : basée sur les phrases ou basées sur des limites avec chevauchement
Expérimentation
Cet article décrit les approches de segmentation les plus appropriées pour chaque type de document, mais dans la pratique, l’une des approches peut convenir à n’importe quel type de document. Par exemple, le parsing basé sur les phrases peut être approprié pour les documents hautement structurés, ou un modèle personnalisé peut être approprié pour les documents non structurés. Une partie de l’optimisation de votre solution RAG consiste à expérimenter différentes approches de segmentation. Considérez le nombre de ressources dont vous disposez, la compétence technique de vos ressources et le volume de documents que vous devez traiter. Pour obtenir une stratégie de segmentation optimale, observez les avantages et compromis de chaque approche que vous testez pour vous assurer que vous choisissez l’approche appropriée pour votre cas d’usage.
Étape suivante
Ressources associées
- Segmentation des grands documents pour les solutions de recherche vectorielle dans Azure AI Search
- Segmentation et incorporation des données intégrées dans la recherche Azure AI