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.
La taille et la structure des pages Web varient considérablement. Pour un traitement efficace :
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 :
Balises et attributs non standard :
Éléments imbriqués ou obsolètes :
Style et formatage en ligne :
Structure de document incohérente :
Problèmes d’encodage et de caractères :
Script et contenu dynamique :
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 :
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.
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.
Cas d’utilisation :
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.
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.
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.
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.
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.
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.
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/
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 :
Limites :
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.
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 :
Limites :
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)
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 :
Limites :
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 :
Limites :
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)
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 :
Limites :
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/
Mise à jour : 15 novembre 2024