Extracción de información valiosa de PDF: solución de salida estructurada Gemini 2.0
Tutoriales prácticos sobre IAActualizado hace 6 meses Círculo de intercambio de inteligencia artificial 1.5K 00
La semana pasada.Google DeepMind lanza Gemini 2.0Se trata de Géminis 2.0 Flash (totalmente disponible), Gemini 2.0 Flash-Lite (nuevo y rentable) y Gemini 2.0 Pro (experimental). Todos los modelos admiten al menos 1 millón de Ficha de la ventana contextual de entrada y admite texto, imagen y audio, así como llamadas a funciones/salidas estructuradas. Este documento también sirve de Limitaciones del LLM OCR: los retos del análisis sintáctico de documentos bajo el glamour El material de lectura de referencia.

Esto abre excelentes casos de uso para el procesamiento de PDF. Convertir PDF en texto estructurado o legible por máquina siempre ha sido un gran reto. ¿Imagina que pudiéramos convertir PDF de documentos a datos estructurados? Aquí es donde entra en juego Gemini 2.0.
En este tutorial, el lector aprenderá a utilizar Gemini 2.0 para extraer información estructurada, como números de factura, fechas, directamente de documentos PDF:
- Configuración del entorno y creación del cliente de razonamiento
- Tratamiento de PDF y otros documentos
- Salida estructurada con Gemini 2.0 y Pydantic
- Extracción de datos estructurados de PDF con Gemini 2.0
1. Configuración del entorno y creación del cliente de razonamiento
La primera tarea consiste en instalar google-genai
SDK de Python y obtener la clave API. Si el lector aún no dispone de la clave API, puede obtenerla en la página Google AI Studio Consíguelo:Obtener la clave API de Gemini.
%pip install "google-genai>=1"
Una vez en posesión del SDK y la clave API, el lector puede crear un cliente y definir el modelo que utilizará, es decir, el nuevo modelo Gemini 2.0 Flash, que está disponible en un nivel gratuito con 1.500 solicitudes al día (a partir del 6 de febrero de 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"
Nota: Si el lector desea utilizar Vertex AI, por favorPulse aquíAprenda a crear un cliente
2. Tratamiento de PDF y otros documentos
El modelo Gemini es capaz de manejarImágenes y vídeosEsto puede hacerse con una cadena base64 o utilizando la función files
La API de Python incluye métodos de carga y eliminación. Después de cargar un archivo, el lector puede incluir la URI del archivo directamente en la llamada.La API de Python incluye métodos de carga y eliminación.
Para este ejemplo, el usuario dispone de 2 muestras PDF, una factura básica y un formulario con valores manuscritos.
!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
El lector puede ahora utilizar el cliente y upload
para cargar un archivo. Vamos a probarlo en uno de los archivos.
invoice_pdf = client.files.upload(file="invoice.pdf", config={'display_name': 'invoice'})
Nota: La API de archivos permite un máximo de 20 GB de archivos por proyecto, con un tamaño máximo de 2 GB por archivo. Los archivos se almacenan durante 48 horas. Durante este tiempo, se puede acceder a los archivos utilizando la clave API del usuario, pero no se pueden descargar. La carga de archivos es gratuita.
Una vez cargado el archivo, el lector puede comprobar en cuántos Token se ha convertido. Esto no sólo ayuda a comprender el contexto de lo que el usuario está tratando, sino que también ayuda a hacer un seguimiento del coste.
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. Salida estructurada mediante Gemini 2.0 y Pydantic
La salida estructurada es una función que garantiza que Gemini siempre genera una respuesta que se ajusta a un formato predefinido, como un esquema JSON. Esto significa que el usuario tiene más control sobre la salida y cómo se integra en la aplicación, ya que se garantiza que devuelve objetos JSON válidos con un Esquema definido por el usuario.
Gemini 2.0 admite actualmente 3 tipos diferentes de definiciones de esquema JSON:
- Un único tipo Python, como en el caso de anotación tipográfica El mismo utilizado en el
- Pydantic ModeloBase
- genai.types.Schema / Pydantic BaseModel diccionario equivalente
Veamos un ejemplo rápido basado en texto.
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. Extraer datos estructurados de un PDF con Gemini 2.0
Ahora, combinemos la API de archivos con la salida estructurada para extraer información del PDF. El usuario puede crear un método sencillo que tome una ruta de archivo local y un modelo Pydantic y devuelva datos estructurados para el usuario. El método lo hará:
- Carga de archivos en la API de archivos
- utilizar API Géminis Generar una respuesta estructurada
- Convierte la respuesta en un modelo Pydantic y devuelve el modelo
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
En el ejemplo, cada PDF es diferente de los demás. Por lo tanto, el usuario necesita definir un modelo pydántico único para cada PDF para demostrar el rendimiento de Gemini 2.0. Si el usuario tiene PDF muy similares y desea extraer la misma información, puede utilizar el mismo modelo para todos los PDF.
Invoice.pdf
Extrae el número de factura, la fecha y todos los elementos de la lista, incluida la descripción, la cantidad, el valor total y el valor bruto total.handwriting_form.pdf
Número del formulario de retirada, fecha de inicio del régimen y pasivo del régimen al principio y al final del año.
Nota: Utilizando la función Pydantic, los usuarios pueden añadir más contexto al modelo para hacerlo más preciso y realizar cierta validación de los datos. Añadir una descripción exhaustiva puede mejorar significativamente el rendimiento del modelo. bibliotecas como instructor añaden reintentos automáticos basados en errores de validación, lo que puede ser muy útil pero añade un coste adicional de solicitud.
Factura.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}")
Fantástico. El modelo hace un excelente trabajo extrayendo información de las facturas.
formulario_escritura.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
Buenas prácticas y limitaciones
Cuando utilice Gemini 2.0 para el procesamiento de PDF, tenga en cuenta las siguientes consideraciones:
- Gestión del tamaño de los archivos: aunque la API de archivos admite archivos de gran tamaño, la mejor práctica es optimizar los PDF antes de cargarlos.
- Límites de tokens: cuando trabaje con documentos de gran tamaño, compruebe los recuentos de tokens para asegurarse de que los usuarios se mantienen dentro de los límites y presupuestos del modelo.
- Diseño estructurado de la salida: Diseñar cuidadosamente el modelo Pydantic del usuario para capturar toda la información necesaria manteniendo la claridad, añadir descripciones y ejemplos puede mejorar el rendimiento del modelo.
- Gestión de errores: Implemente una sólida gestión de errores para los estados de carga y procesamiento de archivos, incluido el reintento y la gestión de mensajes de error de los modelos.
llegar a un veredicto
Las funciones multimodales de Gemini 2.0, combinadas con una salida estructurada, ayudan a los usuarios a procesar y extraer información de PDF y otros documentos. Esto elimina los complejos y lentos procesos manuales o semiautomatizados de extracción de datos. Tanto si está creando un sistema de procesamiento de facturas, una herramienta de análisis de documentos o cualquier otra aplicación centrada en documentos, debería probar Gemini 2.0, ya que inicialmente es gratis para probarlo, y después sólo cuesta 0,1 dólares por millón de tokens de entrada. Google subraya que Gemini 2.0 es gratis para probar inicialmente y luego sólo cuesta 0,1 dólares por millón de Token de entrada, lo que sin duda reduce la barrera para que los usuarios prueben la nueva tecnología, pero la rentabilidad a largo plazo está por ver.
© declaración de copyright
文章版权归 Círculo de intercambio de inteligencia artificial 所有,未经允许请勿转载。
Artículos relacionados
Sin comentarios...