Im Bereich des Web-Crawlings und der Dokumentenindizierung sind effektive Chunking-Methoden entscheidend für die Optimierung der Suchleistung und -relevanz. Bei der Suche mit HTML-Webseiten oder PDFs kann die gewählte Strategie die Effizienz und Genauigkeit Ihrer Suchanwendung erheblich beeinflussen. Hier finden Sie einen umfassenden Leitfaden für effektive Chunking-Methoden unter verschiedenen Umständen, insbesondere im Zusammenhang mit der Verwendung von Elasticsearch als Vektorspeicher.
Webseiten unterscheiden sich stark in Größe und Struktur. Für eine effiziente Verarbeitung:
Wenn Webcrawling älteren HTML-Code verwendet, kann dies die Qualität der für die Indexierung in Elasticsearch extrahierten Chunks erheblich beeinflussen. Hier sind einige zentrale Herausforderungen und Strategien:
Nicht-Standard-Tags und Attribute:
Verschachtelte und veraltete Elemente:
Inline-Styling und Formatierung:
Inkonsistente Dokumentenstruktur:
Kodierungs- und Zeichenprobleme:
Skript und dynamische Inhalte:
Um die Auswirkungen von altem HTML-Code auf die Chunk-Qualität beim Web-Crawling für die Elasticsearch-Indexierung zu minimieren, sollten Sie folgende Strategien in Betracht ziehen:
Indem Sie diese Herausforderungen proaktiv bewältigen, können Sie die Qualität der von älteren HTML-Seiten extrahierten Inhaltsabschnitte verbessern und so die Gesamtwirksamkeit und Relevanz von Elasticsearch-basierten Suchanwendungen steigern.
Zusammenfassend besteht die beste Chunking-Strategie für die Nutzung von Elasticsearch mit Webcrawling oder PDF-Indexierung darin, Inhalte in handhabbare Einheiten (Dokumente, Seiten, Abschnitte) zu unterteilen, die Granularität mit Effizienz bei Indexierung und Abfragen in Einklang bringen. Passen Sie die Strategie an die Art der Inhaltsquelle (z.B. Webseiten vs. PDFs) und die spezifischen Anforderungen Ihrer Suchanwendung an. Durch die Implementierung dieser Methoden können Sie die Leistung und Genauigkeit Ihrer Suchmaschine verbessern und Nutzern relevantere und genauere Ergebnisse liefern.
Anwendungsfälle:
Anwendungsfälle:
- Websites mit langen Inhalten: Verbessert die Suchrelevanz durch die Segmentierung umfangreicher Artikel oder Beiträge.
- Websites mit verschiedenen Inhaltstypen: Ermöglicht eine bessere Organisation und ein besseres Auffinden von verschiedenen Inhalten.
Anwendungsfälle:
- Inhaltsintensive Websites: Sorgt dafür, dass die Chunks nicht zu groß sind, und verbessert so die Suchpräzision und Leistung.
- Websites, bei denen extrem große Chunks nicht erwünscht sind: Sorgt für ein Gleichgewicht zwischen der Notwendigkeit einer detaillierten Indizierung und der Leistung.
Anwendungsfälle:
- Anwendungen mit hohen Anforderungen an die Berechnungseffizienz: Vorhersehbare Leistung und Ressourcennutzung.
- Standardisierte Datenverarbeitungsaufgaben: Geeignet für Umgebungen, in denen einheitliche Chunk-Größen von Vorteil sind.
Anwendungsfälle:
- Lange Dokumente mit unterschiedlichem Inhalt: Sorgt dafür, dass die Teile einen sinnvollen Kontext behalten.
- Detaillierte Inhaltsanalyse: Verbessert die Qualität der Suchergebnisse, indem der Kontext erhalten bleibt.
Anwendungsfälle:
- PDF-Indizierung: Behandelt jede Seite als logische Einheit und verbessert so die Lesbarkeit und Durchsuchbarkeit.
- Dokumente, bei denen jede Seite eine eigene Einheit bildet: Bewahrt die Integrität des seitenbasierten Inhalts.
Die IBM Watsonx-Plattform ermöglicht und beschleunigt die Implementierung von RAG-Mustern und erlaubt die Aufteilung und das Verständnis von Dokumenten. Die Kombination von watsonx Orchestrate und watsonx Discovery ermöglicht die Aufteilung von Dokumenten in Chunking-Elemente – von Low-Code/No-Code-Lösungen bis hin zu individuelleren Implementierungen.
Die aufgeführten Methoden sind gängige Überlegungen zu Chunking-Techniken, die in einem RAG-Anwendungsfall implementiert werden können. Die Hybridtechnik ist bei WatsonX verfügbar und bietet eine höhere Genauigkeit und Geschwindigkeit. Der Gesamtprozess teilt ein Dokument in einzelne Sätze auf, um eine sinnvolle Granularität zu gewährleisten. Anschließend werden die Sätze mithilfe eines LLM in Blöcke gruppiert. Das LLM prüft, ob der Kontext des Satzes zu dem Chunk passt, andernfalls wird ein neuer Chunk initiiert. Aus diesem Datenblock werden mithilfe des LLMs aussagekräftige Metadaten extrahiert; dazu gehören Titel, ID und Zusammenfassung.
Weitere Informationen zu dieser Methode finden Sie in diesem IBM Blog: https://developer.ibm.com/articles/awb-enhancing-llm-performance-document-chunking-with-watsonx/
Syntaktisches Chunking verwendet einen strukturgeleiteten Ansatz zur Trennung von Text auf der Grundlage der Dokumentformatierung. Am häufigsten und natürlichsten werden Abschnittsüberschriften als Trennzeichen verwendet. Bei Dokumentformaten ohne kodierte Informationen (z. B. PDF) kann die Schriftgröße jedoch als Markierung verwendet werden, um einzelne Abschnitte zu trennen.
Stärken:
Begrenzungen:
Die syntaktische Segmentierung kann in Fällen von Vorteil sein, in denen die topologische Struktur des Dokuments vorhersehbar und sauber für die Partitionierung formatiert ist.
Beim Chunking mit fester Größe werden die Eingabedaten in gleich große Chunks unterteilt. Bei dieser Methode wird der Text oft anhand der Anzahl der Token in vordefinierte Größen unterteilt. Diese Methode ist einfach zu implementieren und zu verstehen und eignet sich daher für Aufgaben, bei denen die Eingabedaten eine konsistente und vorhersehbare Größe haben.
Stärken:
Begrenzungen:
Die Verwendung von Chunking mit fester Größe eignet sich am besten für Fälle, in denen die Eingabedaten vorhersehbar sind und keinen ausführlichen Kontext benötigen.
von 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)
Semantic Chunking trennt Text basierend auf Kontext und gruppiert sinnvolle Komponenten mithilfe algorithmischer Techniken. Semantisches Chunking ist wichtig, wenn die Bedeutung des Inhalts für die Erstellung einer Antwort entscheidend ist, wie z. B. bei einer Rechtsdokumentation.
Stärken:
Begrenzungen:
Beispiel:
von 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)
Hybrides Chunking verwendet sowohl kontextuelle als auch strukturelle Informationen für kombinierte Stärken aus dem Chunking mit fester Größe und dem semantischen Chunking. Diese Methode eignet sich am besten für Situationen, in denen ein großer Datenbestand über verschiedene Anwendungsfälle hinweg mit unterschiedlichem Format und Material vorliegt, wie beispielsweise eine unternehmensweite Wissensdatenbank.
Stärken:
Begrenzungen:
Beispiel:
von 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)
Bei dieser Chunking-Strategie werden große Sprachmodelle (LLMs) verwendet, um die angemessene Länge und den Inhalt von Textblöcken auf der Grundlage des Kontextes zu bestimmen, in dem sie verwendet werden. Die Strategie ist vom Konzept der Propositionen inspiriert, bei dem es darum geht, aus einem Rohtext eigenständige Aussagen zu extrahieren.
Zur Umsetzung dieses Ansatzes verwendet die Strategie eine von Langchain zur Verfügung gestellte propositionale Retrieval-Vorlage, um Propositionen aus dem Text zu extrahieren. Diese Propositionen werden dann an einen LLM-basierten Agenten weitergegeben, der bestimmt, ob jede Proposition in einen bestehenden Chunk aufgenommen werden soll oder ob ein neuer Chunk erstellt werden soll.
Der LLM-basierte Agent verwendet eine Vielzahl von Faktoren, um diese Entscheidung zu treffen, einschließlich der Relevanz des Angebots für den aktuellen Teil, der Gesamtkohärenz des Blocks und der Ziele und Absichten des Modells. Durch den Einsatz von LLMs auf diese Weise zielt die Strategie darauf ab, Textbausteine zu generieren, die nicht nur kohärent und kontextuell angemessen sind, sondern auch mit den Zielen und Absichten des Modells übereinstimmen.
Stärken:
Begrenzungen:
Wie können wir nun einige dieser Techniken auf die Chunk-Dokumentation anwenden? Es existieren zahlreiche Open-Source-Bibliotheken zur Ausführung dieser Algorithmen und Chunking-Techniken. Ein guter Ausgangspunkt ist die Verwendung von Langchain-Textsplittern; in der folgenden Dokumentation finden Sie Informationen zu den verfügbaren spezifischen Textsplittern. https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/
Aktualisiert: 15. November 2024