--- license: mit language: - fr library_name: peft base_model: microsoft/trocr-base-handwritten pipeline_tag: image-to-text tags: - htr - handwritten-text-recognition - trocr - lora - peft - vision-encoder-decoder - medieval - old-french - catmus - digital-humanities datasets: - CATMuS/medieval metrics: - cer - wer model-index: - name: trocr-catmus-french-2026 results: - task: type: image-to-text name: Handwritten Text Recognition dataset: name: CATMuS Medieval (French subset) type: CATMuS/medieval metrics: - type: cer value: 14.51 name: Character Error Rate (%) - type: wer value: 44.28 name: Word Error Rate (%) --- # TrOCR + LoRA — HTR pour manuscrits médiévaux français (CATMuS) Adaptateur **LoRA** spécialisant [`microsoft/trocr-base-handwritten`](https://huggingface.co/microsoft/trocr-base-handwritten) sur la transcription de **lignes** de manuscrits médiévaux **français** (XIIIᵉ s., gothique *Textualis*), entraîné sur le sous-ensemble français de **CATMuS Medieval**. Projet **MD5** — Master Data/IA, HETIC (Vision par ordinateur & NLP). ## Résultats (test scellé CATMuS FR **complet**, n=4135) | Métrique | Valeur | IC 95 % (bootstrap) | |---|---|---| | **CER** | **14,51 %** | [14,19 ; 14,85] | | WER | 44,28 % | — | | Baseline (sans fine-tuning) | CER 76,7 % | — | ## Utilisation ```python from transformers import TrOCRProcessor, VisionEncoderDecoderModel from peft import PeftModel from PIL import Image import torch REPO = "FaridBenamara/trocr-catmus-french-2026" # cet identifiant BASE = "microsoft/trocr-base-handwritten" processor = TrOCRProcessor.from_pretrained(REPO) base = VisionEncoderDecoderModel.from_pretrained(BASE) tok = processor.tokenizer for cfg in (base.config, base.generation_config): cfg.decoder_start_token_id = tok.cls_token_id cfg.pad_token_id = tok.pad_token_id cfg.eos_token_id = tok.sep_token_id base.config.vocab_size = base.config.decoder.vocab_size model = PeftModel.from_pretrained(base, REPO).eval() image = Image.open("ligne.png").convert("RGB") pv = processor(images=[image], return_tensors="pt").pixel_values ids = model.generate(pv, max_new_tokens=128) print(processor.batch_decode(ids, skip_special_tokens=True)[0]) ``` ## Entraînement | Hyperparamètre | Valeur | |---|---| | Base | `microsoft/trocr-base-handwritten` (ViT + décodeur) | | LoRA | r = 16, α = 32, dropout 0,05, cibles `query/value/q_proj/v_proj` | | Params entraînés | 2 113 536 / 336 035 328 (0,63 %) | | Optim | lr 1e-4, warmup 0,05, 3 epochs, batch 16, bf16 | | Matériel | 1× A100 40 Go, ~50 min · seed 42 | Convention **semi-diplomatique** (abréviations conservées, Unicode NFC). SHA-256 du train : `11a7b277d73e53c540aba23fdd2f7533ea7068f790e16e4699a5d69fcc87c26c`. ## Limitations & biais Biais 13ᵉ–15ᵉ s. / écriture *Textualis* ; WER élevé (une lettre fausse invalide le mot) ; qualité page-entière dépendante de la segmentation amont ; évaluation sur un échantillon de 500 lignes ; erreurs résiduelles sur lettres visuellement proches (c/e, n/u). Usage **recherche non commerciale**. ## Citation ```bibtex @misc{trocr_catmus_french_2026, title = {TrOCR + LoRA pour la transcription de manuscrits médiévaux français (CATMuS)}, author = {Benamara, Farid and Megrad, Ouassim and Touat, Abdennour and Sellani, Khaled}, year = {2026}, note = {Master Data/IA, HETIC — Projet MD5}, howpublished = {Hugging Face Hub} } ``` Dépôt code : `TrOcr_NLP_HETIC_Vit_Nlp`. Corpus : [CATMuS/medieval](https://huggingface.co/datasets/CATMuS/medieval).