kraken-german-xix-v1
Handwritten-text-recognition model trained with training-atr-models. These are the weights of the best validation checkpoint of the run below — not its last epoch.
Evaluation
| metric | value |
|---|---|
| benchmark CER | 11.18 % |
| benchmark WER | 39.62 % |
| benchmark characters | 116143 |
| split CER | 3.12 % |
| split WER | 13.72 % |
| samples scored | — |
| characters scored | 1813372 |
| character errors | 56519 |
Measured on Federal Council minutes 1848-1903 (doi:10.5281/zenodo.4746342), 2,751 lines (held-out documents not in training). The split score below is this run's own validation score; what that split was is in Training data per corpus, and it is a different set from this benchmark either way.
Training data
dh-unibe/image-text_zh-regierungsratsprotokolle- Training projects:
MM_1_001,MM_1_002,MM_1_003,MM_1_004,MM_1_005,MM_1_006,MM_1_007,MM_1_008,MM_1_009,MM_1_010,MM_2_101,MM_2_102,MM_2_103,MM_2_104,MM_2_105,MM_2_106,MM_2_107,MM_2_108,MM_2_109,MM_2_110 - Evaluation: held-out projects
MM_1_011,MM_1_012,MM_2_111,MM_2_112 - Page cap: 8000
- Training projects:
dh-unibe/image-text_kurrent-xix- Training projects:
TRAIN_CITlab_Bassermann_0_4,TRAIN_CITlab_Bassermann_Manuscripts,TRAIN_CITlab_Bassermann_Manuscripts_0_2,TRAIN_CITlab_Binder_Kochbuch_2,TRAIN_CITlab_Escher_M1,TRAIN_CITlab_Gusbeth,TRAIN_CITlab_Handschriftliche_Archivquellen,TRAIN_CITlab_Konzilsprotkolle_B_Schwartz_5_2018,TRAIN_CITlab_MargareteSick,TRAIN_CITlab_MargareteSick20180731,TRAIN_CITlab_MargareteSick20180731a,TRAIN_CITlab_MÜLLER,TRAIN_CITlab_Protokoll_Hoftheater_1806,TRAIN_CITlab_Rehlen_1834_a,TRAIN_CITlab_RvE_Barlaam_HS_D_,TRAIN_CITlab_Steiner,TRAIN_CITlab_Suppes,TRAIN_CITlab_Suppes_3500,TRAIN_CITlab_Tagebuch_Arnold_v1,TRAIN_CITlab_umkc_Roland_M1,TRAIN_CITlab_umkc_Roland_M2,hufeland_privatbesitz_1829,nn_msgermqu2124_1827,nn_msgermqu2345_1827,parthey - Evaluation: held-out projects
TEST_CITlab_Bassermann_0_4,TEST_CITlab_Bassermann_Manuscripts,TEST_CITlab_Bassermann_Manuscripts_0_2,TEST_CITlab_Binder_Kochbuch_2,TEST_CITlab_Escher_M1,TEST_CITlab_Gusbeth,TEST_CITlab_Handschriftliche_Archivquellen,TEST_CITlab_Konzilsprotkolle_B_Schwartz_5_2018,TEST_CITlab_MargareteSick,TEST_CITlab_MargareteSick20180731,TEST_CITlab_MargareteSick20180731a,TEST_CITlab_MÜLLER,TEST_CITlab_Protokoll_Hoftheater_1806,TEST_CITlab_Rehlen_1834_a,TEST_CITlab_RvE_Barlaam_HS_D_,TEST_CITlab_Steiner,TEST_CITlab_Suppes,TEST_CITlab_Suppes_3500,TEST_CITlab_Tagebuch_Arnold_v1,TEST_CITlab_umkc_Roland_M1,TEST_CITlab_umkc_Roland_M2 - Page cap: 19808
- Training projects:
dh-unibe/image-text_parlamentsdienste-protokolle- Training projects:
1849_01,1849_02,1849_03,1849_04,1849_05,1849_06,1849_07,1849_08,637157213248534270_verkleinert - Evaluation: a seeded page-level split of the training projects (
partition=0.9,seed=42) - Page cap: 138
- Training projects:
dh-unibe/image-text_nr-sr-vereinigte-bundesversammlung-xix- Training projects:
Nationalrat_01__Sitzung_–_06_11_1848,Nationalrat_02__Sitzung_–_07_11_1848,Nationalrat_03__Sitzung_–_08_11_1848,Nationalrat_04__Sitzung_–_09_11_1848,Nationalrat_05__Sitzung_–_10_11_1848,Nationalrat_06__Sitzung_–_13_11_1848,Nationalrat_07__Sitzung_–_14_11_1848,Nationalrat_08__Sitzung_–_15_11_1848,Nationalrat_09__Sitzung_–_18_11_1848,Nationalrat_10__Sitzung_–_21_11_1848,Nationalrat_11__Sitzung_–_22_11_1848,Nationalrat_12__Sitzung_–_23_11_1848,Nationalrat_13__Sitzung_–_24_11_1848,Nationalrat_14__Sitzung_–_25_11_1848,Nationalrat_15__Sitzung_–_27_11_1848,Nationalrat_16__Sitzung_–_28_11_1848,Nationalrat_17__Sitzung_–_29_11_1848,Ständerat_01__Sitzung_–_06_11_1848,Ständerat_02__Sitzung_–_08_11_1848,Ständerat_03__Sitzung_–_09_11_1848,Ständerat_04__Sitzung_–_11_11_1848,Ständerat_05__Sitzung_–_14_11_1848,Ständerat_06__Sitzung_–_15_11_1848,Ständerat_07__Sitzung_–_21_11_1848,Ständerat_08__Sitzung_–_23_11_1848,Ständerat_09__Sitzung_–_24_11_1848,Ständerat_10__Sitzung_–_25_11_1848,Ständerat_11__Sitzung_–_27_11_1848,Ständerat_12__Sitzung_–_28_11_1848,Ständerat_13__Sitzung_–_28_11_1848,VBV_01__Sitzung_–_16_11_1848,VBV_02__Sitzung_–_17_11_1848,VBV_03__Sitzung_–_20_11_1848,VBV_04__Sitzung_–_24_11_1848,VBV_05__Sitzung_–_29_11_1848 - Evaluation: a seeded page-level split of the training projects (
partition=0.9,seed=42) - Page cap: 52
- Training projects:
Materialized from that selection: 15,527 pages, 405,955 transcribed lines.
Hyperparameters
spec: '[256,64,0,1 Cr4,2,8,4,2 Cr4,2,32,1,1 Mp4,2,4,2 Cr3,3,64,1,1 Mp1,2,1,2 S1(1x0)1,3
Lbx256 Do0.5 Lbx256 Do0.5 Lbx256 Do0.5 Cr255,1,85,1,1]'
batch_size: 32
schedule: cosine
lrate: 0.0001
quit: early
epochs: 90
min_epochs: null
lag: 10
augment: true
normalization: NFD
normalize_whitespace: true
weights_format: coreml
resize: union
freeze_backbone: null
accumulate_grad_batches: 1
pad: null
warmup: null
seed: 42
workers: 8
device: cuda:0
benchmarks:
- hf_repo: dh-unibe/image-text_federal-minutes-testset
project: TEST_federal_minutes
split: train
label: Federal Council minutes 1848-1903 (doi:10.5281/zenodo.4746342), 2,751 lines
Provenance
| engine | kraken |
| base model | Kraken HTR recognition model, Bohemian provenance 19th century — 10.5281/zenodo.11673242, requested as kraken-bohemian_19th |
| training job | 20261007T131819Z-kraken-german-xix-v1 |
| code | evaluated with 389328f7565f |
| trained | 2026-10-11T14:08:32.256214+00:00 |
| weights | kraken-german-xix-v1.mlmodel |
metadata.json in this repo is the record the trainer wrote, verbatim: the full request, the parsed metrics and the job id.
Using it
pip install kraken
python -c "from huggingface_hub import hf_hub_download; print(hf_hub_download('dh-unibe/kraken-german-xix-v1', 'kraken-german-xix-v1.mlmodel'))"
kraken -i page.jpg page.txt segment -bl ocr -m <the printed path>
Notes
#164, run 1: the first kraken model on the XIX corpora, against qwen3vl-german-xix-v2 (7.65 %) and qwen3.5-4b-german-xix-v2 (6.80 %) on the same benchmark. Fine-tuned from kraken-bohemian_19th, the only registry base that is Kurrent AND 19th century AND German, and height 120 — which this material needs: the kraken+ spec of all five earlier runs leaves 1.29-1.63 CTC frames per character here, height 120 gives 2.42-3.05 (389328f). zh-regierungsratsprotokolle is held out by VOLUME rather than by page, and its three Testset_/TEST_CITlab_ directories are excluded from training.
Correction, 08.10.2026 (training-atr-models 4de9468). The sentence above about "the kraken+ spec of all five earlier runs" is wrong, and it was written into this request before it was checked. ketos train ignores --spec when --load is given, so four of those five runs inherited their architecture from their base, and every base this project has fine-tuned from is height 120 already. The height-64 spec was used once, by the only from-scratch run, which is also the worst by a factor of three. Height 120 remains the right choice for this material (2.42-3.05 CTC frames per character against 1.29-1.63) — but it came with the base, not as a correction to a practice that did not exist. The job record keeps the request as submitted; this is the publication record.