Los errores de OCR no solo arruinan el texto, sino que destruyen en cascada cada paso posterior del pipeline: chunking, embeddings, recuperación.
Incluso un 2% de CER en un documento de 100 páginas son ~1000 caracteres distorsionados que terminan en la base de datos vectorial.
Un fragmento semánticamente relevante puede no ser recuperado debido a una sola palabra fusionada en una oración clave.
El postprocesamiento del texto después del OCR es más barato y eficaz que intentar corregir la recuperación en etapas posteriores.
Si su sistema RAG devuelve resultados irrelevantes o alucina con confianza, el primer lugar donde buscar el problema no es en el modelo, ni en los parámetros de chunking, ni en la base de datos vectorial. Búsquelo en el texto que cargó allí.
Un error de OCR no es un defecto local. Es una inyección de ruido en la entrada del pipeline que se multiplica en cada paso posterior. Token distorsionado → límite de oración erróneo → fragmento incorrecto → vector desplazado → recuperación omitida → respuesta alucinada. Cada paso amplifica el anterior.
Este artículo es un análisis técnico de dónde y cómo ocurre esto, con ejemplos reales de artefactos y métodos concretos de corrección. Si necesita una visión general de qué es el OCR y por qué es necesario en RAG, lea el artículo anterior de la serie: "OCR en sistemas de IA modernos: de documentos escaneados a RAG".
Pipeline de procesamiento de documentos escaneados: de PDF a embeddings
Antes de analizar dónde se rompe, fijemos el mapa completo del pipeline. Cada paso a continuación es un punto potencial de degradación de la calidad.
Paso
Qué sucede
Qué puede romperse por un mal OCR
1. Detección de tipo de PDF
Comprobación de la presencia de una capa de texto (PyMuPDF, pdfminer)
PDF híbrido parcialmente reconocido como basado en texto; la parte escaneada se omite
2. Preprocesamiento de imagen
Enderezamiento, eliminación de ruido, binarización, corrección de orientación
Enderezamiento o ruido omitidos → CER aumentado en el siguiente paso
3. OCR
Conversión de raster a texto (Tesseract, PaddleOCR, GPT-4o-mini)
Artefactos: palabras fusionadas, caracteres sustituidos, estructura de tablas rota, basura de ruidos
4. Postprocesamiento de texto
Limpieza de artefactos, normalización de puntuación, eliminación de líneas duplicadas
Si el paso se omite, toda la suciedad pasa adelante
5. Chunking
División del texto en fragmentos por tamaño/semántica
Límites de oración erróneos → fragmentos incorrectos; palabras fusionadas rompen la división de oraciones
6. Embeddings
Conversión de fragmento en vector (text-embedding-3-small, BGE, E5)
Texto distorsionado → vector desplazado; tokens OOV reducen la calidad de la representación
7. Indexación en Vector DB
Almacenamiento de vectores (Qdrant, pgvector, Weaviate)
El error del paso 6 se fija para siempre; reconstruir el índice es costoso
8. Recuperación
Búsqueda ANN por similitud coseno según la consulta
Vector de fragmento desplazado → menor similitud con la consulta correcta → el fragmento no entra en el top-k
9. Generación (LLM)
La LLM forma una respuesta basada en los fragmentos encontrados
Basura en el contexto → alucinaciones; ausencia de fragmento → respuesta "no encontrado" o inventada
La conclusión clave de este mapa: el error de OCR (paso 3) no se localiza en el paso 3. Flota por todo el pipeline y en el paso 9 se manifiesta como un problema de calidad de respuesta, lejos de la causa raíz.
Por eso la mayoría de los equipos buscan en el lugar equivocado: ajustan el chunking, cambian el modelo de embedding, configuran el reranker, pero el problema persiste porque reside en los datos de entrada.
Artefactos típicos de OCR: qué se rompe exactamente y por qué
A continuación, una taxonomía real de artefactos que encontrará en archivos corporativos típicos. Para cada uno, un ejemplo de cómo se ve el artefacto y qué rompe en el pipeline.
1. Palabras fusionadas (word merging)
Original en el documento
Resultado de OCR
término de validez del contrato — 12 meses
términovalidezdelcontrato— 12meses
suma total asciende a 47 500 UAH
sumatotalasciendea47500UAH
de acuerdo con el artículo 651 del Código Civil de Ucrania
Causa: contraste desigual entre caracteres y fondo, baja DPI, compresión JPEG.
Qué rompe: el divisor de oraciones no encuentra los límites de las oraciones; el tokenizador del modelo de embedding recibe un token OOV en lugar de dos palabras conocidas; la recuperación por la consulta "término de validez" no encuentra el fragmento con "términovalidezdelcontrato".
2. Sustitución de caracteres (character substitution)
Original
Resultado de OCR
Tipo de sustitución
dosis: 2,5 mg
dosis: З,5mg
dígito "2" → cirílico "З"
p. 4.1 del contrato
p. Ч.1 del contrato
dígito "4" → letra "Ч"
§ 14 de la Ley
S 14 de la Ley
signo de párrafo → ASCII "S"
factura № 2024-08-15
factura Ne 2024-О8-15
"№" → "Ne", "0" → "О"
Causa: similitud de formas de caracteres con baja resolución o mal contraste. Especialmente frecuente con fuentes mixtas cirílicas-latinas.
Qué rompe: los valores numéricos se convierten en texto; la búsqueda por valor exacto ("dosis 2,5 mg") no coincide con el artefacto; en documentos médicos y legales, este es un error crítico.
3. Caracteres y líneas fantasma (hallucinated content)
Fuente
Resultado de OCR
Página invertida (180°)
аМЫМ "9a18 40 S¥3IAVT ONIHLY3HS N33ML3E
Sello "COPIA" sobre el texto
Fragmentos de texto con inserciones de "COPIA" dentro de las oraciones
Sombras de doblez de papel
Caracteres o líneas adicionales entre párrafos
Página en blanco con ruidos del escáner
Líneas de caracteres aleatorios: .,;|||. :
Causa: el OCR intenta reconocer cualquier patrón de píxeles como un carácter. Texto invertido, ruidos del escáner, artefactos de compresión, todo se convierte en "texto".
Qué rompe: la basura entra en el vector como contenido válido; durante la recuperación, la LLM recibe un contexto ilegible y alucina o dice "no sé".
Causa: el OCR clásico no entiende las relaciones espaciales entre celdas. Lee el texto linealmente: de arriba abajo, de izquierda a derecha, ignorando la estructura de columnas.
Qué rompe: durante el chunking, toda la tabla entra en un bloque de texto lineal sin formato; la consulta "cuál es el precio del cable" no coincide con la línea sin estructura; el fragmento no transmite la relación semántica entre artículo, nombre y precio.
5. Saltos de línea y divisiones de palabras erróneas
Original
Resultado de OCR
responsabilidad por incumplimiento de los términos del contrato
responsabili- dad por incump- limiento de los té rminos del contrato
Suma total sin IVA asciende a 38 400,00 UAH
Suma total sin IVA asciende a 38 400,00 UAH
Causa: el OCR no siempre distingue entre un salto de línea y el final de una línea en texto con columnas o márgenes estrechos.
Qué rompe: "responsabili-" y "dad" se convierten en tokens separados; el guion fusionado por el salto de línea crea un token OOV; el valor numérico "38 400" se divide en dos líneas y se analiza como "38" y "400,00", tokens diferentes sin el contexto de la suma.
Cómo los errores de OCR arruinan la estrategia de chunking
El chunking es la división del texto en fragmentos que se vectorizarán y almacenarán en el índice. La calidad del fragmento determina la calidad de la recuperación: si el fragmento es semánticamente incorrecto, ni siquiera un embedding perfecto salvará la situación.
Consideremos tres estrategias principales de chunking y cómo los artefactos de OCR arruinan cada una de ellas.
Estrategia 1: Chunking de tamaño fijo (por número de tokens)
La estrategia más simple: dividir el texto en fragmentos de N tokens con solapamiento. Problema: depende completamente de la tokenización correcta.
Escenario
Texto limpio (fragmento esperado)
Con artefacto de OCR (fragmento real)
Las palabras fusionadas aumentan el "token"
"...de acuerdo con los términos del contrato, la parte A está obligada a..."
"...deacuerdoconlostérminosdelcontrato,laparteAestáobligadaa..." — un solo "token", el límite se desplaza
La basura infla el fragmento
500 tokens útiles
500 tokens, de los cuales 80-120 son basura (caracteres de ruidos, artefactos de saltos de línea). El contenido útil se comprime.
El salto de línea roto rompe la palabra
"responsabilidad" — 1 token
"responsabili-" + "dad" — 2 tokens diferentes, el primero es OOV
Estrategia 2: Chunking basado en oraciones
División por oraciones (divisores de oraciones spaCy, nltk). Requiere finales de oración correctos: puntos, signos de interrogación, exclamación con un espacio después.
Los artefactos de OCR rompen sistemáticamente la detección de límites de oraciones:
Artefacto
Qué le hace al divisor de oraciones
Consecuencia para el fragmento
Palabras fusionadas sin espacios
El divisor no encuentra la ruptura entre oraciones
Dos oraciones se fusionan en una: el fragmento contiene contexto mixto
Punto sin espacio después
El divisor ignora el final de la oración
Varias oraciones entran en un mismo fragmento; el límite semántico se rompe
Punto artefacto dentro de un número
"38.400" → el divisor corta la oración en medio del número
El número se rompe entre fragmentos; el contexto de la suma se pierde
Caracteres adicionales al final de la línea
"contrato.||| " → el divisor no reconoce el final
La oración no se divide; el límite del fragmento se desplaza varias oraciones hacia adelante
Estrategia 3: Chunking semántico / recursivo
Enfoques más avanzados (divisor recursivo de caracteres, chunking semántico con similitud de embedding) teóricamente deberían ser más resistentes a artefactos superficiales. En la práctica, no lo son.
El chunking semántico define los límites por el cambio de semántica entre oraciones adyacentes. Si las oraciones están distorsionadas por artefactos de OCR, el embedding de cada oración se desplaza, y el algoritmo "ve" una ruptura semántica donde no la hay, o no la ve donde sí la hay.
Resultado: los fragmentos se cortan en lugares "semánticamente correctos" para el texto distorsionado, pero no para el contenido original.
Cómo los errores de OCR se propagan por todo el pipeline de RAG
A menudo veo que muchos desarrolladores se centran en la elección de la LLM o el modelo de embedding, pero la calidad de la respuesta se determina mucho antes, en la etapa de OCR. Si el sistema reconoció incorrectamente el texto, este error entra en los fragmentos, luego en los embeddings, afecta la recuperación y finalmente se refleja en la respuesta final.
Por eso un error en la etapa de OCR puede propagarse por toda la cadena de procesamiento de documentos. Ni siquiera la LLM más moderna podrá encontrar información que se perdió o distorsionó durante el reconocimiento del texto.
En la práctica, la mejora de la calidad del OCR a menudo proporciona un mayor aumento en la precisión del sistema RAG que cambiar a una LLM más cara o utilizar un modelo de embedding más grande. Si la recuperación recibe datos incorrectos, ningún modelo generativo podrá compensar completamente este problema.
Conclusión práctica sobre chunking
Estoy convencido de que ninguna estrategia de chunking puede compensar sistémicamente un texto de entrada "contaminado". El postprocesamiento después del OCR es un paso obligatorio antes de cualquier chunking. Sin él, la diferencia entre el chunking de tamaño fijo y el semántico prácticamente desaparece: ambos enfoques comienzan a trabajar con fragmentos incorrectos, simplemente de manera diferente.
Влияние шума на качество embedding-векторов
Embedding-модель преобразует текстовый чанк в числовой вектор в n-мерном пространстве. Семантически похожие тексты имеют близкие векторы (высокая cosine similarity). Semantic search ищет именно такую близость.
OCR-шум влияет на вектор через два механизма:
Механизм 1: OOV-токены (out-of-vocabulary)
Если слово не встречалось в тренировочных данных модели — она кодирует его «по форме»: разбивает на subword-токены, каждый из которых имеет слабый или отсутствующий семантический сигнал. Вектор чанка смещается от правильной семантической позиции.
Токен в тексте
Тип
Влияние на вектор чанка
«відповідальність»
In-vocabulary
Сильный семантический сигнал; вектор в правильной зоне
«відповідаль-»
OOV (артефакт переноса)
Модель делит на subwords; сигнал слабый; вектор смещается
«терміндіїдоговору»
OOV (слипшиеся слова)
Неизвестный токен; вектор «тянет» чанк в сторону от семантики «срок действия договора»
«аМЫМ9a18S¥3»
OOV (мусор с перевернутой страницы)
Ни один subword не несет сигнала; вектор сильно смещается в «шумовую» зону
Механизм 2: Dilution эффект (разбавление сигнала)
Embedding-модель усредняет сигнал по всем токенам чанка (упрощенно). Если 15–20% токенов в чанке — мусор без семантической нагрузки, вектор «разбавляется»: он становится менее точным представлением истинного содержания.
Практический пример: чанк из 400 токенов, где 80 — артефакты (слипшиеся слова, символы шумов, ошибочные переносы). Эффективный семантический сигнал — не 100%, а ~80%. Cosine similarity с корректным запросом снизится пропорционально.
Снизится не до нуля — но может упасть ниже порога top-k retrieval. Если вы ищете top-5 чанков, смещенный чанк может оказаться на позиции 6 или 7 — и никогда не попасть в контекст LLM.
Наглядная иллюстрация: кейс юриста с AskYourDocs
Возвращаемся к кейсу из предыдущей статьи серии, но разбираем его на уровне векторов.
Клиент — юрист со специализацией в строительном праве — прислал 21 страницу из сканированного архива. Большинство страниц отсканированы под углом 90°, 180° или 270°. Стандартный OCR без коррекции ориентации читал их как:
Этот мусор попал в векторную базу как валидный текст. Что произошло с векторами:
Документ / чанк
Состояние текста
Вектор
Cosine similarity с запросом «условия расторжения договора»
Чанк со страницы 3 (перевернутая)
Мусор: «аМЫМ 9a18 S¥3IAVT...»
В «шумовой» зоне пространства
~0.08 (нерелевантный)
Чанк со страницы 7 (нормальная)
Читабельный текст об условиях договора
В правильной семантической зоне
~0.74 (релевантный, попадает в top-5)
Чанк со страницы 12 (перевернутая)
Мусор
В «шумовой» зоне
~0.06
Из 21 страницы нормально проиндексировалось 5–6. Остальные существовали в векторной базе как статистический шум — занимали место, но не давали полезного retrieval. При этом система не сообщала о проблеме: она возвращала результаты, просто с 5–6 страниц вместо 21.
Точность ответов на тестовые вопросы: 17%. После внедрения Vision OCR с автокоррекцией ориентации: 50% — на том же проблемном документе.
Почему семантически релевантный чанк не попадает в retrieval
Даже если чанк семантически правильный — он может не попасть в результаты retrieval по нескольким механизмам, связанным с OCR-шумом.
Сценарий 1: Ключевое слово искажено — поиск не матчит
Запрос: «какая ответственность за нарушение сроков»
Чанк в базе: «...відповідаль-ність за поруш-ення строків — штраф 0,1% за кожен день...»
Даже если embedding-модель частично «понимает» искаженные слова через subword-токены — cosine similarity между вектором запроса и вектором чанка будет ниже идеальной. Если в вашем индексе есть 50 других чанков об «ответственности» с чистым текстом — искаженный чанк окажется ниже threshold и не попадет в top-k.
Сценарий 2: Чанк «разбавлен» мусором до нерелевантности
Чанк A (чистый текст)
Чанк B (с OCR-шумом)
«Срок выполнения обязательств — 30 календарных дней с момента подписания акта»
«Строк виконання|||зобов'язань — ЗО ка-лендарних днів змо-менту підписання ак-ту..;;..»
Чанк B содержит ту же информацию, но: «ЗО» вместо «30» (кириллица вместо цифры), слипшийся перенос «змо-менту», мусор «..;;..» в конце. Его вектор отличается от вектора чанка A. Запрос «срок выполнения 30 дней» будет матчиться с A лучше чем с B — хотя оба несут одинаковый смысл.
Сценарий 3: Правильный документ есть, но не в top-k
Самый опасный сценарий. Релевантный чанк существует в индексе — но из-за смещенного вектора он на позиции 8 или 12, а не в top-5. LLM получает 5 менее релевантных чанков и либо отвечает на основе частичной информации, либо галлюцинирует.
При этом в логах все выглядит корректно: retrieval вернул k результатов, LLM сгенерировал ответ. Никакого сигнала о проблеме нет — только неправильный ответ.
Сценарий 4: False positive retrieval — мусор с высокой similarity
Противоположная ситуация: мусорный чанк с перевернутой страницы попадает в top-k из-за статистического совпадения токенов. LLM получает нечитабельный контекст и либо игнорирует его (хороший сценарий), либо пытается построить ответ на основе мусора (плохой сценарий).
Recall и Precision в RAG после плохого OCR: метрики и примеры
Для оценки качества retrieval используют две базовые метрики:
Recall@k — доля релевантных документов, которые попали в top-k результатов. Если есть 3 релевантных чанка и все 3 в top-5 — Recall@5 = 1.0.
Precision@k — доля релевантных среди возвращенных. Если в top-5 есть 2 релевантных и 3 нерелевантных — Precision@5 = 0.4.
Как OCR-шум влияет на эти метрики
Состояние OCR
Типичный Recall@5
Типичный Precision@5
Основная причина деградации
Чистый текст (text-based PDF)
0.80–0.92
0.65–0.80
Базовый уровень; деградация от сложности запроса
Качественный OCR (300+ DPI, CER <1%)
0.72–0.85
0.60–0.75
Минимальные OCR-артефакты; небольшой drift векторов
Средний OCR (150–300 DPI, CER 2–5%)
0.50–0.70
0.40–0.60
Систематические слипшиеся слова и замена символов; частые OOV
Плохой OCR (перевернутые, низкий DPI)
0.15–0.40
0.15–0.35
Массовый мусор в векторах; false positives и false negatives
Смешанный архив (кейс юриста)
~0.17 (17% ответов)
Непредсказуемо
Большинство страниц — перевернутые сканы; 5–6 из 21 нормально проиндексировано
Пример измерения: тест на реальных вопросах
Практический способ измерить влияние OCR на Recall — подготовить набор вопросов, ответы на которые вы знаете точно, и проверить попадают ли нужные чанки в retrieval.
Вопрос
Ожидаемый чанк
До постпроцессинга (top-5 содержит?)
После постпроцессинга (top-5 содержит?)
Какая ответственность за задержку платежа?
п. 8.3 договора
Нет (чанк на позиции 9)
Да (позиция 2)
Какова общая стоимость работ?
п. 3.1 договора
Нет (число «З8400» не матчится)
Да (после коррекции «З8400» → «38400»)
Кто отвечает за технический надзор?
п. 5.2 договора
Да (текст чистый)
Да
Какой срок гарантии на работы?
п. 9.1 договора
Нет (страница перевернута, мусор)
Да (после Vision OCR)
20–30 таких вопросов на репрезентативной выборке архива дают гораздо более точную картину чем любой синтетический benchmark.
Métodos prácticos de mejora: preprocesamiento, postprocesamiento, selección del motor OCR
A continuación se presentan acciones concretas que producen un efecto medible. Dividido por niveles de impacto.
Nivel 1: Preprocesamiento de imágenes (antes de OCR)
Operación
Cuándo aplicar
Impacto en CER
Herramientas
Corrección automática de orientación
Siempre para PDFs escaneados
Crítico: sin él, las páginas invertidas dan un 0% de precisión
Tesseract OSD, PyMuPDF + heurísticas, GPT-4o-mini
Deskewing (alineación de inclinación)
Si los escaneos son de un escáner manual
Reduce CER en 1-3% para inclinaciones >2°
OpenCV, Pillow, biblioteca deskew
Denoising (eliminación de ruido)
Documentos antiguos o mal escaneados
Reduce la cantidad de caracteres fantasma
OpenCV fastNlMeansDenoising, filtro Pillow
Binarización (conversión a blanco y negro)
Documentos con fondo irregular
Mejora el contraste del texto; reduce CER en escaneos débiles
Umbral adaptativo (OpenCV), método Sauvola
Aumento de DPI
Si el original es <200 DPI
Aumentar a 300 DPI mediante escalado reduce CER
Pillow resize + Lanczos, OpenCV
Detección y recorte de márgenes
Si los escaneos tienen márgenes o bordes vacíos anchos
Reduce la cantidad de caracteres fantasma de los bordes de la hoja
Detección de contornos de OpenCV
Nivel 2: Postprocesamiento de texto (después de OCR, antes de chunking)
Este es el nivel más efectivo y subestimado. El postprocesamiento es más barato que reiniciar el OCR y tiene un efecto medible en la recuperación.
Operación
Qué corrige
Complejidad de implementación
Eliminación de líneas basura
Líneas sin letras o con >60% de caracteres especiales (artefactos de ruido e inversiones)
Baja: regex o verificación de ratio
Normalización de espacios
Espacios dobles, tabulaciones, espacios ininterrumpibles de OCR
Media: requiere análisis contextual o un diccionario
Detección y eliminación de líneas duplicadas
Encabezados, números de página que se repiten en cada chunk
Baja: comparación de hashes de líneas
Detector de calidad de texto (detector de basura)
Detección automática de páginas/chunks con > umbral de basura; enrutamiento a Vision OCR
Media: ratio de caracteres legibles + verificación de idioma (langdetect)
Corrección de texto con LLM
Restauración de palabras, corrección de sustituciones de caracteres, reestructuración de tablas
Alta: cuesta tokens; solo es apropiado para documentos críticos
Detector de basura: implementación práctica
El detector de basura es un componente simple pero muy efectivo. Lógica:
Verificación
Umbral (aproximado)
Acción
Proporción de caracteres alfabéticos en el texto
< 0.40
Enrutamiento a Vision OCR o rechazo
Detección de idioma (confianza de langdetect)
< 0.70 o idioma desconocido
Enrutamiento a Vision OCR
Longitud media de palabra
< 2 o > 20 caracteres
Sospecha de palabras pegadas o basura; requiere verificación
Número de tokens OOV (fuera del vocabulario)
> 25% de palabras ausentes en el diccionario
Alta probabilidad de artefactos; enrutamiento a Vision OCR
Nivel 3: Selección del motor OCR
Motor
Escenario óptimo
Limitaciones
Costo
Tesseract 5+
Escaneos limpios, 300+ DPI, fuente estándar
Malo con tablas y diseños complejos; requiere preprocesamiento de alta calidad
Gratis, autoalojado
PaddleOCR
Documentos multilingües, mejor manejo del diseño
Más difícil de desplegar; GPU deseable para velocidad
Gratis, autoalojado
olmOCR / olmOCR-2
Diseños complejos, documentos académicos y técnicos
Requiere GPU; modelo nuevo - menos casos de producción
Gratis, autoalojado
GPT-4o-mini (Vision OCR)
Escaneos invertidos, tablas, texto mixto, fallback para páginas problemáticas
Más caro; solo en la nube; latencia de API
~$0.015–0.03 por página
Azure Document Intelligence / Google Document AI
Grandes volúmenes con marcado estructural integrado (tablas, campos clave)
Solo en la nube; GDPR requiere DPA; costo a escala
$1–2 por 1000 páginas (básico)
Docling (IBM)
PDFs académicos y técnicos; salida en Markdown conservando la estructura
En desarrollo activo; verifica la compatibilidad con tu idioma
Gratis, autoalojado
Estrategia de selección: árbol de decisiones
Condición
Recomendación
GDPR / los datos no se pueden enviar a la nube
Tesseract o PaddleOCR como base + olmOCR como fallback
Los documentos contienen tablas complejas
Añadir Vision OCR (GPT-4o-mini) o Docling para tablas
Hay páginas invertidas o mal escaneadas
Corrección de orientación obligatoria + Vision OCR como fallback
Archivo grande (100 000+ páginas), documentos estándar
Tesseract/PaddleOCR con procesamiento paralelo; Vision solo para los problemáticos
Archivo pequeño (<5 000 páginas), la calidad es más importante que el costo
GPT-4o-mini o Azure Document Intelligence para todo el archivo
Cuándo el OCR no es suficiente y se necesita un enfoque de Visión
Incluso un pipeline de OCR perfectamente configurado tiene limitaciones sistémicas. Existe una clase de documentos en la que ninguna mejora de preprocesamiento dará un resultado satisfactorio para RAG.
Tipo de documento
Problema con OCR
Qué ofrece el enfoque de Visión
Tablas complejas con celdas fusionadas
OCR devuelve texto lineal sin mantener la relación entre celdas
VLM comprende las relaciones espaciales; devuelve una tabla estructurada (Markdown/JSON)
Diseño de varias columnas
OCR lee las columnas como un solo flujo de texto; las oraciones de diferentes columnas se mezclan
VLM identifica correctamente las columnas y lee cada una de forma independiente
Texto manuscrito y formularios rellenados a mano
CER del 3-5% incluso en los mejores modelos OCR; la escritura única da una precisión aún peor
Los VLM grandes manejan mejor las escrituras no estándar; aún requiere verificación
Documentos con diagramas, dibujos, infografías
OCR no lee el contenido gráfico; devuelve un resultado vacío o artefactos de bordes
VLM puede describir un diagrama, extraer números de un gráfico, identificar elementos
DPI muy bajo o documento muy dañado
El preprocesamiento no salva; la calidad de píxeles de origen es demasiado baja
VLM a veces se las arregla mejor gracias a una comprensión contextual más amplia
Escaneos invertidos (sin corrección automática)
OCR sin corrección OSD devuelve basura o un resultado vacío
VLM reconoce la orientación y lee correctamente sin corrección previa
Pipeline híbrido: arquitectura práctica
La estrategia óptima para la mayoría de los archivos reales no es "OCR o Visión", sino el enrutamiento:
Este enfoque permite procesar el 80-90% de los documentos a través de un OCR autoalojado económico y dirigir solo las páginas problemáticas a Vision OCR. El costo de Vision OCR con esta estrategia se reduce 5-10 veces en comparación con una transición completa.
Lo que Vision OCR no resuelve
El enfoque de Visión no es una solución universal. Limitaciones:
Costo para grandes volúmenes: 100 000 páginas a través de GPT-4o-mini — ~$1 500–3 000.
Latencia: la llamada a la API tarda de 2 a 10 segundos por página. Inaceptable para sistemas en tiempo real.
Límites de tasa: sin acceso empresarial, el procesamiento paralelo de un archivo grande está restringido.
GDPR: los documentos se envían a un proveedor externo. Requiere DPA y puede ser bloqueado por la política de cumplimiento.
Alucinaciones de VLM: en documentos muy dañados, VLM puede "inventar" contenido ilegible. Requiere validación.
En mi opinión, el OCR es una de las etapas más importantes en un pipeline RAG. Es el texto obtenido después del reconocimiento del documento el que se utiliza para crear los embeddings. Si el OCR comete errores, estos entran en la representación vectorial de los datos y pueden empeorar la calidad de la búsqueda semántica.
¿Puede RAG funcionar sin OCR?
Sí, pero depende del tipo de documentos. Si trabajo con PDFs digitales donde el texto ya está disponible en formato legible por máquina, el OCR no es necesario. Para documentos escaneados, fotografías o imágenes de texto, obtener un resultado de calidad sin OCR o modelos de Visión es prácticamente imposible.
¿Qué es más importante: OCR o LLM?
Creo que para los sistemas RAG orientados a documentos, un OCR de calidad es a menudo más importante que la elección de una LLM específica. Incluso el modelo de lenguaje más avanzado no podrá responder correctamente a una pregunta si la información necesaria se perdió o distorsionó durante el reconocimiento del documento.
¿Qué OCR es mejor para RAG?
Todo depende del tipo de documentos y del presupuesto. Para muchos proyectos, Tesseract o PaddleOCR son suficientes. Si se requiere alta calidad en el manejo de tablas, diseños complejos y documentos corporativos, recomiendo considerar Google Document AI, AWS Textract, Docling o enfoques de Visión modernos.
¿Se necesita OCR para PDFs digitales?
En la mayoría de los casos, no. Si el PDF ya contiene una capa de texto, intento extraer el texto directamente sin OCR. Es más rápido, más barato y generalmente proporciona una mayor precisión. El OCR solo tiene sentido usarlo para PDFs escaneados o documentos donde la capa de texto está ausente o dañada.
Conclusiones
La degradación de RAG debido a un OCR deficiente no es un problema del modelo. Es un problema de ingeniería de los datos de entrada que tiene puntos de corrección concretos.
¿Dónde exactamente se rompe el pipeline y qué hacer al respecto?
Dónde se rompe
Síntoma
Corrección
Preprocesamiento omitido
Las páginas invertidas dan un 0% de precisión OCR
Corrección automática de orientación (OSD o heurística) antes de OCR
OCR sin postprocesamiento
Palabras pegadas, líneas basura, saltos de línea erróneos van al chunking
Normalización de espacios, unión de saltos de línea, eliminación de basura — siempre
Chunking con texto sucio
Límites de chunk incorrectos, contexto mezclado
Postprocesamiento antes del chunking — no después
Tokens OOV en embeddings
Vectores sesgados; similitud coseno por debajo del umbral
Corrección de palabras pegadas y sustituciones de caracteres antes del embedding
Basura en la base de datos vectorial
Falsos positivos en la recuperación; LLM recibe contexto ilegible
Detector de basura antes de la indexación; enrutamiento a Vision OCR
Falta de monitoreo de calidad
El sistema devuelve "silenciosamente" respuestas incorrectas sin señales
Conjunto de prueba con 20-30 preguntas; medición de Recall@5 en una muestra representativa
Orden de acción prioritario
Si actualmente está lanzando o ajustando RAG en documentos escaneados, esta es la secuencia con el mayor ROI:
Auditoría del archivo — ¿qué proporción son escaneos? ¿Hay páginas invertidas? ¿Cuál es la calidad típica?
Añadir corrección de orientación — incluso si la mayoría de las páginas son normales, una página invertida en un documento crítico cuesta caro.
Añadir postprocesamiento básico — normalización de espacios, unión de saltos de línea, eliminación de líneas basura. Se implementa en unas pocas horas, produce un efecto medible en la recuperación.
Construir un conjunto de preguntas de prueba — 20-30 preguntas con respuestas conocidas. Medir Recall@5 antes y después de cada cambio.
Añadir un detector de basura y enrutamiento a Vision OCR para páginas problemáticas.
Solo después de eso — ajustar parámetros de chunking, modelos de embedding, reranker.
Los pasos 1-3 dan más efecto que cambiar el modelo de embedding de 1536 a 3072 dimensiones. Pero la mayoría de los equipos comienzan con el paso 6, y se preguntan por qué el resultado no mejora.