Извлечение ценной информации из PDF: решение для структурированного вывода Gemini 2.0

На прошлой неделе.Google DeepMind выпускает Gemini 2.0К ним относятся Близнецы 2.0 Flash (полностью доступен), Gemini 2.0 Flash-Lite (новый экономичный вариант) и Gemini 2.0 Pro (экспериментальный вариант). Все модели поддерживают не менее 1 млн. Токен контекстного окна ввода и поддерживает текст, изображение и аудио, а также вызовы функций/структурированный вывод. Этот документ также служит в качестве Ограничения LLM OCR: проблемы разбора документов под гламуром Справочный материал для чтения.

从 PDF 中提取有价值的信息:Gemini 2.0 结构化输出方案

Это открывает отличные возможности для обработки PDF. Преобразование PDF в структурированный или машиночитаемый текст всегда было серьезной проблемой. Представьте себе, если бы мы могли преобразовывать PDF из документов в структурированные данные? Именно здесь на помощь приходит Gemini 2.0.

В этом руководстве читатель узнает, как использовать Gemini 2.0 для извлечения структурированной информации, такой как номера счетов, даты, непосредственно из PDF-документов:

  1. Настройка среды и создание клиента рассуждений
  2. Работа с PDF и другими документами
  3. Структурированный вывод с помощью Gemini 2.0 и Pydantic
  4. Извлечение структурированных данных из PDF с помощью Gemini 2.0

 

1. настройка среды и создание клиента рассуждений

Первая задача - установить google-genai Python SDK и получите ключ API. Если у читателя еще нет ключа API, он может получить его из раздела Студия искусственного интеллекта Google Получите:Получить ключ API Gemini.

%pip install "google-genai>=1"

Получив SDK и API-ключ, читатель может создать клиента и определить модель, которая будет использоваться, т.е. новую модель Gemini 2.0 Flash, которая доступна на бесплатном уровне с 1 500 запросами в день (по состоянию на 6 февраля 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"

Примечание: Если читатель хочет использовать Vertex AI, пожалуйстаНажмите здесьУзнайте, как создать клиента

 

2. обработка PDF и других документов

Модель Gemini способна работать сИзображения и видеоЭто можно сделать с помощью строки base64 или используя files API Python включает методы загрузки и удаления. После загрузки файла читатель может включить URI файла непосредственно в вызов.Python API включает методы загрузки и удаления.

В данном примере у пользователя есть 2 образца PDF, основной счет-фактура и форма с рукописными значениями.

!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

Теперь читатель может использовать клиента и upload для загрузки файла. Давайте попробуем его на одном из файлов.

invoice_pdf = client.files.upload(file="invoice.pdf", config={'display_name': 'invoice'})

Примечание: API File позволяет хранить до 20 Гб файлов в одном проекте, максимальный размер одного файла - 2 Гб. Файлы хранятся в течение 48 часов. В течение этого времени к файлам можно получить доступ, используя API-ключ пользователя, но нельзя загрузить. Загрузка файлов бесплатна.

После загрузки файла читатель может проверить, в какое количество токенов он был преобразован. Это не только помогает понять контекст того, с чем имеет дело пользователь, но и отслеживает стоимость.

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. Структурированный вывод с помощью Gemini 2.0 и Pydantic

Структурированный вывод - это функция, которая гарантирует, что Gemini всегда генерирует ответ, соответствующий предопределенному формату, например, схеме JSON. Это означает, что пользователь имеет больше контроля над выводом и тем, как он интегрируется в приложение, поскольку он гарантированно возвращает корректные JSON-объекты с заданной пользователем схемой.

Gemini 2.0 в настоящее время поддерживает 3 различных типа определений JSON Schema:

Давайте рассмотрим небольшой текстовый пример.

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. Извлечение структурированных данных из PDF с помощью Gemini 2.0

Теперь давайте объединим File API со структурированным выводом для извлечения информации из PDF. Пользователь может создать простой метод, который принимает локальный путь к файлу и модель Pydantic и возвращает пользователю структурированные данные. Метод будет:

  1. Загрузка файлов в File API
  2. пользоваться Gemini API Создайте структурированный ответ
  3. Преобразует ответ в модель Pydantic и возвращает
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

В примере каждый PDF-файл отличается от другого. Поэтому пользователю необходимо определить уникальную модель Pydantic для каждого PDF, чтобы продемонстрировать работу Gemini 2.0. Если у пользователя есть очень похожие PDF-файлы и он хочет извлечь из них одинаковую информацию, можно использовать одну и ту же модель для всех PDF-файлов.

  • Invoice.pdf: Извлекает номер счета, дату и все элементы списка, включая описание, количество, общую стоимость и общую стоимость брутто
  • handwriting_form.pdfНомер формы на вывод средств, дата начала работы схемы и обязательства схемы на начало и конец года

Примечание: Используя функцию Pydantic, пользователи могут добавить дополнительный контекст к модели, чтобы сделать ее более точной, и выполнить некоторую валидацию данных. Добавление полного описания может значительно повысить производительность модели. Такие библиотеки, как instructor, добавляют автоматические повторные попытки на основе ошибок валидации, что может быть очень полезно, но добавляет дополнительные расходы на запросы.

Счет-фактура.pdf

从 PDF 中提取有价值的信息:Gemini 2.0 结构化输出方案
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}")

Фантастика! Модель отлично справляется с извлечением информации из счетов-фактур.

handwriting_form.pdf

从 PDF 中提取有价值的信息:Gemini 2.0 结构化输出方案
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

 

Лучшие практики и ограничения

При использовании Gemini 2.0 для обработки PDF-файлов учитывайте следующие моменты:

  1. Управление размером файла: хотя API File поддерживает большие файлы, лучше всего оптимизировать PDF-файлы перед загрузкой.
  2. Лимиты токенов: при работе с большими документами проверяйте количество токенов, чтобы убедиться, что пользователи не превышают лимиты и бюджеты моделей.
  3. Структурированный дизайн выходных данных: тщательно разработайте пользовательскую модель Pydantic, чтобы получить всю необходимую информацию, сохраняя ясность, добавление описаний и примеров может улучшить работу модели.
  4. Обработка ошибок: Реализуйте надежную обработку ошибок для состояний загрузки и обработки файлов, включая повторные попытки и обработку сообщений об ошибках от моделей.

 

вынести вердикт

Мультимодальные возможности Gemini 2.0 в сочетании со структурированным выводом помогают пользователям обрабатывать и извлекать информацию из PDF-файлов и других документов. Это позволяет отказаться от сложных и трудоемких процессов извлечения данных вручную или в полуавтоматическом режиме. Если вы создаете систему обработки счетов, инструмент для анализа документов или любое другое приложение, ориентированное на работу с документами, вам стоит попробовать Gemini 2.0, так как сначала его можно протестировать бесплатно, а затем - всего за 0,1 доллара за миллион входных токенов. Google подчеркивает, что Gemini 2.0 сначала тестируется бесплатно, а затем стоит всего 0,1 доллара за миллион токенов, что, конечно, снижает барьер для пользователей, желающих попробовать новую технологию, но долгосрочную экономическую эффективность еще предстоит увидеть.

© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...