Generative Datenintelligenz

Erstellen Sie einen Document Lake durch groß angelegte Textextraktion aus Dokumenten mit Amazon Textract | Amazon Web Services

Datum:

AWS-Kunden im Gesundheitswesen, im Finanzdienstleistungsbereich, im öffentlichen Sektor und in anderen Branchen speichern Milliarden von Dokumenten als Bilder oder PDFs in Amazon Simple Storage-Service (Amazon S3). Allerdings sind sie nicht in der Lage, Einblicke zu gewinnen, wie z. B. die in den Dokumenten enthaltenen Informationen für große Sprachmodelle (LLMs) zu nutzen oder zu suchen, bis sie den Text, Formulare, Tabellen und andere strukturierte Daten extrahiert haben. Mit AWS Intelligent Document Processing (IDP) unter Verwendung von KI-Diensten wie z Amazontextkönnen Sie die branchenführende Technologie des maschinellen Lernens (ML) nutzen, um Daten aus PDFs oder Dokumentbildern (TIFF, JPEG, PNG) schnell und genau zu verarbeiten. Nachdem der Text aus den Dokumenten extrahiert wurde, können Sie ihn zur Feinabstimmung eines Grundlagenmodells verwenden. Fassen Sie die Daten mithilfe eines Grundlagenmodells zusammen, oder senden Sie es an eine Datenbank.

In diesem Beitrag konzentrieren wir uns auf die Verarbeitung einer großen Sammlung von Dokumenten in Rohtextdateien und deren Speicherung in Amazon S3. Wir bieten Ihnen für diesen Anwendungsfall zwei unterschiedliche Lösungen an. Mit dem ersten können Sie ein Python-Skript von jedem Server oder jeder Instanz ausführen, einschließlich eines Jupyter-Notebooks. Dies ist der schnellste Weg, um loszulegen. Der zweite Ansatz ist eine schlüsselfertige Bereitstellung verschiedener Infrastrukturkomponenten unter Verwendung von AWS Cloud-Entwicklungskit (AWS-CDK) Konstrukte. Das AWS CDK-Konstrukt bietet ein belastbares und flexibles Framework für die Verarbeitung Ihrer Dokumente und den Aufbau einer durchgängigen IDP-Pipeline. Durch die Verwendung des AWS CDK können Sie dessen Funktionalität erweitern, um Schwärzung, Speichern Sie die Ausgabe in Amazon OpenSearch, oder fügen Sie eine benutzerdefinierte hinzu AWS Lambda Funktion mit Ihrer eigenen Geschäftslogik.

Mit beiden Lösungen können Sie viele Millionen Seiten schnell verarbeiten. Bevor Sie eine dieser Lösungen in großem Maßstab ausführen, empfehlen wir, sie mit einer Teilmenge Ihrer Dokumente zu testen, um sicherzustellen, dass die Ergebnisse Ihren Erwartungen entsprechen. In den folgenden Abschnitten beschreiben wir zunächst die Skriptlösung, gefolgt von der AWS CDK-Konstruktlösung.

Lösung 1: Verwenden Sie ein Python-Skript

Diese Lösung verarbeitet Dokumente für Rohtext über Amazon Textract so schnell, wie es der Dienst zulässt, mit der Erwartung, dass der Prozess bei einem Fehler im Skript dort weitermacht, wo er aufgehört hat. Die Lösung nutzt drei verschiedene Dienste: Amazon S3, Amazon DynamoDBund Amazon Textract.

Das folgende Diagramm veranschaulicht die Abfolge der Ereignisse innerhalb des Skripts. Wenn das Skript endet, wird ein Abschlussstatus zusammen mit der benötigten Zeit an die SageMaker Studio-Konsole zurückgegeben.

Diagramm

Wir haben diese Lösung in einem verpackt .ipynb-Skript und .py-Skript. Sie können jede der einsetzbaren Lösungen entsprechend Ihren Anforderungen verwenden.

Voraussetzungen:

Um dieses Skript von einem Jupyter-Notebook aus auszuführen, müssen Sie Folgendes tun: AWS Identity and Access Management and (IAM)-Rolle, die dem Notebook zugewiesen ist, muss über Berechtigungen verfügen, die ihm die Interaktion mit DynamoDB, Amazon S3 und Amazon Textract ermöglichen. Die allgemeine Empfehlung besteht darin, Ihnen für jeden dieser Dienste die Berechtigungen mit den geringsten Rechten zu erteilen AmazonSageMaker-ExecutionRole Rolle. Weitere Informationen finden Sie unter Beginnen Sie mit von AWS verwalteten Richtlinien und wechseln Sie zu Berechtigungen mit den geringsten Rechten.

Alternativ können Sie dieses Skript auch in anderen Umgebungen ausführen, z Amazon Elastic Compute-Cloud (Amazon EC2) Instanz oder Container, die Sie verwalten würden, vorausgesetzt, dass Python, Pip3 und die AWS SDK für Python (Boto3) sind installiert. Auch hier müssen dieselben IAM-Richtlinien angewendet werden, die es dem Skript ermöglichen, mit den verschiedenen verwalteten Diensten zu interagieren.

Lösungsweg

Um diese Lösung zu implementieren, müssen Sie zunächst das Repository klonen GitHub.

Sie müssen die folgenden Variablen im Skript festlegen, bevor Sie es ausführen können:

  • tracking_table – Dies ist der Name der DynamoDB-Tabelle, die erstellt wird.
  • input_bucket – Dies ist Ihr Quellspeicherort in Amazon S3, der die Dokumente enthält, die Sie zur Texterkennung an Amazon Textract senden möchten. Geben Sie für diese Variable den Namen des Buckets an, z. B mybucket.
  • Ausgabe_Bucket – Hier wird der Speicherort gespeichert, an den Amazon Textract die Ergebnisse schreiben soll. Geben Sie für diese Variable den Namen des Buckets an, z. B myoutputbucket.
  • _input_prefix (optional) – Wenn Sie bestimmte Dateien aus einem Ordner in Ihrem S3-Bucket auswählen möchten, können Sie diesen Ordnernamen als Eingabepräfix angeben. Andernfalls lassen Sie die Standardeinstellung leer, um alle auszuwählen.

Das Skript lautet wie folgt:

_tracking_table = "Table_Name_for_storing_s3ObjectNames"
_input_bucket = "your_files_are_here"
_output_bucket = "Amazon Textract_writes_JSON_containing_raw_text_to_here"

Das folgende DynamoDB-Tabellenschema wird erstellt, wenn das Skript ausgeführt wird:

Table Table_Name_for_storing_s3ObjectNames
Partition Key objectName (String) bucketName (String) createdDate (Decimal) outputbucketName (String) txJobId (String)

Wenn das Skript zum ersten Mal ausgeführt wird, prüft es, ob die DynamoDB-Tabelle vorhanden ist, und erstellt sie bei Bedarf automatisch. Nachdem die Tabelle erstellt wurde, müssen wir sie mit einer Liste von Dokumentobjektreferenzen aus Amazon S3 füllen, die wir verarbeiten möchten. Das Skript zählt standardmäßig alle Objekte im angegebenen Bereich auf input_bucket und füllen unsere Tabelle automatisch mit ihren Namen, wenn sie ausgeführt werden. Es dauert etwa 10 Minuten, über 100,000 Dokumente aufzuzählen und diese Namen über das Skript in die DynamoDB-Tabelle einzutragen. Wenn Sie Millionen von Objekten in einem Bucket haben, können Sie alternativ die Inventarfunktion von Amazon S3 verwenden, die eine CSV-Datei mit Namen generiert, dann die DynamoDB-Tabelle aus dieser Liste vorab mit Ihrem eigenen Skript füllen und die aufgerufene Funktion nicht verwenden fetchAllObjectsInBucketandStoreName indem du es auskommentierst. Weitere Informationen finden Sie unter Konfigurieren des Amazon S3-Inventars.

Wie bereits erwähnt, gibt es sowohl eine Notebook-Version als auch eine Python-Skriptversion. Das Notizbuch ist der einfachste Einstieg; Führen Sie einfach jede Zelle von Anfang bis Ende durch.

Wenn Sie sich entscheiden, das Python-Skript über eine CLI auszuführen, wird die Verwendung eines Terminal-Multiplexers wie tmux empfohlen. Dadurch soll verhindert werden, dass das Skript stoppt, wenn Ihre SSH-Sitzung beendet wird. Zum Beispiel: tmux new -d ‘python3 textractFeeder.py’.

Das Folgende ist das Einstiegspunkt des Skripts; Von hier aus können Sie nicht benötigte Methoden auskommentieren:

"""Main entry point into script --- Start Here"""
if __name__ == "__main__": now = time.perf_counter() print("started")

Die folgenden Felder werden festgelegt, wenn das Skript die DynamoDB-Tabelle auffüllt:

  • Objektname – Der Name des Dokuments in Amazon S3, das an Amazon Textract gesendet wird
  • BucketName – Der Bucket, in dem das Dokumentobjekt gespeichert ist

Diese beiden Felder müssen ausgefüllt werden, wenn Sie eine CSV-Datei aus dem S3-Inventarbericht verwenden und das automatische Ausfüllen im Skript überspringen möchten.

Nachdem die Tabelle nun erstellt und mit den Dokumentobjektreferenzen gefüllt wurde, kann das Skript mit dem Aufruf von Amazon Textract beginnen StartDocumentTextDetection API. Amazon Textract verfügt, ähnlich wie andere verwaltete Dienste, über eine Standardlimit Auf den APIs werden Transaktionen pro Sekunde (TPS) genannt. Bei Bedarf können Sie über die Amazon Textract-Konsole eine Kontingenterhöhung anfordern. Der Code ist so konzipiert, dass beim Aufruf von Amazon Textract mehrere Threads gleichzeitig verwendet werden, um den Durchsatz mit dem Dienst zu maximieren. Sie können dies innerhalb des Codes ändern, indem Sie die ändern threadCountforTextractAPICall Variable. Standardmäßig ist dies auf 20 Threads eingestellt. Das Skript liest zunächst 200 Zeilen aus der DynamoDB-Tabelle und speichert diese in einer In-Memory-Liste, die zur Thread-Sicherheit mit einer Klasse umschlossen ist. Jeder Aufrufer-Thread wird dann gestartet und läuft innerhalb seiner eigenen Swimlane. Grundsätzlich ruft der Aufrufthread von Amazon Textract ein Element aus der In-Memory-Liste ab, das unsere Objektreferenz enthält. Anschließend wird das Asynchrone aufgerufen start_document_text_detection API und warten Sie auf die Bestätigung mit der Job-ID. Die Job-ID wird dann wieder in der DynamoDB-Zeile für dieses Objekt aktualisiert und der Thread wird wiederholt, indem er das nächste Element aus der Liste abruft.

Das Folgende ist der Hauptorchestrierungscode Skript:

while len(results) > 0: for record in results: # put these records into our thread safe list fileList.append(record) """create our threads for processing Amazon Textract""" threadsforTextractAPI=threading.Thread(name="Thread - " + str(i), target=procestTextractFunction, args=(fileList,)) 

Die aufrufenden Threads werden so lange wiederholt, bis keine Elemente mehr in der Liste vorhanden sind. An diesem Punkt werden die Threads jeweils angehalten. Wenn alle Threads, die innerhalb ihrer Swimlanes arbeiten, gestoppt wurden, werden die nächsten 200 Zeilen von DynamoDB abgerufen und ein neuer Satz von 20 Threads gestartet. Der gesamte Vorgang wird wiederholt, bis jede Zeile, die keine Job-ID enthält, von DynamoDB abgerufen wurde Aktualisiert. Sollte das Skript aufgrund eines unerwarteten Problems abstürzen, kann das Skript erneut ausgeführt werden orchestrate() Methode. Dadurch wird sichergestellt, dass die Threads weiterhin Zeilen verarbeiten, die leere Job-IDs enthalten. Beachten Sie, dass beim erneuten Ausführen von orchestrate() Nachdem das Skript angehalten wurde, besteht die Möglichkeit, dass einige Dokumente erneut an Amazon Textract gesendet werden. Diese Zahl ist gleich oder kleiner als die Anzahl der Threads, die zum Zeitpunkt des Absturzes ausgeführt wurden.

Wenn in der DynamoDB-Tabelle keine weiteren Zeilen mit einer leeren Job-ID vorhanden sind, wird das Skript beendet. Die gesamte JSON-Ausgabe von Amazon Textract für alle Objekte finden Sie im output_bucket standardmäßig unter der textract_output Ordner. Jeder Unterordner darin textract_output wird mit der Job-ID benannt, die der Job-ID entspricht, die in der DynamoDB-Tabelle für dieses Objekt gespeichert wurde. Im Job-ID-Ordner finden Sie die JSON-Datei, die numerisch beginnend bei 1 benannt wird und sich möglicherweise über weitere JSON-Dateien erstrecken kann, die mit 2, 3 usw. gekennzeichnet wären. Die Spannweite von JSON-Dateien ist das Ergebnis dichter oder mehrseitiger Dokumente, bei denen die Menge des extrahierten Inhalts die Amazon Textract-Standard-JSON-Größe von 1,000 Blöcken überschreitet. Beziehen auf Blockieren Weitere Informationen zu Blöcken finden Sie hier. Diese JSON-Dateien enthalten alle Amazon Textract-Metadaten, einschließlich des Texts, der aus den Dokumenten extrahiert wurde.

Die Python-Code-Notebook-Version und das Skript für diese Lösung finden Sie unter GitHub.

Aufräumen

Wenn das Python-Skript fertig ist, können Sie Kosten sparen, indem Sie es herunterfahren oder stoppen Amazon SageMaker-Studio Notebook oder Container, den Sie erstellt haben.

Nun zu unserer zweiten Lösung für Dokumente im großen Maßstab.

Lösung 2: Verwenden Sie ein serverloses AWS CDK-Konstrukt

Diese Lösung verwendet AWS Step-Funktionen und Lambda-Funktionen zur Orchestrierung der IDP-Pipeline. Wir benutzen das IDP AWS CDK-Konstrukte, was die Arbeit mit Amazon Textract in großem Maßstab erleichtert. Zusätzlich verwenden wir a Verteilte Schrittfunktionen-Karte um alle Dateien im S3-Bucket zu durchlaufen und die Verarbeitung zu starten. Die erste Lambda-Funktion bestimmt, wie viele Seiten Ihre Dokumente haben. Dadurch kann die Pipeline automatisch entweder die synchrone (für einseitige Dokumente) oder die asynchrone (für mehrseitige Dokumente) API verwenden. Bei Verwendung der asynchronen API wird eine zusätzliche Lambda-Funktion für alle JSON-Dateien aufgerufen, die Amazon Textract für alle Ihre Seiten in einer JSON-Datei erstellt, um Ihren nachgelagerten Anwendungen die Arbeit mit den Informationen zu erleichtern.

Diese Lösung enthält außerdem zwei zusätzliche Lambda-Funktionen. Die erste Funktion analysiert den Text aus dem JSON und speichert ihn als Textdatei in Amazon S3. Die zweite Funktion analysiert den JSON und speichert ihn für Metriken zur Arbeitslast.

Das folgende Diagramm veranschaulicht den Step Functions-Workflow.

Diagramm

Voraussetzungen:

Diese Codebasis verwendet das AWS CDK und erfordert Docker. Sie können dies von einem aus bereitstellen AWS Cloud9 Instanz, bei der das AWS CDK und Docker bereits eingerichtet sind.

Lösungsweg

Um diese Lösung zu implementieren, müssen Sie zunächst die klonen Repository.

Nachdem Sie das Repository geklont haben, installieren Sie die Abhängigkeiten:

pip install -r requirements.txt

Verwenden Sie dann den folgenden Code, um den AWS CDK-Stack bereitzustellen:

cdk bootstrap
cdk deploy --parameters SourceBucket=<Source Bucket> SourcePrefix=<Source Prefix>

Für diese Lösung müssen Sie sowohl den Quell-Bucket als auch das Quellpräfix (den Speicherort der Dateien, die Sie verarbeiten möchten) angeben.

Wenn die Bereitstellung abgeschlossen ist, navigieren Sie zur Step Functions-Konsole, wo Sie die Zustandsmaschine sehen sollten ServerlessIDPArchivePipeline.

Diagramm

Öffnen Sie die Detailseite der Zustandsmaschine und klicken Sie auf Hinrichtungen Tab, wählen Sie Starten Sie die Ausführung.

Diagramm

Auswählen Starten Sie die Ausführung erneut, um die Zustandsmaschine auszuführen.

Diagramm

Nachdem Sie die Zustandsmaschine gestartet haben, können Sie die Pipeline überwachen, indem Sie sich die Kartenausführung ansehen. Sie werden eine sehen Bearbeitungsstatus des Artikels Abschnitt wie im folgenden Screenshot. Wie Sie sehen können, ist dies darauf ausgelegt, auszuführen und zu verfolgen, was erfolgreich war und was fehlgeschlagen ist. Dieser Vorgang wird so lange fortgesetzt, bis alle Dokumente gelesen wurden.

Diagramm

Mit dieser Lösung sollten Sie in der Lage sein, Millionen von Dateien in Ihrem AWS-Konto zu verarbeiten, ohne sich Gedanken darüber machen zu müssen, wie Sie richtig bestimmen, welche Dateien an welche API gesendet werden sollen, oder ob beschädigte Dateien in Ihrer Pipeline fehlschlagen. Über die Step Functions-Konsole können Sie Ihre Dateien in Echtzeit ansehen und überwachen.

Aufräumen

Nachdem die Ausführung Ihrer Pipeline abgeschlossen ist, können Sie zum Bereinigen zurück in Ihr Projekt gehen und den folgenden Befehl eingeben:

cdk destroy

Dadurch werden alle Dienste gelöscht, die für dieses Projekt bereitgestellt wurden.

Zusammenfassung

In diesem Beitrag haben wir eine Lösung vorgestellt, mit der Sie Ihre Dokumentbilder und PDFs ganz einfach in Textdateien konvertieren können. Dies ist eine wichtige Voraussetzung für die Nutzung Ihrer Dokumente für generative KI und Suche. Weitere Informationen zum Verwenden von Text zum Trainieren oder Optimieren Ihrer Grundmodelle finden Sie unter Optimieren Sie Llama 2 für die Textgenerierung auf Amazon SageMaker JumpStart. Informationen zur Verwendung mit der Suche finden Sie unter Implementieren Sie einen intelligenten Dokumentensuchindex mit Amazon Textract und Amazon OpenSearch. Weitere Informationen zu den erweiterten Dokumentverarbeitungsfunktionen der AWS AI-Services finden Sie unter Leitfaden für die intelligente Dokumentenverarbeitung auf AWS.


Über die Autoren

Tim CondellTim Condell ist ein leitender Lösungsarchitekt für künstliche Intelligenz (KI) und maschinelles Lernen (ML) bei Amazon Web Services (AWS). Sein Schwerpunkt liegt auf der Verarbeitung natürlicher Sprache und Computer Vision. Tim genießt es, Kundenideen in skalierbare Lösungen umzusetzen.

David Girling ist ein leitender Architekt für KI/ML-Lösungen mit über zwanzig Jahren Erfahrung in der Gestaltung, Leitung und Entwicklung von Unternehmenssystemen. David ist Teil eines Spezialistenteams, das sich darauf konzentriert, Kunden dabei zu helfen, diese hochleistungsfähigen Dienste mit ihren Daten für ihre Anwendungsfälle zu erlernen, zu innovieren und zu nutzen.

spot_img

Neueste Intelligenz

spot_img