Explorez davantage le manuel d’instructions RAG pour en savoir plus sur les solutions RAG d’aujourd’hui.

Leadspace remanié en s’appuyant sur le leadspace Watson pour l’assistance client.
Présentation

Dans le domaine de l’indexation Web et de l’indexation des documents, l’efficacité des méthodes de découpage est essentielle pour optimiser la performance et la pertinence des recherches. Lorsque vous traitez des pages Web HTML ou des PDF, la stratégie que vous employez peut avoir un impact significatif sur l’efficacité et la précision de votre application de recherche. Voici un guide complet des méthodes de découpage les plus efficaces dans différentes circonstances, notamment dans le contexte de l’utilisation d’Elasticsearch comme base de données vectorielle. 

 

Segmentation des documents

La taille et la structure des pages Web varient considérablement. Pour un traitement efficace :

  • Analyse HTML : décomposer les pages HTML en morceaux gérables avec balises HTML (par exemple, <p> pour les paragraphes, <div> pour les sections).
  • Extraction de contenu : extraire des contenus significatifs tels que le texte principal, les titres et les données structurées.
Stratégie de découpage
  • Par URL : traiter chaque URL comme un document distinct. Cette méthode est simple et utile pour les sites Web dont chaque page est relativement petite et autonome.
  • Par section de page : segmenter les documents en sections pertinentes (articles, articles de blog, par exemple). Cette approche est bénéfique pour les contenus longs et les sites avec des types de contenus variés.
  • Longueur du contenu: éviter les trop gros morceaux ; concilier granularité pour la pertinence des recherches et performance. Les petits morceaux peuvent améliorer la précision de la recherche, mais augmenter la charge de traitement.
Pipeline de traitement
  • Utiliser des bibliothèques comme Beautiful Soup ou Scrapy pour extraire des données du Web.
  • Normaliser le texte en supprimant les balises HTML et en gérant les problèmes d’encodage.
  • Appliquer des analyseurs spécifiques à la langue (par exemple, stemming, mots vides) pour améliorer la précision de la recherche.
Défis liés à l’ancien code HTML

Lorsque l’indexation Web implique un code HTML plus ancien, cela peut avoir un impact significatif sur la qualité des morceaux extraits pour l’indexation dans Elasticsearch. Voici quelques défis et stratégies d’atténuation :

Incohérences structurelles

Balises et attributs non standard :

  • Le code HTML plus ancien peut utiliser des balises ou des attributs non standard, que les analyseurs modernes peuvent ne pas gérer correctement ou ne pas comprendre entièrement.
  • Cela peut entraîner une extraction incomplète ou incorrecte des morceaux de contenu, surtout si le robot d’indexation s’appuie sur des bibliothèques d’analyse HTML standard.

Éléments imbriqués ou obsolètes :

  • L’ancien HTML inclut souvent des éléments imbriqués ou des balises obsolètes comme <font>, <center> ou <strike>, qui peuvent ne pas être correctement analysés par les analyseurs HTML modernes.
  • Par conséquent, la segmentation de contenu en fonction de ces éléments peut produire des morceaux fragmentés ou mal structurés.

Qualité et pertinence du contenu

Style et formatage en ligne :

  • Le HTML plus ancien peut s’appuyer fortement sur des balises de style et de formatage en ligne (<font>, <b>, <i>, etc.), ce qui peut encombrer le texte extrait et réduire la qualité des morceaux indexés.
  • La qualité de la recherche peut être affectée par l’analyse et l’indexation de ces morceaux par Elasticsearch, ce qui risque de nuire à la pertinence des résultats de recherche.

Structure de document incohérente :

  • L’absence d’une structure de document normalisée dans les anciennes pages HTML peut entraîner des incohérences dans la taille des morceaux et les segments de contenu.
  • En raison de cette incohérence, il devient difficile de délimiter clairement les sections de contenu pertinentes, ce qui affecte la granularité des segments et la pertinence de la recherche.

Défis techniques

Problèmes d’encodage et de caractères :

  • Les pages HTML plus anciennes peuvent présenter des problèmes d’encodage, tels que les jeux de caractères ou les entités incorrects (&nbsp;, &lt;), qui doivent être traités correctement lors de l’extraction du texte.
  • Un traitement incorrect de ces éléments peut entraîner un texte brouillé ou une représentation incorrecte du contenu dans les morceaux indexés.

Script et contenu dynamique :

  • Les éléments dynamiques et les scripts intégrés dans les pages HTML plus anciennes (par exemple, JavaScript ou Flash) peuvent ne pas être traités efficacement par les robots d’indexation Web les plus simples.
  • Cela peut entraîner une extraction incomplète du contenu ou l’omission du texte généré dynamiquement, affectant l’exhaustivité des segments indexés.

Stratégies d’atténuation

Pour atténuer l’impact de l’ancien code HTML sur la qualité des morceaux lors de l’indexation par Elasticsearch, envisagez les stratégies suivantes :

  • Utiliser des bibliothèques d’analyse robustes : utiliser des bibliothèques d’analyse HTML avancées, capables de gérer diverses versions HTML et des éléments non standard.
  • Normaliser le texte : pré-traiter le texte extrait pour normaliser la mise en forme et supprimer les balises ou les attributs inutiles.
  • Nettoyer le contenu : filtrer les éléments non pertinents ou obsolètes lors du processus d’extraction afin d’améliorer la qualité des morceaux indexés.
  • Adapter la logique d’extraction : développer une logique personnalisée pour gérer les particularités des anciennes pages HTML, afin de garantir une segmentation plus précise en morceaux de contenu significatifs.
  • Mises à jour régulières : maintenir la logique du robot d’indexation et les bibliothèques d’analyse pour s’adapter à l’évolution des normes Web et des pratiques HTML au fil du temps.

En relevant ces défis de manière proactive, vous pouvez améliorer la qualité des morceaux de contenu extraits des pages HTML plus anciennes, donc l’efficacité globale et la pertinence des applications de recherche basées sur Elasticsearch.

Indexation des PDF

Extraction de contenu PDF

  • Extraire le texte des PDF en tenant compte d’éléments tels que les titres, les paragraphes et les tableaux.
  • Gérer les métadonnées (titre, auteur, date) séparément pour l’indexation.

Stratégie de découpage

  • Par document : traiter chaque fichier PDF comme un document unique à des fins d’indexation.
  • Par page : vous pouvez également diviser les PDF en morceaux en fonction des pages ou des sections logiques, si nécessaire.
  • Blocs de texte : diviser les grands morceaux de texte en unités plus petites selon la segmentation naturelle du contenu (par exemple, paragraphes).

Extraction de texte : défis, faits et mythes

  • Fait : les fichiers PDF peuvent contenir des images ou des documents numérisés, nécessitant l’OCR (reconnaissance optique de caractères) pour l'extraction du texte. Watsonx Discovery possède bien une fonction OCR, cela ne devrait donc pas poser de problème.
  • Traiter les problèmes de codage et de formatage du texte propres aux PDF (par exemple, césure, retour à la ligne).

Pipeline d’indexation

  • Normaliser le texte extrait en supprimant les caractères spéciaux et en gérant les césures.
  • Appliquer des analyseurs spécifiques à une langue sur le texte traité pour améliorer les capacités de recherche.
Remarques

Considérations générales

  • Performance : équilibrer la taille des morceaux pour une indexation et une performance de requêtes efficaces.
  • Pertinence : veiller à ce que les morceaux captent des segments de contenu significatifs pour obtenir des résultats de recherche précis.
  • Frais d’indexation : tenir compte des frais liés à l’indexation des grands volumes de données ; optimiser les paramètres d’indexation et l’allocation des partitions dans Elasticsearch.
  • Qualité de la recherche : tester et affiner les requêtes de recherche pour s’assurer qu’elles fournissent des résultats pertinents dans les documents découpés.

Choisir une méthode de découpage

  • Caractéristiques du contenu : pour les messages courts, un découpage en phrases peut suffire. Pour les documents longs, envisager un découpage contextuel, voire un découpage hétérogène avec des morceaux de tailles variées.
  • Exigences de l’application : si l’efficacité computationnelle est primordiale, le découpage à taille fixe peut constituer un bon point de départ. Si une récupération riche en contexte est cruciale, le découpage contextuel est une meilleure option.

En résumé, la meilleure stratégie de découpage pour utiliser Elasticsearch à des fins d’indexation Web ou PDF consiste à diviser le contenu en unités gérables (documents, pages, sections), qui concilient granularité et efficacité en matière d’indexation et de requêtes. Affinez la stratégie en fonction de la nature de la source de contenu (pages Web ou PDF, par exemple) et des exigences spécifiques de votre application de recherche. En appliquant ces méthodes, vous pourrez améliorer la performance et la précision de votre moteur de recherche, afin d’offrir aux utilisateurs des résultats plus pertinents et plus précis.

Comparaison des méthodes de découpage

Avantages Simplicité, facilité de gestion

 

Cas d’utilisation :

 
  • <b style=" font-family: inherit; ">Websites with small, self-contained pages:<span style=" font-family: inherit; "> Il est facile de gérer chaque URL comme un document distinct.
  • Situations où chaque URL représente un document distinct : Assure la clarté et la simplicité dans la gestion des documents.
Avantages Granularité améliorée, pertinence accrue des requêtes de recherche

 

Cas d’utilisation : 

- Sites Web à contenu volumineux : améliore la pertinence de la recherche en segmentant les articles ou les posts volumineux.

  - Sites avec divers types de contenu : permet une meilleure organisation et une meilleure récupération des contenus variés.

 

Avantages Équilibre entre granularité et performance, précision de recherche améliorée

 

Cas d’utilisation : 

Sites Web riches en contenu : garantit que les morceaux ne sont pas trop volumineux, améliorant ainsi la précision et la performance des recherches.

Sites Web pour lesquels les morceaux extrêmement volumineux ne sont pas souhaitables : concilie le besoin d’une indexation détaillée et performance.

Avantages Efficacité en calcul, performance prévisible

 

Cas d’utilisation : 

- Applications avec des exigences élevées d’efficacité computationnelle : performance prévisible et utilisation des ressources.

- Tâches de traitement de données standardisées : convient aux environnements où uniformiser la taille des morceaux est bénéfique.

Avantages Contrôle précis du contenu, résultats de recherche hautement pertinents

 

Cas d’utilisation : 

 

- Indexation des messages courts : idéale pour une recherche et une récupération précises dans les textes courts.

- Applications d’analyse de texte : permet une analyse détaillée et la compréhension des segments courts.

Avantages Découpage contextuel, pertinence de la recherche améliorée

 

Cas d’utilisation : 

- Documents longs au contenu varié : permet de s’assurer que les morceaux conservent un contexte significatif.

- Analyse détaillée du contenu : améliore la qualité des résultats de recherche en préservant le contexte.

Avantages Segmentation logique, lisibilité améliorée

 

Cas d’utilisation :

- Indexation PDF : traite chaque page comme une unité logique, améliorant la lisibilité et la recherche.

- Documents dont chaque page est une unité distincte : préserve l’intégrité du contenu des pages.

 

Avantages Pauses naturelles dans le contenu, une meilleure gestion du contenu structuré

 

Cas d’utilisation : 

- Documents volumineux avec des paragraphes bien délimités : facilite la lecture et le traitement.

- Indexation structurée des documents : veille à ce que les sections significatives soient indexées séparément.

Solutions IBM

Découpage dans watsonx

La plateforme IBM watsonx facilite et accélère la mise en œuvre des schémas RAG et permet de découper et de comprendre les documents.  watsonx Orchestrate et watsonx Discovery permettent de découper les documents, du low code/no-code aux implémentations plus personnalisées. 

Les méthodes énumérées sont des considérations courantes des techniques de découpage à mettre en œuvre dans un cas d’utilisation de la RAG. La technique hybride est disponible sur watsonx pour améliorer la précision et la rapidité. Le processus global divise le document en phrases afin de garantir une granularité significative. Ensuite, les phrases sont regroupées en morceaux à l’aide d’un LLM. Le LLM évalue si le contexte de la phrase correspond au morceau ; sinon, un nouveau morceau est créé. À partir de ce morceau, les métadonnées significatives sont extraites à l’aide du LLM, notamment le titre, l’identifiant et le résumé.

Pour plus d’informations sur cette méthode, veuillez consulter cet article du blog d’IBM : https://developer.ibm.com/articles/awb-enhancing-llm-performance-document-chunking-with-watsonx/

Outils open source

Découpage syntaxique

Le découpage syntaxique utilise une approche guidée par la structure pour séparer le texte en fonction du formatage du document. Le plus souvent et naturellement, les titres de section sont utilisés comme séparateurs. Cependant, avec les formats de documents sans informations encodées (par exemple, PDF), la taille des polices peut être utilisée comme marqueur pour séparer les morceaux.

Points forts :

  • Une implémentation simple

Limites :

  • L’algorithme suppose l’existence d’une hiérarchie informationnelle ; par conséquent, des marqueurs syntaxiques peuvent être omis.

Le découpage syntaxique peut être bénéfique dans des situations où la structure topologique du document est prévisible et bien formatée pour le partitionnement.

Découpage à taille fixe

Dans le cas du découpage à taille fixe, les données d’entrée sont divisées en morceaux de taille égale. Cette méthode sépare souvent le texte en tailles prédéfinies en fonction du nombre de tokens. Cette méthode est simple à mettre en œuvre et à comprendre, ce qui la rend adaptée aux tâches où les données d’entrée ont une taille constante et prévisible.

Points forts :

  • Facile à mettre en œuvre et à comprendre
  • Efficace en calcul

Limites :

  • Rigide et incapable de s’adapter au contexte
  • Peut omettre des informations contextuelles importantes dans le texte

Le découpage à taille fixe est préférable dans les cas où les données d’entrée sont prévisibles et ne nécessitent pas un contexte approfondi.

from langchain.text_splitter import CharacterTextSplitter

# Example text
text = "The quick brown fox jumps over the lazy dog."

# Create a splitter for fixed size chunks
splitter = CharacterTextSplitter(chunk_size=10, chunk_overlap=0)

# Split the text
chunks = splitter.split(text)

# Print the chunks
for chunk in chunks:
 print(chunk)

Découpage sémantique

Le découpage sémantique sépare le texte selon le contexte et regroupe les composants significatifs à l’aide de techniques algorithmiques. Le découpage sémantique est important lorsque le sens du contenu est essentiel pour fournir une réponse, comme la documentation juridique.

Points forts :

  • Les données récupérées sont plus précises et plus pertinentes
  • Cohésion de la base de connaissances maintenue lors du découpage

Limites :

  • Mise en œuvre complexe avec des algorithmes sophistiqués
  • Plus complet en termes de calcul

Exemple :

from langchain.text_splitter import RecursiveCharacterTextSplitter

# Example text
text = "Steve Jobs was born in California. He co-founded Apple in 1976."

# Create a splitter for semantic chunking
splitter = RecursiveCharacterTextSplitter(chunk_size=50, chunk_overlap=10)

# Split the text
chunks = splitter.split(text)

# Print the chunks
for chunk in chunks:
 print(chunk)

Le découpage hybride utilise à la fois des informations contextuelles et structurelles pour combiner les avantages du découpage en morceaux de taille fixe et du découpage sémantique. Cette méthode est particulièrement adaptée aux situations où un vaste corpus de données couvre plusieurs cas d’utilisation, avec un formatage et un matériel variés, comme dans le cas d’une base de connaissances d’entreprise.

Points forts :

  • Précision et rapidité optimales grâce à des techniques de découpage flexibles basées sur la structure et le contexte de la base de connaissances

Limites :

  • Plus de maintenance et d’efforts de mise en œuvre en raison des exigences élevées en matière de ressources

Exemple :

from langchain.text_splitter import CharacterTextSplitter, RecursiveCharacterTextSplitter

# Example text
text = "Steve Jobs was born in California. He co-founded Apple in 1976."

# Fixed-size splitter
fixed_size_splitter = CharacterTextSplitter(chunk_size=50, chunk_overlap=10)
fixed_size_chunks = fixed_size_splitter.split(text)

# Semantic splitter
semantic_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20)
semantic_chunks = semantic_splitter.split(text)

# Print the fixed-size chunks
print("Fixed-size chunks:")
for chunk in fixed_size_chunks:
 print(chunk)

# Print the semantic chunks
print("\nSemantic chunks:")
for chunk in semantic_chunks:
 print(chunk)

Découpage agentique

Cette stratégie de découpage consiste à utiliser de grands modèles de langage (LLM) pour déterminer la longueur et le contenu appropriés des morceaux de texte en fonction du contexte dans lequel ils seront utilisés. Cette stratégie s'inspire du concept de proposition, qui consiste à extraire des énoncés autonomes d’un texte brut.

Pour mettre en œuvre cette approche, la stratégie utilise un modèle de récupération propositionnelle fourni par Langchain pour extraire les propositions du texte. Ces propositions sont ensuite transmises à un agent basé sur un LLM, qui détermine si chaque proposition doit être incluse dans un morceau existant, ou si un nouveau morceau doit être créé.

L’agent basé sur LLM s’appuie sur divers facteurs pour prendre cette décision, notamment la pertinence de la proposition pour le morceau actuel, la cohérence globale de ce dernier, ainsi que les objectifs et les intentions du modèle. En exploitant les LLM de cette manière, la stratégie vise à générer des morceaux de texte qui sont non seulement cohérents et adaptés au contexte, mais également alignés sur les objectifs et les intentions du modèle.

Points forts :

  • Autonomie : les LLM peuvent décider quelles propositions inclure dans un morceau et quand en créer un nouveau sans intervention humaine, ce qui permet de générer des textes de manière plus efficace et plus évolutive.
  • Cohérence : les LLM sont conçus pour générer des textes cohérents et adaptés au contexte, ce qui permet de garantir que les morceaux générés sont significatifs et faciles à comprendre.

Limites :

  • Coût de calcul élevé : la génération de texte à l’aide de LLM peut s’avérer coûteuse en termes de calcul, surtout dans le cas des modèles volumineux ou complexes. Cela peut limiter l’évolutivité et la facilité d’utilisation des LLM pour certaines applications.
  • Hallucinations : cela peut se produire lorsque le modèle génère un texte en se basant sur ses propres biais ou hypothèses internes, et non sur les données ou le contexte réels.

Alors, comment mettre en œuvre certaines de ces techniques pour découper la documentation ? De nombreuses bibliothèques open source permettent d’exécuter ces algorithmes et ces techniques de découpage. Un bon point de départ consiste à utiliser les séparateurs de texte Langchain ; reportez-vous à la documentation suivante sur les séparateurs de texte disponibles. https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/

Étapes suivantes

Accédez aux modèles technologiques, architectures de solutions et publications sur le thème de l’architecture les plus récents d’IBM.

  1. Accéder au Centre d’architecture IBM
Contributeurs

Haneen Bakbak, Luke Major

Mise à jour : 15 novembre 2024