TR-OCR-Markdown v0.1 — DeepSeek-OCR-2 için Türkçe belge → Markdown LoRA adaptörü

Türkçe basılı belge sayfası görüntüsünü (duyuru, form, sözleşme, tablo, kanun/mevzuat sayfası, kadro cetveli…) başlık hiyerarşisi, paragraf, liste ve boru tablolarıyla yapılandırılmış Markdown'a çeviren LoRA adaptörü. Taban model unsloth/DeepSeek-OCR-2 (Apache-2.0); adaptör tamamen sentetik, kurmaca Türkçe belgelerle eğitildi, gerçek kanun sayfalarında ölçüldü. Proje: veri üreteci, kalite kontrol, ölçüm araçları, demo ve tam rapor ayrı bir git deposundadır.

Sonuçlar (sabit test kümeleri, eğitimde kullanılmadı)

Test kümesi Taban model v0.1
Gerçek kanun sayfaları (born-digital PDF, 55 sayfa) %87,3 %8,2
test_v02 — yeni türler: mevzuat, kadro cetveli, değişiklik tablosu, iki sütun (198 sayfa) — %9,3
test_v01 — duyuru, form, sözleşme, tablo vb. (199 sayfa) %98,2 %2,5

CER = karakter hata oranı (düşük iyi). Bu sürümün yerini v0.2 aldı (gerçek sayfalarda CER %8,2 → %4,7; başlık seviyesi %26 → %80; tablo hücre %46 → %81).

Bu depodaki metrics/ klasöründe her kümenin ayrıntılı raporu (*_report.json, *_summary.md) ve sürümler arası eşleştirilmiş karşılaştırmalar (compare_*) bulunur.

Kullanım

# transformers==4.57.6, peft==0.20.0 ile doğrulandı (bf16 destekli GPU'da bf16, aksi hâlde fp16)
import torch
from transformers import AutoModel, AutoTokenizer
from peft import PeftModel

BASE, REPO = "unsloth/DeepSeek-OCR-2", "msbayindir/tr-ocr-markdown-deepseek-ocr2-lora-v0.1"
tok = AutoTokenizer.from_pretrained(BASE, trust_remote_code=True)
base = AutoModel.from_pretrained(BASE, trust_remote_code=True, use_safetensors=True, _attn_implementation="eager",
                                 torch_dtype=torch.bfloat16).eval().cuda()
model = PeftModel.from_pretrained(base, REPO).eval()
model = model.merge_and_unload()   # isteğe bağlı: 2× hız, çıktı birebir aynı
md = model.infer(tok, prompt="<image>\nFree OCR. ", image_file="sayfa.png", output_path="/tmp/out",
                 base_size=1024, image_size=768, crop_mode=True, save_results=False, test_compress=False, eval_mode=True)
print(md)

Decoding (eğitim ve ölçümle aynı): temperature 0, no_repeat_ngram_size=35, max_new_tokens=2048. Ham çıktıdaki grounding etiketleri için trocr/postprocess.py (proje deposu) kullanılabilir. Çıktı biçimi: output_standard.md (bu depoda).


TR-OCR-Markdown v0.1 — DeepSeek-OCR-2 için Türkçe belge → Markdown LoRA adaptörü

Türkçe basılı belge sayfası görüntüsünü (duyuru, form, sözleşme, tablo, kanun/mevzuat sayfası, kadro cetveli…) başlık hiyerarşisi, paragraf, liste ve boru tablolarıyla yapılandırılmış Markdown'a çeviren LoRA adaptörü. Taban model unsloth/DeepSeek-OCR-2 (Apache-2.0); adaptör tamamen sentetik, kurmaca Türkçe belgelerle eğitildi, gerçek kanun sayfalarında ölçüldü. Proje: veri üreteci, kalite kontrol, ölçüm araçları, demo ve tam rapor ayrı bir git deposundadır.

Sonuçlar (sabit test kümeleri, eğitimde kullanılmadı)

Test kümesi Taban model v0.1
Gerçek kanun sayfaları (born-digital PDF, 55 sayfa) %87,3 %8,2
test_v02 — yeni türler: mevzuat, kadro cetveli, değişiklik tablosu, iki sütun (198 sayfa) — %9,3
test_v01 — duyuru, form, sözleşme, tablo vb. (199 sayfa) %98,2 %2,5

CER = karakter hata oranı (düşük iyi). Bu sürümün yerini v0.2 aldı (gerçek sayfalarda CER %8,2 → %4,7; başlık seviyesi %26 → %80; tablo hücre %46 → %81).

Bu depodaki metrics/ klasöründe her kümenin ayrıntılı raporu (*_report.json, *_summary.md) ve sürümler arası eşleştirilmiş karşılaştırmalar (compare_*) bulunur.

Kullanım

# transformers==4.57.6, peft==0.20.0 ile doğrulandı (bf16 destekli GPU'da bf16, aksi hâlde fp16)
import torch
from transformers import AutoModel, AutoTokenizer
from peft import PeftModel

BASE, REPO = "unsloth/DeepSeek-OCR-2", "msbayindir/tr-ocr-markdown-deepseek-ocr2-lora-v0.1"
tok = AutoTokenizer.from_pretrained(BASE, trust_remote_code=True)
base = AutoModel.from_pretrained(BASE, trust_remote_code=True, use_safetensors=True, _attn_implementation="eager",
                                 torch_dtype=torch.bfloat16).eval().cuda()
model = PeftModel.from_pretrained(base, REPO).eval()
model = model.merge_and_unload()   # isteğe bağlı: 2× hız, çıktı birebir aynı
md = model.infer(tok, prompt="<image>\nFree OCR. ", image_file="sayfa.png", output_path="/tmp/out",
                 base_size=1024, image_size=768, crop_mode=True, save_results=False, test_compress=False, eval_mode=True)
print(md)

Decoding (eğitim ve ölçümle aynı): temperature 0, no_repeat_ngram_size=35, max_new_tokens=2048. Ham çıktıdaki grounding etiketleri için trocr/postprocess.py (proje deposu) kullanılabilir. Çıktı biçimi: output_standard.md (bu depoda).


TR-OCR-Markdown v0.1 — DeepSeek-OCR-2 için Türkçe belge → Markdown LoRA adaptörü

Türkçe basılı belge sayfası görüntüsünü (duyuru, form, sözleşme, tablo, kanun/mevzuat sayfası, kadro cetveli…) başlık hiyerarşisi, paragraf, liste ve boru tablolarıyla yapılandırılmış Markdown'a çeviren LoRA adaptörü. Taban model unsloth/DeepSeek-OCR-2 (Apache-2.0); adaptör tamamen sentetik, kurmaca Türkçe belgelerle eğitildi, gerçek kanun sayfalarında ölçüldü. Proje: veri üreteci, kalite kontrol, ölçüm araçları, demo ve tam rapor ayrı bir git deposundadır.

Sonuçlar (sabit test kümeleri, eğitimde kullanılmadı)

Test kümesi Taban model v0.1
Gerçek kanun sayfaları (born-digital PDF, 55 sayfa) %87,3 %8,2
test_v02 — yeni türler: mevzuat, kadro cetveli, değişiklik tablosu, iki sütun (198 sayfa) — %9,3
test_v01 — duyuru, form, sözleşme, tablo vb. (199 sayfa) %98,2 %2,5

CER = karakter hata oranı (düşük iyi). Bu sürümün yerini v0.2 aldı (gerçek sayfalarda CER %8,2 → %4,7; başlık seviyesi %26 → %80; tablo hücre %46 → %81).

Bu depodaki metrics/ klasöründe her kümenin ayrıntılı raporu (*_report.json, *_summary.md) ve sürümler arası eşleştirilmiş karşılaştırmalar (compare_*) bulunur.

Kullanım

# transformers==4.57.6, peft==0.20.0 ile doğrulandı (bf16 destekli GPU'da bf16, aksi hâlde fp16)
import torch
from transformers import AutoModel, AutoTokenizer
from peft import PeftModel

BASE, REPO = "unsloth/DeepSeek-OCR-2", "msbayindir/tr-ocr-markdown-deepseek-ocr2-lora-v0.1"
tok = AutoTokenizer.from_pretrained(BASE, trust_remote_code=True)
base = AutoModel.from_pretrained(BASE, trust_remote_code=True, use_safetensors=True, _attn_implementation="eager",
                                 torch_dtype=torch.bfloat16).eval().cuda()
model = PeftModel.from_pretrained(base, REPO).eval()
model = model.merge_and_unload()   # isteğe bağlı: 2× hız, çıktı birebir aynı
md = model.infer(tok, prompt="<image>\nFree OCR. ", image_file="sayfa.png", output_path="/tmp/out",
                 base_size=1024, image_size=768, crop_mode=True, save_results=False, test_compress=False, eval_mode=True)
print(md)

Decoding (eğitim ve ölçümle aynı): temperature 0, no_repeat_ngram_size=35, max_new_tokens=2048. Ham çıktıdaki grounding etiketleri için trocr/postprocess.py (proje deposu) kullanılabilir. Çıktı biçimi: output_standard.md (bu depoda).


Model Kartı — TR-OCR-Markdown v0.1 (LoRA adaptörü)

Durum (23.10.2026): adaptör eğitildi ve sabit test kümelerinde değerlendirildi. Sentetik test (n=199): CER %98,2 → %2,5, sayısal alan %50,9 → %98,3, tablo hücre %23,2 → %92,9, başlık F1 %25,4 → %96,6. Gerçek kanun sayfaları (n=55, born-digital): CER %87,3 → %8,2, sayısal %45,0 → %89,0. Ayrıntı ve güven aralıkları: docs/report.md §3.

Özet

  • Tür: Görüntü → metin (belge OCR + Markdown yapılandırma) için LoRA adaptörü.
  • Taban model: unsloth/DeepSeek-OCR-2 (Apache-2.0), deepseek-ai/DeepSeek-OCR-2 türevi; 3B parametre (DeepEncoder V2 + MoE dil modeli). Taban model revision'ı Kaggle çalıştırmasında results/env_*.json dosyasına yazılır.
  • Bu adaptör sıfırdan eğitilmiş bir model değildir; taban modelin dil modeli projeksiyon katmanlarına (q/k/v/o/gate/up/down) eklenen LoRA ağırlıklarıdır. Görüntü kodlayıcıları (SAM + Qwen2 encoder) taban modelde no_grad altında olduğundan eğitilmez.
  • Görev: Türkçe basılı tek sayfa belge görüntüsünü docs/output_standard.md biçiminde Markdown'a çevirmek (başlık hiyerarşisi, paragraflar, listeler, basit boru tabloları, form alanları).
  • Dil: Türkçe.

Eğitim

  • Veri: docs/dataset_card.md — sentetik 1.995 eğitim / 200 doğrulama sayfası; test ve gerçek test eğitimde kullanılmaz.
  • Yöntem: Unsloth FastVisionModel + PEFT LoRA (r=16, α=16, dropout 0, seed 3407), 16-bit (fp16, T4), gradient checkpointing, adamw_8bit, lr 1e-4 lineer (warmup 10), bs 1 × grad. accum. 8, 1 epoch = 250 adım; uzunluk politikası: sıra 4.096 veya hedef 2.048 token üstü örnekler elenir (bu çalıştırmada 0 örnek elendi).
  • Sonuç (eğitim): loss 0,267 → 0,002; doğrulama loss (40 örnek) 0,0231 → 0,0099 (adım 250, monoton düşüş); 26,8 s/adım, tepe VRAM 12,06 GB; toplam ≈ 2 saat T4.
  • Prompt (eğitim = çıkarım): <image>\nFree OCR. — duman testinde üç resmî prompt karşılaştırıldı; taban model için en düşük CER ve hedef biçime en yakın çıktı bu prompt'ta alındı (results/smoke_v7/smoke_report.json).
  • Görüntü ön işleme: base_size 1024, image_size 768, crop_mode True (resmî "Gundam" modu), taban ve adaptör için aynı.
  • Donanım: Kaggle GPU T4 (15 GB), tek GPU. Adım süresi, tepe VRAM ve toplam süre results/train/train_report.json'da.
  • Kod: kaggle/kaggle_lib/train.py, collator kaggle/kaggle_lib/collator.py (Unsloth notebook'undan uyarlama, LGPL-3.0).

Çıkarım

Saf transformers (AutoModel, trust_remote_code=True, fp16) + peft.PeftModel.from_pretrained(base, adapter_dir); model.infer(..., eval_mode=True); decoding: temperature 0, no_repeat_ngram_size=35, max_new_tokens=2048 (taban ve adaptör için aynı). Ham çıktıdaki grounding etiketleri trocr/postprocess.py ile deterministik olarak temizlenir (ham çıktı her zaman saklanır).

Değerlendirme

trocr/evaluate.py ile sabit test manifestlerinde: CER/WER (mikro, %95 bootstrap), Türkçe karakter hata oranı, sayısal alan tam eşleşme, tablo hücre doğruluğu, başlık/liste F1, okuma sırası τ. Taban ve adaptör aynı prompt/ön işleme/decoding ile karşılaştırılır. Sonuçlar: docs/report.md.

Kullanım amacı ve sınırlamalar

  • Araştırma/demo amaçlı; üretim servisi değildir.
  • Kapsam dışı: el yazısı, karmaşık matematik, birleşik hücreli tablolar, görsel betimleme, çok sayfalı bağlam.
  • Eğitim verisi sentetiktir; gerçek belgelerdeki başarı yalnızca 55 sayfalık born-digital (taranmamış) kanun sayfası kümesiyle ölçülmüştür (CER %8,2); taranmış/fotoğraflanmış belgelerde doğrulanmamıştır.
  • Bilinen zayıflıklar: çizgisiz/kenarlıksız tablolar (kadro listeleri) bozuk çıkabilir; gerçek belgelerde başlık seviyeleri eğitim standardından sapabilir; üst simge dipnot işaretleri [^n] olarak yazılabilir; nadiren (sentetik testte 1/199) tekrar döngüsü görülür (≤2048 token sınırı ile kesilir).
  • Model özetlemez, düzeltmez, tamamlamaz; yine de taban modelin halüsinasyon/atlama davranışı tamamen giderilmiş değildir (bkz. rapor: atlanan/eklenen kelimeler).

Lisans ve paket

  • Adaptör ağırlıkları: taban modelle uyumlu olarak Apache-2.0 niyetiyle paylaşılabilir; bu depo yayın yapmaz (kullanıcı istemedikçe Hugging Face'e yüklenmez).
  • Hugging Face'e yüklenebilir paket düzeni: adapter/ (adapter_config.json, adapter_model.safetensors, tokenizer dosyaları) + bu kart + docs/output_standard.md + results/metrics/.
Downloads last month
5
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for msbayindir/tr-ocr-markdown-deepseek-ocr2-lora-v0.1

Adapter
(8)
this model

Evaluation results

  • CER (%) on Gerçek kanun sayfaları (born-digital PDF, 55 sayfa)
    self-reported
    8.200
  • CER (%) on test_v02 — yeni türler: mevzuat, kadro cetveli, değişiklik tablosu, iki sütun (198 sayfa)
    self-reported
    9.300
  • CER (%) on test_v01 — duyuru, form, sözleşme, tablo vb. (199 sayfa)
    self-reported
    2.500