Instructions to use halilneed/turkish-kvkk-classifier with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use halilneed/turkish-kvkk-classifier with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="halilneed/turkish-kvkk-classifier")# Load model directly from transformers import AutoTokenizer, AutoModelForSequenceClassification tokenizer = AutoTokenizer.from_pretrained("halilneed/turkish-kvkk-classifier") model = AutoModelForSequenceClassification.from_pretrained("halilneed/turkish-kvkk-classifier", device_map="auto") - Notebooks
- Google Colab
- Kaggle
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)
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
İki ayrı değerlendirme seti:
- Bağımsız held-out (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).
- Şablon düzeyinde ayrık test: eğitimde hiç kullanılmamış 333 şablondan 771 örnek.
| Held-out (987) | Ayrık test (771) | |
|---|---|---|
| micro-F1 | 0.874 | 0.895 |
| macro-F1 | 0.856 | 0.875 |
| Özel nitelikli var mı — kesinlik | 0.960 | 0.955 |
| Özel nitelikli var mı — duyarlılık | 0.884 | 0.955 |
| Tam eşleşme (tüm etiketler doğru) | 0.717 | 0.733 |
Etiket bazlı F1 (held-out): kimlik 0.97 · iletisim 0.97 · arac 0.96 · din_felsefi_inanc 0.93 · saglik 0.92 · kilik_kiyafet 0.91 · hukuki_islem 0.89 · dernek_vakif_sendika 0.89 · biyometrik 0.88 · cinsel_hayat 0.86 · finans 0.85 · siyasi_dusunce 0.85 · ozluk 0.84 · ceza_mahkumiyeti 0.84 · pazarlama 0.83 · fiziksel_mekan_guvenligi 0.83 · islem_guvenligi 0.83 · risk_yonetimi 0.82 · irk_etnik 0.82 · mesleki_deneyim 0.80 · genetik 0.79 · gorsel_isitsel 0.79 · musteri_islem 0.75 · lokasyon 0.74
Kullanım
Etiket başına eşikler dev setinde ayarlandı (thresholds.json); özel nitelikli etiketlerde eşik 0.5'i geçmez (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"))
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) |
| Bölme | şablon düzeyinde hash ile ayrık train / dev / test |
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. - Sınıflandırıcı bir kategori sinyalidir, hukuki nitelendirme değildir. VERBİS envanteri ve KVKK uyumu kullananın sorumluluğundadır.
- Downloads last month
- -
Model tree for halilneed/turkish-kvkk-classifier
Base model
dbmdz/bert-base-turkish-cased