turkish-kvkk-classifier

What is this model? turkish-kvkk-classifier is a multi-label Turkish text classifier that detects which of 14 VERBİS personal-data categories and 10 KVKK special categories (art. 6) a text contains.

EN: Turkish KVKK personal-data category classifier — multi-label classifier for 14 VERBİS personal-data categories + 10 special categories (KVKK art. 6); ~22 ms/text on CPU. TR: Türkçe KVKK kişisel veri kategori sınıflandırıcısı — 14 VERBİS kategorisi + 10 özel nitelikli kategori. Model page & setup help / Model sayfası ve kurulum desteği: halilneed.agency/models/turkish-kvkk-classifier

Türkçe metinde hangi kişisel veri kategorilerinin bulunduğunu söyleyen çok etiketli sınıflandırıcı: 14 VERBİS kategorisi + KVKK md. 6'daki 10 özel nitelikli kategori. Maskeleyicinin önüne konur: sınıflandır → politika seç → maskele. CPU'da metin başına ~22 ms.

Girdi : hastanın böbrek yetmezliği ilerlemiş, eşi 0532 111 22 33'ten ulaşılabilir
Çıktı : kimlik, iletisim, saglik    → özel nitelikli: evet

Girdi : böbrek yetmezliği farkındalık haftası başladı
Çıktı : (yok)

Maskeleme modeliyle birlikte: halilneed/turkish-pii-detection · değerlendirme seti: halilneed/turkish-kvkk-classification-benchmark (CC0) · eğitim verisi: halilneed/turkish-kvkk-classification-train (CC-BY-4.0)

Bankacılık veri sınıfı (hassas veri, müşteri sırrı, banka sırrı — BSEBY): halilneed/turkish-bseby-classifier

Tanıtım sayfası: halilneed.agency/models/turkish-kvkk-classifier · Ekipler için rehber: Kişisel veri ve yapay zekâ (metni bir modele göndermeden önce neyi maskelemeli, neyi içeride tutmalı)

Etiketler

Genel (VERBİS) Özel nitelikli (KVKK md. 6)
kimlik iletisim lokasyon ozluk hukuki_islem musteri_islem fiziksel_mekan_guvenligi islem_guvenligi risk_yonetimi finans mesleki_deneyim pazarlama gorsel_isitsel arac saglik biyometrik genetik cinsel_hayat ceza_mahkumiyeti din_felsefi_inanc siyasi_dusunce irk_etnik dernek_vakif_sendika kilik_kiyafet

Kural: kategori, metin belirli bir kişiye (adı geçmese bile) ait o türden bilgi içeriyorsa işaretlenir. Genel bilgi, kural, duyuru, istatistik → etiket yok. "Hastanın böbrek yetmezliği ilerlemiş" → saglik; "böbrek yetmezliği farkındalık haftası" → yok.

Sonuçlar

v1.1 (15 Eki 2026): ağırlıklar aynı, yalnızca özel nitelikli etiketlerin eşikleri değişti (aşağıda Sürümler). v1'in eşikleri revision="v1" ile duruyor.

Üç değerlendirme seti. İlk ikisi halilneed/turkish-kvkk-classification-benchmark'ta, üçüncüsü eğitim verisinin test bölmesi (halilneed/turkish-kvkk-classification-train):

  1. Bağımsız held-out (987, default, asıl sonuç): eğitim verisini hiç görmemiş bir yazarın yazdığı 1.125 metin, ikinci bir etiketleyici tarafından kör olarak yeniden etiketlendi. İki etiketleyicinin birebir uzlaştığı 987 metin altın set (uzlaşma %87,7; etiket başına Cohen kappa 0,84–1,00).
  2. Zor set (317, hard, 15 Eki 2026): v1'in zayıf etiketlerine (özel nitelikli kategoriler, lokasyon, müşteri işlem, görsel-işitsel, mesleki deneyim) yönelik, eğitim şablonlarını görmeyen iki yazarın yazdığı 320 metin; kör ikinci etiketleme, birebir uzlaşılan 317 metin. %63'ü form, log, CRM notu gibi yapısal kayıt. Bu modelin eğitiminden sonra yazıldı, eğitimde kullanılmadı.
  3. Şablon düzeyinde ayrık test (771): eğitimde hiç kullanılmamış 333 şablondan 771 örnek.
Held-out v1 Held-out v1.1 Zor set v1 Zor set v1.1 Ayrık test v1 Ayrık test v1.1
micro-F1 0.874 0.878 0.901 0.902 0.895 0.895
macro-F1 0.856 0.863 0.851 0.853 0.875 0.876
Özel nitelikli var mı — kesinlik 0.960 0.959 0.945 0.926 0.955 0.956
Özel nitelikli var mı — duyarlılık 0.884 0.913 0.796 0.822 0.955 0.972
Tam eşleşme (tüm etiketler doğru) 0.717 0.721 0.656 0.656 0.733 0.733

Etiket bazlı F1 (held-out, v1.1): kimlik 0.97 · iletisim 0.97 · arac 0.95 · kilik_kiyafet 0.95 · saglik 0.93 · din_felsefi_inanc 0.93 · biyometrik 0.92 · siyasi_dusunce 0.91 · hukuki_islem 0.89 · dernek_vakif_sendika 0.89 · cinsel_hayat 0.86 · ceza_mahkumiyeti 0.86 · finans 0.85 · ozluk 0.84 · fiziksel_mekan_guvenligi 0.83 · pazarlama 0.83 · islem_guvenligi 0.82 · risk_yonetimi 0.82 · irk_etnik 0.82 · mesleki_deneyim 0.80 · gorsel_isitsel 0.79 · genetik 0.79 · musteri_islem 0.75 · lokasyon 0.74

Etiket bazlı F1 (zor set, v1.1): kimlik 0.99 · risk_yonetimi 0.95 · irk_etnik 0.95 · lokasyon 0.95 · genetik 0.92 · hukuki_islem 0.92 · ozluk 0.91 · finans 0.91 · fiziksel_mekan_guvenligi 0.91 · siyasi_dusunce 0.91 · iletisim 0.90 · saglik 0.90 · musteri_islem 0.89 · biyometrik 0.87 · dernek_vakif_sendika 0.86 · arac 0.84 · islem_guvenligi 0.80 · mesleki_deneyim 0.78 · gorsel_isitsel 0.78 · ceza_mahkumiyeti 0.77 · din_felsefi_inanc 0.76 · kilik_kiyafet 0.76 · pazarlama 0.71 · cinsel_hayat 0.54

Zor set hakkında: iki etiketleme de aynı dil modeliyle ve aynı kılavuzla yapıldı; %99,1 birebir uzlaşma kılavuzun tutarlı uygulanabildiğini gösterir, iki bağımsız insanın uzlaşmasını değil.

Kullanım

Etiket başına eşikler dev setinde ayarlandı (thresholds.json). Özel nitelikli etiketlerde eşik 0.5'i geçmez ve dev F1'i eşit olan eşiklerden en düşüğü seçilir (duyarlılık öncelikli).

import json, torch
from huggingface_hub import hf_hub_download
from transformers import AutoModelForSequenceClassification, AutoTokenizer

MODEL = "halilneed/turkish-kvkk-classifier"
tok = AutoTokenizer.from_pretrained(MODEL)
model = AutoModelForSequenceClassification.from_pretrained(MODEL).eval()
esik = json.load(open(hf_hub_download(MODEL, "thresholds.json")))
OZEL = {"saglik", "biyometrik", "genetik", "cinsel_hayat", "ceza_mahkumiyeti", "din_felsefi_inanc",
        "siyasi_dusunce", "irk_etnik", "dernek_vakif_sendika", "kilik_kiyafet"}

def siniflandir(metin):
    with torch.inference_mode():
        p = torch.sigmoid(model(**tok(metin, return_tensors="pt", truncation=True, max_length=320)).logits)[0]
    etiketler = [model.config.id2label[i] for i, v in enumerate(p.tolist()) if v >= esik[model.config.id2label[i]]]
    return etiketler, bool(set(etiketler) & OZEL)

print(siniflandir("hastanın böbrek yetmezliği ilerlemiş, eşi 0532 111 22 33'ten ulaşılabilir"))

v1 eşikleriyle birebir aynı davranış için: hf_hub_download(MODEL, "thresholds.json", revision="v1").

CPU gecikmesi: Intel i5-12400F, 8 iş parçacığı, ortalama 126 karakterlik metin → batch 1: 22 ms/metin.

Eğitim

Taban model dbmdz/bert-base-turkish-cased (BERTurk, 110M)
Yöntem çok etiketli sınıflandırma (sigmoid + BCE), 5 epoch, lr 3e-5, bf16, maks. 320 belirteç
Veri 36.000 sentetik örnek, 3.276 şablondan: maskeleme modelinin şablonları (PII yuvalarından deterministik kategori eşlemesi + şablon başına bağlamsal işaretleme) ve değer içermeyen bağlamsal cümleler; %21 tuzak (etiketsiz). Yayında: halilneed/turkish-kvkk-classification-train (CC-BY-4.0)
Bölme şablon düzeyinde hash ile ayrık train / dev / test

Sürümler

  • v1.1 (15 Eki 2026, bu sürüm): ağırlıklar v1 ile aynı. Özel nitelikli etiketlerde eşik ayarı, dev F1'i eşit olan eşikler arasında 0,5'e en yakın olanı seçiyordu; bu, kartın "duyarlılık öncelikli" ilkesiyle çelişiyordu. Kural en düşük eşiği seçecek şekilde değiştirildi ve eşikler yine yalnızca dev setinde yeniden ayarlandı. Değişen eşikler: saglik 0,5 → 0,35 · biyometrik 0,5 → 0,2 · cinsel_hayat 0,5 → 0,45 · ceza_mahkumiyeti 0,5 → 0,3 · siyasi_dusunce 0,4 → 0,2 · irk_etnik 0,5 → 0,35 · dernek_vakif_sendika 0,25 → 0,15 · kilik_kiyafet 0,15 → 0,1. Genel etiketlerin eşikleri değişmedi. Sorun, aşağıdaki v2 denemesinin held-out sonuçları incelenirken fark edildi; bu yüzden held-out'taki kazancı (özel nitelikli duyarlılık 0,884 → 0,913) tamamen bağımsız bir ölçüm saymayın. Aynı tarifle eğitilmiş iki ayrı tohumda da kural held-out duyarlılığını yükseltti ama daha az (0,927 → 0,935 ve 0,927 → 0,944) ve kesinlikten yaklaşık 1 puan götürdü; bu modelde kesinlik kaybı 0,001.
  • v1 (30 Eyl 2026, revision="v1").

Yayınlanmayan v2 denemesi. v1'in zayıf etiketleri için 511 yeni şablon (çoğu yapısal kayıt) eklenerek aynı tarifle üç tohumda yeniden eğitildi. Zor sette micro-F1 0,90'dan 0,94'e çıktı, ama held-out'ta v1.1'le aynı kaldı (0,878): genetik, ceza, siyasi düşünce ve ırk/etnik kökende 3–6 puan kazanırken din, kılık kıyafet ve dernek/sendikada 3–5 puan kaybetti (üç tohum ortalaması, aynı eşik kuralıyla) ve etiketsiz metinlerde yanlış alarm %8,4'ten %10,6'ya çıktı. Zor set ile yeni şablonlar aynı dil modelinden çıktığı için zor setteki kazanç temkinle okunmalı. Net kazanç olmadığından yayınlanmadı.

Aynı tarifin farklı tohumları held-out'ta etiket düzeyinde birbirinden çok farklı sonuç verebiliyor (ör. lokasyon F1 0,74 / 0,85 / 0,77); tek tek etiket skorlarını bu oynaklıkla okuyun.

Sınırlar

  • Eğitim verisi sentetiktir; gerçek kurum metninde ölçmeden kritik bir hatta koymayın.
  • En zayıf etiketler lokasyon, musteri_islem, gorsel_isitsel: bağlamdan çıkarılan, sınırı bulanık kategoriler.
  • Örtük anlatılan cinsel hayat bilgisini (yönelim açıkça söylenmeden, partner ya da ilişki üzerinden) çoğu zaman kaçırıyor: zor sette cinsel_hayat duyarlılığı 0,37. Yapısal kayıtların içine gömülü ceza mahkûmiyeti bilgisinde de duyarlılık düşük (zor sette 0,68).
  • Sınıflandırıcı bir kategori sinyalidir, hukuki nitelendirme değildir. VERBİS envanteri ve KVKK uyumu kullananın sorumluluğundadır.

Related models / İlgili modeller

All five in one collection / Hepsi tek koleksiyonda: Turkish Privacy & Safety Models

FAQ / Sık sorulan sorular

What does it output? / Ne çıktı verir? A set of personal-data category labels (e.g. kimlik, iletisim, saglik) and whether any special category (KVKK md. 6) is present; generic text gets no label. It does not mask text — pair it with halilneed/turkish-pii-detection. / Maskeleme yapmaz; sınıflandır → politika seç → maskele.

How accurate is it? / Ne kadar doğru? v1.1: micro-F1 0.878 / macro-F1 0.863 on the 987-text held-out gold set, 0.902 / 0.853 on the 317-text hard set, 0.895 / 0.876 on the template-disjoint test. / Ayrıntılar Sonuçlar bölümünde.

Which labels are weakest? / En zayıf etiketler hangileri? lokasyon, musteri_islem, gorsel_isitsel; implicit cinsel_hayat recall is 0.37 on the hard set. / Örtük cinsel hayat bilgisini çoğu zaman kaçırır.

Is it a legal determination? / Hukuki nitelendirme mi? No. It is a category signal; VERBİS inventory and KVKK compliance remain the user's responsibility. Training data is synthetic. / Hayır, bir kategori sinyalidir.

Resources / Kaynaklar

Downloads last month
87
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for halilneed/turkish-kvkk-classifier

Finetuned
(214)
this model

Datasets used to train halilneed/turkish-kvkk-classifier

Collection including halilneed/turkish-kvkk-classifier

Evaluation results

  • micro-F1 on Turkish KVKK Classification Benchmark (held-out gold, 987 texts)
    test set self-reported
    0.878
  • macro-F1 on Turkish KVKK Classification Benchmark (held-out gold, 987 texts)
    test set self-reported
    0.863
  • micro-F1 on Turkish KVKK Classification Benchmark (hard set, 317 texts)
    test set self-reported
    0.902
  • macro-F1 on Turkish KVKK Classification Benchmark (hard set, 317 texts)
    test set self-reported
    0.853
  • micro-F1 on Turkish KVKK Classification Training Data (template-disjoint test, 771 texts)
    test set self-reported
    0.895
  • macro-F1 on Turkish KVKK Classification Training Data (template-disjoint test, 771 texts)
    test set self-reported
    0.876