--- language: - tr - en license: other license_name: mixed-training-data license_link: LICENSE.md base_model: Mapika/decider-4b pipeline_tag: text-classification tags: - decision-model - calibrated - structured-output - turkish - lora - fp8 datasets: - hayriyigit/bev-decision-150K-tr - avbiswas/bev-decision-150K - hayriyigit/squad_v2-tr - rajpurkar/squad_v2 - mteb/amazon_massive_intent - facebook/xnli - turkish-nlp-suite/beyazperde-all-movie-reviews - hayriyigit/jev-bench-tr --- # decider-4b-tr: Türkçe kararlar, kalibre olasılıklar, 1 epoch **English summary.** A Turkish LoRA fine-tune (rank 64, merged into the bf16 weights) of [`Mapika/decider-4b`](https://huggingface.co/Mapika/decider-4b) v2.1, a 4.2B decision model on Qwen3.5-4B-Base that returns a calibrated probability for every option of typed `choice` / `noul` / `score` questions in one forward pass, without generating text. Trained for one epoch on 63.990 rows of Turkish decision data (machine-translated bev-decision-150K and SQuAD 2.0, native Turkish MASSIVE, XNLI and movie reviews) plus English replay rows trained toward the base model's own answers. On 101.716 held-out test decisions accuracy goes from 0.689 to 0.796, ECE from 0.028 to 0.020; answerability on Turkish SQuAD 2.0 from 0.683 to 0.862 (AUROC 0.809 → 0.940). The independent jev-bench sets are unchanged. FP8 serving (`DECIDER_FP8=1`) costs no measurable accuracy here. Bu model, [`Mapika/decider-4b`](https://huggingface.co/Mapika/decider-4b)'nin (v2.1, Apache-2.0) Türkçe karar verisiyle LoRA fine-tune edilmiş halidir. decider metin üretmez: bir state ve tipli sorular alır, her sorunun her seçeneği için kalibre edilmiş bir olasılığı tek forward pass'te döndürür. Sorular [Laya](https://huggingface.co/hayriyigit/laya-tr-karar) ve TypeSafe Jev ile aynı şemadadır: - **choice:** seçeneklerden biri (ör. hangi birim, hangi niyet), - **noul:** bir ifadenin doğru olma olasılığı (evet/hayır), - **score:** sıralı seviyelerden biri (her seviye ayrı bir evet/hayır satırında değerlendirilir). ## Kullanım Çıkarım kodu (`decider/`) bu repoda; `torch`, `transformers>=5` ve `flash-linear-attention` gerekir (hız için `causal-conv1d` önerilir). Ağırlıklar bf16'da 8,4 GB. ```python import sys from huggingface_hub import snapshot_download path = snapshot_download("hayriyigit/decider-4b-tr", token="hf_...") # private repo: okuma yetkili bir token sys.path.insert(0, path) from decider.infer import Decider d = Decider(path) state = "Siparişim iki haftadır gelmedi, kargo takip numarası da çalışmıyor. Paramı geri istiyorum." questions = { "birim": {"type": "choice", "instructions": "Bu talebi hangi birim ele almalı?", "criteria": {"fatura": "ödeme, iade, fatura", "kargo": "teslimat ve takip", "teknik": "uygulama veya site hataları"}}, "iade": {"type": "noul", "instructions": "Müşteri para iadesi istiyor."}, "memnuniyet": {"type": "score", "instructions": "Müşteri ne kadar memnun?", "criteria": ["Çok memnuniyetsiz", "Memnuniyetsiz", "Nötr", "Memnun", "Çok memnun"]}, } answers = d.system_one(state, questions)["answers"] ``` Bu modelin bu örnekteki cevabı: | Soru | Cevap | Olasılık | |---|---|---:| | birim | `fatura` (`kargo` 0,353) | 0,644 | | iade | evet | 0,986 | | memnuniyet | Çok memnuniyetsiz (seviye 0) | 0,887 | "birim" sorusunda model iadeyi öne çıkarıyor: müşteri parasını geri istiyor ve "iade" fatura biriminin açıklamasında geçiyor. İki seçenek de makul olduğunda olasılıklar bunu gösterir (0,64 / 0,35). **FP8:** `DECIDER_FP8=1` (ya da `Engine(path, fp8=True)`) büyük lineer katmanları yüklerken e4m3 FP8'e çevirir (ağırlıklar kanal, aktivasyonlar token bazında ölçeklenir); ayrı bir dosya gerekmez. Ayrıntılar aşağıda. Temperature değerleri (soru türü başına, `decider_config.json`) eğitimde görülmemiş Türkçe kararlarda kalibre edildi: choice 0,936, noul 1,146, score 1,093. ## Değerlendirme Test, [laya-tr-karar](https://huggingface.co/hayriyigit/laya-tr-karar)'ın test setinin aynısıdır (101.716 karar): iki model ailesi satır satır karşılaştırılabilir. "Önce" fine-tune öncesi `Mapika/decider-4b`'dir. Metni bir test satırında da geçen eğitim satırları eğitimden çıkarılmıştı. ### Kaynağa göre | Test seti | Karar | Doğruluk (önce) | Doğruluk (sonra) | Fark (puan) | ECE (önce) | ECE (sonra) | laya-tr-karar | |---|---:|---:|---:|---:|---:|---:|---:| | bev-decision-150K-tr (makine çevirisi) | 46.320 | 0,669 | **0,838** | +16,9 | 0,027 | 0,009 | 0,774 | | bev-decision-150K, İngilizce orijinal | 5.766 | 0,720 | **0,754** | +3,4 | 0,021 | 0,013 | 0,772 | | jev-bench-tr (benchmark, makine çevirisi) † | 22.773 | 0,710 | 0,708 | −0,2 | 0,031 | 0,051 | 0,496 | | jev-bench, İngilizce orijinal † | 2.000 | 0,768 | **0,770** | +0,2 | 0,034 | 0,035 | 0,584 | | MASSIVE tr-TR (ana dili Türkçe) | 2.974 | 0,829 | **0,871** | +4,2 | 0,036 | 0,036 | 0,773 | | XNLI Türkçe test (insan çevirisi) | 5.010 | 0,813 | **0,832** | +1,9 | 0,036 | 0,015 | 0,733 | | beyazperde film yorumları (ana dili Türkçe) | 5.000 | 0,520 | **0,634** | +11,3 | 0,050 | 0,040 | 0,533 | | SQuAD 2.0 dev, cevaplanabilirlik (makine çevirisi) | 11.873 | 0,683 | **0,862** | +17,9 | 0,049 | 0,017 | 0,703 | | **Hepsi** | **101.716** | 0,689 | **0,796** | +10,7 | 0,028 | 0,020 | 0,686 | † Train bölümü eğitimde kullanılmayan, bağımsız test setleri. Diğerlerinin train bölümlerinden eğitime satır girdi (test satırları hariç). ### Soru türüne göre | Tür | Karar | Doğruluk (önce) | Doğruluk (sonra) | ECE (önce) | ECE (sonra) | |---|---:|---:|---:|---:|---:| | choice | 39.616 | 0,717 | **0,814** | 0,056 | 0,021 | | noul | 39.371 | 0,783 | **0,875** | 0,007 | 0,018 | | score | 22.729 | 0,478 | **0,630** | 0,032 | 0,024 | ### Cevaplanabilirlik (SQuAD 2.0 dev, Türkçe) Soru: *"Verilen `document`, `question` sorusunun TÜM kısımlarını doğru ve eksiksiz şekilde cevaplamak için yeterli bilgiyi açıkça içeriyor mu? …"* (noul), state `{"question": …, "document": …}`; 11.873 soru, yarısı cevaplanamaz. | Model | Doğruluk | AUROC | Cevaplanabilirde doğru | Cevaplanamazda doğru | |---|---:|---:|---:|---:| | decider-4b (önce) | 0,683 | 0,809 | 0,918 | 0,439 | | **decider-4b-tr** | **0,862** | **0,940** | 0,938 | **0,783** | Konusu aynı ama istenen bilgiyi içermeyen belgeler, P(evet): | Belge ("Türksat 6A hangi tarihte uzaya fırlatıldı?") | laya-tr-karar | decider-4b (önce) | decider-4b-tr | |---|---:|---:|---:| | Belgedeki tarih başka bir olaya (bir toplantıya) ait | 0,920 | 0,354 | **0,025** | | Belgede hiç tarih yok | 0,917 | 0,066 | **0,027** | | Fırlatma tarihi yazıyor | 0,919 | 0,926 | **0,996** | ### Nasıl okunmalı - **Kazancın çoğu eğitim verisinin geldiği kaynaklarda:** bev-tr, SQuAD-tr, beyazperde, MASSIVE ve XNLI. Bağımsız jev-bench setleri (†) yerinde kaldı (0,710 → 0,708); yani model bu veri ailelerini öğrendi, genel bir "Türkçe karar" sıçraması ölçülmedi. - **İngilizce unutulmadı:** İngilizce bev doğruluğu arttı, İngilizce jev-bench aynı kaldı. - **Kalibrasyon** zaten iyiydi ve iyi kaldı: toplam ECE 0,028 → 0,020. noul'da biraz kötüleşti (0,007 → 0,018). - **Kötüleşen jev-bench alt setleri:** civil_comments −7,5, sst5 −4,9, strategyqa_grounded −3,6, helpsteer2_helpfulness −2,9, sms_spam −1,7, mmlu −1,6, ledgar −1,6, arc_challenge −1,1, strategyqa_closed −1,0 puan. Nedeni ayrıca incelenmedi. - **laya-tr-karar ile:** bu model 14 kat büyük ve İngilizce bev dışında her kaynakta onun üzerinde; özellikle bağımsız jev-bench'te (Laya 0,496) ve kalibrasyonda (Laya ECE 0,083). Laya çok daha hızlıdır: aynı test setini aynı GPU'da Laya ~2 dakikada, bu model ~1 saatte (eager, CUDA graph'sız) değerlendirdi. ### bev-decision alanları (Türkçe test) | Alan | Karar | Doğruluk (önce) | Doğruluk (sonra) | |---|---:|---:|---:| | Sentiment, emotion, and moderation | 11.526 | 0,727 | **0,865** | | Spatial and logical reasoning | 8.384 | 0,508 | **0,783** | | Retail, product, and shopping | 6.601 | 0,695 | **0,936** | | Response preference and quality | 3.176 | 0,511 | **0,638** | | Support and intent routing | 2.858 | 0,866 | **0,971** | | Tool and workflow decisions | 2.307 | 0,952 | **0,987** | | Software security | 2.240 | 0,516 | **0,688** | | Game-state decisions | 2.039 | 0,701 | **0,879** | | Software engineering and code | 2.039 | 0,671 | **0,723** | | Financial reporting and banking | 1.740 | 0,573 | **0,826** | | Reading comprehension | 1.422 | 0,860 | **0,864** | | Scientific and paper understanding | 508 | 0,671 | **0,835** | | Contract evidence | 320 | 0,700 | **0,838** | | Browser interaction | 286 | 0,762 | **0,850** | | Spam detection | 271 | 0,985 | **0,978** | | Civic and safety operations | 261 | 0,460 | **0,770** | | Sensory quality rating | 260 | 0,269 | **0,400** | | Engagement and ranking | 82 | 0,573 | **0,646** | ### jev-bench-tr alt setleri (bağımsız) | Alt set | Karar | Doğruluk (önce) | Doğruluk (sonra) | Fark (puan) | |---|---:|---:|---:|---:| | arc_challenge | 1.000 | 0,844 | 0,833 | −1,1 | | banking77 | 1.000 | 0,786 | 0,810 | +2,4 | | boolq | 1.000 | 0,862 | 0,877 | +1,5 | | chaosnli | 1.599 | 0,594 | 0,637 | +4,4 | | civil_comments | 2.000 | 0,938 | 0,863 | −7,5 | | clinc150 | 1.000 | 0,877 | 0,873 | −0,4 | | fever_evidence | 1.000 | 0,909 | 0,926 | +1,7 | | go_emotions | 1.000 | 0,486 | 0,496 | +1,0 | | helpsteer2_helpfulness | 1.000 | 0,432 | 0,403 | −2,9 | | helpsteer2_verbosity | 1.000 | 0,668 | 0,661 | −0,7 | | ledgar | 1.000 | 0,694 | 0,678 | −1,6 | | massive | 1.000 | 0,832 | 0,867 | +3,5 | | measuring_hate_speech | 1.000 | 0,460 | 0,534 | +7,4 | | mmlu | 1.000 | 0,631 | 0,615 | −1,6 | | mnli | 1.000 | 0,821 | 0,832 | +1,1 | | paws | 1.000 | 0,665 | 0,694 | +2,9 | | sms_spam | 800 | 0,976 | 0,959 | −1,7 | | sst5 | 1.000 | 0,477 | 0,428 | −4,9 | | strategyqa_closed | 687 | 0,553 | 0,543 | −1,0 | | strategyqa_grounded | 687 | 0,841 | 0,805 | −3,6 | | stsb | 1.000 | 0,509 | 0,510 | +0,1 | | yelp5 | 1.000 | 0,652 | 0,643 | −0,9 | ### FP8 Aynı 13.371 test kararında (rastgele 10.000 satır), RTX 5090: | | bf16 | FP8 (`DECIDER_FP8=1`) | |---|---:|---:| | Doğruluk | 0,797 | 0,796 | | ECE | 0,021 | 0,021 | | NLL | 0,522 | 0,524 | | İstek başına gecikme, medyan (CUDA graph + `torch.compile`) | 23,5 ms | 14,7 ms | FP8 doğruluğa ölçülebilir bir maliyet getirmedi; medyan gecikme %37 düştü. Gecikme 300 gerçek test isteğinde, istekler tek tek gönderilerek ölçüldü. Bu isteklerin uzunlukları farklı olduğu için yeni şekillerde CUDA graph yakalaması da ölçüme girdi: %90'lık gecikme (83,2 / 90,2 ms) ve toplam hız bu yüzden temsil edici değildir. Toplu (batch) sunumda hız ölçülmedi. ## Eğitim | Kaynak | Satır | |---|---:| | bev-decision-150K-tr train (domain-weighted, decontaminated) | 27.000 | | SQuAD 2.0-tr train (cevaplanabilirlik) | 20.000 | | MASSIVE tr-TR train | 5.000 | | beyazperde train | 5.000 | | XNLI Türkçe validation | 2.490 | | bev-decision-150K train, İngilizce (replay) | 6.000 | Satırlar laya-tr-karar'ın veri hazırlığından alındı. 1.500 Türkçe satır (metne göre gruplanmış) validation ve temperature kalibrasyonu için ayrıldı; kalan 63.990 satırdan decider'ın kendi prompt koduyla 169.657 prompt satırı çıktı (56.858.516 token): her soru ayrı satırda, her score seviyesi ayrı bir evet/hayır satırında, seçenek sırası karıştırılarak. | | | |---|---| | Base model | `Mapika/decider-4b` v2.1 (`eb5fbdf`), Qwen3.5-4B-Base | | Yöntem | LoRA rank 64, alpha 128; attention (q/k/v/o, linear attention in_proj_qkv/in_proj_z/out_proj) ve MLP (gate/up/down); 121,9M trainable parametre; eğitimden sonra bf16 ağırlıklara merge edildi | | Loss | Türkçe satırlarda gold dağılımına cross-entropy; İngilizce satırlarda frozen base modelin kendi cevap dağılımına (KL), decider-4b v2.1'in forgetting'e karşı tarifi | | Program | 1 epoch, 786 adım × 65.536 token; learning rate 1e-4, %5 warmup, cosine; AdamW, gradient clip 1,0 | | Donanım ve süre | 1 × RTX 5090 (32 GB), bf16, gradient checkpointing, `causal-conv1d` ile; eğitim 3 sa 56 dk (~4.400 token/s) | | Doğrulama (eğitim sonu) | 3.826 satırda slot doğruluğu 0,891, cross-entropy 0,260 | | Temperature | `decider.calibrate.fit_by_type`, 2.118 ayrılmış Türkçe cevapta: choice 0,936, noul 1,146, score 1,093 | Eğitim ve değerlendirme kayıtları (config, eğitim kaydı, önce/sonra raporları, FP8 ölçümleri) [`training/`](training/) klasöründe. ## Sınırlamalar - Eğitim verisinin çoğu **makine çevirisidir**; bağımsız Türkçe testlerde (jev-bench) iyileşme görülmedi. - Kalibrasyon Türkçe veriyle yapıldı; farklı bir alanda kullanmadan önce threshold'ları kendi verinizle kontrol edin. - Base modelin sınırlamaları geçerlidir (bkz. [decider-4b kartı](https://huggingface.co/Mapika/decider-4b)): RL aşaması yok, zor multi-hop sorularda fazla emin olabilir. - Yalnızca Türkçe ve İngilizce değerlendirildi. - FP8 hızı yalnızca tek tek isteklerde, medyan gecikme olarak ölçüldü. ## Lisans Base model Apache-2.0'dır. Eğitim verilerinin lisansları farklıdır; ayrıntılar [`LICENSE.md`](LICENSE.md)'de.