Die Datenerfassung ist der Prozess des Parsens von Informationen aus Quelldokumenten, damit diese in einen Suchraum eingebettet und später abgerufen werden können. Während dies bei Klartext ein unkomplizierter Prozess ist, treten Komplikationen auf, wenn die Quelldokumente in Nicht-Text-Formaten vorliegen, z. B. Microsoft Word oder PDF, und wenn sie komplexe Formatierungen wie wiederholende Kopf- und Fußzeilen, Text in mehreren Spalten oder Tabellen enthalten.
Dieser Abschnitt enthält Tipps, Techniken, Beschleuniger und Hinweise auf Assets, die dabei helfen, diese Herausforderungen zu meistern.
Wenn Sie ein Benutzer ohne technische Kenntnisse sind, sind Ihre Dokumente relativ einfach und Sie benötigen eine no-code-Lösung, verwenden Sie Watsonx Orchestrate.
Wenn Sie ein technischer Benutzer sind und Ihre Dokumente relativ einfach sind und Sie Zugriff auf Watson Discovery haben, beginnen Sie dort. Watson Discovery hat eine schöne Benutzeroberfläche, die man mit minimalem Bedarf an Codierung nutzen kann. Bei komplexen Dokumenten können Sie Watson Discovery verwenden, um bestimmte Teile Ihrer Dokumente zu annotieren und zu extrahieren, entweder für Ihre RAG-Backend-Pipeline oder für das Frontend, und um die Texte hervorzuheben, indem Sie die genaue Position eines Absatzes innerhalb Ihrer Dokumente ermitteln.
Watson Discovery hat jedoch seine Grenzen. Wenn Ihre Dokumente größer als 50 MB sind, können Sie sie nicht in Watson Discovery laden. Wenn das Dokument zu komplex ist (z. B. beinhaltet verschachtelte Tabellen oder unregelmäßige Tabellenformate), Watson Discovery erfasst möglicherweise nicht die gesamte Dokumentstruktur. In solchen Fällen sollten Sie eine benutzerdefinierte Pipeline für die Datenaufnahme mit Hilfe von Open-Source-Bibliotheken implementieren.
Im Hinblick auf Open-Source-Bibliotheken sind LangChain und LlamaIndex hinsichtlich ihrer Funktionen bei der Datenaufnahme sehr ähnlich. LangChain wäre jedoch im Hinblick auf Dokumentation und Integration mit Vektordatenbanken und anderen Anwendungen einfacher zu handhaben als LlamaIndex. Sowohl LangChain als auch LlamaIndex verfügen über Hilfsfunktionen, die ein Dokumentobjekt in ein anderes umwandeln können, so dass der Wechsel zwischen LangChain und LlamaIndex an jedem beliebigen Punkt in Ihrer Pipeline erfolgen kann.
Im Folgenden finden Sie einige Lektionen, die wir bei der Aufnahme von Dokumenten mit komplexen Tabellen gelernt haben, sowie verschiedene Ansätze, die bei einem der Aufträge getestet wurden. Bitte beachten Sie, dass einige der Beobachtungen von Engagement zu Engagement unterschiedlich sein können. Die meisten Schlussfolgerungen sollten jedoch für Engagements, die Dokumente mit verschachtelten und komplexen Tabellen umfassen, ähnlich sein.
Watson Discovery unterstützt keine Dokumente, die größer als 50 MB sind. In Fällen, in denen die große Größe darauf zurückzuführen ist, dass die Originaldokumente im Word-Format vorliegen, müssen wir die ursprünglichen Word-Dokumente in PDF konvertieren, um Watson Discovery nutzen zu können. Mit diesem Ansatz gelingt es Watson Discovery jedoch manchmal nicht, Tabellenformate richtig zu erfassen, insbesondere bei komplexen oder verschachtelten Tabellen.
Für die Ingestion mit Watson Discovery können zwei verschiedene Ansätze getestet werden: ein vorab trainiertes Modell und ein Benutzermodell, das durch manuelles Kommentieren einiger Seiten über das Smart Document Understanding von Discovery trainiert wurde. Im Folgenden werden die Erfahrungen mit diesen beiden Ansätzen für einen der Aufträge erörtert, der komplexe verschachtelte Tabellen umfasste.
Obwohl die Ergebnisse von Watson Discovery nicht so genau waren wie andere unten erwähnte benutzerdefinierte Bibliotheken für komplexe und verschachtelte Tabellen, enthielten die Ergebnisse viele Metadaten wie Seitenzahlen und Koordinaten der Texte, die hilfreich sind, um die Highlights für die Benutzeroberfläche darzustellen. Diese Metadaten können sehr hilfreich sein, um beim Abruf zusätzliche Filter hinzuzufügen oder die Dokumente anhand bestimmter HTML-Abschnitte aufzuteilen.
Die PyMuPDF-Bibliothek ist deutlich schneller und liefert genauere Ergebnisse, insbesondere bei größeren Daten. Bei Verwendung der folgenden zwei Funktionen auf einem 50,6 MB großen Datensatz benötigte PyMuPDF 0,131 Sekunden gegenüber 0,366 Sekunden für PypdfLoader von LangChain. Für große Dateien und wenn Sie nicht einzelne Abschnitte des Dokuments extrahieren möchten, verwenden Sie die PyMuPdf-Bibliothek.
def pdf_to_text(path: str,Um die Struktur der Tabellen zu erhalten, geben wir Tabellenelemente aus extrahiertem HTML (mithilfe der Unstructured-Bibliothek) in ein LLM ein (Mixtral ist aufgrund seiner Kontextgröße eine gute Option für lange Tabellen). Anschließend können wir eine Eingabe erstellen, um entweder die Tabellen zusammenzufassen oder Few-Shot-Learning zu verwenden, um die Tabellen in ein Format zu konvertieren, von dem wir denken, dass es für die großen Sprachmodelle verständlicher sein könnte.
Andere Tabellenleserbibliotheken wie Camelot und Tabula wurden ebenfalls getestet, jedoch waren diese Bibliotheken für komplexe Tabellen nicht so genau wie unstrukturierte, und da sie nur Tabellen innerhalb eines Dokuments erkennen, könnte mehr Vorverarbeitung nötig sein, um sinnvolle Chunks für die großen Sprachmodelle zu erstellen.
Zum Abschluss lässt sich sagen, dass Watson Discovery zwar eine einfache und schnelle Möglichkeit wäre, Dokumente aufzunehmen und viele zusätzliche Metadaten zu erfassen, die beim Erstellen der Benutzeroberfläche hilfreich sein können (zum Beispiel zum Markieren der Passagen), aber die „unstrukturierte“ Bibliothek (die sowohl in LlamaIndex als auch in LangChain Wrapper enthält) könnte die komplexen Tabellen innerhalb der Dokumente genauer erfassen als Watson Discovery. Eine Kombination beider Ansätze kann also für Projekte hilfreich sein, die komplexe Tabellen in ihren Dokumenten enthalten.
Die Datenerfassung ohne grafische Benutzeroberfläche kann für Geschäftsanwender schwierig sein, da sie technische Erfahrung und Kenntnisse erfordert. Watsonx Orchestrate beseitigt die Frustration für Geschäftsanwender durch die Implementierung einer Drag-and-Drop-Benutzeroberfläche (UI). Durch Klicken auf den blauen Upload-Button wird die Möglichkeit aktiviert, Dokumente direkt in watsonx Discovery (auch bekannt als Elasticsearch) hochzuladen und zu speichern.
Dadurch können Benutzer ihre Dokumentation direkt in Elasticsearch hochladen, um ihre eigene benutzerdefinierte Wissensdatenbank zu erstellen.
Anstatt die Dokumente direkt in watsonx Discovery zu übertragen, haben Sie auch die Möglichkeit, sich über watsonx Orchestrate mit Watson Discovery zu verbinden. Weitere Details zum Aufnehmen von Daten mit Watson Discovery finden Sie weiter unten.
Eines der anderen internen Tools, das für die Datenerfassung verwendet werden kann, ist Watson Discovery. Watson Discovery ist nicht nur ein reines Aufnahmetool und mit ihm können Sie Ihre unstrukturierten Daten aufnehmen, normalisieren, anreichern und durchsuchen. Das untenstehende Bild zeigt die Kernkomponenten und Funktionen von Watson Discovery.
Wie Sie oben sehen können, ist eine der Kernfunktionen von Watson Discovery das Aufnehmen von strukturierten und unstrukturierten Daten in verschiedenen Formaten wie JSON, HTML, PDF, Word und mehr sowie das intelligente Dokumentenverständnis.
Wenn Sie Watson Discovery in Ihrer Umgebung bereitgestellt haben, können Sie Dokumente einfach aufnehmen, indem Sie zunächst ein Projekt erstellen und dann eine Sammlung erstellen, in der Sie Ihre Daten entweder aus lokalem Speicher oder aus einer Cloud wie einem Objektspeicher hochladen können.
Sobald Sie Ihre Sammlung erstellt haben, können Sie im Hamburger-Menü auf die Registerkarte „Sammlungen verwalten“ gehen und dann unter „Identitätsfelder“ auswählen, welche Methode Sie zur Verarbeitung der Dokumente verwenden möchten.
Es gibt drei Möglichkeiten:
Es kann eine Weile dauern, bis alle Ihre Dokumente bearbeitet sind. Anschließend können Sie die Watson Discovery API verwenden, um Ihre Daten in Ihrem Code zu lesen und zu nutzen.
Nachfolgend finden Sie einen Beispielcode, der zeigt, wie Sie die API nutzen können, um die Daten aus Ihrer Sammlung auszulesen:
from langchain.docstore.document import DocumentWenn Sie ein Projekt in Watson Discovery erstellen, können Sie einen Web-Crawl planen, um Informationen von einer bestimmten URL abzurufen. Sie müssen lediglich die Option „Web Crawl“ bei der Auswahl der Datenquelle auswählen und anschließend die URL und den Crawl-Zeitplan angeben.
Danach können Sie die oben genannten Schritte zur Verwaltung Ihrer Sammlung durchführen und die API verwenden, um die Daten aus Ihrer Sammlung zu lesen. Um mehr Details zur Einrichtung von Web Crawl in Watson Discovery zu sehen, können Sie sich dieses Video ansehen.
Weitere Informationen und Funktionen finden Sie auf der Entwicklerseite von Watson Discovery.
Deep Search ist das Open-Source-Toolkit von IBM Forschung für die Ingestion. Deep Search nutzt modernste KI-Methoden, um kontinuierlich große Dokumentensammlungen zu sammeln, zu konvertieren, anzureichern und zu verknüpfen. Sie können es sowohl für öffentliche als auch für proprietäre PDF-Dokumente verwenden.
Deep Search wandelt unstrukturierte PDF-Dokumente präzise und einfach in strukturierte JSON-Dateien um. Es ermöglicht Ihnen, die Wissensextraktion zu automatisieren sowie Ihre proprietären Basismodelle und großen Sprachmodelle feinabzustimmen.
Weitere Informationen zu Deep Search finden Sie hier.
Deep Search kann anstelle von unstrukturierten oder anderen Open-Source-Bibliotheken ein gutes internes Tool zum Lesen komplexer Dokumente sein. Im Repository finden Sie außerdem eine sehr gute Dokumentation mit verschiedenen Beispielen in Form von Python-Notebooks:
Beispiel-Notebooks Deep Search
Deep Search liefert gute Ergebnisse beim Extrahieren von Tabellen aus PDFs im JSON-Format.
Für die Tests haben wir ein teilweises PDF-Dokument aus dem CIPP verwendet, das drei Seiten umfasst, auf denen jeweils Tabellendaten angezeigt werden. Die beste Leistung von RAG wird in diesem Fall erreicht, indem Deep Sarch verwendet wird, um Tabellen ins JSON-Format zu extrahieren und sie dann in HTML umzuwandeln, um sie in Watson Discovery / watsonx Discovery zu verwenden, anstatt PDFs direkt zu verwenden, PDFs ohne Deep Search in HTML umzuwandeln oder nur das JSON von Deep Search in Watson Discovery / watsonx Discovery zu verwenden. Wir haben festgestellt, dass Watson Discovery in einigen Fällen die falsche Antwort aus der falschen Zelle in der Tabelle auswählt, dafür aber schneller ist; im selben Fall kann Watson Discovery die exakte Antwort innerhalb des Tabellenrasters ermitteln.
IBM Datacap ist eine umfassende Lösung für Dokumenten- und Datenerfassung; bietet schnelles, genaues und kostengünstiges Scannen, Klassifizieren, Erkennen, Validieren und Exportieren von Daten und Dokumentenbildern. Es erfasst Dokumente, extrahiert relevante Daten und integriert diese in nachgelagerte Geschäftsprozesse.
Datacap erfasst Papierdokumente über Scanner, Multifunktionsdrucker oder Mobilgeräte und importiert elektronische Dokumente von Dateisystemen, Fax- oder E-Mail-Servern. Es verbessert die Datenextraktion durch Bildverarbeitungsfunktionen wie das Entfernen von Linien, Strichen und Grenzen.
Datacap verwendet optische Zeichenerkennung (OCR), intelligente Zeichenerkennung (ICR) für Handschrift, optische Markierungserkennung (OMR) für Markierungen und Barcodelesen, um Daten effizient zu extrahieren.
Für detaillierte Installations- und Nutzungsanweisungen siehe die IBM Datacap-Dokumentation.
LangChain unterstützt verschiedene Arten von Dokumentladern, die Daten aus einer Quelle als Dokumentobjekt von LangChain laden. Ein Dokument-Objekt ist ein Textstück und zugehörige Metadaten, die später problemlos für Chunking und Abruf verwendet werden können.
Derzeit unterstützt LangChain Lader, die entweder ein ganzes Verzeichnis oder verschiedene Dateitypen laden, wie zum Beispiel:
Sie können diese Loader in wenigen Zeilen in Python verwenden. Zum Beispiel können Sie zum Laden eines PDFs folgenden Code verwenden:
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("example_data/layout-parser-paper.pdf")
pages = loader.load_and_split()
Bitte lesen Sie die Dokumentation von LangChain , um zu sehen, wie man diese Lader verwendet.
Neben den im obigen Link genannten gibt es weitere Lader, die Daten direkt aus bestimmten Anwendungen wie E-Mail, GitHub, Google Drive usw. laden können. Die Liste aller verschiedenen Loader finden Sie hier.
In Fällen, in denen Sie Dokumente mit komplexen Strukturen, Formaten und Tabellen haben, können Sie die unstrukturierten Lader von LangChain verwenden. Diese Lader verwenden unter der Oberfläche die unstrukturierte Bibliothek, eine der besten Bibliotheken für komplexe Dokumente (in verschiedenen Formaten wie PDF, MSWord, Power Point usw.) und zur Unterteilung der Dokumente in verschiedene Komponenten: LangChain UnstructuredLoader
Ähnlich wie LangChain unterstützt auch LlamaIndex verschiedene Arten von Ladern. Eine der einfachsten Möglichkeiten, Daten mit LlamaIndex zu laden, ist die Verwendung des SimpleDirectoryReader. SimpleDirectoryReader unterstützt die folgenden Typen:
Sie können den SimpleDirectoryLoader mithilfe des folgenden Code-Snippets verwenden:
from llama_index.core import SimpleDirectoryReader reader = SimpleDirectoryReader(input_dir="path/to/directory") documents = reader.load_data()
Sie können auch bestimmte Erweiterungen hinzufügen, um nur diese Erweiterungen aus dem Verzeichnis zu lesen:
SimpleDirectoryReader( input_dir="path/to/directory", required_exts=[".pdf", ".docx"] )
Für Details zur Nutzung von LlamaIndex Loadern siehe bitte die Dokumentation.
Auch ähnlich wie bei Huggingface können Sie Ihre eigenen benutzerdefinierten Lader erstellen oder die benutzerdefinierten Lader anderer Personen auf llamahub.KI verwenden.
Ein Nachteil von LlamaIndex im Vergleich zu LangChain ist jedoch, dass die Dokumentation und der Community-Support nicht so gut sind wie bei LangChain, sodass das Debuggen Ihres Codes schwieriger sein kann.
Wenn Sie komplexe Dokumente laden, können Sie auch direkt die unstrukturierte Bibliothek verwenden. Die unstrukturierte Bibliothek ist wirklich gut im Lesen und Parsen von Tabellen.
Die unstrukturierte Bibliothek wird auch von den LangChain- und LlamaIndex-Wrappern unterstützt, was die Verwendung für RAG-Pipelines erleichtern könnte, da diese automatisch die Document-Objekte erstellen und zurückgeben. Wenn Ihr Projekt jedoch mehr Anpassungen benötigt und Sie stattdessen direkt die unstrukturierte Bibliothek verwenden möchten, können Sie auf die folgende Dokumentation zurückgreifen: Unstrukturiert.
Sara Golestaneh, Vicky Kuo, Fahad Bhutta, Luke Major, Dean Sacoransky, Chris Kirby
Aktualisiert: 15. November 2024