Phase 19 - Lesson 04

Capstone 04 — Multimodal Document QA (Vision-First PDF, Tables, Charts)

La frontera de preguntas y respuestas (QA) sobre documentos en 2026 se alejó del modelo clásico de OCR-seguido-de-texto y migró hacia la recuperación basada en visión con interacción tardía (vision-first late interaction). ColPali, ColQwen2.5 y ColQwen3-omni tratan cada página de un archivo PDF como una imagen, la incrustan (embed) usando representaciones multivectoriales de interacción tardía y permiten que la consulta haga atención directamente sobre los parches (patches) de la imagen. En informes financieros 10-K, artículos científicos y notas manuscritas, este patrón supera por un amplio margen a las pipelines basadas en OCR. Construye la pipeline de extremo a extremo para 10k páginas y publica la comparación directa contra el enfoque de OCR-seguido-de-texto.

Type: Capstone Languages: Python (pipeline), TypeScript (viewer UI) Prerequisites: Phase 4 (computer vision), Phase 5 (NLP), Phase 7 (transformers), Phase 11 (LLM engineering), Phase 12 (multimodal), Phase 17 (infrastructure) Phases exercised: P4 · P5 · P7 · P11 · P12 · P17 Time: 30 hours

Problem

Las empresas poseen una inmensa cantidad de PDFs que las pipelines clásicas de OCR distorsionan: informes 10-K escaneados con tablas rotadas, artículos científicos densos en ecuaciones, gráficos que solo tienen sentido como imágenes y anotaciones manuscritas. Tratarlos con un enfoque centrado en texto significa perder la mitad de la señal relevante. La respuesta de 2026 es la recuperación basada en representaciones multivectoriales con interacción tardía sobre imágenes crudas de las páginas. ColPali (Illuin Tech) la introdujo; ColQwen2.5-v0.2 y ColQwen3-omni aumentaron la precisión. En el benchmark ViDoRe v3, la recuperación basada en visión obtiene puntuaciones sustancialmente superiores en comparación con el enfoque de OCR-seguido-de-texto — y la brecha se ensancha en gráficos, tablas y manuscritos.

El contrapeso es el almacenamiento y la latencia. Una incrustación (embedding) de ColQwen resulta en aproximadamente 2048 vectores de parche por página, en lugar de un único vector de 1024 dimensiones. El almacenamiento crudo se dispara. DocPruner (2026) permite una compresión del 50% sin pérdidas mensurables de precisión. Indexarás 10k páginas, medirás el nDCG@5 de ViDoRe v3, responderás a consultas en menos de 2s y realizarás una comparación directa con la línea base de OCR-seguido-de-texto.

Concept

La interacción tardía (late interaction) significa que cada token de la consulta se puntúa en relación con cada token de parche del documento de forma independiente, y se suma la puntuación máxima (MaxSim) por token de consulta. Se obtiene una coincidencia detallada sin necesidad de comprimir las informaciones en un único vector promedio. Un índice multivectorial (Vespa, Qdrant multi-vector o AstraDB) almacena las incrustaciones de parches y ejecuta el cálculo de MaxSim en el momento de la recuperación.

El respondedor es un modelo de lenguaje y visión (VLM) que recibe la consulta junto con las imágenes de las mejores (top-k) páginas recuperadas y redacta la respuesta final acompañada por regiones de evidencia (caixas delimitadoras o referencias de página). Qwen3-VL-30B, Gemini 2.5 Pro e InternVL3 son las principales elecciones de frontera en 2026. Para ecuaciones y notaciones científicas, una pipeline de OCR de fallback (Nougat, dots.ocr) se incorpora como un canal de texto opcional.

La evaluación se basa en una matriz bidimensional. Un eje: el tipo de contenido (párrafos de texto plano, tablas densas, gráficos de barras/líneas, notas manuscritas, ecuaciones). El otro eje: la aproximación de recuperación (recuperación basada en visión con interacción tardía vs OCR-seguido-de-texto vs híbrido). Cada celda de la matriz debe contener el nDCG@5 y la precisión de la respuesta. Ese reporte constituye la entrega.

Architecture

PDFs -> page renderer (PyMuPDF, 180 DPI)
           |
           v
  ColQwen2.5-v0.2 embed (multi-vector per page, ~2048 patches)
           |
           +------> DocPruner 50% compression
           |
           v
    multi-vector index (Vespa or Qdrant multi-vector)
           |
query ----+----> retrieve top-k pages (MaxSim)
           |
           v
  VLM answerer: Qwen3-VL-30B | Gemini 2.5 Pro | InternVL3
    inputs: query + top-k page images + optional OCR text
           |
           v
  answer with cited page numbers + evidence regions
           |
           v
  Streamlit / Next.js viewer: highlighted boxes on source page

Stack

  • Renderizado de páginas: PyMuPDF (fitz) a 180 DPI, con normalización de retrato
  • Modelo de interacción tardía: ColQwen2.5-v0.2 o ColQwen3-omni (disponibilizado por el equipo vidore en Hugging Face)
  • Índice: Vespa con soporte para campos multivectoriales, Qdrant multi-vector o AstraDB con MaxSim
  • Compresión/Poda: DocPruner 2026 (mantiene parches de alta varianza, comprimiendo al 50% con pérdida de precisión inferior a 0.5%)
  • Fallback de OCR (ecuaciones / tablas densas): dots.ocr o Nougat
  • VLM respondedor: Qwen3-VL-30B autohospedado o Gemini 2.5 Pro alojado; InternVL3 como alternativa
  • Evaluación: benchmark ViDoRe v3, M3DocVQA para razonamiento multipágina
  • UI del visor: Next.js 15 con sobreposición de lienzo (canvas) para mostrar las regiones de evidencia

Build It

  1. Ingesta. Recorre un corpus de 10k páginas de PDFs de informes 10-K, artículos científicos y documentos escaneados. Renderiza cada página como una imagen PNG de 1536x2048 píxeles. Persiste {doc_id, page_num, image_path}.

  2. Incrustación. Ejecuta ColQwen2.5-v0.2 en cada imagen de página. Genera aproximadamente 2048 embeddings de parches de dimensión 128. Aplica DocPruner para conservar la mitad de mayor señal. Escribe en el campo multivectorial de Vespa o Qdrant multi-vector.

  3. Consulta. Para cada consulta recibida, incrústala con la torre de consulta (embeddings a nivel de token). Ejecuta MaxSim contra el índice: para cada token de la consulta, toma el producto punto máximo sobre los embeddings de parche de la página y suma. Devuelve el top-k de páginas.

  4. Síntesis. Llama a Qwen3-VL-30B con la consulta y las imágenes de las top-5 páginas recuperadas. Prompt: "Responde utilizando solo las páginas suministradas. Cita cada afirmación por (doc_id, página) e indica la región de evidencia (figura, tabla, párrafo)".

  5. Regiones de evidencia. Procesa la salida del modelo para extraer las regiones citadas. Si el VLM emite cajas delimitadoras (bounding boxes, como Qwen3-VL), renderízalas como superposiciones destacadas en el visor.

  6. Fallback de OCR. Para páginas identificadas como densas en ecuaciones (mediante heurísticas de varianza de imagen), ejecuta Nougat o dots.ocr y pasa el texto extraído como un canal adicional junto con la imagen.

  7. Evaluación. Ejecuta ViDoRe v3 (nDCG@5 de recuperación) y M3DocVQA (precisión de QA multipágina). Ejecuta en paralelo la pipeline común de OCR-seguido-de-texto en el mismo corpus de datos y con el mismo respondedor VLM. Genera la matriz de tipo de contenido × aproximación de recuperación.

  8. UI. Diseña un prototipo inicial en Streamlit; luego, desarrolla la interfaz final en Next.js 15 mostrando el PDF renderizado con el resaltado de regiones de evidencia sobre el documento original.

Use It

$ doc-qa ask "what was the 2024 operating margin change for segment EMEA?"
[retrieve]   top-5 pages in 320ms (ColQwen2.5, MaxSim, Vespa)
[synth]      qwen3-vl-30b, 1.4s, cited (form-10k-2024, p. 88) + (..., p. 92)
answer:
  EMEA operating margin moved from 18.2% to 16.8%, a 140bp decline.
  cited: 10-K-2024.pdf p.88 (Table 4, Segment Operating Margin)
         10-K-2024.pdf p.92 (MD&A, Operating Performance)
[viewer]     open with highlighted bounding boxes overlaid on p.88 Table 4

Ship It

El producto entregable es el documento de habilidad outputs/skill-doc-qa.md. Describe el sistema de QA de documentos basado en visión, con datos reales de corpus y evaluación comparativa contra el baseline de OCR en ViDoRe v3. Rúbrica:

Weight Criterion How it is measured
25 ViDoRe v3 / M3DocVQA accuracy Puntuación del benchmark frente a la pipeline tradicional de OCR y rankings públicos
20 Evidence-region grounding Proporción de cajas delimitadoras que de hecho contienen la información que fundamenta la respuesta
20 Storage and latency engineering Eficiencia en la compresión del DocPruner, latencia de recuperación p95 y tiempo de síntesis p95
20 Multi-page reasoning Precisión en un conjunto de prueba de 100 preguntas con respuestas basadas en múltiples páginas
15 Source-inspection UX Fluidez en la interfaz Next.js, precisión de los overlays y comparaciones lado a lado

Exercises

  1. Mide ColQwen2.5-v0.2 frente a ColQwen3-omni en el mismo corpus. Identifica qué páginas acierta uno y el otro falla. Añade una etiqueta de tipo de contenido en el índice para enrutamiento inteligente de consultas.

  2. Aumenta la poda (pruning) de DocPruner de forma agresiva (75%, 90%). Encuentra el acantilado de compresión (cliff): el punto a partir del cual el nDCG@5 del modelo cae por debajo del baseline de OCR.

  3. Construye un sistema híbrido: ejecuta la búsqueda basada en OCR y ColQwen en paralelo, realiza la fusión mediante RRF (Reciprocal Rank Fusion) y aplica reordenación con un cross-encoder. ¿Supera el híbrido a las aproximaciones aisladas? ¿Dónde ayuda más?

  4. Reemplaza Qwen3-VL-30B por un VLM más pequeño (Qwen2.5-VL-7B). Traza la relación de costo-beneficio (precisión frente a costo de procesamiento).

  5. Añade soporte para notas manuscritas. Renderiza el corpus de notas manuscritas, incrústalo con ColQwen y mide la recuperación. Compáralo con una pipeline de OCR específica para caligrafía manuscrita.

Key Terms

Term What people say What it actually means
Late interaction "Búsqueda al estilo ColPali" Aproximación en la que cada token de la consulta se califica contra los parches del documento de manera independiente; MaxSim realiza la agregación final
Multi-vector "Incrustación por parche" Modelo donde cada página de documento está representada por un conjunto de múltiples vectores, en lugar de comprimida en un único vector global
MaxSim "Cálculo de interacción tardia" Algoritmo que calcula para cada token de consulta la similitud máxima encontrada contra los vectores del documento y realiza el sumatorio final
DocPruner "Compresión de parches" Técnica de poda de 2026 que descarta el 50% de los parches irrelevantes manteniendo la calidad de la búsqueda
ViDoRe v3 "Benchmark de recuperación visual" Estándar de evaluación de calidad de sistemas de recuperación sobre documentos basados en imágenes complejas
Evidence region "Caja de evidencia" Coordenadas geométricas que delimitan exactamente dónde está la información consultada en la página del documento original
OCR fallback "Canal de ecuaciones" Pipeline secundaria de OCR de texto usada junto con la visión para asegurar la fidelidad de fórmulas y caracteres densos

Further Reading

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).