Picarones / docs /reference /normalization-profiles.md
Claude
docs(sprint-H.9): archive migration plans + cleanup stale doc paths
2b782d0 unverified

Profils de calcul — chantier 2 post-Sprint 97

Picarones expose 7 profils de calcul qui modulent les métriques calculées par le runner selon le use case. Chaque profil active un sous-ensemble des 12 hooks document-level et 12 agrégateurs corpus-level du registre central (picarones/evaluation/metric_hooks.py).

Synoptique

Profil Hooks doc Cible CLI dédiée
minimal 0 Tests rapides, bench massif (CER/WER seuls)
standard (défaut) 12 Comportement historique, rétrocompat picarones run
philological 12 Édition critique, paléographie picarones edition
diagnostics 12 Comprendre pourquoi un moteur produit ses résultats picarones diagnose
economics 12 Décision budget : pages/h utilisable, coût marginal picarones economics
pipeline 12 Bench de pipelines composées (axe B) picarones pipeline run
full 12 R&D — tout ce qui peut être calculé

Note rétrocompat : aujourd'hui les profils philological, diagnostics, economics, pipeline et full activent le même ensemble que standard côté hooks calculés. Ce qui change, c'est la vue HTML rendue : chaque profil active des sous-sections différentes du rapport (cf. docs/reference/views.md). Les profils sont volontairement génériques pour permettre aux contributeurs futurs d'ajouter des hooks spécifiques sans casser l'API.

Détail des hooks par profil

minimal

Aucun hook. Le runner calcule uniquement les métriques de base (cer, wer, mer, wil via compute_metrics). Les DocumentResult n'ont aucun champ confusion_matrix, taxonomy, calibration, etc.

Cas d'usage : bench de régression sur 10 000 documents pour mesurer le CER d'une mise à jour de modèle, sans avoir besoin du diagnostic philologique. Réduit drastiquement le temps de calcul (∼5× plus rapide).

picarones run --corpus ./corpus --profile minimal

standard (défaut)

Active les 12 hooks document-level historiques :

Hook Sprint Champ DocumentResult Notes
confusion 5 confusion_matrix Matrice unicode
char_scores 5 char_scores Ligatures + diacritiques
taxonomy 5 taxonomy 9 classes d'erreurs
structure 5 structure Lignes / blocs / mots
image_quality 5 image_quality Contraste, bruit, flou…
line_metrics 10 line_metrics Distribution CER + Gini
hallucination 10 hallucination_metrics Détection VLM
calibration 42 calibration_metrics ECE/MCE (si confidences)
philological 61 philological_metrics 6 modules (Sprints 55-60)
searchability 86 searchability_metrics Fuzzy recall (Sprint 84)
numerical_sequences 86 numerical_sequence_metrics Sprint 85
readability 87 readability_metrics Δ Flesch (Sprint 52)

12 agrégateurs corpus-level correspondants remplissent les attributs aggregated_* de chaque EngineReport.

philological (édition critique)

Active les 12 hooks standard + déclenchera (chantiers futurs) l'enrichissement par des hooks dédiés à la paléographie médiévale, l'imprimé ancien et les archives modernes (déjà calculés via le module philological du standard, mais valorisés différemment dans la vue HTML « Taxonomie avancée »).

picarones edition --corpus ./manuscrits --engines tesseract,pero_ocr

Vue HTML supplémentaire activée : view_advanced_taxonomy.html avec diagramme miroir leader vs runner-up, classes par récupérabilité éditoriale.

diagnostics (analyse approfondie)

Identique à standard côté hooks. Déclenche la vue HTML « Diagnostic approfondi » avec leviers d'amélioration factuels (jamais prescriptifs) calculés par picarones.domain.levers.detect_levers().

picarones diagnose --corpus ./corpus --engines tess,pero

Vue HTML supplémentaire : view_diagnostics.html avec :

  • Leviers d'amélioration (dominant_recoverable_class, pareto_concentration, etc.).
  • Profil d'image du corpus (complexité paléographique + homogénéité, opt-in).
  • Comparaison historique (baseline, opt-in si historique SQLite).

economics (décision budget)

Active la vue HTML « Coût et performance » avec throughput effectif calculé selon la formule HTR-United (5 s/erreur de correction humaine). Discrimine entre un moteur cloud rapide mais imprécis (drag élevé) et un local lent mais fiable.

picarones economics --corpus ./corpus --engines mistral_ocr,tesseract

pipeline (axe B)

Profil utilisé par picarones pipeline run pour les benchmarks de pipelines composées (Sprints 32-34, 53-54, 63-68, 94-97 + chantier 1). La vue HTML produite contient le DAG visuel de la pipeline, l'absorption d'erreur par jonction, et la comparaison incrémentale par slot.

picarones pipeline run examples/pipelines/ocr_to_alto.yaml --corpus DIR

full

Active tous les hooks et toutes les vues. Coût maximal mais reproductibilité scientifique maximale.

Comment ajouter un hook personnalisé

Voir docs/explanation/narrative-engine.md pour le détail. Pattern de base :

from picarones.evaluation.metric_hooks import (
    register_document_metric, PROFILE_DIAGNOSTICS, PROFILE_FULL,
)

@register_document_metric(
    name="my_metric",
    attribute="my_metric",       # nom du champ DocumentResult
    profiles=(PROFILE_DIAGNOSTICS, PROFILE_FULL),
    requires_success=True,
)
def my_hook(*, ground_truth, hypothesis, image_path, corpus_lang, ocr_result):
    from my_module import compute_my_metric
    return compute_my_metric(ground_truth, hypothesis)

Code source