Как работает OCR для RAG? Недостатки и когда его недостаточно?
Краткий тезис
OCR (Optical Character Recognition) — технология извлечения текста из изображений и сканов. В RAG-системах OCR используется для преобразования неструктурированных документов (PDF, сканы) в текстовые чанки для индексации. Однако OCR имеет фундаментальные ограничения: он теряет логическую структуру документа (заголовки, таблицы, связи с изображениями) и подвержен ошибкам на сложных шрифтах. Когда эти недостатки критичны (финансовые отчёты, юридические документы, презентации), одного OCR недостаточно — требуется layout-aware parsing и использование Vision-Language LLM (VL-LLM).
1. Термин: OCR (Optical Character Recognition)
OCR — это процесс автоматического распознавания печатных или рукописных символов на изображении и преобразования их в машиночитаемый текст. В контексте RAG OCR служит первым этапом пайплайна индексации для документов, которые не имеют текстового слоя (например, отсканированные PDF, фотографии документов).
Основные этапы работы OCR
- Предобработка изображения — бинаризация, устранение шума, выравнивание.
- Сегментация — разбиение на строки, слова, символы.
- Распознавание — классификация каждого сегмента как символа (с использованием CNN, LSTM или Transformer).
- Постобработка — коррекция ошибок с помощью словарей, языковых моделей.
Популярные OCR-движки
- Tesseract — открытый движок от Google, поддерживает много языков, но чувствителен к качеству изображения.
- EasyOCR — на основе глубокого обучения, проще в использовании, лучше справляется с нестандартными шрифтами.
- PaddleOCR — современный движок от Baidu, высокая точность, поддержка таблиц и многоязычности.
2. Как работают популярные OCR-движки
| Движок | Архитектура | Языки | Особенности |
|---|---|---|---|
| Tesseract | LSTM (4.0) + классический пайплайн | 100+ | Лучший для печатного текста высокого качества, требует настройки под конкретный документ |
| EasyOCR | CRAFT (детектор) + CRNN (распознаватель) | 80+ | Простой API, хорошо работает на фотографиях и размытых изображениях |
| PaddleOCR | PP-OCRv4 (MobileNet + Transformer) | 80+ | Быстрый, точный, встроенная поддержка таблиц и layout-анализа |
Пример использования EasyOCR на Python
import easyocr
reader = easyocr.Reader(['ru', 'en'])
result = reader.readtext('scan.png')
# result — список кортежей: (bbox, текст, уверенность)
for (bbox, text, conf) in result:
print(f'{text} (уверенность: {conf:.2f})')
3. Преимущества использования OCR в RAG
- Доступность: позволяет индексировать миллионы отсканированных документов, которые иначе были бы недоступны для текстового поиска.
- Простота интеграции: готовые библиотеки (Tesseract, EasyOCR) легко встраиваются в пайплайн.
- Скорость: современные OCR-движки обрабатывают страницу за 0.5–2 секунды на GPU.
- Поддержка множества языков: особенно важно для мультиязычных RAG-систем.
OCR остаётся базовым инструментом для первичного извлечения текста, когда документы не содержат сложной вёрстки (простые письма, статьи, книги).
4. Недостатки OCR: потеря структуры
OCR извлекает текст как плоскую последовательность символов, полностью игнорируя логическую структуру документа:
- Заголовки и подзаголовки — теряют иерархию (H1, H2).
- Колонки — текст смешивается, если не применять layout-анализ.
- Списки — маркеры и нумерация могут быть распознаны как обычные символы.
- Таблицы — ячейки и строки не сохраняются; данные превращаются в бессвязный поток.
Пример: Таблица с финансовыми показателями после OCR может выглядеть так:
Выручка 2023 2024 1 000 000 1 200 000
Себестоимость 600 000 700 000
Без понимания структуры RAG не сможет ответить на вопрос «Какая выручка в 2024 году?».
5. Недостатки OCR: ошибки распознавания
Даже лучшие OCR-движки допускают ошибки в сложных условиях:
| Условие | Типичная ошибка | Пример |
|---|---|---|
| Плохое качество скана (низкое разрешение, шум) | Замена символов | «O» → «0», «l» → «1» |
| Нестандартные шрифты (рукописные, декоративные) | Пропуск или неверный символ | «а» → «o» |
| Перекос страницы | Смещение строк, слияние слов | «привет мир» → «приветмир» |
| Артефакты (тени, блики) | Вставка лишних символов | «текст.» → «текст.,» |
Влияние на RAG ошибки OCR снижают качество эмбеддингов (поиск по искажённым словам) и могут привести к неверным ответам LLM.
6. Недостатки OCR: отсутствие семантического понимания
OCR не способен установить логические связи между текстом и окружающими элементами:
- Диаграммы и графики — текст подписи распознаётся, но не связывается с визуальным трендом.
- Изображения с подписями — подпись отделяется от картинки.
- Сноски и примечания — теряется привязка к основному тексту.
- Водяные знаки, штампы — могут быть распознаны как часть основного текста.
Это критично для документов, где смысл рождается из сочетания текста и графики (презентации, инфографика, технические схемы).
7. Когда OCR недостаточно: конкретные сценарии
| Сценарий | Почему OCR не справляется | Что нужно вместо |
|---|---|---|
| Финансовые отчёты (таблицы с цифрами) | Теряется структура строк/столбцов | Layout-aware parsing + табличные модели (например, Table Transformer) |
| Юридические документы (контракты, иски) | Важна иерархия разделов, пунктов, подпунктов | Document understanding (LayoutLM, BROS) |
| Презентации (слайды с диаграммами) | Не распознаются связи текста и визуальных элементов | VL-LLM (GPT-4V, LLaVA) для мультимодального понимания |
| Рукописные заметки | Высокий уровень ошибок | Специализированные HTR-модели (TrOCR, Handwriting Transformer) |
| Сканы низкого качества (старые книги, микрофильмы) | Множественные ошибки, потеря информации | Улучшение изображения (SRGAN) + дообучение OCR на похожих данных |
8. Альтернативы и улучшения: Layout-aware parsing и VL-LLM
Когда OCR недостаточно, применяют более продвинутые подходы:
parsing|Layout-aware parsing — извлечение текста с сохранением пространственной структуры:
- Detectron2 / LayoutParser — детекция блоков (текст, таблица, изображение) на странице.
- Unstructured.io — библиотека для парсинга PDF, DOCX, HTML с сохранением структуры.
- Table Transformer — специализированная модель для распознавания таблиц.
Vision-Language LLM (VL-LLM) — мультимодальные модели, которые «видят» документ целиком:
- GPT-4V / GPT-4o — могут отвечать на вопросы по изображению документа, понимая таблицы и диаграммы.
- LLaVA — open-source альтернатива, дообучаемая под конкретные домены.
- Qwen-VL — эффективна для китайских и многоязычных документов.
Гибридный пайплайн для сложных документов
- Layout-анализ (Detectron2) → выделение блоков.
- OCR (PaddleOCR) → извлечение текста из каждого блока.
- Классификация блоков (таблица, заголовок, изображение).
- Специализированные модели (Table Transformer для таблиц, VL-LLM для изображений).
- Сборка структурированного документа (JSON с метаданными).
9. Пет-проект для закрепления
Задача Разработать RAG-систему для финансовых отчётов (PDF-сканы с таблицами), которая корректно отвечает на вопросы по цифрам.
Инструменты
- Python, Jupyter Notebook
- PaddleOCR (для OCR с поддержкой таблиц)
- LayoutParser (для детекции табличных блоков)
- Camelot или Tabula (для извлечения таблиц из PDF, если есть текстовый слой)
- ChromaDB (векторная БД)
- LangChain (пайплайн RAG)
- GPT-4o или LLaVA (для мультимодальных запросов)
Шаги:
- Собрать 10–20 сканов финансовых отчётов (можно выдумать).
- Реализовать пайплайн: LayoutParser → выделение табличных регионов → PaddleOCR (с опцией
det_db_thresh=0.3для лучшей детекции) → структурирование таблиц в pandas DataFrame. - Сохранить каждую таблицу как отдельный чанк с метаданными (год, компания, тип показателя).
- Построить векторный индекс по тексту таблиц (эмбеддинги text-embedding-3-small).
- Реализовать retrieval: для вопроса «Какая выручка в 2024?» ищем чанки, содержащие «выручка» и «2024».
- Подать найденные таблицы в LLM с инструкцией «Ответь на вопрос, используя данные из таблиц».
- Сравнить качество ответов с пайплайном, где используется только наивный OCR (Tesseract без layout).
Ожидаемый результат Гибридный пайплайн даёт точные ответы на числовые вопросы (например, «1 200 000»), в то время как наивный OCR выдаёт ошибки или неструктурированный текст.
10. Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 549 | Как обрабатывать PDF-документы в RAG? |
| 551 | Что такое мультимодальный RAG? |
| 535 | Какие стратегии chunking'а вы знаете? |
| 540 | Как вы оцениваете качество retrieval'а? |
| 560 | Что такое Agentic RAG и как он устроен? |
11. Навигация
- Предыдущий: 549
- Следующий: 551
- Индекс: 00. Индекс разборов
Навигация
- Предыдущий: 549
- Следующий: 551
- Индекс: 00. Индекс разборов