Игорь Градов
Игорь Градов
6 мин
ai

Пиксельный RAG нейросети ищет по картинкам страниц: парсить PDF больше не нужно

Поиск в документах через визуальные фрагменты, а не через текст, звучит как экзотика, но именно так работает пиксельно-нативный RAG (RAG нейросети, то есть генерация ответов с опорой на найденные фрагменты, только вместо текстовых кусков система ищет по изображениям страниц).

Пиксельный RAG нейросети ищет по картинкам страниц: парсить PDF больше не нужно
Почему это важно

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

Разработчик опубликовал открытый туториал, где собирается полный пайплайн с нуля: веб-страницы и PDF превращаются в изображения, делятся на перекрывающиеся плитки, индексируются мультимодальными (работающими одновременно с текстом и картинками) эмбеддингами через SigLIP, CLIP или Qwen3-VL, а поиск идёт по векторному индексу FAISS. Дополнительно подключается OCR-гибрид с BM25 и reciprocal rank fusion для повышения точности. Результат отдаётся через FastAPI-сервис.

Ниже адаптированная инструкция с акцентом на работу с кириллицей.

Что понадобится?

  • Python 3.10+ и менеджер пакетов pip
  • Google Colab (бесплатный GPU-тариф подойдёт) или локальная машина с 8+ ГБ RAM
  • Библиотеки: transformers, faiss-cpu, pymupdf, pillow, playwright, rank-bm25, pytesseract, torch, sentencepiece
  • Tesseract OCR с русскоязычным пакетом (tesseract-ocr-rus), без него кириллица в гибридном поиске не распознаётся
  • Браузер Chromium (устанавливается автоматически через Playwright)
  • Время: первая настройка занимает 10-15 минут, индексация пяти документов ещё 5-7 минут

Пошаговая инструкция

  1. Установите зависимости и Chromium. В Colab или терминале выполните:
pip install pillow numpy faiss-cpu pymupdf transformers fastapi uvicorn requests matplotlib tqdm rank-bm25 playwright sentencepiece pytesseract torch torchvision
python -m playwright install --with-deps chromium
apt-get install -y tesseract-ocr tesseract-ocr-rus

Пакет tesseract-ocr-rus добавляет русскоязычную модель распознавания. Без него OCR-ветка гибридного поиска будет игнорировать кириллицу.

  1. Подготовьте конфигурацию. Создайте объект Config и укажите URL-адреса документов. Для кириллицы замените англоязычные Wikipedia-ссылки на русскоязычные:
from dataclasses import dataclass, field
from typing import List

@dataclass
class Config:
    urls: List[str] = field(default_factory=lambda: [
        "https://ru.wikipedia.org/wiki/Генеративный_искусственный_интеллект",
        "https://ru.wikipedia.org/wiki/Векторная_база_данных",
        "https://ru.wikipedia.org/wiki/Трансформер_(модель_машинного_обучения)",
    ])
    tile_width: int = 1024
    tile_height: int = 1024
    tile_overlap: int = 128
    backend: str = "siglip"
    model_id: str = "google/siglip-base-patch16-224"
    use_ocr_hybrid: bool = True
    top_k_tiles: int = 20
    n_docs: int = 5

Параметры tile_width и tile_height задают размер плиток в пикселях. Перекрытие tile_overlap (128 пикселей) гарантирует, что текст на границе не обрежется.

  1. Отрендерите страницы как изображения. Playwright открывает каждый URL в безголовом Chromium и делает полностраничный скриншот. PDF-файлы рендерятся через PyMuPDF. Максимальная высота страницы ограничена параметром max_page_height (24 000 пикселей), чтобы не переполнить память.

  2. Нарежьте изображения на перекрывающиеся плитки. Каждый скриншот делится на фрагменты заданного размера. Пустые плитки (стандартное отклонение пикселей ниже порога blank_std_threshold = 6.0) отбрасываются. Дубликаты удаляются по расстоянию Хэмминга (порог dedup_hamming = 4).

  3. Сгенерируйте эмбеддинги (векторные представления плиток). Каждый фрагмент прогоняется через мультимодальную модель SigLIP, CLIP или Qwen3-VL. На выходе получается вектор фиксированной длины. Батч-размер по умолчанию 8.

  4. Постройте FAISS-индекс. Векторы складываются в индекс FAISS (библиотека для быстрого поиска ближайших соседей). При количестве плиток свыше 2 000 автоматически используется IVF-индекс с параметром ivf_nprobe = 16.

  5. Подключите OCR-гибрид для кириллицы. Tesseract извлекает текст из каждой плитки. Для русского языка укажите язык явно:

import pytesseract

text = pytesseract.image_to_string(tile_image, lang="rus")

Извлечённые тексты индексируются алгоритмом BM25. Финальный ранжир объединяет визуальный (dense) и текстовый (sparse) поиск через reciprocal rank fusion (RRF, метод слияния двух списков результатов, где каждому элементу присваивается вес, обратный его позиции).

  1. Запустите поиск. Отправьте текстовый запрос. Система найдёт ближайшие плитки, агрегирует результаты до уровня документов и вернёт топ-5 страниц с визуальными фрагментами-доказательствами.
Как это работает на практике

Запрос на русском: «как растения превращают солнечный свет в энергию». Система рендерит пять проиндексированных страниц, нарезает их на плитки, прогоняет через SigLIP. FAISS возвращает 20 ближайших плиток. OCR-ветка через Tesseract (с языком rus) параллельно ищет по тексту. RRF объединяет оба списка. Результат: на первом месте страница о фотосинтезе, система показывает конкретный фрагмент скриншота с диаграммой световых реакций. Качество проверяется метриками Recall@k (доля найденных релевантных документов в топ-k) и MRR (средний обратный ранг, mean reciprocal rank).

Частые ошибки
  • Забыли tesseract-ocr-rus. Без русскоязычного пакета OCR-ветка выдаёт мусор вместо текста, и гибридный поиск работает хуже чистого визуального. Проверьте: tesseract --list-langs должен показать rus.
  • Слишком маленькие плитки. При tile_height ниже 200 пикселей фрагменты теряют контекст, и эмбеддинги становятся неинформативными.
  • Память в Colab. Параметр max_page_height = 24000 при device_scale > 1.0 легко съедает RAM. Для бесплатного Colab оставьте device_scale = 1.0.
  • Модель не видит мелкий текст. SigLIP и CLIP рассчитаны на изображения 224x224 пикселей. Плитка 1024x1024 сжимается, мелкий шрифт теряется. Для документов с мелким кеглем попробуйте бэкенд Qwen3-VL (параметр backend: "qwen"), он принимает изображения большего разрешения.
  • Путаница dense и sparse весов. Параметры dense_weight и sparse_weight по умолчанию равны 1.0. Для кириллических PDF, где OCR работает с ошибками, имеет смысл снизить sparse_weight до 0.5 и опираться больше на визуальный поиск.

Что это даёт на практике, по ролям?

Авторам Дзена. Если вы работаете с PDF-источниками (исследования, отчёты, презентации), пиксельный RAG нейросети позволяет искать по визуальному содержимому, а не мучиться с копипастом из сканов. Загрузите пять-десять ключевых источников, постройте индекс и задавайте вопросы на русском.

Маркетологам. Конкурентный анализ по скриншотам лендингов, медиакитов, PDF-прайсов: система находит визуально похожие фрагменты без ручного разбора. Полезно, когда источники приходят картинками в мессенджере.

Предпринимателям в РФ. Все компоненты открытые и бесплатные. FAISS, SigLIP, Tesseract работают локально, данные не уходят на внешние серверы. Для продакшена нужен сервер с GPU: подойдёт арендованный инстанс на Yandex Cloud или Selectel.

Мнение редакции dzen.guru

Пиксельный подход к RAG нейросети решает конкретную и болезненную проблему: PDF с таблицами, сканы договоров, презентации с графиками, всё то, откуда классический парсер извлекает кашу. По моим наблюдениям, для кириллицы главное узкое место не эмбеддинги, а качество Tesseract: на чистых PDF он работает прилично, на фотографиях документов ошибается. Если OCR даёт мусор, отключайте гибрид (use_ocr_hybrid = False) и работайте чисто через визуальный поиск. Честная оговорка: подход требует GPU для комфортной скорости. На CPU индексация пяти страниц занимает минуты, а не секунды. Для большой базы документов это пока инструмент для энтузиастов, а не готовое рабочее решение.

Попробуйте AI-инструменты dzen.guru

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

Подписаться

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

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

Starlink приносит $4,2 млрд за квартал: спутниковый интернет и его цена стали опорой SpaceX
ai

Starlink приносит $4,2 млрд за квартал: спутниковый интернет и его цена стали опорой SpaceX

SpaceX второго августа отчиталась за квартал, и главная цифра оказалась не про ракеты: выручка ИИ-подразделения выросла втрое, до 2,6 млрд долларов, обогнав…

4 мин
OpenAI опубликовала переписки в суде с Apple: обвинения в краже тайн оспорены
ai

OpenAI опубликовала переписки в суде с Apple: обвинения в краже тайн оспорены

Юридический конфликт между Apple и OpenAI перешёл из зала суда в публичное пространство: 11 июня OpenAI опубликовала переписки сотрудников и юристов, чтобы…

5 мин
AMD наращивает бизнес центров обработки данных
ai

AMD наращивает бизнес центров обработки данных

Почему это важно AMD зарабатывает на дата-центрах больше, чем на всём остальном бизнесе вместе взятом, и обещает удвоить этот сегмент ещё раз к 2027 году, а…

5 мин