TurkceOCR / README.md
ersanbil's picture
Release TurkceOCR v2.0 (Apache-2.0)
c8b6043
|
Raw History Blame Contribute Delete
64.9 kB
---
license: apache-2.0
language:
- tr
- en
library_name: transformers
pipeline_tag: image-to-text
tags:
- ocr
- turkish
- document-intelligence
- vision-language-model
- svtrv2
- qwen2.5-vl
- kvkk
- pii-redaction
- legal-nlp
- ictihat
- financial-verification
- visual-redaction
datasets:
- ersanbil/TurkceOCR-Bench
- hamzabagirsakci/turkish-court-decisions
base_model:
- Qwen/Qwen2.5-VL-3B-Instruct
- dbmdz/bert-base-turkish-cased
model-index:
- name: TurkceOCR-v2.0
results:
- task:
type: image-to-text
name: Document OCR & Layout Recognition
dataset:
name: TurkExternalBlindBench-v1 (35 Unseen Real Archival Pages)
type: ersanbil/TurkceOCR-Bench
split: external_blind_35
metrics:
- type: cer
value: 1.76
name: Mean Character Error Rate (%)
- type: wer
value: 7.57
name: Mean Word Error Rate (%)
- type: f1
value: 98.67
name: Position-Aligned Turkish Diacritic F1 (%)
- type: repetition_loop_rate
value: 0.00
name: KPI-14 6-Token Repetition Loop Rate (%)
- task:
type: image-to-text
name: Turkish Document Intelligence (15-KPI Suite)
dataset:
name: TurkceOCR-Bench-6Cat (ID + OOD)
type: ersanbil/TurkceOCR-Bench
split: docbench_15kpi
metrics:
- type: cer
value: 0.00
name: Full-System CER with TurkceVerify (%)
- type: f1
value: 100.0
name: I/İ/ı/i Dot Disambiguation F1 (%)
- type: accuracy
value: 100.0
name: Checksum-Verified KIE Rate (CVKR, %)
- type: recall
value: 100.0
name: Zero-Leakage KVKK PII Recall (%)
- type: coverage
value: 100.0
name: 2D Irreversible #000000 Visual Redaction Coverage (%)
- task:
type: image-to-text
name: Pure Neural CTC Line Recognition (No Language Model)
dataset:
name: TurkceOCR Phase-2 Held-Out Real PDF Lines (N=215)
type: ersanbil/TurkceOCR-Bench
split: phase2_real_hybrid
metrics:
- type: cer
value: 21.92
name: Pure Born-Digital Real PDF Line CER (%)
- type: cer
value: 16.17
name: Mevzuat PDF Line CER (%)
- type: cer
value: 20.34
name: Rekabet Kurumu PDF Line CER (%)
---
# TurkceOCR
Turkish document OCR, algorithmic checksum and financial verification (`TurkceVerify`), legal and commercial entity recognition (`ictihat_core` × [`ersanbil/kvkk-pii-ner`](https://huggingface.co/ersanbil/kvkk-pii-ner)), and 2D `#000000` visual redaction (`VisualRedactor`).
This repository bundles the Phase-2 line recognition checkpoint (`line_svtrv2/`), the page-layout LoRA adapter (`vlm_lora/`), the configuration manifests (`pipeline_config.json`, `configs/`), and the Python inference and post-processing package (`turkceocr/`).
## Architecture
| Component | Details |
|---|---|
| Visual pre-processing | Adaptive `2.0×–2.5×` Lanczos upscaling for low-resolution scans (`W < 1000 px`); morphological table-grid removal (`40×1` and `1×40` opening kernels on dark neutral lines); `.docx` embedded `.emf`/`.wmf` vector table rasterization at `240–300 DPI` |
| Line recognizer (`line_svtrv2/`) | `SVTRv2-Turkish-SGM v2` (~12 M parameters, `(H=48, W=384)` input, `T=96` time steps): 2D-STN rectification + multi-scale conv/transformer encoder + CTC head + Turkish morphological SGM auxiliary head, trained with `TurkishCharacterConfusionFocalLoss` (`γ = 2.5`) on 2,750 real PDF and archival lines |
| Page layout adapter (`vlm_lora/`) | `Qwen2.5-VL-3B-LoRA v2` (`r = 16, α = 32`) with 31 structural and Turkish diacritic tokens (`<doc>`, `<region>`, `<table_md>`, `<kv>`, `<stamp>`, `<signature/>`, `<handwriting>`, `<marginalia>`) and RLVR verifiable-reward alignment |
| Constrained verifier (`TurkceVerify`) | Deterministic Mod-10 / parity check and 1-edit visual-confusion lattice repair for TCKN and Foreign ID (`99`), GİB Mod-10 for VKN, TCMB reserve-`0` + ISO-7064 Mod-97-10 for TR IBAN, and linear invoice solver (`Matrah + KDV = Toplam` for `r ∈ {1%, 10%, 20%}`) |
| Repetition guard (`RepetitionGuard`) | 4–8 token periodic loop truncation (`≥ 5` repeats) with alphabetic-diversity exemption for Rekabet Kurumu `| (.....) |` trade-secret tables, plus horizontal half-page split-and-retry |
| Entity engine (`UnifiedTurkishEntityEngine`) | 25+ entity classes combining `ictihat_core` legal recognizers (calibrated on [`hamzabagirsakci/turkish-court-decisions`](https://huggingface.co/datasets/hamzabagirsakci/turkish-court-decisions)) with [`ersanbil/kvkk-pii-ner`](https://huggingface.co/ersanbil/kvkk-pii-ner) (`v2.0`, 13 BIO classes, 512-token sliding window with stride 128), `fold_tr_isomorphic` 1:1 offset mapping, hierarchical span subsumption, and two-tier fail-closed `SUSPECT_PII` detection |
| 2D visual redactor (`VisualRedactor`) | Monotonic `OffsetMap` (`π: norm → raw`) character-to-pixel projection with proportional typographic character widths and irreversible `#000000` (`RGB 0,0,0`) box fill over text PII and visual regions (`VISUAL_SIGNATURE`, `VISUAL_STAMP`, `VISUAL_QRCODE`, `VISUAL_PHOTO`) |
---
## 1. Genel Bakış ve Motivasyon
Çok dilli genel amaçlı OCR motorları (`Tesseract`, `PaddleOCR`) ve görsel-dil modelleri (`Hunyuan-OCR`, `Qwen2.5-VL`, `LightOnOCR`), Türkçe kurumsal, hukuki, finansal ve arşiv belgelerinde dört temel yapısal darboğaz nedeniyle hata üretir:
1. **Türkçe Ortografik ve Morfolojik Çöküş (`I/İ/ı/i` ve Ek Zincirleri):**
Türkçedeki dört yönlü noktalı/noktasız `I/İ/ı/i` ayrımı, çengel/nokta diakritikleri (`ğ, ü, ş, ö, ç`) ve şapkalı ünlülerin (`â, î, û`) düşük çözünürlüklü faks/tarama veya 1-bit arşiv görüntülerinde (`551×790` Resmî Gazete GIF'leri, 203 DPI termal POS fişleri) silinmesi, sondan eklemeli (agglutinative) Türkçe kelimelerde (`mamelekiyle` → `meleklemiyle`, `fesih` ↔ `feshin geçersizliğine`) anlamı değiştiren hatalara yol açar.
2. **VLM Tekrar Döngüleri (`Repetition Loops`) ve Sütun Kaybı:**
Gerçek saha denetimimizde, VLM tabanlı OCR modellerinin 9 sütunlu `.emf` vektör enerji tarife tablolarında 9 sütunun 8'ini düşürdüğü (`CER = 45.78%`), 2001 yılı Resmî Gazete arşiv GIF'lerinde ise yorum halüsinasyonu ürettiği veya 6-gram tekrar döngüsüne girerek sayfanın %51–%83'ünü kaybettiği (`CER = 32.33%`) ölçülmüştür.
3. **Algoritmik Sağlama Eksikliği:**
Standart OCR motorları `1O000000146` veya `10000000148` gibi tek karakteri bozulmuş bir TCKN / VKN / IBAN numarasını veya `Matrah + KDV ≠ Genel Toplam` olan bir faturayı olduğu gibi dışarı aktarır. Oysa Türkiye'deki resmi numaralar matematiksel değişmezlere (NVİ Mod-10 + çiftlik, GİB Mod-10, TCMB ISO-7064 Mod-97-10) tabidir.
4. **KVKK (6698 Sayılı Kanun) ve Görsel Karartma İhtiyacı:**
Mahkeme kararları, bilirkişi raporları ve kurumsal sözleşmeler paylaşılırken yalnızca metin içindeki bilinen TCKN'leri maskelemek yeterli değildir; OCR bozulması yüzünden sağlamadan geçemeyen şüpheli adayların (`<TR_TCKN_SUSPECT>`) yakalanması ve belge görüntüsü üzerindeki PII kutularının, ıslak imzaların, kaşelerin ve karekodların 2B piksel uzayında tam siyah (`#000000`) ile karartılması gerekir.
---
## 2. Mimari ve Matematiksel Formülasyon
```text
[Girdi Belgesi: PDF / TIFF / GIF / PNG / DOCX Media (.emf/.wmf)]
│
▼
[Katman 1: Görsel Ön-İşleme & Fotometrik Normalizasyon]
• Adaptif Süper-Çözünürlük (2.0×–2.5× Lanczos, W < 1000 px)
• Aydınlatma Bölme Normalizasyonu (Gauss σ = 51) & Islak Mühür Bastırma (‖∇I‖ < 65)
• Boyut Korumalı Morfolojik Tablo Izgara Temizliği (120×1 & 1×100) + .emf/.wmf Rasterizasyon
│
▼
[Katman 2: Hibrit Görsel OCR Çekirdeği]
• SVTRv2-Turkish-SGM v2 Satır Motoru (~12M param, Dinamik Genişlik T = W/4, γ = 2.5 Focal Loss)
• Qwen2.5-VL-3B-LoRA v2 Sayfa Düzeni Adaptörü (r = 16, α = 32, 31 Yapısal Token, RLVR = 0.9978)
• Sütun Oluğu (Column Gutter) & Boşluk Vadisi (Whitespace-Valley) Bölütleme + Çoklu-PSM Düzen
│
▼
[Katman 3: Deterministik Doğrulama & Döngü Koruması]
• RepetitionGuard: 4..8-gram Tekrar Döngüsü Kesici (≥ 5 tekrar, | (.....) | Ticari Sır Muafiyetli)
• TurkceVerify: NVİ TCKN/YKN Mod-10, GİB VKN Mod-10, TCMB IBAN Mod-97-10 + KDV Denklem Çözücü
│
▼
[Katman 4: Hukuki/KVKK Varlık Çıkarımı & 2B #000000 Görsel Karartma]
• UnifiedTurkishEntityEngine: ictihat_core + ersanbil/kvkk-pii-ner v2.0 (13 BIO, 25+ Varlık Sınıfı)
• VisualRedactor: Monotonik OffsetMap (π: norm → raw) + Geri Döndürülemez #000000 (RGB 0,0,0) Karartma
```
### 2.1 Katman 1 — Görsel Ön-İşleme, Tablo Izgara Temizliği ve `SVTRv2-Turkish-SGM v2` Satır Motoru
1. **Adaptif Süper-Çözünürlük ve Morfolojik Izgara Silme:**
- Düşük çözünürlüklü arşiv belgeleri (`W < 1000 px`, örn. `551×790` 2001 yılı Resmî Gazete 1-bit GIF'leri ve gömülü `.docx` tabloları) `2.0×–2.5× Lanczos` enterpolasyonu ile ölçeklenir.
- Tablo hücre sınırlarının Türkçe çengel/nokta diakritikleriyle (`Ş, Ğ, Ç, İ, Ö, Ü`) kaynaşmasını önlemek için yalnızca koyu siyah ızgara çizgileri (`Gray < 120`, `max(R,G,B) - min(R,G,B) < 25`) yatay (`40×1` / `120×1`) ve dikey (`1×40` / `1×100`) morfolojik açma (opening) çekirdekleriyle temizlenir; renkli başlık dolguları korunur.
- `.docx` içine gömülü Windows Metafile (`.emf` / `.wmf`) vektör tabloları `PIL.ImageGrab` / GDI+ üzerinden yüksek çözünürlüklü (`240–300 DPI`) RGB matrise rasterize edilir.
2. **`SVTRv2-Turkish-SGM v2` (`line_svtrv2/model.safetensors`, ~12M Parametre):**
- **2B Uzamsal Dönüşüm Ağı (`2D-STN`):** Eğik, perspektif bozulmalı veya kıvrımlı satırları `(H = 48, W = 384)` kanonik koordinatlara (veya `W ∈ [384, 960]` dinamik genişliğe) düzeltir.
- **Çok Ölçekli Konvolüsyon + Çift Yönlü Dizi Kodlayıcı:** `ConvStem` + yerel/küresel bağlam katmanlarıyla `T = W / 4 = 96` zaman adımlı öznitelik dizisi üretir.
- **Bileşik Kayıp Fonksiyonu (Composite Loss):**
```text
L_SVTRv2 = L_CTC + λ_SGM · L_SGM + λ_focal · L_TurkishConfusionFocal (γ = 2.5)
```
Burada `L_TurkishConfusionFocal` (`γ = 2.5`), Türkçeye özgü 7 görsel karışıklık kümesi (`{I, İ, ı, i, l, 1}`, `{ğ, g, q}`, `{ş, s, 5}`, `{ç, c}`, `{ö, o, 0}`, `{ü, u}`, `{â, a, î, û}`) üzerindeki yanlış olasılık dağılımlarını üstel olarak cezalandırır.
### 2.2 Katman 2 — `Qwen2.5-VL-3B-LoRA v2` Sayfa Düzeni ve RLVR Doğrulanabilir Ödül Hizalaması
- **`vlm_lora/model.safetensors`** ağırlıkları, çok sütunlu Resmî Gazete sayfaları, kaşeli mahkeme kararları ve karmaşık ERP tablolarında **okuma sırası (`RO-NED`)** ve **yapısal Markdown/HTML tablo (`TEDS`)** üretimi için `r = 16, α = 32` LoRA adaptörleri ve **31 özel yapısal/diakritik token** (`<doc>`, `</doc>`, `<region>`, `<table_md>`, `<kv>`, `<stamp>`, `<signature/>`, `<handwriting>`, `<marginalia>`, `<checkbox_checked/>`, `<checkbox_unchecked/>` vb.) ile eğitilmiştir.
- **RLVR (Reinforcement Learning with Verifiable Rewards):** Model çıktıları, `TurkceVerify` sağlama başarısı ve `TEDS` ağaç düzenleme mesafesinden türetilen doğrulanabilir ödül fonksiyonu ile hizalanmıştır (**Son RLVR Ödülü: `0.9978`**).
### 2.3 Katman 3 — `TurkceVerify` Algoritmik Sağlama Kafesi ve Cebirsel Finansal Denklem Çözücü
`turkceocr/postprocess/turkceverify.py` modülü, OCR çıktısındaki resmi numaraları ve finansal tabloları deterministik olarak doğrular ve **1-edit görsel karışıklık kafesi** (`O ↔ 0`, `I/İ/l ↔ 1`, `S/Ş ↔ 5`, `B ↔ 8`, `G/Ğ ↔ 6`, `Z ↔ 2`) üzerinde otomatik onarır:
1. **T.C. Kimlik Numarası (TCKN) & Yabancı Kimlik Numarası (`99`):**
11 haneli `d_1 d_2 ... d_11` dizisi için (`d_1 ≠ 0`):
```text
d_10 = ( 7 × (d_1 + d_3 + d_5 + d_7 + d_9) - (d_2 + d_4 + d_6 + d_8) ) mod 10
d_11 = ( d_1 + d_2 + ... + d_10 ) mod 10, d_11 mod 2 == 0
```
> **Kritik Güvenlik Onarımı:** `99` ile başlayan Yabancı Kimlik Numaraları dahil tüm 11 haneli adaylarda NVİ Mod-10 ve çiftlik kontrolü zorunludur.
2. **Vergi Kimlik Numarası (VKN — GİB Mod-10):**
10 haneli `v_1 v_2 ... v_10` dizisi için `i ∈ {1..9}` adımlarında:
```text
t_i = (v_i + 10 - i) mod 10
c_i = 0 eğer t_i == 0
= 9 eğer t_i ≠ 0 ve (t_i × 2^(10-i)) mod 9 == 0
= (t_i × 2^(10-i)) mod 9 diğer durumlarda
v_10 = (10 - ((c_1 + c_2 + ... + c_9) mod 10)) mod 10
```
3. **TR IBAN (TCMB Rezerv `'0'` + ISO-7064 Mod-97-10):**
26 karakterli `TRkk bbbb brrr cccc cccc cccc cc` dizisinde 10. karakterin rezerv `'0'` (`clean[9] == '0'`) olması ve ilk 4 karakter sona taşınıp harfler sayıya (`T = 29, R = 27`) dönüştürüldüğünde:
```text
int(Rearranged_IBAN) mod 97 == 1
```
4. **Cebirsel KDV & Fatura Denklem Çözücü:**
Fatura satırlarında ve dip toplamlarında Türkiye KDV oranları (`r ∈ {1%, 10%, 20%}`) için:
```text
Matrah + KDV = Genel Toplam, KDV = round(Matrah × r, 2)
```
denklemlerini sağlamayan OCR rakam hatalarını (örn. `2.800,00 TL` olarak okunan matrahın `KDV = 400,00 TL` ve `Toplam = 2.400,00 TL` kısıtlarından `2.000,00 TL` olarak tekil çözümü) cebirsel olarak onarır.
### 2.4 Katman 4 — `RepetitionGuard`, `UnifiedTurkishEntityEngine` (`ictihat_core` × `kvkk-pii v2.0`) ve `VisualRedactor`
1. **`RepetitionGuard` (`turkceocr/postprocess/repetition_guard.py` — KPI-14):**
- VLM'lerin 4..8 kelimelik kalıpları `≥ 5` kez ardışık tekrarladığı dejenerasyon döngülerini (`yibk-30463` Sayfa 2'deki 28× tekrar döngüsü gibi) anında tespit edip keser (`loop_rate: 0.8696 → 0.0000`).
- **Rekabet Kurumu Ticari Sır Muafiyeti:** Rekabet Kurumu kararlarında tek dosyada **4.157 kez** geçebilen `| (.....) | (.....) |` ticari sır maskeleme tablolarını alfabetik çeşitlilik filtresiyle (`len({s for s in kalip if any(c.isalpha() for c in s)}) < 3`) döngü sanıp kesmez (**`%0.00` yanlış pozitif**).
2. **`UnifiedTurkishEntityEngine` (`turkceocr/postprocess/entity_engine.py`):**
- **İki Katmanlı Fail-Closed Mimari (`VERIFIED_PII` + `SUSPECT_PII`):** Algoritmik sağlamadan geçen veya 1-edit ile onarılan kimlik/hesap numaralarını `VERIFIED_PII` (`confidence ≥ 0.95`) olarak; çoklu OCR bozulması nedeniyle sağlamadan geçemeyen ancak sol bağlam penceresinde `TCKN:`, `T.C. Kimlik No:`, `Vergi No:`, `IBAN:` etiketi bulunan adayları ise asla düşürmeyip **`<TR_TCKN_SUSPECT>` / `<TR_VKN_SUSPECT>` / `<TR_IBAN_SUSPECT>` (`tier="SUSPECT_PII"`)** olarak yakalar.
- **1:1 İzomorfik Türkçe Katlama (`fold_tr_isomorphic`):** `İ → i`, `I → ı` dönüşümünü Python `'İ'.lower() == 'i\u0307'` (2 karakter!) hatasına düşmeden **1:1 karakter uzunluğu değişmezliği** (`len(folded) == len(raw)`) ile yapar; böylece regex ve NER span ofsetleri orijinal metinle milimetrik hizalanır.
- **Hiyerarşik Span Kapsama (`Hierarchical Span Subsumption`):** Tam adres (`ADDRESS`) veya şirket unvanı (`ORG_COMPANY`) içindeki alt parçaların (`Mahallesi`, `No: 14`, `Yılmaz`) tek başına parçalı etiketlenmesini önler.
3. **`VisualRedactor` (`turkceocr/postprocess/visual_redactor.py` — 2B `#000000` Karartma):**
- `OffsetMap` (`π: norm_idx → raw_idx`) monotonik hizalama vektörü ve tipografik karakter genişlik ağırlıkları (`W/M/@: 1.35`, `i/ı/l/1/.,:;: 0.45`) ile metin span'larını `[x_1, y_1, x_2, y_2]` piksel koordinatlarına izdüşürür.
- Tespit edilen PII bölgelerini, ıslak imzaları (`VISUAL_SIGNATURE`), kaşeleri (`VISUAL_STAMP`), karekodları (`VISUAL_QRCODE`) ve vesikalık fotoğrafları (`VISUAL_PHOTO`) **geri döndürülemez tam siyah (`RGB = 0, 0, 0` / `#000000`)** dikdörtgenlerle kapatır.
---
## 3. Kapsamlı Kıyaslama (Benchmark) Sonuçları
### 3.1 `TurkExternalBlindBench-v1`: 35 Gerçek Saha Sayfası × 9 Motor (Tam Liderlik ve Kategori Kırılımı)
`TurkExternalBlindBench-v1`, hiçbir sentetik şablon içermeyen, doğrudan [`hamzabagirsakci/turkish-court-decisions`](https://huggingface.co/datasets/hamzabagirsakci/turkish-court-decisions) ve kamu mevzuat/karar arşivlerinden seçilmiş **35 gerçek belge sayfasından** (`5` kategori × `7` örnek, toplam **`93.165` gerçek karakter**) oluşur.
#### Tablo 3.1A — Tüm 35 Gerçek Sayfa Üzerinde Genel Liderlik Tablosu (`N = 35`)
| Sıra | Motor Kodu & Yapılandırma | Örnek (`N`) | Ortalama CER (↓) | Ortalama WER (↓) | Diacritic F1 (↑) | KPI-14 Döngü Oranı (↓) | Açıklama |
| :---: | :--- | :---: | :---: | :---: | :---: | :---: | :--- |
| **1** | **`E7_TurkceOCR_Full_System`** | `35` | **`0.0176`** (`1.76%`) | **`0.0757`** (`7.57%`) | **`0.9867`** (`98.67%`) | **`0.0000`** | `E6` + `RepetitionGuard` + `TurkceVerify` (TCKN/VKN/IBAN + Finansal + Hukuki Onarım) + `UnifiedTurkishEntityEngine` + `VisualRedactor` |
| **2** | **`E6_TurkceOCR_Visual_v1`** | `35` | **`0.0178`** (`1.78%`) | **`0.0767`** (`7.67%`) | **`0.9867`** (`98.67%`) | **`0.0000`** | Adaptif 2×/2.5× Lanczos süper-çözünürlük + morfolojik tablo ızgara temizliği + aydınlatma bölme normalizasyonu + mühür bastırma (Son-işleme kapalı) |
| **3** | `E4_Tesseract5_tur_Raw` | `35` | `0.0418` (`4.18%`) | `0.1061` (`10.61%`) | `0.9741` (`97.41%`) | `0.0000` | Resmi `tesseract.exe` v5.4.0 (`-l tur --psm 3`), ham 1× görüntü |
| **4** | `E3_Tesseract5_eng` | `35` | `0.1303` (`13.03%`) | `0.4834` (`48.34%`) | `0.0000` (`0.00%`) | `0.0000` | Resmi `tesseract.exe` v5.4.0 (`-l eng --psm 3`), Türkçe diakritiksiz baz |
| **5** | `E2c_SVTRv2_Line_v2_Phase2` | `35` (`215` satır) | `0.5234` (`0.2450` satır) | `0.9561` (`0.8183` satır) | `0.3378` (`0.5427` satır) | `0.0000` | Faz-2 40-epoch saf nöral CTC `TurkceOCRLine` + Faz-3 Boşluk Vadisi (`Whitespace-Valley`) bölütleyici (dil modeli yok) |
| **6** | `E1_PyMuPDF_Digital` | `35` | `0.6055` (`60.55%`) | `0.6537` (`65.37%`) | `0.4015` (`40.15%`) | `0.0000` | `fitz` dijital metin çıkarımı (21 taranmış/GIF/DOCX sayfasında `0` karakter; 1999 PDF'lerinde `t a r i h l i` harf ayrışma bozulması) |
| **7** | `E2b_SVTRv2_Line_v1_BlankSuppressed` | `35` | `0.9916` (`99.16%`) | `0.9997` (`99.97%`) | `0.0000` (`0.00%`) | `0.0000` | Faz-1 40-adım sentetik model (`<blank>` logit `-2.0` bastırmalı) |
| **8** | `E2_SVTRv2_Line_v1_40Step_Greedy` | `35` | `1.0000` (`100.00%`) | `1.0000` (`100.00%`) | `0.0000` (`0.00%`) | `0.0000` | Faz-1 40-adım sentetik model (`%76.98` `<blank>` çöküşü — Faz-2'de tamamen çözüldü) |
#### Tablo 3.1B — Taranmış/Arşiv Alt Kümesinde `Hunyuan-OCR` VLM ile Birebir Karşılaştırma (`N = 18`)
| Sıra | Motor Kodu | Örnek (`N`) | Ortalama CER (↓) | Ortalama WER (↓) | Diacritic F1 (↑) | `Hunyuan-OCR`'a Göre Bağıl Hata Azaltımı |
| :---: | :--- | :---: | :---: | :---: | :---: | :--- |
| **1** | **`E7_TurkceOCR_Full_System`** | `18` | **`0.0200`** (`2.00%`) | **`0.0699`** (`6.99%`) | **`0.9827`** (`98.27%`) | **`-87.38%` (7.93× daha düşük CER)** |
| **2** | **`E6_TurkceOCR_Visual_v1`** | `18` | **`0.0203`** (`2.03%`) | **`0.0713`** (`7.13%`) | **`0.9827`** (`98.27%`) | **`-87.19%` (7.81× daha düşük CER)** |
| **3** | `E4_Tesseract5_tur_Raw` | `18` | `0.0625` (`6.25%`) | `0.1238` (`12.38%`) | `0.9590` (`95.90%`) | `-60.57%` (2.54× daha düşük CER) |
| **4** | `E5_Hunyuan_VLM_Archive` | `18` | `0.1585` (`15.85%`) | `0.1823` (`18.23%`) | `0.8930` (`89.30%`) | Baz VLM (`0.00%`) |
#### Tablo 3.1C — 5 Gerçek Belge Kategorisi Bazında Özet Performans (`7` Örnek / Kategori)
| Kategori (`7` örnek / kategori) | `E1_PyMuPDF` CER | `E2c_SVTRv2_v2` CER | `E3_Tess_eng` CER | `E4_Tess_tur` CER | `E5_Hunyuan` CER | `E6_Visual_v1` CER | `E7_Full_System` CER | `E7` Diacritic F1 | Kategori Kazananı |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :--- |
| **`cat1_rekabet_pdf`** (Rekabet Kurumu Kararları) | `0.2857` | `0.4276` | `0.0961` | `0.0194` | `0.0339` (`N=2`) | `0.0118` | **`0.0117`** | **`0.9908`** | **`TürkçeOCR Full` (`1.17%`)** |
| **`cat2_rg_yibk_pdf`** (Resmî Gazete YİBK & 1999 Arşiv) | `0.7419` | `0.5011` | `0.1391` | `0.0351` | **`0.0110`** (`N=5`) | `0.0244` | `0.0244` | `0.9833` | **`Hunyuan-OCR` (`1.10%` modern)** / **`TürkçeOCR` (`2.44%` 1999 Courier + Mühür)** |
| **`cat3_mevzuat_pdf`** (HUMK, Avukatlık K., CMUK, HMK) | `0.0000` (Dijital) | `0.5295` | `0.1050` | `0.0140` | Yok | **`0.0076`** | **`0.0076`** | **`0.9985`** | **`TürkçeOCR Full` (`0.76%` görsel)** |
| **`cat4_rg_2001_gif`** (2001 Arşiv `551×790` 1-Bit GIF) | `1.0000` | `0.4980` | `0.1063` | `0.0107` | `0.3233` (`N=7`) | `0.0035` | **`0.0028`** | **`0.9979`** | **`TürkçeOCR Full` (`0.28%` — 115× `Hunyuan` üstünlüğü)** |
| **`cat5_epdk_rapor`** (EPDK `.docx/.emf` Tablo & Mahkeme PII) | `1.0000` | `0.6607` | `0.2049` | `0.1297` | `0.1169` (`N=4`) | `0.0417` | **`0.0414`** | **`0.9629`** | **`TürkçeOCR Full` (`4.14%`)** |
| **Tüm 35 Gerçek Örnek Ortalaması** | `0.6055` | `0.5234` | `0.1303` | `0.0418` | `0.1585` (`N=18`) | `0.0178` | **`0.0176`** | **`0.9867`** | **`TürkçeOCR Full` (`1.76%`)** |
#### Tablo 3.1D — Kategori 1 (`cat1_rekabet_pdf` — Rekabet Kurumu Kararları) Sayfa Bazlı Adli Kırılım
| Örnek Kodu | Kaynak Dosya & Sayfa | GT Karakter | `E1_PyMuPDF` CER | `E2c_SVTRv2_v2` CER | `E4_Tess_tur` CER | `E5_Hunyuan` CER | `E7_Full` CER | `E7` Diac-F1 |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `cat1_rekabet_d1ec1287_p0` | `d1ec1287...pdf` p0 | `2,750` | `0.0000` | `0.4898` | `0.0160` | — | **`0.0087`** | `0.9898` |
| `cat1_rekabet_0008dcd7_p0` | `0008dcd7...pdf` p0 | `2,146` | `0.0000` | `0.4357` | `0.0177` | — | `0.0233` | `0.9904` |
| `cat1_rekabet_000c7b90_p0` | `000c7b90...pdf` p0 | `2,653` | `0.0000` | `0.3732` | `0.0192` | — | **`0.0083`** | `0.9890` |
| `cat1_rekabet_0016a1a9_p0` | `0016a1a9...pdf` p0 | `2,285` | `0.0000` | `0.4026` | `0.0241` | — | **`0.0044`** | `0.9971` |
| `cat1_rekabet_d1ec1287_p5_table` | `d1ec1287...pdf` p5 (Tablo) | `3,691` | `0.0000` | `0.4389` | `0.0176` | — | **`0.0079`** | `0.9966` |
| `cat1_rekabet_7dd75c43_p0_scan` | `7dd75c43...pdf` p0 (Tarama) | `2,609` | `1.0000` | `0.4094` | `0.0180` | `0.0678` | **`0.0126`** | `0.9943` |
| `cat1_rekabet_10687ee0_p0_scan` | `10687ee0...pdf` p0 (Tarama) | `2,741` | `1.0000` | `0.4436` | `0.0230` | **`0.0000`** | `0.0164` | `0.9786` |
| **Kategori 1 Ortalama** | **7 Rekabet Kurumu Sayfası** | **`18,875`** | **`0.2857`** | **`0.4276`** | **`0.0194`** | **`0.0339`** | **`0.0117`** | **`0.9908`** |
#### Tablo 3.1E — Kategori 2 (`cat2_rg_yibk_pdf` — Resmî Gazete YİBK & 1999 Arşiv Courier) Sayfa Bazlı Adli Kırılım
| Örnek Kodu | Kaynak Dosya & Sayfa | GT Karakter | `E1_PyMuPDF` CER | `E2c_SVTRv2_v2` CER | `E4_Tess_tur` CER | `E5_Hunyuan` CER | `E7_Full` CER | `E7` Diac-F1 |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `cat2_rg_yibk_20190314_15_p0` | `20190314-15.pdf` p0 | `3,251` | `0.9711` | `0.3962` | `0.0209` | **`0.0034`** | `0.0148` | `0.9915` |
| `cat2_rg_yibk_20180629_16_p0_stamp` | `20180629-16.pdf` p0 (Islak Mühür) | `4,981` | `0.9788` | `0.4650` | `0.0719` | **`0.0361`** | **`0.0616`** | `0.9662` |
| `cat2_rg_yibk_20190620_10_p0` | `20190620-10.pdf` p0 | `4,316` | `0.9746` | `0.3304` | `0.0042` | `0.0132` | **`0.0037`** | `0.9971` |
| `cat2_rg_yibk_20200117_21_p0` | `20200117-21.pdf` p0 | `1,926` | `0.9756` | `0.4008` | `0.0083` | **`0.0016`** | `0.0083` | `0.9898` |
| `cat2_rg_yibk_20200630_17_p0` | `20200630-17.pdf` p0 | `1,607` | `0.9756` | `0.6584` | `0.0940` | **`0.0006`** | `0.0317` | `0.9801` |
| `cat2_rg_yibk_23687_p42_1999` | `23687.pdf` p42 (1999 Courier) | `2,226` | `0.1584` *(`t a r i h l i`)* | `0.6141` | `0.0211` | — | `0.0270` | `0.9771` |
| `cat2_rg_yibk_23687_p43_1999` | `23687.pdf` p43 (1999 Courier) | `3,794` | `0.1590` *(`e c r i m i s i l`)* | `0.6431` | `0.0250` | — | **`0.0235`** | `0.9810` |
| **Kategori 2 Ortalama** | **7 Resmî Gazete YİBK Sayfası** | **`22,101`** | **`0.7419`** | **`0.5011`** | **`0.0351`** | **`0.0110`** | **`0.0244`** | **`0.9833`** |
#### Tablo 3.1F — Kategori 3 (`cat3_mevzuat_pdf` — HUMK, Avukatlık Kanunu, CMUK, HMK) Sayfa Bazlı Adli Kırılım
| Örnek Kodu | Kaynak Kanun & Sayfa | GT Karakter | `E1_PyMuPDF` CER | `E2c_SVTRv2_v2` CER | `E3_Tess_eng` CER | `E4_Tess_tur` CER | `E7_Full` CER | `E7` Diac-F1 |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `cat3_mevzuat_1086_p0` | `1086.pdf` p0 (HUMK) | `2,828` | `0.0000` | `0.6464` | `0.1045` | `0.0057` | **`0.0057`** | `0.9976` |
| `cat3_mevzuat_1086_p1` | `1086.pdf` p1 (HUMK) | `2,508` | `0.0000` | `0.4458` | `0.1018` | `0.0132` | `0.0132` | `1.0000` |
| `cat3_mevzuat_1136_p0` | `1136.pdf` p0 (Avukatlık K.) | `1,507` | `0.0000` | `0.5216` | `0.1051` | `0.0027` | **`0.0027`** | `0.9957` |
| `cat3_mevzuat_1136_p1` | `1136.pdf` p1 (Avukatlık K.) | `2,548` | `0.0000` | `0.4407` | `0.1110` | `0.0024` | **`0.0024`** | `1.0000` |
| `cat3_mevzuat_1412_p0` | `1412.pdf` p0 (CMUK) | `1,525` | `0.0000` | `0.6682` | `0.1107` | `0.0643` | **`0.0197`** | `1.0000` |
| `cat3_mevzuat_1412_p1` | `1412.pdf` p1 (CMUK) | `2,376` | `0.0000` | `0.4609` | `0.0926` | `0.0076` | `0.0076` | `1.0000` |
| `cat3_mevzuat_6100_p0` | `6100.pdf` p0 (HMK) | `1,596` | `0.0000` | `0.5226` | `0.1096` | `0.0019` | **`0.0019`** | `0.9964` |
| **Kategori 3 Ortalama** | **7 Mevzuat Kanun Sayfası** | **`14,888`** | **`0.0000`** | **`0.5295`** | **`0.1050`** | **`0.0140`** | **`0.0076`** | **`0.9985`** |
#### Tablo 3.1G — Kategori 4 (`cat4_rg_2001_gif` — 2001 Arşiv `551×790` 1-Bit GIF) Sayfa Bazlı Adli Kırılım
| Örnek Kodu | Kaynak Dosya (`551×790` 1-bit) | GT Karakter | `E3_Tess_eng` CER | `E4_Tess_tur` CER | `E5_Hunyuan` CER | `E6_Visual_v1` CER | `E7_Full` CER | `E7` Diac-F1 |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `cat4_rg_20011118_8` | `20011118-8.gif` (Sayfa 1) | `3,000` | `0.1227` | `0.0190` | `0.3133` | `0.0047` | **`0.0047`** | `0.9982` |
| `cat4_rg_20011118_9` | `20011118-9.gif` (Sayfa 2) | `3,897` | `0.1050` | `0.0118` | `0.2027` | `0.0028` | **`0.0028`** | `0.9957` |
| `cat4_rg_20011118_10` | `20011118-10.gif` (Sayfa 3) | `3,948` | `0.1007` | `0.0073` | `0.1408` | `0.0051` | **`0.0041`** | `0.9968` |
| `cat4_rg_20011118_11` | `20011118-11.gif` (Sayfa 4) | `3,893` | `0.1017` | `0.0054` | `0.5058` | `0.0036` | **`0.0033`** | `1.0000` |
| `cat4_rg_20011118_12` | `20011118-12.gif` (Sayfa 5) | `3,568` | `0.1086` | `0.0095` | `0.0429` | `0.0008` | **`0.0008`** | `0.9964` |
| `cat4_rg_20011118_13` | `20011118-13.gif` (Sayfa 6) | `3,073` | `0.0970` | `0.0166` | `0.8353` | `0.0052` | **`0.0033`** | `0.9980` |
| `cat4_rg_20011118_17` | `20011118-17.gif` (Sayfa 10) | `2,906` | `0.1088` | `0.0055` | `0.2226` | `0.0021` | **`0.0007`** | `1.0000` |
| **Kategori 4 Ortalama** | **7 Arşiv GIF Sayfası** | **`24,285`** | **`0.1063`** | **`0.0107`** | **`0.3233`** | **`0.0035`** | **`0.0028`** | **`0.9979`** |
#### Tablo 3.1H — Kategori 5 (`cat5_epdk_rapor` — EPDK `.docx/.emf` Tabloları ve Mahkeme PII Taramaları) Kırılımı
| Örnek Kodu | Kaynak Belge | GT Karakter | `E4_Tess_tur` CER | `E5_Hunyuan` CER | `E6_Visual_v1` CER | `E7_Full` CER | `E7` Diac-F1 | Önemli Adli Bulgu |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :--- |
| `cat5_epdk_15822_1_docx_png` | `15822-1.docx` (`image1.png`) | `548` | `0.0985` | **`0.0000`** | `0.0657` | `0.0657` | `0.9524` | Grid temizleme ve PSM 6 ile CER `%9.85`'ten `%6.57`'ye indirildi |
| `cat5_epdk_12489_2_docx_emf` | `12489-2.docx` (`image1.emf`) | `2,241` | `0.6314` | `0.4654` | **`0.0509`** | **`0.0509`** | `0.9358` | 9 sütunlu `.emf` vektör tablo: E4 `%63.14` ve Hunyuan `%46.54` iken E7 `%5.09` (12.4× iyileşme) |
| `cat5_epdk_10284_pdf_scan` | `10284-None.pdf` p0 (Tarama) | `2,894` | `0.0187` | **`0.0003`** | `0.0104` | **`0.0093`** | `0.9814` | `TurkceVerify` `112.146.867)` parantez gürültüsünü temizledi |
| `cat5_epdk_10407_1_pdf_table` | `10407-1.pdf` p0 (Gri Başlıklı Tablo) | `2,555` | `0.0603` | **`0.0020`** | `0.0658` | `0.0654` | `0.9356` | Aydınlatma bölme normalizasyonu koyu gri (`#808080`) dolguyu beyazlattı |
| `cat5_rapor_yargitay_001_pii` | `elle_kontrol_500::yargitay` | `1,671` | `0.0180` | — | `0.0180` | **`0.0180`** | `1.0000` | Bozuk TCKN (`148→146`) ve `Matrah+KDV=Toplam` (`2.800→2.000`) %100 onarıldı |
| `cat5_rapor_danistay_001_pii` | `elle_kontrol_500::danistay` | `1,554` | **`0.0669`** | — | **`0.0669`** | `0.0676` | `0.9672` | Bozuk TCKN (`412→410`) ve VKN (`6543210980`) %100 onarıldı |
| `cat5_rapor_aym_bb_001_pii` | `elle_kontrol_500::aym_bb` | `1,553` | `0.0142` | — | `0.0142` | **`0.0129`** | `0.9682` | Bozuk TCKN (`912→910`) ve `5.800,00→5.000,00 TL` matrah %100 onarıldı |
| **Kategori 5 Ortalama** | **7 EPDK & Mahkeme PII Sayfası** | **`12,466`** | **`0.1297`** | **`0.1169`** | **`0.0417`** | **`0.0414`** | **`0.9629`** | — |
---
### 3.2 `TürkçeOCR-Bench-6Cat`: 15-KPI (`KPI-1..15`), 6-Model Ablasyon ve 4 Uluslararası Kıyaslama Paketi
#### Tablo 3.2A — 15-KPI Gate 1 (Minimum Kabul) & Gate 2 (SOTA) Denetim Tablosu (`M4: TürkçeOCR Tam Sistem`)
| KPI Kodu | Metrik Tanımı ve Matematiksel Formülü | `M0: Baz OCR` | `M1: LightOn-1B` | `M2: Paddle-VL` | `M4: TürkçeOCR` | Gate 1 (Kabul) | Gate 2 (SOTA) | Durum |
| :---: | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| **KPI-1** | **Ortalama CER (↓):** `(S + D + I) / N_ref` (ID + OOD) | `0.2419` | `0.1128` | `0.0173` | **`0.0000`** | `≤ 0.0150` | `≤ 0.0050` | ✅ / 🏆 |
| **KPI-2** | **OmniDocBench/OCRTurk NED (↓):** `edit(y, y_hat) / max(|y|, |y_hat|)` | `0.2419` | `0.1128` | `0.0173` | **`0.0000`** | `≤ 0.0150` | `≤ 0.0050` | ✅ / 🏆 |
| **KPI-3** | **Kelime Hata Oranı WER (↓):** `(S_w + D_w + I_w) / N_w` | `0.4979` | `0.1359` | `0.0425` | **`0.0000`** | `≤ 0.0450` | `≤ 0.0200` | ✅ / 🏆 |
| **KPI-4** | **Pozisyon-Hizalı Diacritic-F1 (↑):** `{ğ,ü,ş,ı,i,ö,ç,â,î,û}` Levenshtein F1 | `0.0000` | `0.8916` | `0.9338` | **`1.0000`** | `≥ 0.9750` | `≥ 0.9920` | ✅ / 🏆 |
| **KPI-5** | **Pozisyon-Hizalı `I/İ/ı/i` Nokta Ayrım F1 (↑)** | `0.4004` | `0.8817` | `0.9510` | **`1.0000`** | `≥ 0.9850` | `≥ 0.9950` | ✅ / 🏆 |
| **KPI-6** | **Morfolojik Ek Doğruluğu MSA (↑):** `≥ 10` harfli eklemeli Türkçe kelimeler | `0.5796` | `0.8731` | `0.9561` | **`1.0000`** | `≥ 0.9600` | `≥ 0.9850` | ✅ / 🏆 |
| **KPI-7** | **Kaşe Altı Kurtarma SURR (↑):** `1 - CER_stamped` | `0.5676` | `0.8438` | `0.9453` | **`1.0000`** | `≥ 0.9000` | `≥ 0.9600` | ✅ / 🏆 |
| **KPI-8** | **2D-DP Tablo Yapısal TEDS (↑):** `1 - TreeEditDist(T_a, T_b) / max(|T_a|, |T_b|)` | `0.7410` | `0.9792` | `0.9856` | **`1.0000`** | `≥ 0.9300` | `≥ 0.9650` | ✅ / 🏆 |
| **KPI-9** | **TR-DocVQA KIE ANLS (↑):** `τ = 0.5` eşikli normalize benzerlik | `0.9018` | `0.9743` | `0.9743` | **`1.0000`** | `≥ 0.9200` | `≥ 0.9550` | ✅ / 🏆 |
| **KPI-10** | **Algoritmik Sağlama CVKR (↑):** TCKN + VKN + IBAN + KDV Denklem Geçerliliği | `0.1667` | `0.6667` | `0.6667` | **`1.0000`** | `≥ 0.9800` | `≥ 0.9950` | ✅ / 🏆 |
| **KPI-11** | **olmOCR Birim Test Geçiş Oranı (↑)** | `0.5000` | `0.8741` | `0.8926` | **`1.0000`** | `≥ 0.9200` | `≥ 0.9600` | ✅ / 🏆 |
| **KPI-12** | **Okuma Sırası RO-NED (↓):** Çok sütunlu okuma sırası düzenleme mesafesi | `0.2419` | `0.1128` | `0.0173` | **`0.0000`** | `≤ 0.0500` | `≤ 0.0200` | ✅ / 🏆 |
| **KPI-13** | **Kritik KVKK PII Sıfır-Sızıntı Recall (↑):** `TCKN, IBAN, PHONE, HEALTH, SPECIAL` | `0.6704` | `0.9375` | `0.9375` | **`1.0000`** | `≥ 0.9850` | `≥ 0.9980` | ✅ / 🏆 |
| **KPI-14** | **Hukuk & KVKK Varlık Span Makro-F1 (↑) & 0-Döngü Garantisi** | `0.7660` | `0.9693` | `0.9693` | **`1.0000`** | `≥ 0.9200` | `≥ 0.9600` | ✅ / 🏆 |
| **KPI-15** | **2B Görsel Karartma (`#000000`) Kapsama Oranı (↑)** | `0.5272` | `0.8317` | `0.9219` | **`1.0000`** | `≥ 0.9900` | `≥ 0.9980` | ✅ / 🏆 |
#### Tablo 3.2B — 6 Belge Kategorisi Bazında CER (↓) Kırılımı (`TürkçeOCR-Bench-6Cat`)
| Model | Kurumsal e-Arşiv Fatura | Termal POS Fişi | Karma El Yazısı Form | Resmî Gazete / Noter | Çoklu KDV ERP Tablosu | Çift Sütunlu PDF (`2-Col`) |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: |
| **M0: Çok Dilli Baz OCR** | `0.1855` | `0.1768` | `0.2166` | `0.4488` | `0.1232` | `0.3006` |
| **M1: LightOnOCR-2-1B / Werea-1B (Baz VLM)** | `0.1283` | `0.0833` | `0.2271` | `0.0246` | `0.0676` | `0.1456` |
| **M2: PaddleOCR-VL-0.9B (Baz VLM)** | `0.0394` | `0.0020` | `0.0155` | `0.0328` | `0.0137` | `0.0006` |
| **M3a: TürkçeOCR-VL-1B-LightOn (TurkceVerify Kapalı)** | `0.0015` | `0.0000` | `0.0000` | `0.0000` | `0.0000` | `0.0000` |
| **M3b: TürkçeOCR-VL-0.9B-Paddle (TurkceVerify Kapalı)** | `0.0000` | `0.0000` | `0.0000` | `0.0000` | `0.0009` | `0.0000` |
| **M4: TürkçeOCR Tam Sistem (VL + SVTRv2 + TurkceVerify)** | **`0.0000`** | **`0.0000`** | **`0.0000`** | **`0.0000`** | **`0.0000`** | **`0.0000`** |
#### Tablo 3.2C — 4 Uluslararası & Ulusal Kıyaslama Paketi Özeti (`OmniDocBench-TR`, `olmOCR-TR`, `TR-DocVQA`, `OCRTurk`)
| Kıyaslama Paketi | Metrik | Literatür Baz (`Zero-Shot / SOTA`) | `M1: LightOn-1B Baz` | `M2: Paddle-VL-0.9B Baz` | `M3a: TürkçeOCR-VL-1B` | `M3b: TürkçeOCR-VL-0.9B` | `M4: TürkçeOCR Tam Sistem` |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: |
| **OmniDocBench-TR** | Genel Başarım (`1 - NED` ↑) | `0.9634` *(PaddleOCR-VL)* | `0.8872` | `0.9827` | `0.9998` | `0.9998` | **`1.0000`** |
| **OmniDocBench-TR** | 2D-DP Tablo `TEDS` (↑) | `0.9150` *(PaddleOCR-VL)* | `0.9792` | `0.9856` | `1.0000` | `1.0000` | **`1.0000`** |
| **olmOCR-Bench-TR** | Birim Test Geçiş Oranı (↑) | `0.8630` *(LightOnOCR)* | `0.8741` | `0.8926` | `0.9815` | `0.9815` | **`1.0000`** |
| **TR-DocVQA (KIE)** | `ANLS` (`τ = 0.5` ↑) | `0.8745` *(PaliGemma-3B)* | `0.9743` | `0.9743` | `0.9975` | `0.9972` | **`1.0000`** |
| **TR-DocVQA (KIE)** | Sağlama Geçerliliği `CVKR` (↑) | `0.7600` *(Werea-v1)* | `0.6667` | `0.6667` | `0.9583` | `0.9583` | **`1.0000`** |
| **OCRTurk-Hard** | Karakter Hata Oranı `CER` (↓) | `0.0680` *(OCRTurk-SOTA)* | `0.1128` | `0.0173` | `0.0002` | `0.0002` | **`0.0000`** |
---
### 3.3 Faz-2 Gerçek PDF + Hibrit Eğitim (`2.750` Satır) ve `test_real_pdf` (`N = 215`) Ablasyonu
`SVTRv2-Turkish-SGM v2` (`line_svtrv2/model.safetensors`), kamu karar ve mevzuat PDF'lerinden (`rekabet_pdf`: 750, `mevzuat_pdf`: 680, `rg_pdf`: 270 → toplam **1.700 gerçek PDF satırı**) ve `elle_kontrol_500.jsonl` arşiv satırlarından (**1.050 hibrit satır**) oluşan **2.750 satırlık** korpus üzerinde **belge düzeyi sızıntı koruması (`Zero Doc-ID Leakage = True`)** ile **NVIDIA RTX 4090** üzerinde 40 epoch eğitilmiştir.
| Metrik (`test_real_pdf`, `N = 215` Kör Test Satırı) | `SVTRv2-v1` (Faz-1, 40 Adım Sentetik) | `SVTRv2-v2` (Faz-2, 40 Epoch Gerçek PDF+Hibrit) | Mutlak / Bağıl İyileşme |
| :--- | :---: | :---: | :---: |
| **Son CTC Eğitim Kaybı (`CTC Loss`)** | `3.6381` | **`0.7188`** | **`-80.2%` kayıp azalması** |
| **Ortalama `<blank>` Token Olasılığı** | `0.7698` *(100% boş çıktı çöküşü)* | **`0.6541`** *(net karakter tepeleri)* | **Epoch 4'te `<blank>` çöküşü kırıldı** |
| **Genel `test_real_pdf` CER (↓, `N = 215`)** | `1.0000` (`100.00%`) | **`0.2450`** (`24.50%`) | **`-75.50%` mutlak CER azalması** |
| **Saf Gerçek PDF (`rekabet+mevzuat+rg`) CER (↓, `N = 136`)** | `1.0000` (`100.00%`) | **`0.2192`** (`21.92%`, `Diac-F1 = 0.6172`) | **`-78.08%` mutlak CER azalması** |
| **`mevzuat_pdf` Alt Kümesi CER (↓, `N = 56`)** | `1.0000` (`100.00%`) | **`0.1617`** (`16.17%`, `Diac-F1 = 0.6591`) | **`-83.83%` mutlak CER azalması** |
| **`rekabet_pdf` Alt Kümesi CER (↓, `N = 58`)** | `1.0000` (`100.00%`) | **`0.2034`** (`20.34%`, `Diac-F1 = 0.6828`) | **`-79.66%` mutlak CER azalması** |
| **`elle_kontrol_archival_hybrid` CER (↓, `N = 79`)** | `1.0000` (`100.00%`) | **`0.2895`** (`28.95%`, `Diac-F1 = 0.4145`) | **`-71.05%` mutlak CER azalması** |
| **Pozisyon-Hizalı Diacritic F1 (↑)** | `0.1349` | **`0.5427`** | **`+0.4078` artış** |
| **`I / İ / ı / i` Nokta Ayrım F1 (↑)** | `0.0884` | **`0.5879`** | **`+0.4995` artış** |
#### Tablo 3.3B — `SVTRv2-Turkish-SGM v2` Epoch Bazlı Eğitim Yakınsama Özeti (`NVIDIA RTX 4090`)
| Epoch | Öğrenme Oranı (LR) | Toplam Kayıp | CTC Kaybı | Türkçe SGM Kaybı | Confusion Focal Kaybı | Val CER (↓) | Val WER (↓) | Val Diacritic F1 (↑) |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `1` | `0.00118` | `6.6372` | `4.0994` | `4.1190` | `1.6186` | `1.0000` | `1.0000` | `0.0961` |
| `4` | `0.00092` | `5.6539` | `3.4473` | `3.9443` | `1.5245` | `0.9568` | `1.0000` | `0.0961` |
| `8` | `0.00034` | `4.4948` | `2.5872` | `3.8561` | `1.5934` | `0.8112` | `1.0000` | `0.0961` |
| `12` | `0.00006` | `3.6225` | `1.9801` | `3.7429` | `1.8155` | `0.6492` | `1.0000` | `0.1595` |
| `18` | `0.00063` | `3.5949` | `1.6605` | `3.8255` | `2.3819` | `0.5045` | `0.9825` | `0.2376` |
| `24` | `0.00006` | `2.9532` | `1.1080` | `3.6562` | `2.2622` | `0.3970` | `0.9337` | `0.3690` |
| `30` | `0.00085` | `3.1428` | `1.2412` | `3.7511` | `2.3551` | `0.4074` | `0.9543` | `0.3224` |
| `36` | `0.00023` | `2.7076` | `0.8605` | `3.6468` | `2.2830` | `0.3118` | `0.8748` | `0.4688` |
| **`40`** | **`0.00006`** | **`2.5331`** | **`0.7188`** | **`3.5816`** | **`2.2431`** | **`0.2776`** | **`0.8337`** | **`0.5207`** |
#### Tablo 3.3C — `UnifiedTurkishEntityEngine` & `VisualRedactor` 35 Gerçek Sayfa Çıkarım İstatistikleri (`420` Varlık)
| Varlık Sınıfı | Katman / Kategori | Toplam Sayı | `cat1_rekabet` | `cat2_yibk` | `cat3_mevzuat` | `cat4_2001_gif` | `cat5_epdk_rapor` | Doğrulanan Kesinlik (Precision) |
| :--- | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| `TR_DATE` | Hukuki / Zamansal | **`158`** | `43` | `42` | `36` | `17` | `20` | `0.994` |
| `TR_ESAS_KARAR_NO` | Hukuki (`ictihat_core`) | **`85`** | `0` | `48` | `0` | `30` | `7` | `0.985` |
| `TR_LAW_CITATION` | Hukuki (`ictihat_core`) | **`64`** | `14` | `13` | `13` | `20` | `4` | `0.992` |
| `TR_COURT_AUTHORITY` | Hukuki (`ictihat_core`) | **`47`** | `17` | `21` | `4` | `0` | `5` | `1.000` |
| `ORG_COMPANY` | Ticari | **`21`** | `18` | `1` | `0` | `0` | `2` | `0.952` |
| `PERSON` | KVKK PII | **`16`** | `6` | `7` | `1` | `0` | `2` | `0.941` |
| `TR_LEGAL_OUTCOME` | Hukuki (`ictihat_core`) | **`10`** | `0` | `1` | `0` | `2` | `7` | `1.000` |
| `ADDRESS` | KVKK PII | **`9`** | `6` | `0` | `0` | `0` | `3` | `1.000` |
| `TR_TCKN` | KVKK PII (Mod-10) | **`3`** | `0` | `0` | `0` | `0` | `3` | **`1.000` (`3/3` `TurkceVerify` ile onarıldı)** |
| `TR_IBAN` | KVKK PII (Mod-97) | **`3`** | `0` | `0` | `0` | `0` | `3` | **`1.000`** |
| `TR_VKN` | Ticari (Mod-10) | **`2`** | `0` | `0` | `0` | `0` | `2` | **`1.000`** |
| `TR_MERSIS` | Ticari (16 Hane) | **`1`** | `0` | `0` | `0` | `0` | `1` | **`1.000`** |
| `TR_IP` | Teknik PII | **`1`** | `1` | `0` | `0` | `0` | `0` | `1.000` |
| **Toplam Çıkarılan** | **Tüm 13 Aktif Sınıf** | **`420`** | **`105`** | **`133`** | **`54`** | **`69`** | **`59`** | — |
#### Tablo 3.3D — 2B `#000000` Görsel KVKK Karartma Doğrulaması (`VisualRedactor`)
| Örnek Belge | Toplam Varlık | Karartılan Kutu | Karartılan Varlık Dağılımı | Piksel Siyahlık Doğrulaması (`RGB=0,0,0`) |
| :--- | :---: | :---: | :--- | :---: |
| `rekabet_d1ec1287_p0` | `20` | `6` | `ORG_COMPANY: 3`, `PERSON: 3` | **`100.0%` (`#000000`)** |
| `rg_yibk_30463_p0` | `66` | `39` | `TR_ESAS_KARAR_NO: 36`, `PERSON: 3` | **`100.0%` (`#000000`)** |
| `court_pii_yargitay_001` | `16` | `10` | `TR_ESAS_KARAR_NO: 3`, `PERSON: 1`, `TR_TCKN: 1` *(148→146 onarıldı)*, `ADDRESS: 1`, `ORG_COMPANY: 1`, `TR_VKN: 1`, `TR_MERSIS: 1`, `TR_IBAN: 1` | **`100.0%` (`#000000`)** |
---
### 3.4 %100 Şeffaf Hata Analizi, Faz-3 İyileştirmeleri ve Sınırlar (Zero Metric Gaming Disclosure)
Bilimsel dürüstlük ve Zero Metric Gaming ilkesi gereği, `TürkçeOCR`'nin gerçek saha testlerinde tespit edilen 4 temel darboğaz, Faz-3'te geliştirilen genel geçer sinyal işleme çözümleri (`Before CER → After CER`) ve kalan fiziksel sınırlar aşağıda raporlanmıştır:
1. **Koyu Gri (`#808080`) Hücre Dolgusu ve Aydınlatma Normalizasyonu (`illumination_division_normalization`):**
- *Teşhis:* EPDK ve mahkeme tablolarında (`cat5_epdk_10407_1_pdf_table`) `#808080` gri hücre dolguları tipografik siyah yazı kontrastını düşürerek okuma hatalarına yol açıyordu (Başlangıç CER `%6.03`).
- *Faz-3 Çözümü:* Gauss arka plan bölme normalizasyonu (`I_norm = clip(I / max(1.0, G_σ(I)) × 255, 0, 255)`, `σ = 51`) genel modülü `turkceocr/data/photometric_ops.py` içine entegre edildi. Gri fonlar kimyasal olarak beyazlatılırken harf çekirdek kontrastı korundu.
- *Kalan Sınır:* Düşük kontrastlı piksellerde aşırı Gaussian çekirdek boyutu harf incelmesine yol açabileceğinden `σ = 51` parametresi sabitlenmiştir.
2. **Islak Mühür / Kaşe Mürekkebi Bastırma (`attenuate_stamp_overlay` — `SURR`):**
- *Teşhis:* YİBK kararında (`cat2_rg_yibk_20180629_16_p0_stamp`), yuvarlak Yargıtay ıslak mührünün doğrudan `feshin geçersizliğine ilişkin` satırı üzerine basması sonucu standart OCR CER `%7.19`'a fırlamış, `Hunyuan-OCR` ise `görüş yazısında özetle` ibaresini `dairesiz yazarıdır` olarak halüsine etmiştir.
- *Faz-3 Çözümü:* Orta ton (`75 ≤ I ≤ 165`) ve düşük gradyanlı (`‖∇I‖ < 65`) kaşe piksellerini arka plana itip keskin tipografik harf çekirdeklerini (`I < 70, ‖∇I‖ ≥ 65`) koruyan adaptif `attenuate_stamp_overlay` filtresi uygulandı.
- *Sonuç:* `cat2_rg_yibk_20180629_16_p0_stamp` CER `%7.19`'dan **`%6.16`**'ya geriletildi; `Hunyuan` halüsinasyonunun aksine orijinal metin korunarak kurtarıldı.
3. **Boyut Korumalı Tablo Izgara Temizliği (`remove_table_grid_lines`):**
- *Teşhis:* EPDK `.docx/.emf` vektör tablolarında (`cat5_epdk_12489_2_docx_emf`) kalın dikey/yatay hücre çizgileri harf gövdelerine temas ederek standart Tesseract'ta `%63.14`, `Hunyuan-OCR`'da `%46.54` CER yıkımına sebep oluyordu.
- *Faz-3 Çözümü:* Harf gövdesine (`H ≤ 40 px`) dokunmadan yalnızca `≥ 100 px` dikey ve `≥ 120 px` yatay çizgileri temizleyen ve sınır çizgisine teğet glifleri (`Ş`, rakamlar) `3×3` morfolojik genişletmeyle çizgiden ayıran (`Border Detachment`) filtre eklendi.
- *Sonuç:* `cat5_epdk_12489_2_docx_emf` CER `%63.14`'ten **`%5.09`**'a indirildi (**12.4× hata azalması**, 9/9 sütun kurtarıldı).
4. **`TurkceOCRLine` Dinamik Genişlik & Boşluk Vadisi (`Whitespace-Valley`) Bölütleme:**
- *Teşhis:* CTC satır modeli `W = 384` sabit genişlikte sıkıştırma bozulması yaşamakta ve 2 sütunlu sayfalarda sütun oluğu ayrıştırılamadığı için tek başına tam sayfada `%53.82` CER üretmekteydi.
- *Faz-3 Çözümü:* `H = 48` sabit tutulurken `W ∈ [384, 960]` aralığında doğal en-boy oranını koruyan `decode_dynamic_width` ve 2 sütunlu sayfalarda sütun oluğunu (`column gutter`) tespit edip satırları harf ortasından değil **Boşluk Vadisi** dip noktalarından bölen `segment_page_lines_adaptive` eklendi.
- *Sonuç:* Saf nöral CTC modeli tam sayfa CER'si `%53.82`'den **`%52.34`**'e çekildi; tekil satır değerlendirmesinde `mevzuat_pdf`'te `%16.17` CER seviyesi korundu.
5. **Kural ve Varlık Kapsaması (`GAP-ENT-01`, `GAP-ENT-02`, `GAP-REP-01`):**
- `GAP-ENT-01` (`T.A.Ş.` regex desteği) ve `GAP-ENT-02` (`Mahallesi`'siz açık sokak adresleri) entegrasyonu ile 35 gerçek sayfada çıkarılan varlık sayısı 414'ten **`420`**'ye yükseltildi; `TurkceVerify` ile 3 TCKN, 2 VKN, 1 KDV matrahı ve 14 yüzde/derece ifadesi deterministik olarak onarıldı.
---
## 4. 25+ Sınıf Hukuki, Ticari & KVKK-PII Varlık Taksonomisi ve 2B `#000000` Karartma
| Varlık Sınıfı (`entity_type`) | Kategori / Kaynak | Tanıma & Doğrulama Mekanizması | 2B `#000000` Karartma |
| :--- | :--- | :--- | :---: |
| `TR_TCKN` / `<TR_TCKN_SUSPECT>` | KVKK Kimlik (`kvkk-pii`) | 11 hane NVİ Mod-10 + çiftlik + 1-edit kafes onarımı + Fail-Closed Suspect | ✅ (`#000000`) |
| `TR_YKN` | KVKK Yabancı Kimlik | `99` ile başlayan 11 hane NVİ Mod-10 + çiftlik doğrulaması | ✅ (`#000000`) |
| `TR_VKN` / `<TR_VKN_SUSPECT>` | Ticari / Vergi (`GİB`) | 10 hane GİB Mod-10 + telefon çakışma filtresi + Fail-Closed Suspect | ✅ (`#000000`) |
| `TR_IBAN` / `<TR_IBAN_SUSPECT>` | Finansal (`TCMB`) | `TR` + 24 rakam, 10. hane `'0'` rezerv + ISO-7064 Mod-97-10 | ✅ (`#000000`) |
| `TR_MERSIS` | Ticari (`MERSİS`) | 16 haneli merkezi sicil numarası (`0` + VKN + `0001x`) | ✅ (`#000000`) |
| `TR_ETTN` | e-Fatura / e-Arşiv (`GİB`) | UUID-v4 standardında 36 karakterli Elektronik Fatura Tekil Numarası | ✅ (`#000000`) |
| `TR_INVOICE_NO` | Ticari Fatura | 3 harf + 4 yıl + 9 hane (`ABC2026000000001`) GİB fatura seri-sıra no | ✅ (`#000000`) |
| `TR_SGK_SICIL` | Sosyal Güvenlik (`SGK`) | İşyeri / sigortalı SGK sicil numarası örüntüsü | ✅ (`#000000`) |
| `TR_TAPU_ADA_PARSEL` | Gayrimenkul / Tapu | `Ada / Parsel / Pafta / Yevmiye` tapu kayıt tanımlayıcıları | ✅ (`#000000`) |
| `TR_NOTER_YEVMIYE` | Noterlik Hukuku | Noterlik adı + `Yevmiye No` resmi şerh tanımlayıcısı | ✅ (`#000000`) |
| `PERSON` | KVKK Kişisel Veri | `BERTurkNER v2.0` (`B/I-PERSON`) + Hukuki/Kurumsal rol bağlamı (`Davacı`, `Vekili`, `Sayın`) | ✅ (`#000000`) |
| `ADDRESS` | KVKK İletişim | `BERTurkNER v2.0` (`B/I-ADDRESS`) + `Mah./Cad./Sok./No/İlçe/İl` + Hiyerarşik Kapsama | ✅ (`#000000`) |
| `HEALTH_DATA` | **KVKK Md. 6 Özel Nitelikli** | `BERTurkNER v2.0` (`B/I-HEALTH_DATA`) + `ICD-10` tanı kodu + klinik/epikriz/reçete | ✅ (`#000000`) |
| `KVKK_SPECIAL` | **KVKK Md. 6 Özel Nitelikli** | `BERTurkNER v2.0` (`B/I-KVKK_SPECIAL`) — Sendika, dernek/vakıf, ceza mahkûmiyeti, biyometrik/genetik | ✅ (`#000000`) |
| `ORG_COMPANY` | Ticari Tüzel Kişi | `BERTurkNER v2.0` (`B/I-ORG_COMPANY`) + `A.Ş., T.A.Ş., Ltd. Şti., San. ve Tic.` | Opsiyonel / ✅ |
| `TAX_OFFICE` | Maliye / Vergi Dairesi | `BERTurkNER v2.0` (`B/I-TAX_OFFICE`) + `... Vergi Dairesi Müdürlüğü / VD` | Opsiyonel |
| `TR_PHONE` / `EMAIL` / `TR_PLATE` / `CREDIT_CARD` | KVKK İletişim / Finans | Alan kodu doğrulamalı TR telefon, e-posta, 01–81 il plaka, Luhn kredi kartı | ✅ (`#000000`) |
| `TR_LAW_CITATION` | Hukuki (`ictihat_core`) | `6098 sayılı TBK m. 49/1`, `6698 sayılı KVKK Md. 6`, `İİK m. 67` norm atıfları | Yapısal Etiket |
| `TR_COURT_AUTHORITY` | Hukuki (`ictihat_core`) | `T.C. Yargıtay 9. Hukuk Dairesi`, `Danıştay İDDK`, `BAM`, `AYM` | Yapısal Etiket |
| `TR_ESAS_KARAR_NO` | Hukuki (`ictihat_core`) | `E. 2024/1452, K. 2025/983` Esas/Karar numaraları | Opsiyonel / ✅ |
| `TR_LEGAL_OUTCOME` | Hukuki (`ictihat_core`) | `BOZULMASINA`, `ONANMASINA`, `KABULÜNE`, `OYBİRLİĞİYLE` hüküm sonucu | Yapısal Etiket |
| `VISUAL_SIGNATURE` / `VISUAL_STAMP` / `VISUAL_QRCODE` / `VISUAL_PHOTO` | 2B Görsel Biyometrik / Resmi | İmza, ıslak kaşe/mühür, karekod ve vesikalık fotoğraf kutuları | ✅ (`#000000`) |
---
## 5. Bundled Code & Quickstart (CLI, Python SDK, FastAPI)
Bu repo hem model ağırlıklarını hem de çalışan Python paketini (`turkceocr/`) tek dizinde barındırır:
```text
ersanbil/TurkceOCR/
├── README.md # Model card ve teknik dokümantasyon
├── LICENSE # Apache License, Version 2.0
├── NOTICE # Apache-2.0 ve üst akış veri/model bildirimleri
├── pipeline_config.json # Birleşik boru hattı ve alt model yönlendirme manifestosu
├── pyproject.toml # Paket kurulum ve CLI giriş noktaları (turkceocr)
├── requirements.txt # Bağımlılık listesi
├── line_svtrv2/ # SVTRv2-Turkish-SGM v2 satır modeli (.safetensors + vocab.json)
├── vlm_lora/ # Qwen2.5-VL-3B-LoRA v2 sayfa modeli (.safetensors + tokenizer)
├── configs/ # Eğitim, değerlendirme ve 15-KPI geçit yapılandırmaları (.yaml)
└── turkceocr/ # Ana TürkçeOCR Python paketi (models, postprocess, benchmark, server)
```
### 5.1 Kurulum (Installation)
```bash
git clone https://huggingface.co/ersanbil/TurkceOCR
cd TurkceOCR
pip install -e .
```
### 5.2 Python SDK ile Uçtan Uca `TurkceVerify` + `25+ Sınıf Varlık` + `2B #000000 Karartma`
```python
from PIL import Image
from turkceocr.postprocess.turkceverify import TurkceVerify
from turkceocr.postprocess.entity_engine import UnifiedTurkishEntityEngine
from turkceocr.postprocess.visual_redactor import VisualRedactor
# 1. OCR metni üzerinde deterministik TCKN/VKN/IBAN ve KDV denklem onarımı
verifier = TurkceVerify()
raw_ocr_text = (
"T.C. YARGITAY 9. HUKUK DAİRESİ E. 2024/1452 K. 2025/883\n"
"Davacı: Ahmet Yılmaz (TCKN: 1O000000146) - IBAN: TR330006100519786457841326\n"
"Tanı: ICD-10 J18.9 Pnömoni raporu mevcuttur. Matrah: 2.800,00 TL, KDV (%20): 400,00 TL, Toplam: 2.400,00 TL"
)
verified = verifier.verify_and_repair_markdown(raw_ocr_text)
print("Onarılmış Metin:", verified["text"])
# -> TCKN: 10000000146, Matrah: 2.000,00 TL olarak matematiksel kesinlikle onarılır!
# 2. 25+ Sınıf Hukuki (ictihat_core), Ticari ve KVKK-PII Varlık Çıkarımı
engine = UnifiedTurkishEntityEngine()
entities = engine.extract_entities(verified["text"])
for ent in entities:
print(f"[{ent.category}] {ent.entity_type}: {ent.text!r} (tier={ent.tier}, conf={ent.confidence})")
# 3. Belge Görüntüsü Üzerinde 2B #000000 Geri Döndürülemez Görsel Karartma
redactor = VisualRedactor()
img = Image.open("belge.png")
ocr_lines = [{"text": verified["text"], "bbox": [40, 40, img.width - 40, img.height - 40]}]
redacted_img, audit_log = redactor.redact_image(img, ocr_lines=ocr_lines)
redacted_img.save("belge_kvkk_redacted.png")
```
### 5.3 Komut Satırı (CLI) ve FastAPI Sunucusu
```bash
# CLI üzerinden belge işleme ve 2B #000000 KVKK karartma
turkceocr --image fatura.png --redact-image fatura_redacted.png --output-json sonuc.json
# Demo modunda kaşeli/imzalı kurumsal e-Arşiv faturası üretip uçtan uca test etme
turkceocr --demo-doc invoice --output-json demo_fatura.json
# FastAPI REST sunucusunu başlatma (/v1/ocr, /v1/verify, /v1/ocr/redact)
uvicorn turkceocr.server:app --host 0.0.0.0 --port 8000
```
### 5.4 FastAPI `/v1/ocr/redact` İstek ve Yanıt Şeması (REST API Reference)
```bash
curl -X POST "http://localhost:8000/v1/ocr/redact" \
-H "Content-Type: application/json" \
-d '{
"markdown_text": "Davacı Ahmet Yılmaz (TCKN: 1O000000146), Atatürk Mah. İstiklal Cad. No: 14 Çankaya/Ankara. Tanı: ICD-10 J18.9 Pnömoni.",
"redact_categories": ["PII", "SPECIAL_PII", "COMMERCIAL", "LEGAL"]
}'
```
Örnek JSON Yanıtı:
```json
{
"verified_markdown": "Davacı Ahmet Yılmaz (TCKN: 10000000146), Atatürk Mah. İstiklal Cad. No: 14 Çankaya/Ankara. Tanı: ICD-10 J18.9 Pnömoni.",
"redacted_markdown": "Davacı [KVKK: PERSON] (TCKN: [KVKK: TR_TCKN]), [KVKK: ADDRESS]. Tanı: [KVKK: HEALTH_DATA].",
"turkceverify_valid": true,
"entities_detected": [
{"entity_type": "PERSON", "category": "PII", "tier": "VERIFIED_PII", "confidence": 0.96},
{"entity_type": "TR_TCKN", "category": "PII", "tier": "VERIFIED_PII", "confidence": 1.0, "repaired_from": "1O000000146"},
{"entity_type": "ADDRESS", "category": "PII", "tier": "VERIFIED_PII", "confidence": 0.95},
{"entity_type": "HEALTH_DATA", "category": "SPECIAL_PII", "tier": "VERIFIED_PII", "confidence": 0.98}
],
"redaction_color_hex": "#000000"
}
```
### 5.5 `SVTRv2-Turkish-SGM v2` Satır Modeli Doğrudan Çıkarım Örneği
```python
import json
import torch
from PIL import Image
import torchvision.transforms.functional as TF
from safetensors.torch import load_file
from turkceocr.models.turkceocr_line import TurkceOCRLine
# 1. Vocab ve SVTRv2-v2 modelini yükle
vocab_data = json.loads(open("line_svtrv2/vocab.json", encoding="utf-8").read())
vocab = vocab_data["vocab"] if isinstance(vocab_data, dict) and "vocab" in vocab_data else vocab_data
model = TurkceOCRLine(vocab=vocab, d_model=192)
state_dict = load_file("line_svtrv2/model.safetensors")
model.load_state_dict(state_dict, strict=False)
model.eval()
# 2. Satır görüntüsünü (48x384) oku ve CTC çöz
img = Image.open("satir_ornegi.png").convert("RGB").resize((384, 48))
tensor = TF.to_tensor(img).unsqueeze(0)
with torch.no_grad():
decoded_lines = model.decode_greedy(tensor)
print("SVTRv2-v2 Satır Çıktısı:", decoded_lines[0])
```
---
## License and responsible use
Released under the **Apache License, Version 2.0** (see [`LICENSE`](./LICENSE) and [`NOTICE`](./NOTICE)).
The legal entity recognizer (`ictihat_core`) and the Phase-2 evaluation / training splits build upon [`hamzabagirsakci/turkish-court-decisions`](https://huggingface.co/datasets/hamzabagirsakci/turkish-court-decisions) (*Türk İçtihat Korpusu: 11.045.085 Türk Mahkeme Kararı*, compiled by Hamza Bağırsakçı under `CC0-1.0`) and publicly available archival documents from T.C. Resmî Gazete, Mevzuat Bilgi Sistemi (`mevzuat.gov.tr`), Rekabet Kurumu (`rekabet.gov.tr`), EPDK (`epdk.gov.tr`), and TBMM (`tbmm.gov.tr`).
## Model Card Metadata & Citation (Künye ve Atıf)
| Field / Alan | Details / Açıklama |
|---|---|
| **Model Name** | `ersanbil/TurkceOCR` (`v2.0`) |
| **Author / Geliştirici** | [@ersanbil](https://huggingface.co/ersanbil) |
| **Release Date / Tarih** | November 2026 |
| **Base Architecture** | `SVTRv2-Turkish-SGM v2` (`line_svtrv2/`, ~12M parameters) + `Qwen2.5-VL-3B-LoRA v2` (`vlm_lora/`) + [`ersanbil/kvkk-pii-ner`](https://huggingface.co/ersanbil/kvkk-pii-ner) (`v2.0`, `dbmdz/bert-base-turkish-cased`, 110M parameters, 13 BIO classes) |
| **Training Method** | Phase-2 real-PDF line extraction (1,700 crops from `rekabet_pdf`, `mevzuat_pdf`, `rg_pdf` at 240 DPI) + 1,050 archival hybrid lines (`elle_kontrol_500.jsonl`) with `TurkishCharacterConfusionFocalLoss` (`γ = 2.5`) and RLVR verifiable-reward alignment |
| **Supported Capabilities** | Turkish document OCR, deterministic TCKN / VKN / IBAN checksum and VAT equation repair (`TurkceVerify`), 25+ class legal/commercial/KVKK entity extraction (`ictihat_core` × `kvkk-pii-ner v2.0`), 2D `#000000` visual redaction (`VisualRedactor`) |
| **License** | Apache-2.0 (`LICENSE` & `NOTICE`) |
### BibTeX (Model Citation / Model Atıf Künyesi)
If you use **`TurkceOCR`**, **`kvkk-pii-ner v2.0`**, or **`TurkceOCR-Bench`** in your research or evaluation benchmarks, please cite:
```bibtex
@misc{ersanbil2026turkceocr,
title = {TurkceOCR v2.0: Turkish Document OCR, Algorithmic Checksum Verification, Legal/Commercial Entity Recognition, and 2D Visual Redaction},
author = {ersanbil},
year = {2026},
month = {November},
publisher = {Hugging Face},
version = {v2.0},
howpublished = {https://huggingface.co/ersanbil/TurkceOCR},
note = {Apache-2.0}
}
@misc{ersanbil2026kvkkpiinerv2,
title = {kvkk-pii-ner v2.0: 13-Class Turkish Personal Data, Special Category Health/Legal Data (KVKK Art. 6), and Commercial Entity Recognition},
author = {ersanbil},
year = {2026},
month = {November},
publisher = {Hugging Face},
version = {v2.0},
howpublished = {https://huggingface.co/ersanbil/kvkk-pii-ner},
note = {Derived from dbmdz/bert-base-turkish-cased; Apache-2.0}
}
```
---
## Literature & Benchmark References (Literatür ve Benchmark Kaynakçası)
The models, entity recognizers, and evaluations reported in this model card build upon the following open-source datasets, models, and foundational papers:
1. **`Türk İçtihat Korpusu` (11,045,085 Turkish Court Decisions)**:
- Bağırsakçı, H. (2026). *Türk İçtihat Korpusu: 11.045.085 Türk Mahkeme Kararı*. Dataset: [`hamzabagirsakci/turkish-court-decisions`](https://huggingface.co/datasets/hamzabagirsakci/turkish-court-decisions) (`CC0-1.0`).
2. **`SVTRv2` (Scene Text Recognition Backbone)**:
- Du, Y., Chen, Z., Jia, C., Yin, X., Zheng, T., Li, C., Du, Y., & Jiang, Y.-G. (2024). *SVTRv2: CTC Beats Encoder-Decoder Models in Scene Text Recognition*. [arXiv:2411.15858](https://arxiv.org/abs/2411.15858). Code: [`Topdu/OpenOCR`](https://github.com/Topdu/OpenOCR).
3. **`Qwen2.5-VL` (Vision-Language Backbone)**:
- Bai, S., Chen, K., Liu, X., Wang, J., Ge, W., Song, S., Dang, K., Wang, P., et al. (2025). *Qwen2.5-VL Technical Report*. [arXiv:2502.13923](https://arxiv.org/abs/2502.13923). Model: [`Qwen/Qwen2.5-VL-3B-Instruct`](https://huggingface.co/Qwen/Qwen2.5-VL-3B-Instruct).
4. **`BERTurk` (Turkish Pretrained Language Model)**:
- Schweter, S. (2020). *BERTurk - BERT models for Turkish*. Zenodo, [doi:10.5281/zenodo.3770924](https://doi.org/10.5281/zenodo.3770924). Model: [`dbmdz/bert-base-turkish-cased`](https://huggingface.co/dbmdz/bert-base-turkish-cased).
5. **`OmniDocBench` (Document Parsing Benchmark)**:
- Ouyang, L., Qu, Y., Zhou, H., Zhu, J., Zhang, R., Lin, Q., Wang, B., Zhao, Z., et al. (2024). *OmniDocBench: Benchmarking Diverse PDF Document Parsing with Comprehensive Annotations*. [arXiv:2412.07626](https://arxiv.org/abs/2412.07626).
6. **`TEDS` (Tree-Edit-Distance-Based Table Similarity)**:
- Zhong, X., ShafieiBavani, E., & Yepes, A. J. (2020). *Image-based table recognition: data, model, and evaluation*. [arXiv:1911.10683](https://arxiv.org/abs/1911.10683). Published in *ECCV 2020*, pp. 564–580.
7. **`DocVQA` & `ANLS`**:
- Mathew, M., Karatzas, D., & Jawahar, C. V. (2021). *DocVQA: A Dataset for VQA on Document Images*. [arXiv:2007.00398](https://arxiv.org/abs/2007.00398). Published in *WACV 2021*, pp. 2200–2209.
8. **`olmOCR` (Document Linearization & Verifiable Unit Tests)**:
- Poznanski, J., Lo, K., Soldaini, L., Kinney, R., Anastasiades, C., et al. (2025). *olmOCR: Unlocking Trillions of Tokens in PDFs with Vision Language Models*. [arXiv:2502.18443](https://arxiv.org/abs/2502.18443).
9. **`CTC` (Connectionist Temporal Classification)**:
- Graves, A., Fernández, S., Gomez, F., & Schmidhuber, J. (2006). *Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks*. Published in *ICML 2006*, pp. 369–376.
10. **`Focal Loss`**:
- Lin, T.-Y., Goyal, P., Girshick, R., He, K., & Dollár, P. (2017). *Focal Loss for Dense Object Detection*. [arXiv:1708.02002](https://arxiv.org/abs/1708.02002). Published in *ICCV 2017*, pp. 2980–2988.
11. **`LoRA` (Low-Rank Adaptation)**:
- Hu, E. J., Shen, Y., Wallis, P., Allen-Zhu, Z., Li, Y., Wang, S., Wang, L., & Chen, W. (2022). *LoRA: Low-Rank Adaptation of Large Language Models*. [arXiv:2106.09685](https://arxiv.org/abs/2106.09685). Published in *ICLR 2022*.
12. **`DeepSeek-R1` & Verifiable Rewards (RLVR)**:
- Guo, D., Yang, D., Zhang, H., Song, J., Zhang, R., Xu, R., Zhu, Q., Ma, S., et al. (2025). *DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning*. [arXiv:2501.12948](https://arxiv.org/abs/2501.12948).
```bibtex
@misc{turk_ictihat_korpusu,
title = {Türk İçtihat Korpusu: 11.045.085 Türk Mahkeme Kararı},
author = {Bağırsakçı, Hamza},
year = {2026},
url = {https://huggingface.co/datasets/hamzabagirsakci/turkish-court-decisions},
note = {CC0-1.0}
}
@article{du2024svtrv2,
title = {SVTRv2: CTC Beats Encoder-Decoder Models in Scene Text Recognition},
author = {Du, Yongkun and Chen, Zhineng and Jia, Caiyan and Yin, Xiaoting and Zheng, Tianlun and Li, Chenxia and Du, Yuning and Jiang, Yu-Gang},
journal = {arXiv preprint arXiv:2411.15858},
year = {2024}
}
@article{bai2025qwen25vl,
title = {Qwen2.5-VL Technical Report},
author = {Bai, Shuai and Chen, Keqin and Liu, Xuejing and Wang, Jialin and Ge, Wenbin and Song, Sibo and Dang, Kai and Wang, Peng and others},
journal = {arXiv preprint arXiv:2502.13923},
year = {2025}
}
@misc{schweter2020berturk,
author = {Stefan Schweter},
title = {BERTurk - BERT models for Turkish},
year = {2020},
publisher = {Zenodo},
doi = {10.5281/zenodo.3770924},
url = {https://doi.org/10.5281/zenodo.3770924}
}
@article{ouyang2024omnidocbench,
title = {OmniDocBench: Benchmarking Diverse PDF Document Parsing with Comprehensive Annotations},
author = {Ouyang, Linke and Qu, Yuan and Zhou, Hongbin and Zhu, Jiawei and Zhang, Rui and Lin, Qunshu and Wang, Bin and Zhao, Zhiyuan and others},
journal = {arXiv preprint arXiv:2412.07626},
year = {2024}
}
@inproceedings{zhong2020teds,
title = {Image-based table recognition: data, model, and evaluation},
author = {Zhong, Xu and ShafieiBavani, Elaheh and Yepes, Antonio Jimeno},
booktitle = {European Conference on Computer Vision (ECCV)},
pages = {564--580},
year = {2020}
}
@inproceedings{mathew2021docvqa,
title = {DocVQA: A Dataset for VQA on Document Images},
author = {Mathew, Minesh and Karatzas, Dimosthenis and Jawahar, C. V.},
booktitle = {IEEE/CVF Winter Conference on Applications of Computer Vision (WACV)},
pages = {2200--2209},
year = {2021}
}
@article{poznanski2025olmocr,
title = {olmOCR: Unlocking Trillions of Tokens in PDFs with Vision Language Models},
author = {Poznanski, Jake and Lo, Kyle and Soldaini, Luca and Kinney, Rodney and Anastasiades, Chloe and others},
journal = {arXiv preprint arXiv:2502.18443},
year = {2025}
}
@inproceedings{graves2006ctc,
title = {Connectionist temporal classification: labelling unsegmented sequence data with recurrent neural networks},
author = {Graves, Alex and Fernandez, Santiago and Gomez, Faustino and Schmidhuber, Jurgen},
booktitle = {International Conference on Machine Learning (ICML)},
pages = {369--376},
year = {2006}
}
@inproceedings{lin2017focal,
title = {Focal Loss for Dense Object Detection},
author = {Lin, Tsung-Yi and Goyal, Priya and Girshick, Ross and He, Kaiming and Dollar, Piotr},
booktitle = {IEEE International Conference on Computer Vision (ICCV)},
pages = {2980--2988},
year = {2017}
}
@inproceedings{hu2022lora,
title = {LoRA: Low-Rank Adaptation of Large Language Models},
author = {Hu, Edward J. and Shen, Yelong and Wallis, Phillip and Allen-Zhu, Zeyuan and Li, Yuanzhi and Wang, Shean and Wang, Lu and Chen, Weizhu},
booktitle = {International Conference on Learning Representations (ICLR)},
year = {2022}
}
@article{guo2025deepseekr1,
title = {DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning},
author = {Guo, Daya and Yang, Dejian and Zhang, Haowei and Song, Junxiao and Zhang, Ruoyu and Xu, Runxin and Zhu, Qihao and Ma, Shirong and others},
journal = {arXiv preprint arXiv:2501.12948},
year = {2025}
}
```