Phase 19 - Lesson 04

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

A fronteira de sistemas de perguntas e respostas (QA) sobre documentos em 2026 distanciou-se do modelo clássico OCR-seguido-de-texto e migrou para a recuperação baseada em visão com interação tardia (vision-first late interaction). ColPali, ColQwen2.5 e ColQwen3-omni tratam cada página de um arquivo PDF como uma imagem isolada, geram embeddings usando representações multi-vetoriais de interação tardia e permitem que a consulta faça atenção diretamente sobre as regiões (patches) da imagem. Em relatórios financeiros complexos (10-Ks), artigos científicos e anotações manuscritas, esse padrão supera largamente as pipelines baseadas em OCR. Construa essa pipeline de ponta a ponta para 10 mil páginas e publique um relatório comparativo direto contra uma pipeline baseada em OCR 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

As empresas possuem uma imensa quantidade de PDFs que as pipelines clássicas de OCR distorcem ou falham em ler: relatórios 10-Ks com tabelas rotacionadas, artigos científicos densos em equações matemáticas, gráficos que só fazem sentido visualmente e anotações manuscritas nas margens. Tratar esses documentos com abordagens focadas em texto significa perder metade do sinal relevante. A resposta de 2026 para esse problema é a recuperação baseada em representações multi-vetoriais com interação tardia sobre imagens brutas das páginas. O ColPali (Illuin Tech) introduziu esse conceito, enquanto o ColQwen2.5-v0.2 e o ColQwen3-omni aprimoraram a precisão. No benchmark ViDoRe v3, sistemas baseados em visão obtêm desempenho substancialmente superior em relação a modelos com OCR prévio — e a diferença aumenta significativamente em gráficos, tabelas e manuscritos.

O contrapeso dessa abordagem é o custo de armazenamento e latência. Um embedding gerado via ColQwen resulta em aproximadamente 2048 vetores de patch por página, em vez de um único vetor denso de 1024 dimensões. O espaço bruto em disco cresce exponencialmente. O DocPruner (2026) viabiliza uma compactação de 50% sem perdas mensuráveis de precisão. Você indexará 10 mil páginas, medirá o nDCG@5 do ViDoRe v3, responderá a consultas em menos de 2s e realizará um comparativo direto com uma linha de base baseada em OCR de texto.

Concept

Interação tardia (late interaction) significa que cada token da consulta é pontuado em relação a cada token de patch da imagem da página, e a pontuação máxima (MaxSim) obtida por token da consulta é somada no final. Isso possibilita correspondências altamente detalhadas sem a necessidade de reduzir as informações a um único vetor médio. Um índice multi-vetorial (Vespa, Qdrant multi-vector ou AstraDB) armazena os embeddings gerados para cada patch e executa o cálculo de MaxSim no momento da recuperação.

O gerador de respostas é um modelo de linguagem e visão (VLM) que recebe a consulta juntamente com as imagens das melhores (top-k) páginas recuperadas e redige a resposta final acompanhada por regiões de evidência (caixas delimitadoras ou referências de página). Qwen3-VL-30B, Gemini 2.5 Pro e InternVL3 são as principais escolhas de fronteira em 2026. Para equações complexas e notações científicas, uma pipeline de OCR de fallback (como Nougat ou dots.ocr) é incorporada como um canal de texto opcional.

A avaliação baseia-se em uma matriz bidimensional. Um eixo: o tipo de conteúdo (parágrafos de texto puro, tabelas densas, gráficos de barras/linhas, anotações manuscritas, equações matemáticas). O outro eixo: a abordagem de recuperação (recuperação baseada em visão com interação tardia vs OCR-seguido-de-texto vs modelo híbrido). Cada célula da matriz deve conter o nDCG@5 e a precisão da resposta. Esse relatório constitui a entrega obrigatória.

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

  • Renderização de páginas: PyMuPDF (fitz) a 180 DPI, com normalização de retrato
  • Modelo de interação tardia: ColQwen2.5-v0.2 ou ColQwen3-omni (disponibilizado pela equipe vidore no Hugging Face)
  • Banco de dados vetorial: Vespa com suporte a campos multi-vetoriais, Qdrant com suporte a multi-vector ou AstraDB com MaxSim
  • Compactação/Poda: Algoritmo DocPruner (versão 2026, mantém patches com alta variância, comprimindo em 50% com perda de precisão inferior a 0,5%)
  • Fallback de OCR (equações/tabelas complexas): dots.ocr ou Nougat
  • VLM respondedor: Qwen3-VL-30B hospedado localmente ou Gemini 2.5 Pro gerenciado; InternVL3 como alternativa de contingência
  • Avaliação: benchmark ViDoRe v3, M3DocVQA para raciocínio de páginas múltiplas
  • UI do visualizador: Next.js 15 com sobreposição gráfica de canvas para exibir as regiões de evidência

Build It

  1. Ingestão. Varra um corpus contendo 10 mil páginas de PDFs compostas por relatórios 10-Ks, artigos científicos e documentos escaneados. Renderize cada página como uma imagem PNG de resolução de 1536x2048 pixels. Persista {doc_id, page_num, image_path}.

  2. Geração de embeddings. Execute o modelo ColQwen2.5-v0.2 sobre as imagens das páginas. Cada página deve gerar cerca de 2048 embeddings de patches com dimensão igual a 128. Aplique o algoritmo DocPruner para preservar apenas a metade dos vetores com maior sinal. Armazene as informações no Vespa ou Qdrant usando campos multi-vetoriais.

  3. Consulta. Para cada consulta recebida, gere os embeddings usando a torre de consultas correspondente (embeddings no nível de token). Execute a operação MaxSim contra o índice: para cada token da pergunta, obtenha o maior produto escalar encontrado entre os vetores de patch da página e some esses valores. Retorne as melhores páginas (top-k).

  4. Síntese. Chame o Qwen3-VL-30B fornecendo a consulta e as imagens das top-5 páginas retornadas na busca. Prompt: "Responda utilizando exclusivamente as páginas fornecidas. Cite cada afirmação usando (doc_id, página) e indique o local da evidência (gráfico, tabela, parágrafo)."

  5. Regiões de evidência. Processe o texto de resposta para extrair as coordenadas das regiões citadas. Se o VLM emitir coordenadas de caixas delimitadoras (bounding boxes, como o Qwen3-VL faz), renderize essas caixas como overlays transparentes na interface do usuário.

  6. Fallback de OCR. Para páginas identificadas heuristicamente como densas em equações (baseando-se na variância da imagem), processe a página com o Nougat ou dots.ocr e passe o texto extraído como um canal de dados adicional ao VLM.

  7. Avaliação. Execute testes usando o ViDoRe v3 (para nDCG@5 de recuperação) e o M3DocVQA (para a precisão do QA multirpáginas). Paralelamente, execute uma pipeline comum de OCR-seguido-de-texto no mesmo corpus de dados e com o mesmo VLM respondedor. Gere a matriz de resultados do tipo categoria de conteúdo × abordagem de recuperação.

  8. Interface do usuário. Crie um protótipo inicial em Streamlit; posteriormente, desenvolva a versão final em Next.js 15 exibindo o PDF renderizado com as caixas de evidência destacadas sobre o 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

O produto entregável é o documento de habilidade outputs/skill-doc-qa.md. Ele descreve a arquitetura montada para o QA de documentos baseado em visão, com dados reais do corpus e avaliação comparativa de desempenho contra o baseline de OCR no ViDoRe v3. Rúbrica:

Weight Criterion How it is measured
25 ViDoRe v3 / M3DocVQA accuracy Desempenho obtido frente à pipeline baseada em OCR e rankings públicos
20 Evidence-region grounding Proporção de caixas delimitadoras que de fato contêm as informações que fundamentam as alegações
20 Storage and latency engineering Eficiência na compactação do DocPruner, latência de recuperação p95 e tempo de síntese p95
20 Multi-page reasoning Precisão das respostas em um conjunto contendo 100 perguntas com respostas baseadas em múltiplas páginas
15 Source-inspection UX Fluidez na interface de visualização do Next.js, precisão dos overlays e comparativos lado a lado

Exercises

  1. Execute um comparativo de desempenho entre o ColQwen2.5-v0.2 e o ColQwen3-omni no mesmo corpus. Identifique quais páginas cada modelo acerta ou erra e insira tags de tipo de conteúdo na indexação para roteamento inteligente de consultas.

  2. Aumente o nível de poda (pruning) do DocPruner para 75% e 90%. Localize a queda acentuada de desempenho (cliff): o nível de compressão a partir do qual o nDCG@5 do modelo cai abaixo do baseline de OCR tradicional.

  3. Monte um sistema híbrido: execute a busca baseada em OCR comum e ColQwen em paralelo, realize a mesclagem usando RRF (Reciprocal Rank Fusion) e aplique reordenação com um cross-encoder. Esse sistema supera as pipelines isoladas? Indique quais formatos de documentos obtêm os maiores benefícios.

  4. Substitua o Qwen3-VL-30B por um modelo menor (Qwen2.5-VL-7B). Trace a relação de custo-benefício (precisão obtida versus custo financeiro de processamento).

  5. Adicione suporte para documentos contendo escrita à mão. Indexe o corpus manuscrito, gere embeddings via ColQwen e meça a taxa de recuperação em comparação com ferramentas clássicas de OCR de caligrafia.

Key Terms

Term What people say What it actually means
Late interaction "Busca no estilo ColPali" Abordagem onde cada token da consulta é comparado de forma independente contra os patches de imagem do documento; MaxSim realiza o agregamento final
Multi-vector "Embeddings por patch" Modelo onde cada página do documento é representada por um conjunto de múltiplos vetores, em vez de comprimida em um único vetor global
MaxSim "Cálculo de interação tardia" Algoritmo que calcula para cada token da pergunta a similaridade máxima encontrada contra os vetores do documento e realiza o somatório final
DocPruner "Compactação de patches" Técnica de poda lançada em 2026 que descarta metade dos vetores irrelevantes de patch da imagem mantendo a qualidade da busca
ViDoRe v3 "Benchmark de recuperação visual" Padrão consolidado de avaliação de qualidade de sistemas de recuperação sobre documentos complexos baseados em imagem
Evidence region "Caixa de evidência" Coordenadas geométricas que delimitam exatamente onde está a informação consultada na página do documento original
OCR fallback "Canal de equações" Pipeline secundária de OCR textual executada em conjunto com o modelo de visão para assegurar fidelidade de fórmulas e caracteres densos

Further Reading

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