Entdecken Sie weitere Angebote des RAG Cookbook, um einen tieferen Einblick in die heutigen RAG-Lösungen zu gewinnen

Ein neu eingefärbter Leadspace, der auf dem Leadspace „Watson for Customer Care“ basiert.
Überblick

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. 

 

Dokumentsegmentierung

Webseiten unterscheiden sich stark in Größe und Struktur. Für eine effiziente Verarbeitung:

  • HTML-Parsing: Zerlegen Sie HTML-Seiten in handhabbare Abschnitte basierend auf HTML-Tags (z. B. <p> für Absätze, <div> für Abschnitte).
  • Extraktion von Inhalten: Konzentrieren Sie sich auf das Extrahieren sinnvoller Inhalte wie Haupttext, Überschriften und strukturierte Daten.
Chunking-Strategie
  • Nach URL: Behandeln Sie jede URL als separates Dokument. Diese Methode ist einfach und nützlich für Websites, bei denen jede Seite relativ klein und in sich abgeschlossen ist.
  • Nach Seitenabschnitten: Segmentieren Sie Dokumente nach aussagekräftigen Abschnitten (z. B. Artikel, Blogbeitrag). Dieser Ansatz ist vorteilhaft für Langform-Inhalte und Seiten mit unterschiedlichen Inhaltstypen.
  • Länge des Inhalts: Vermeiden Sie extrem große Brocken; balancieren Sie zwischen Granularität für Suchrelevanz und Leistung. Kleinere Chunks können die Suchgenauigkeit verbessern, könnten aber den Verarbeitungsaufwand erhöhen.
Verarbeitungspipeline
  • Verwenden Sie Bibliotheken wie Beautiful Soup oder Scrapy für Web-Scraping.
  • Normalisieren Sie Text, indem Sie HTML-Tags entfernen und Codierungsprobleme beheben.
  • Verwenden Sie sprachspezifische Analysatoren (z. B. Stemming, Stopwords), um die Suchgenauigkeit zu verbessern.
Herausforderungen mit älterem HTML-Code

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:

Strukturelle Inkonsistenzen

Nicht-Standard-Tags und Attribute:

  • Älterer HTML-Code kann nicht standardisierte Tags oder Attribute verwenden, die moderne Parser möglicherweise nicht korrekt oder vollständig verstehen.
  • Dies kann zu unvollständiger oder fehlerhafter Extraktion von Inhaltschunks führen, insbesondere wenn der Crawler auf Standard-HTML-Parsing-Bibliotheken angewiesen ist.

Verschachtelte und veraltete Elemente:

  • Altes HTML enthält oft verschachtelte Elemente oder veraltete Tags wie <font>, <center> oder <strike>, die von modernen HTML-Parsern möglicherweise nicht korrekt interpretiert werden.
  • Infolgedessen kann die Inhaltssegmentierung auf Basis dieser Elemente fragmentierte oder falsch strukturierte Abschnitte erzeugen.

Inhaltsqualität und Relevanz

Inline-Styling und Formatierung:

  • Älteres HTML verlässt sich stark auf Inline-Styling und Formatierungs-Tags (<font>, <b>, <i> usw.), was den extrahierten Text überladen und die Qualität der indexierten Chunks mindern kann.
  • Die Suchqualität kann darunter leiden, da Elasticsearch diese Teile analysiert und indexiert, was sich möglicherweise auf die Relevanz der Suchergebnisse auswirkt.

Inkonsistente Dokumentenstruktur:

  • Das Fehlen einer standardisierten Dokumentstruktur in älteren HTML-Seiten kann zu inkonsistenten Chunk-Größen und Inhaltssegmenten führen.
  • Diese Inkonsistenz erschwert es, klare Grenzen zwischen sinnvollen Inhaltsabschnitten festzulegen, was sich auf die Granularität der Abschnitte und die Suchrelevanz auswirkt.

Technische Herausforderungen

Kodierungs- und Zeichenprobleme:

  • Ältere HTML-Seiten können Kodierungsprobleme aufweisen, wie z. B. falsche Zeichensätze oder Entitäten (&nbsp;, &lt;), die bei der Textextraktion korrekt behandelt werden müssen.
  • Wenn diese nicht korrekt gehandhabt werden, kann dies zu verzerrtem Text oder einer fehlerhaften Darstellung von Inhalten in indexierten Chunks führen.

Skript und dynamische Inhalte:

  • Dynamische Elemente und Skripte, die in ältere HTML-Seiten (z. B. JavaScript, Flash) eingebettet sind, werden von einfachen Webcrawlern möglicherweise nicht effektiv verarbeitet.
  • Dies kann zu einer unvollständigen Extraktion von Inhalten oder zum Weglassen von dynamisch generiertem Text führen, was sich auf die Vollständigkeit der indexierten Abschnitte auswirkt.

Strategien zur Schadensbegrenzung

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:

  • Robuste Parsing-Bibliotheken verwenden: Verwenden Sie fortschrittliche HTML-Parsing-Bibliotheken, die verschiedene HTML-Versionen und nicht standardisierte Elemente verarbeiten können.
  • Text normalisieren: Verarbeiten Sie extrahierten Text vor, um die Formatierung zu normalisieren und unnötige Tags oder Attribute zu entfernen.
  • Inhalt bereinigen: Filtern Sie irrelevante oder veraltete Elemente während des Extraktionsprozesses heraus, um die Qualität der indizierten Chunks zu verbessern.
  • Anpassung der Extraktionslogik: Entwickeln Sie eine benutzerdefinierte Logik zur Behandlung spezifischer Eigenheiten älterer HTML-Seiten, um eine genauere Segmentierung in aussagekräftige Inhaltsblöcke zu gewährleisten.
  • Regelmäßige Aktualisierungen: Pflegen Sie die Crawler-Logik und die Parsing-Bibliotheken, um sich im Laufe der Zeit an Änderungen der Webstandards und HTML-Praktiken anzupassen.

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.

Indexierung von PDFs

Extraktion von PDF-Inhalten

  • Extrahieren Sie Text aus PDFs und berücksichtigen Sie Elemente wie Überschriften, Absätze und Tabellen.
  • Metadaten (Titel, Autor, Datum) müssen für die Indexierung separat behandelt werden.

Chunking-Strategie

  • Nach Dokument: Jede PDF-Datei wird bei der Indizierung als einzelnes Dokument behandelt.
  • Nach Seite: Alternativ können Sie PDFs bei Bedarf auch nach Seiten oder logischen Abschnitten unterteilen.
  • Textblöcke: Unterteilen Sie große Textabschnitte in kleinere Einheiten, die auf natürlichen Unterbrechungen im Inhalt basieren (z.B. Absätze).

Herausforderungen, Fakten und Mythen der Textextraktion

  • Fakt: PDFs können Bilder oder gescannte Dokumente enthalten, was OCR (Optical Character Recognition) für die Textextraktion erfordert. Watsonx Discovery verfügt über OCR, daher sollte dies kein Problem darstellen.
  • Beheben Sie Probleme bei der Textkodierung und -formatierung, die speziell bei PDFs auftreten (z. B. Silbentrennung, Zeilenumbrüche).

Indizierungs-Pipeline

  • Normalisieren Sie den extrahierten Text, indem Sie Sonderzeichen entfernen und die Silbentrennung behandeln.
  • Wenden Sie sprachspezifische Analysatoren auf verarbeiteten Text an, um die Suchfunktionen zu verbessern.
Überlegungen

Allgemeine Überlegungen

  • Leistung: Balancieren Sie die Chunk-Größe für eine effiziente Indizierung und Abfrageleistung.
  • Relevanz: Stellen Sie sicher, dass die Chunks aussagekräftige Inhaltssegmente für genaue Suchergebnisse erfassen.
  • Indexierungsaufwand: Berücksichtigen Sie den Aufwand für die Indexierung großer Datenmengen; optimieren Sie die Indexierungseinstellungen und die Shard-Zuordnung in Elasticsearch.
  • Suchqualität: Testen und verfeinern Sie Suchanfragen, um sicherzustellen, dass sie relevante Ergebnisse in allen aufgeteilten Dokumenten liefern.

Auswahl einer Chunking-Methode

  • Inhaltsmerkmale: Für kurze Nachrichten kann eine Unterteilung auf Satzebene ausreichend sein. Bei langen Dokumenten empfiehlt sich inhaltsbasiertes Chunking oder sogar heterogenes Chunking mit einer Mischung aus Chunk-Größen.
  • Anwendungsanforderungen: Wenn die Recheneffizienz von größter Bedeutung ist, könnte Fixed-Size-Chunking ein guter Ausgangspunkt sein. Wenn eine kontextreiche Abfrage entscheidend ist, ist inhaltsbezogenes Chunking eine bessere Option.

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.

Vergleich von Chunking-Methoden

Vorteile Einfachheit, leichte Handhabung

 

Anwendungsfälle:

 
  • <b style=" font-family: inherit; ">Websites mit kleinen, eigenständigen Seiten:<span style=" font-family: inherit; "> Jede URL lässt sich einfach als separates Dokument verwalten.
  • Situationen, in denen jede URL ein separates Dokument repräsentiert: Gewährleistet Klarheit und Einfachheit bei der Dokumentenverwaltung.
Vorteile Verbesserte Granularität, höhere Relevanz für Suchanfragen

 

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.

 

Vorteile Gleichgewicht zwischen Granularität und Leistung, verbesserte Suchgenauigkeit

 

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.

Vorteile Recheneffizienz, Vorhersagbare 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.

Vorteile Feingranulare Kontrolle über Inhalte, hochrelevante Suchergebnisse

 

Anwendungsfälle: 

 

- Kurznachrichtenindexierung: Ideal für präzise Suche und Abruf in kurzen Texten.

- Textanalyse-Anwendungen: Ermöglicht eine detaillierte Analyse und das Verständnis kurzer Segmente.

Vorteile Kontextsensitive Segmentierung verbessert die Suchrelevanz

 

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.

Vorteile Logische Segmentierung, verbesserte Lesbarkeit

 

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.

 

Vorteile Natürliche Inhaltsunterbrechungen, bessere Handhabung strukturierter Inhalte

 

Anwendungsfälle: 

- Große Dokumente mit klaren Absatzumbrüchen: Erleichtert das Lesen und Verarbeiten.

- Strukturierte Indizierung von Dokumenten: Stellt sicher, dass sinnvolle Abschnitte separat indiziert werden.

IBM Lösungen

Chunking in watsonx

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/

Open-Source-Tools

Syntaktische Segmentierung

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:

  • Einfache Implementierung

Begrenzungen:

  • Der Algorithmus geht von einer Informationshierarchie aus; daher können syntaktische Marker übersehen werden

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.

Feste Größenaufschlüsselung

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:

  • Einfach umzusetzen und zu verstehen
  • Rechnerisch effizient

Begrenzungen:

  • Starr und nicht an den Textkontext anpassbar
  • Kann wichtige kontextuelle Informationen im Text auslassen

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)

Semantisches Chunking

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:

  • Abgerufene Daten haben eine höhere Genauigkeit und Relevanz
  • Kohärenz der Wissensbasis wird in Chunking gewahrt

Begrenzungen:

  • Komplexe Implementierung mit anspruchsvollen Algorithmen
  • Rechnerisch umfangreicher

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:

  • Optimale Genauigkeit und Geschwindigkeit mit flexiblen Chunking-Techniken basierend auf der Struktur und dem Kontext der Wissensdatenbank

Begrenzungen:

  • Mehr Wartung und Aufwand bei der Implementierung aufgrund des hohen Ressourcenbedarfs

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)

Agentisches Chunking

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:

  • Autonomie: LLMs können Entscheidungen darüber treffen, welche Vorschläge in einen Chunk aufgenommen werden und wann ein neuer Chunk erstellt wird, ohne menschliches Eingreifen, was eine effizientere und skalierbarere Textgenerierung ermöglicht.
  • Kohärenz: LLMs sind so konzipiert, dass sie kohärente und kontextbezogene Texte erzeugen, was dazu beitragen kann, dass die generierten Textbausteine sinnvoll und leicht verständlich sind.

Begrenzungen:

  • Rechentechnisch erschöpfend: Die Texterzeugung mit LLMs kann rechnerisch aufwendig sein, insbesondere bei großen oder komplexen Modellen. Dies kann die Skalierbarkeit und Praktikabilität der Verwendung von LLMs für bestimmte Anwendungen einschränken.
  • Halluzinationen: Dies kann auftreten, wenn das Modell Texte auf der Grundlage eigener interner Verzerrungen oder Annahmen generiert, anstatt auf der Grundlage der tatsächlichen Daten oder des Kontextes.

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/

Nächste Schritte

Erhalten Sie die neuesten Technologiemuster, Lösungsarchitekturen und Architekturveröffentlichungen von IBM.

  1. Besuchen Sie das IBM Architecture Center
Beitragende

Haneen Bakbak, Luke Major

Aktualisiert: 15. November 2024