Letzte Woche.Google DeepMind veröffentlicht Gemini 2.0Dazu gehören Zwillinge 2.0 Flash (vollständig verfügbar), Gemini 2.0 Flash-Lite (neu und kostengünstig) und Gemini 2.0 Pro (experimentell). Alle Modelle unterstützen mindestens 1 Million Token des Eingabekontextfensters und unterstützt Text, Bild und Audio sowie Funktionsaufrufe/strukturierte Ausgaben. Dieses Papier dient auch als die Grenzen der LLM OCR: Herausforderungen beim Parsen von Dokumenten hinter dem Glamour Das Referenzlesematerial.
Dadurch ergeben sich hervorragende Anwendungsmöglichkeiten für die PDF-Verarbeitung. Die Umwandlung von PDF in strukturierten oder maschinenlesbaren Text war schon immer eine große Herausforderung. Wie wäre es, wenn wir PDF aus einem Dokument in strukturierte Daten umwandeln könnten? An dieser Stelle kommt Gemini 2.0 ins Spiel.
In diesem Tutorial lernen die Leser, wie sie mit Gemini 2.0 strukturierte Informationen wie Rechnungsnummern und Daten direkt aus PDF-Dokumenten extrahieren können:
- Einrichten der Umgebung und Erstellen des Reasoning-Clients
- Umgang mit PDF- und anderen Dokumenten
- Strukturierte Ausgabe mit Gemini 2.0 und Pydantic
- Extrahieren strukturierter Daten aus PDF mit Gemini 2.0
1. die Umgebung einrichten und den Reasoning-Client erstellen
Die erste Aufgabe ist die Installation von google-genai
Python-SDK und den API-Schlüssel abrufen. Wenn der Leser den API-Schlüssel noch nicht hat, kann er ihn von der Seite Google AI Studio Erhalten:Gemini API-Schlüssel erhalten.
%pip install "google-genai>=1"
Sobald der Leser im Besitz des SDK und des API-Schlüssels ist, kann er einen Client erstellen und das zu verwendende Modell festlegen, d. h. das neue Gemini 2.0 Flash-Modell, das über eine kostenlose Stufe mit 1.500 Anfragen pro Tag verfügbar ist (ab 6. Februar 2025).
from google import genai # Create a client api_key = "XXXXX" client = genai.Client(api_key=api_key) # Define the model you are going to use model_id = "gemini-2.0-flash" # or "gemini-2.0-flash-lite-preview-02-05" , "gemini-2.0-pro-exp-02-05"
Hinweis: Wenn der Leser Vertex AI verwenden möchte, muss erKlicken Sie hierErfahren Sie, wie Sie einen Kunden erstellen
2. die Verarbeitung von PDF- und anderen Dokumenten
Das Modell Gemini ist in der LageBilder und VideosDies kann mit einer base64-Zeichenkette oder mit der files
Die Python-API umfasst Upload- und Löschmethoden. Nach dem Hochladen einer Datei kann der Leser die Datei-URI direkt in den Aufruf einbeziehen.Die Python-API umfasst Upload- und Delete-Methoden.
In diesem Beispiel hat der Benutzer 2 PDF-Muster, eine einfache Rechnung und ein Formular mit handschriftlichen Werten.
!wget -q -O https://storage.googleapis.com/generativeai-downloads/data/pdf_structured_outputs/handwriting_form.pdf !wget -q -O https://storage.googleapis.com/generativeai-downloads/data/pdf_structured_outputs/invoice.pdf
Der Leser kann nun den Client verwenden und upload
Methode, um eine Datei hochzuladen. Versuchen wir es mit einer der Dateien.
invoice_pdf = client.files.upload(file="invoice.pdf", config={'display_name': 'invoice'})
Hinweis: Die Datei-API erlaubt bis zu 20 GB an Dateien pro Projekt, mit einer maximalen Dateigröße von 2 GB pro Datei. Dateien werden 48 Stunden lang gespeichert. Während dieser Zeit kann mit dem API-Schlüssel des Nutzers auf die Dateien zugegriffen werden, sie können jedoch nicht heruntergeladen werden. Das Hochladen von Dateien ist kostenlos.
Sobald die Datei hochgeladen ist, kann der Leser überprüfen, in wie viele Token sie umgewandelt wurde, was nicht nur hilft, den Kontext zu verstehen, mit dem der Benutzer zu tun hat, sondern auch die Kosten zu verfolgen.
file_size = client.models.count_tokens(model=model_id,contents=invoice_pdf) print(f'File: {invoice_pdf.display_name} equals to {file_size.total_tokens} tokens') # File: invoice equals to 821 tokens
3. strukturierte Ausgabe mit Gemini 2.0 und Pydantic
Die strukturierte Ausgabe ist eine Funktion, die sicherstellt, dass Gemini immer eine Antwort erzeugt, die einem vordefinierten Format entspricht, wie z. B. einem JSON-Schema. Dies bedeutet, dass der Benutzer mehr Kontrolle über die Ausgabe und deren Integration in die Anwendung hat, da garantiert wird, dass gültige JSON-Objekte mit einem benutzerdefinierten Schema zurückgegeben werden.
Gemini 2.0 unterstützt derzeit 3 verschiedene Arten von JSON-Schema-Definitionen:
- Ein einzelner Python-Typ, wie in der Typisierungsvermerk Dasselbe wird in der
- Pydantisch BaseModel
- genai.types.Schema / Pydantic BaseModel Äquivalent im Wörterbuch
Schauen wir uns ein kurzes textbasiertes Beispiel an.
from pydantic import BaseModel, Field # Define a Pydantic model # Use the Field class to add a description and default value to provide more context to the model class Topic(BaseModel): name: str = Field(description="The name of the topic") class Person(BaseModel): first_name: str = Field(description="The first name of the person") last_name: str = Field(description="The last name of the person") age: int = Field(description="The age of the person, if not provided please return 0") work_topics: list[Topic] = Field(description="The fields of interest of the person, if not provided please return an empty list") # Define the prompt prompt = "Philipp Schmid is a Senior AI Developer Relations Engineer at Google DeepMind working on Gemini, Gemma with the mission to help every developer to build and benefit from AI in a responsible way. " # Generate a response using the Person model response = client.models.generate_content(model=model_id, contents=prompt, config={'response_mime_type': 'application/json', 'response_schema': Person}) # print the response as a json string print(response.text) # sdk automatically converts the response to the pydantic model philipp: Person = response.parsed # access an attribute of the json response print(f"First name is {philipp.first_name}")
4. strukturierte Daten aus PDF mit Gemini 2.0 extrahieren
Kombinieren wir nun die Datei-API mit einer strukturierten Ausgabe, um Informationen aus der PDF-Datei zu extrahieren. Der Benutzer kann eine einfache Methode erstellen, die einen lokalen Dateipfad und ein Pydantic-Modell übernimmt und strukturierte Daten für den Benutzer zurückgibt. Die Methode wird:
- Hochladen von Dateien in die Datei-API
- ausnutzen Zwillings-API Erzeugen einer strukturierten Antwort
- Konvertiert die Antwort in ein Pydantic-Modell und gibt die
def extract_structured_data(file_path: str, model: BaseModel): # Upload the file to the File API file = client.files.upload(file=file_path, config={'display_name': file_path.split('/')[-1].split('.')[0]}) # Generate a structured response using the Gemini API prompt = f"Extract the structured data from the following PDF file" response = client.models.generate_content(model=model_id, contents=[prompt, file], config={'response_mime_type': 'application/json', 'response_schema': model}) # Convert the response to the pydantic model and return it return response.parsed
In dem Beispiel unterscheidet sich jede PDF-Datei von den anderen. Daher muss der Benutzer für jedes PDF ein eigenes Pydantic-Modell definieren, um die Leistungsfähigkeit von Gemini 2.0 zu demonstrieren. Wenn der Benutzer sehr ähnliche PDFs hat und die gleichen Informationen extrahieren möchte, kann das gleiche Modell für alle PDFs verwendet werden.
Invoice.pdf
Extrahiert Rechnungsnummer, Datum und alle Listenpositionen einschließlich Beschreibung, Menge und Gesamtwert und Gesamtbruttowerthandwriting_form.pdf
Nummer des Entnahmeformulars, Datum des Beginns der Regelung und Verbindlichkeiten der Regelung zu Beginn und Ende des Jahres
Hinweis: Mit der Pydantic-Funktion können die Benutzer dem Modell mehr Kontext hinzufügen, um es genauer zu machen und eine gewisse Validierung der Daten vorzunehmen. Das Hinzufügen einer umfassenden Beschreibung kann die Leistung des Modells erheblich verbessern. Bibliotheken wie instructor fügen automatische Wiederholungsversuche auf der Grundlage von Validierungsfehlern hinzu, was sehr hilfreich sein kann, aber zusätzliche Anfragekosten verursacht.
Rechnung.pdf
from pydantic import BaseModel, Field class Item(BaseModel): description: str = Field(description="The description of the item") quantity: float = Field(description="The Qty of the item") gross_worth: float = Field(description="The gross worth of the item") class Invoice(BaseModel): """Extract the invoice number, date and all list items with description, quantity and gross worth and the total gross worth.""" invoice_number: str = Field(description="The invoice number e.g. 1234567890") date: str = Field(description="The date of the invoice e.g. 2024-01-01") items: list[Item] = Field(description="The list of items with description, quantity and gross worth") total_gross_worth: float = Field(description="The total gross worth of the invoice") result = extract_structured_data("invoice.pdf", Invoice) print(type(result)) print(f"Extracted Invoice: {result.invoice_number} on {result.date} with total gross worth {result.total_gross_worth}") for item in result.items: print(f"Item: {item.description} with quantity {item.quantity} and gross worth {item.gross_worth}")
Fantastisch! Das Modell leistet hervorragende Arbeit bei der Extraktion von Informationen aus den Rechnungen.
handschriftliches_formular.pdf
class Form(BaseModel): """Extract the form number, fiscal start date, fiscal end date, and the plan liabilities beginning of the year and end of the year.""" form_number: str = Field(description="The Form Number") start_date: str = Field(description="Effective Date") beginning_of_year: float = Field(description="The plan liabilities beginning of the year") end_of_year: float = Field(description="The plan liabilities end of the year") result = extract_structured_data("handwriting_form.pdf", Form) print(f'Extracted Form Number: {result.form_number} with start date {result.start_date}. \nPlan liabilities beginning of the year {result.beginning_of_year} and end of the year {result.end_of_year}') # Extracted Form Number: CA530082 with start date 02/05/2022. # Plan liabilities beginning of the year 40000.0 and end of the year 55000.0
Bewährte Verfahren und Grenzen
Wenn Sie Gemini 2.0 für die PDF-Verarbeitung verwenden, sollten Sie die folgenden Punkte beachten:
- Verwaltung der Dateigröße: Die Datei-API unterstützt zwar große Dateien, aber es empfiehlt sich, PDF-Dateien vor dem Hochladen zu optimieren.
- Token-Limits: Überprüfen Sie bei der Arbeit mit umfangreichen Dokumenten die Anzahl der Token, um sicherzustellen, dass die Benutzer die Modellgrenzen und Budgets einhalten.
- Strukturiertes Ausgabedesign: Das pydantische Modell des Benutzers muss sorgfältig entworfen werden, um alle notwendigen Informationen zu erfassen und gleichzeitig die Klarheit zu bewahren; das Hinzufügen von Beschreibungen und Beispielen kann die Leistung des Modells verbessern.
- Fehlerbehandlung: Implementieren Sie eine robuste Fehlerbehandlung für den Datei-Upload und den Verarbeitungsstatus, einschließlich Wiederholungsversuche und Behandlung von Fehlermeldungen von Modellen.
zu einem Urteil gelangen
Die multimodalen Fähigkeiten von Gemini 2.0 in Kombination mit der strukturierten Ausgabe helfen den Benutzern bei der Verarbeitung und Extraktion von Informationen aus PDFs und anderen Dokumenten. Dadurch werden komplexe und zeitaufwändige manuelle oder halbautomatische Datenextraktionsprozesse überflüssig. Egal, ob Sie ein System zur Rechnungsverarbeitung, ein Tool zur Dokumentenanalyse oder eine andere dokumentenzentrierte Anwendung entwickeln, Sie sollten Gemini 2.0 ausprobieren, da es zunächst kostenlos getestet werden kann und dann nur 0,1 US-Dollar pro Million Eingabetoken kostet. Google betont, dass Gemini 2.0 zunächst kostenlos getestet werden kann und dann nur 0,1 $ pro Million Token kostet, was sicherlich die Hürde für Nutzer senkt, die neue Technologie auszuprobieren, aber die langfristige Kosteneffizienz bleibt abzuwarten.