Aller au contenu

OCR Benchmark System

Snapshot de janvier 2026. Les scores fournisseurs et l’architecture proposée sont des hypothèses historiques. Ils doivent être rejoués avant toute décision. Voir le README du project.

Contexte

Bricks est une plateforme de financement participatif immobilier qui analyse quotidiennement des dizaines de dossiers de projets immobiliers. Chaque dossier contient des documents complexes et variés : - Compromis de vente (50+ pages, scans souvent dégradés) - Business plans et projections financières (tableaux Excel multi-feuilles) - Présentations avec schémas et organigrammes - Liasses fiscales (documents standardisés denses en chiffres) - Relevés bancaires (mix texte/tableaux avec annotations)

La qualité d'extraction de ces documents impacte directement la fiabilité de l'analyse et la prise de décision d'investissement.

Problème identifié

La qualité d'extraction varie considérablement selon l'OCR/LLM utilisé. Les solutions évoluent rapidement (nouveaux modèles, mises à jour) et il n'existe pas de moyen simple de : 1. Comparer objectivement les performances des différentes solutions 2. Suivre l'évolution de qualité dans le temps 3. Être alerté quand une solution se dégrade ou qu'une meilleure émerge 4. Éviter la dépendance à un seul fournisseur

Objectif

Créer un système de benchmark automatisé et récurrent permettant de : - Tester régulièrement les solutions OCR/LLM sur un pool de documents fixes - Comparer les résultats avec une "ground truth" connue - Générer un score de qualité par solution et par type de document - Suivre l'historique des performances pour détecter les évolutions

Critères de succès

  • [ ] Précision cible : >95% sur l'ensemble des types de documents
  • [ ] Couverture : 100% du contenu (ne rien manquer dans le document)
  • [ ] Automatisation : benchmark exécutable en 1 commande
  • [ ] Reproductibilité : résultats cohérents entre les runs

État de l'art (Janvier 2026)

Les chiffres de cette section proviennent d’une étude historique. Ils ne constituent pas une baseline actuelle tant que le corpus, la ground truth et les scripts ne sont pas disponibles et rejoués.

Benchmark réalisé

Études croisées via Manus et Perplexity sur 30+ solutions.

Top 5 solutions identifiées

Rang Solution Score Forces
1 Mistral OCR 3 94.89% Tableaux (98.96%), documents français, 2000 pages/min
2 Pipeline Multistage 80.87% vs 9.13% direct 8.8× amélioration, -92.6% latence, -88% coût
3 Claude Opus 4.5 Top schémas Organigrammes, zoom haute résolution, raisonnement
4 Azure Document Intelligence 93% champs Documents standardisés, modèles pré-entraînés
5 Manus / Approche Agentique 69/100 Orchestration end-to-end, sélection dynamique

Insight clé

L'approche multistage hybrid (OCR spécialisé → VLM compact) surpasse de 8.8× l'approche directe LLM, avec 92.6% de réduction de latence et 88% de réduction de coût.


Architecture cible

┌─────────────────────────────────────────────────────────────────┐
│                    OCR BENCHMARK SYSTEM                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐       │
│  │ Golden       │    │ OpenRouter   │    │ Evaluation   │       │
│  │ Dataset      │───▶│ API Gateway  │───▶│ Engine       │       │
│  │              │    │              │    │              │       │
│  │ - Documents  │    │ - Claude     │    │ - Compare    │       │
│  │ - Ground     │    │ - GPT-4o     │    │ - Score      │       │
│  │   Truth JSON │    │ - Gemini     │    │ - Report     │       │
│  └──────────────┘    │ - Mistral    │    └──────────────┘       │
│                      │ - Qwen       │            │               │
│                      └──────────────┘            ▼               │
│                                          ┌──────────────┐       │
│                                          │ Results DB   │       │
│                                          │ (SQLite/JSON)│       │
│                                          └──────────────┘       │
│                                                  │               │
│                                                  ▼               │
│                                          ┌──────────────┐       │
│                                          │ Dashboard    │       │
│                                          │ (HTML/MD)    │       │
│                                          └──────────────┘       │
└─────────────────────────────────────────────────────────────────┘

Composants

1. Golden Dataset

  • Documents : 5 catégories × 2-3 exemplaires = 10-15 documents
  • Ground Truth : JSON structuré avec les valeurs attendues par document
  • Format : documents/ + ground_truth/

2. OpenRouter Integration

  • API unifiée pour accéder à tous les modèles
  • Pas besoin de gérer chaque API séparément
  • Switching facile entre modèles

3. Extraction Script

  • Python avec openai client (compatible OpenRouter)
  • Prompt standardisé par type de document
  • Output JSON structuré

4. Evaluation Engine

  • Comparaison extraction vs ground truth
  • Métriques : précision par champ, recall, F1-score
  • Score global pondéré

5. Results Storage

  • SQLite ou JSON pour l'historique
  • Timestamp + modèle + scores

6. Reporting

  • Markdown ou HTML
  • Graphiques d'évolution
  • Alertes si dégradation

Stack technique proposée

Composant Technologie
Langage Python 3.11+
API Gateway OpenRouter
Client HTTP httpx ou openai
Storage SQLite + JSON
Reporting Markdown + Matplotlib
CI/CD GitHub Actions (optionnel)

Golden Dataset - Structure

golden_dataset/
├── documents/
│   ├── compromis_vente/
│   │   ├── cv_001.pdf
│   │   └── cv_002.pdf
│   ├── business_plan/
│   │   ├── bp_001.pdf
│   │   └── bp_002.xlsx
│   ├── presentation/
│   │   └── pres_001.pdf
│   ├── liasse_fiscale/
│   │   └── lf_001.pdf
│   └── releve_bancaire/
│       └── rb_001.pdf
├── ground_truth/
│   ├── cv_001.json
│   ├── cv_002.json
│   ├── bp_001.json
│   └── ...
└── schema/
    ├── compromis_vente.schema.json
    ├── business_plan.schema.json
    └── ...

Exemple Ground Truth (compromis de vente)

{
  "document_id": "cv_001",
  "document_type": "compromis_vente",
  "fields": {
    "vendeur": {
      "nom": "SCI Les Tilleuls",
      "adresse": "12 rue des Lilas, 75011 Paris"
    },
    "acquereur": {
      "nom": "SARL Invest Immo",
      "adresse": "45 avenue Victor Hugo, 69006 Lyon"
    },
    "bien": {
      "type": "Appartement T3",
      "adresse": "8 rue de la Paix, 75002 Paris",
      "surface": 65.5,
      "etage": 3
    },
    "prix": {
      "montant": 450000,
      "devise": "EUR"
    },
    "dates": {
      "signature_compromis": "2026-01-15",
      "date_butoir": "2026-04-15"
    },
    "conditions_suspensives": [
      "Obtention du prêt bancaire",
      "Purge du droit de préemption"
    ]
  }
}

Modèles à benchmarker

Modèle OpenRouter ID Type
Claude Opus 4.5 anthropic/claude-opus-4.5 LLM Multimodal
Claude Sonnet 4.5 anthropic/claude-sonnet-4.5 LLM Multimodal
GPT-4o openai/gpt-4o LLM Multimodal
Gemini 2.0 Flash google/gemini-2.0-flash LLM Multimodal
Mistral Large mistralai/mistral-large LLM
Qwen2.5-VL-72B qwen/qwen-2.5-vl-72b LLM Multimodal

Note : Mistral OCR n'est pas disponible via OpenRouter, nécessite API directe.


Métriques d'évaluation

Par champ

  • Exact Match : 1 si valeur identique, 0 sinon
  • Fuzzy Match : Similarité Levenshtein pour les strings
  • Numeric Tolerance : ±1% pour les montants

Par document

  • Precision : Champs corrects / Champs extraits
  • Recall : Champs corrects / Champs attendus
  • F1-Score : Moyenne harmonique

Par modèle

  • Score global : Moyenne pondérée F1 par type de document
  • Coût : $ par document
  • Latence : Secondes par document

Livrables attendus

  1. Script de benchmark : benchmark.py
  2. Golden dataset : Documents + Ground truth
  3. Rapport de résultats : results/YYYY-MM-DD.md
  4. Dashboard historique : Évolution des scores

Risques et mitigations

Risque Impact Mitigation
Coût API élevé Budget Limiter à 5 modèles × 15 docs = 75 appels/run
Documents confidentiels Sécurité Anonymiser ou utiliser docs fictifs
Variabilité des outputs LLM Reproductibilité Temperature=0, seed fixe
Rate limiting Disponibilité Retry avec backoff exponentiel

Timeline suggérée

Étape Durée Description
1 1 jour Setup projet + golden dataset (5 docs minimum)
2 1 jour Script d'extraction OpenRouter
3 0.5 jour Evaluation engine + métriques
4 0.5 jour Premier run + rapport
5 Optionnel Dashboard + CI/CD

Total : 3-4 jours pour un MVP opérationnel


Références

Sources