Содержание Подробности

В мире, где технологии и знания переплетаются друг с другом, каждое чтение похоже на удивительное приключение, которое дает вам ощущение мудрости и вдохновляет на бесконечное творчество.

Gemini 2.0 PDF Explained: примеры кода и лучшие практики

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

Традиционные проблемы обработки PDF-файлов

В течение длительного времени преобразование PDF-документов в машиночитаемые структурированные данные было "большой проблемой" в области искусственного интеллекта и обработки данных. Традиционные решения можно условно разделить на три категории:

  1. сквозная модель с открытым исходным кодом: Часто перегружены сложностью верстки, с трудом распознают таблицы, графику и специальную типографику.
  2. Программа комбинирования нескольких моделейНапример, для развертывания nv-ingest от NVIDIA в Kubernetes требуется 8 сервисов и несколько GPU, что не только сложно, но и дорого для планирования.
  3. Коммерческие платные услуги: Несмотря на определенное удобство, точность при работе со сложными макетами оставляет желать лучшего, а стоимость при масштабном применении растет экспоненциально.

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

Настройка среды и установка Gemini 2.0

Чтобы начать использовать Gemini 2.0 для обработки PDF-документов, сначала нужно настроить среду и создать клиент для анализа. Вот конкретные шаги:

Установите необходимые библиотеки

PHP
%pip install "google-genai>=1"

Создание клиентов и конфигураций моделей

PHP
из google import genai

# Создайте клиента
api_key = "YOUR_API_KEY" # Замените на свой ключ API.
client = genai.Client(api_key=api_key)

# Определите модель, которая будет использоваться
model_id = "gemini-2.0-flash" # Также используйте "gemini-2.0-flash-lite-preview-02-05" или "gemini-2.0-pro-exp-02-05"

Загрузка и обработка файлов PDF

PHP
# Загрузка PDF-файла
invoice_pdf = client.files.upload(file="invoice.pdf", config={'display_name':'invoice'})

# Узнайте, в какое количество токенов преобразован файл
file_size = client.models.count_tokens(model=model_id, contents=invoice_pdf)
print(f'Файл: {invoice_pdf.display_name} равен {file_size.total_tokens} токенов')

# Вывод образца: Файл: счет-фактура равен 821 токену

Выполнив вышеописанные действия, мы завершили настройку базовой среды и успешно загрузили первый PDF-файл для обработки. Стоит отметить, что файловый API Gemini позволяет хранить до 20 ГБ файлов в одном проекте, максимум 2 ГБ на файл, а загруженные файлы сохраняются в течение 48 часов.

Практика извлечения структурированных данных в формате PDF

Мощной функцией Gemini 2.0 является возможность извлечения структурированных данных из PDF-файлов. Ниже на практических примерах мы покажем, как использовать модель Pydantic вместе с Gemini для достижения этой функции.

Определите общие методы извлечения данных

Во-первых, мы определяем общий метод для обработки PDF-файлов и возврата структурированных данных:

PHP
def extract_structured_data(file_path: str, model: BaseModel).
    # Загрузка файла в File API
    file = client.files.upload(file=file_path, config={'display_name': file_path.split('/')[-1].split('.') [0]})

    # Генерирование структурированного ответа с помощью Gemini API
    prompt = f "Извлеките структурированные данные из следующего PDF-файла"
    response = client.models.generate_content(model=model_id,
                                             contents=[prompt, file], config={'response_mime_content')
                                             
                                                     'response_schema': model})

    # преобразует ответ в Pydantic-модель и возвращает ее
    return response.parsed

Пример 1: извлечение данных из счета-фактуры

Для класса счетов-фактур PDF мы можем определить следующую модель для извлечения ключевой информации:

PHP
из pydantic import BaseModel, Field

class Item(BaseModel).
    description: str = Field(description="Описание товара")
    количество: float = Поле(description="Количество товара")
    gross_worth: float = Field(description="Полная стоимость товара")

class Invoice(BaseModel).
    """Извлечение номера счета-фактуры, даты и всех элементов списка с описанием, количеством и стоимостью брутто, а также общей стоимостью брутто.""""
    номер_фактуры: str = Field(description="Номер_фактуры, например, 1234567890")
    дата: str = Поле(описание="Дата счета-фактуры, например 2024-01-01")
    items: list[Item] = Field(description="Список товаров с описанием, количеством и валовой стоимостью")
    total_gross_worth: float = Field(description="Общая валовая стоимость счета-фактуры")

# Извлеките данные с помощью этой модели
result = extract_structured_data("invoice.pdf", Invoice)

# Вывод результатов
print(f "Извлеченный счет-фактура: {result.invoice_number} на {result.date} с общей валовой стоимостью {result.total_gross_worth}")
for item in result.items: print(f "Item: {item_gross_worth}")
    print(f "Товар: {item.description} с количеством {item.quantity} и общей стоимостью {item.gross_worth}")

Пример 2: обработка форм с рукописным содержимым

Для форм, содержащих рукописное содержимое, мы также можем определить специализированные модели:

PHP
class Form(BaseModel).
    """Извлекаем номер формы, дату начала и окончания финансового периода, а также плановые обязательства на начало и конец года.""""
    номер_формы: str = Поле(описание="Номер_формы")
    start_date: str = Field(description="Дата вступления в силу")
    beginning_of_year: float = Field(description="Обязательства по плану на начало года")
    end_of_year: float = Field(description="Обязательства плана на конец года")

# Извлечение данных
result = extract_structured_data("handwriting_form.pdf", Form)

# Вывод результатов
print(f'Извлеченный номер формы: {result.form_number} с датой начала {result.start_date}. \nПлановые обязательства начало года {result.beginning_of_year} и конец года {result.end_of_year}')
# Пример вывода: извлеченный номер формы: CA530082 с датой начала 02/05/2022.
# Плановые обязательства на начало года 40000.0 и на конец года 55000.0

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

Расширенные приложения: разбивка документов и семантическое понимание

В системах RAG (Retrieval Augmented Generation) структурирование документов является ключевым этапом в дополнение к основному извлечению текста, и Gemini 2.0 позволяет нам выполнять и OCR, и семантическое структурирование за один этап.

Пример семантического расщепления в PDF

Вот совет, как конвертировать PDF в Markdown и одновременно выполнять семантическую разбивку:

PHP
CHUNKING_PROMPT = """OCR следующей страницы в Markdown. Таблицы должны быть отформатированы как HTML.
Не окружать вывод тройными обратными знаками.
Разбейте документ на части примерно по 250-1000 слов. Наша цель -
Наша цель - определить части страницы с одинаковой семантической темой.
Эти фрагменты будут встроены и использованы в конвейере RAG.
Окружите фрагменты   html-тегами."""".

# использует этот запрос для обработки
response = client.models.generate_content(
    model=model_id,
    contents=[CHUNKING_PROMPT, pdf_file]
)

chunked_content = response.text

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

Извлечение сложных данных с помощью Pydantic

Для более сложных сценариев мы можем определить вложенные модели Pydantic для работы с несколькими уровнями данных:

PHP
class Person(BaseModel): first_name: str = Field(description="Первое имя человека")
    first_name: str = Field(description="Первое имя человека")
    last_name: str = Field(description="Фамилия человека")
    last_name: str = Поле(description="Фамилия человека") last_name: str = Поле(description="Фамилия человека")
    work_topics: list[Topic] = Field(description="Области интересов человека, если не указано, верните пустой список")

# Сгенерируйте ответ, используя модель Person
prompt = "Филипп Шмид - старший инженер по связям с разработчиками ИИ в Google DeepMind, работающий над Gemini, Gemma с миссией помочь каждому разработчику ответственно подходить к созданию ИИ и получать от него пользу".
response = client.models.generate_content(
    model=model_id,
    contents=prompt,
    config={'response_mime_type': 'application/json', 'response_schema': Person}
)

SDK # автоматически преобразует ответ в модель Pydantic
philipp: Person = response.parsed
print(f "First name is {philipp.first_name}")

Оптимизация производительности и лучшие практики

Вот несколько лучших практик для повышения эффективности и точности при обработке PDF-документов в масштабе:

Пакетная обработка и оптимизация токенов

При необходимости работы с большим количеством PDF-сцен вы можете выполнить пакетную обработку для повышения эффективности:

PHP
async def batch_process_pdfs(file_paths, model, batch_size=10):: results = [].
    results = []
    for i in range(0, len(file_paths), batch_size):: batch = file_paths[i:i+batch_size): batch = file_paths[i:i
        batch = file_paths[i:i+batch_size]: results = [] for i in range(0, len(file_paths), batch_size).
        tasks = [extract_structured_data(path, model) for path in batch].
        batch_results = await asyncio.gather(*tasks)
        results.extend(batch_results)
        print(f "Processed batch {i//batch_size + 1}/{(len(file_paths)+batch_size-1)//batch_size}")
    возврат результатов

Выбор модели и контроль затрат

Выбор правильного варианта модели в соответствии с реальными требованиями может значительно сократить расходы:

  1. Gemini 2.0 Flash: Лучший выбор для сценариев общего назначения при отличном соотношении цена/производительность
  2. Gemini 2.0 Flash-Light:: Обеспечивает лучшее соотношение цены и качества для простых документов
  3. Gemini 2.0 Pro: Работа с чрезвычайно сложными документами или сценами, требующими высокой точности.

Ниже приводится сравнение эффективности обработки данных в различных моделях:

моделированиеОбработка страниц PDF на доллар (преобразование в Markdown)
Gemini 2.0 FlashОколо 6 000 страниц
Gemini 2.0 Flash LiteОколо 12 000 страниц
Gemini 1.5 FlashОколо 10 000 страниц
OpenAI 4-miniОколо 450 страниц
OpenAI 4oОколо 200 страниц
Антропный Клод-3.5Около 100 страниц

Обработка ошибок и механизм повторных попыток

В производственной среде очень важно реализовать надежные механизмы обработки ошибок:

PHP
def extract_with_retry(file_path, model, max_retries=3):: for attempt in range(max_retries)
    for attempt in range(max_retries).
        try.
            return extract_structured_data(file_path, model):: for attempt in range(max_retries): try.
        except Exception as e: if attempt == max_retries
            if attempt == max_retries - 1: print(f "Не удалось добраться до файла.
                print(f "Не удалось обработать {file_path} после {max_retries} попыток: {e}")
                return None
            print(f "Попытка {attempt+1} не удалась, повторная попытка: {e}")
            time.sleep(2 ** попытка) # экспоненциальная стратегия повторных попыток

Оптимизация обработки форм

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

PHP
TABLE_EXTRACTION_PROMPT = """Извлеките все таблицы из PDF в виде HTML-таблиц.
Сохраните точную структуру, включая объединенные ячейки, заголовки и форматирование.
Каждая таблица должна быть семантически полной и сохранять связи между ячейками.
Для числовых значений сохраните их точный формат, как показано в документе.""""

заключительные замечания

С помощью методов и примеров кода, представленных в этой статье, вы уже можете начать использовать Gemini 2.0 для создания мощной системы обработки PDF-документов. От простого извлечения текста до сложного разбора структурированных данных, а затем семантического чанкинга, Gemini 2.0 показали отличную производительность и очень низкую стоимость.

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

Для получения дополнительной продукции, пожалуйста, ознакомьтесь с

См. подробнее

ShirtAI - проникающий интеллект Большая модель AIGC: начало эры двойной революции в инженерном деле и науке - Проникающая разведка
1:1 Восстановление Клода и GPT Официальный сайт - AI Cloud Native Приложение для просмотра прямых трансляций матчей Global HD Sports Viewing Player (рекомендуется) - Blueshirt Technology
Транзитный сервис на основе официального API - GPTMeta API Помогите, может ли кто-нибудь из вас дать несколько советов о том, как задавать вопросы в GPT? - знание
Глобальный цифровой магазин виртуальных товаров - Global SmarTone (Feng Ling Ge) Насколько мощной является функция Claude airtfacts, что GPT мгновенно перестает хорошо пахнуть? -BeepBeep
Поиск

категории.

Информационный бюллетень

рекламное пространство

Станьте свидетелями супермагии искусственного интеллекта вместе!

Примите в свои объятия помощника с искусственным интеллектом и повысьте свою производительность одним щелчком мыши!