Türkçe KVKK sınıflandırıcısı

turkish-kvkk-classifier, Türkçe bir metinde hangi tür kişisel verilerin bulunduğunu söyleyen çok etiketli bir model. 24 kategoriyi kapsar: Veri Sorumluları Sicil Bilgi Sistemi VERBİS'te kullanılan 14 kategori ve 6698 sayılı Kişisel Verilerin Korunması Kanunu'nun (KVKK) 6. maddesindeki 10 özel nitelikli kişisel veri kategorisi. Bir masaüstü CPU'da metin başına yaklaşık 22 ms sürer.

Boyut
110M parametre
Temel model
dbmdz/bert-base-turkish-cased (BERTurk)
Etiketler
24, çok etiketli
Sonuç
Eğitimde kullanılmayan 987 metinde 0.874 micro-F1
CPU hızı
metin başına yaklaşık 22 ms
Lisans
MIT

Ne yapar

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ı
etiket yok

Bir kategori yalnızca metin belirli bir kişiye ait o türden bir bilgi içerdiğinde işaretlenir; kişinin adı geçmese bile, “hasta” ya da “müşteri” gibi. Genel bilgiler, kurallar, duyurular ve istatistikler etiket almaz. İlk örnekte bir hastanın böbrek yetmezliği sağlık verisidir. İkincisinde böbrek yetmezliği farkındalık haftası kimseyle ilgili değildir.

Sınıflandırıcı maskeleme modelinin önünde çalışmak için tasarlandı: metni sınıflandırın, bir maskeleme politikası seçin, sonra maskeleyin.

Etiketler

24 etiket ve eğitimde kullanılmayan setteki F1 skorları
Etiket Kapsam F1
Genel kategoriler (VERBİS)
kimlik Kimlik: ad soyad, T.C. kimlik numarası (TCKN), doğum bilgileri, yaş, cinsiyet, uyruk, medeni durum, kimlik belgesi numaraları, imza 0.97
iletisim İletişim: telefon, e-posta, posta adresi 0.97
lokasyon Lokasyon: kişinin konumu, nerede bulunduğu ya da nereye gittiği, güzergâhı 0.74
ozluk Özlük: çalışanın özlük kaydı, hizmet dökümü, bordro, izin, disiplin, SGK bildirgesi 0.84
hukuki_islem Hukuki İşlem: dava, icra takibi, haciz, tebligat, vekâletname, ihtarname, arabuluculuk 0.89
musteri_islem Müşteri İşlem: sipariş, fatura, abonelik, talep ya da şikâyet, poliçe ya da sözleşme işlemi 0.75
fiziksel_mekan_guvenligi Fiziksel Mekân Güvenliği: bina giriş çıkışları, turnike, ziyaretçi kaydı, güvenlik kamerası 0.83
islem_guvenligi İşlem Güvenliği: IP adresi, log, cihaz kimliği, kullanıcı adı, parola ya da PIN, oturum kaydı 0.83
risk_yonetimi Risk Yönetimi: kredi notu, risk skoru, şüpheli işlem, kara liste, MASAK (Mali Suçları Araştırma Kurulu) 0.82
finans Finans: hesap, IBAN, kart, bakiye, borç, gelir ya da maaş, vergi numarası, kripto varlık 0.85
mesleki_deneyim Mesleki Deneyim: işyeri, meslek, pozisyon, diploma, sertifika, referans 0.80
pazarlama Pazarlama: alışveriş alışkanlıkları, tercihler, iletişim izni, anket cevapları, çerez ya da segment verisi 0.83
gorsel_isitsel Görsel ve İşitsel Kayıtlar: kişinin fotoğrafı, ses kaydı, videosu, çağrı kaydı 0.79
arac Araç bilgileri: plaka, şasi numarası, motor numarası, ruhsat 0.96
Özel nitelikli kişisel veriler (KVKK md. 6)
saglik Sağlık Bilgileri: hastalık, teşhis, tedavi, ilaç, engellilik, kan grubu, gebelik 0.92
biyometrik Biyometrik Veri: parmak izi, yüz tanıma, iris ya da retina, ses izi 0.88
genetik Genetik Veri: genetik test, DNA, taşıyıcılık durumu 0.79
cinsel_hayat Cinsel Hayat: cinsel yönelim, cinsel hayata ilişkin bilgiler 0.86
ceza_mahkumiyeti Ceza Mahkûmiyeti ve Güvenlik Tedbirleri: geçmiş suçlar, adli sicil kaydı, mahkûmiyet, güvenlik tedbiri 0.84
din_felsefi_inanc Felsefi İnanç, Din, Mezhep ve Diğer İnançlar: din, mezhep, inanç, dini pratikler 0.93
siyasi_dusunce Siyasi Düşünce: parti üyeliği ya da tercihi, siyasi görüş, bir eyleme katılım 0.85
irk_etnik Irk ve Etnik Köken: ırk, etnik köken 0.82
dernek_vakif_sendika Dernek, Vakıf ve Sendika Üyeliği: bir derneğe, vakfa ya da sendikaya üyelik 0.89
kilik_kiyafet Kılık ve Kıyafet: başörtüsü, dini ya da kültürel kıyafet tercihi 0.91

Sonuçlar

İki test seti var. Ana set, eğitimde kullanılmayan bağımsız bir set: eğitim verisine bakılmadan yazılmış 1.125 metin, ikinci kez ve kör olarak yeniden etiketlendi. İki etiketlemenin birebir örtüştüğü 987 metin altın standart seti oluşturuyor (%87.7 tam uyum, etiket başına Cohen's kappa 0.84 ile 1.00 arasında). İkinci set, eğitimde hiç kullanılmamış 333 şablondan gelen 771 örneklik, şablon bazında ayrık bir test. 987 metinlik altın sette turkish-kvkk-classifier 0.874 micro-F1 ve 0.856 macro-F1 alıyor.

İki test setindeki skorlar
MetrikBağımsız set
987 metin
Ayrık test
771 örnek
micro-F10.8740.895
macro-F10.8560.875
Özel nitelikli veri var mı: kesinlik0.9600.955
Özel nitelikli veri var mı: duyarlılık (recall)0.8840.955
Tam eşleşme (tüm etiketler doğru)0.7170.733

Micro-F1, tüm etiket kararları bir araya toplanarak hesaplanan F1'dir. Macro-F1, etiket başına F1 skorlarının ağırlıksız ortalamasıdır.

Bağımsız setteki metinler ve iki etiketleme turu bir dil modeliyle üretildi ve otomatik olarak kontrol edildi. Bir insan tarafından satır satır doğrulanmadı.

Python ile hızlı başlangıç

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()
thresholds = json.load(open(hf_hub_download(MODEL, "thresholds.json")))
SPECIAL = {"saglik", "biyometrik", "genetik", "cinsel_hayat", "ceza_mahkumiyeti", "din_felsefi_inanc",
        "siyasi_dusunce", "irk_etnik", "dernek_vakif_sendika", "kilik_kiyafet"}

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

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

Etiket başına eşikler dev setinde ayarlandı ve thresholds.json içinde gelir. Özel nitelikli kategorilerde eşik hiçbir zaman 0.5'in üstüne çıkmaz; bu da duyarlılığı (recall) öne alır.

Ölçülen hız: Intel i5-12400F üzerinde sekiz thread ve batch boyutu bir ile, ortalama 126 karakterlik metinlerde metin başına 22 ms.

Eğitim

  • Temel model. dbmdz/bert-base-turkish-cased (BERTurk, 110M).
  • Yöntem. Çok etiketli sınıflandırma, ikili çapraz entropi ile sigmoid, 5 epoch, öğrenme oranı 3e-5, bfloat16, en fazla 320 token.
  • Veri. 3.276 şablondan 36.000 sentetik örnek. Çoğu maskeleme modelinin şablonlarıdır: her kişisel veri alanı sabit bir kuralla bir kategoriye eşlenir, her şablon ayrıca bağlamının eklediği kategorilerle de işaretlenir. Geri kalanı hiç değer içermeyen bağlamsal cümlelerdir. Örneklerin %21'i tuzaktır, yani hiç etiket almaması gereken metinlerdir.
  • Bölme. Eğitim, dev ve test setleri şablon hash'ine göre ayrıldı.

Sınırlar

  • Eğitim verisi sentetik. Model kritik bir akışa girmeden önce onu kendi kurumunuzun metinlerinde ölçün.
  • En zayıf etiketler lokasyon (F1 0.74), musteri_islem (0.75) ve gorsel_isitsel (0.79). Üçü de bağlamdan çıkarılıyor ve keskin bir sınırları yok. genetik de 0.79 alıyor.
  • “Burada özel nitelikli kişisel veri var mı?” sorusu için bağımsız setteki duyarlılık (recall) 0.884; yani bu tür metinlerin kabaca dokuzda biri kaçıyor.
  • Çıktı bir kategori sinyalidir, hukuki bir değerlendirme değildir. VERBİS envanteri ve KVKK'ya uyum kullanıcının sorumluluğunda kalır.

Türkçe KVKK kategori sınıflandırıcısı

turkish-kvkk-classifier, Türkçe bir metinde hangi kişisel veri kategorilerinin bulunduğunu belirleyen çok etiketli bir sınıflandırıcıdır: 14 VERBİS kategorisi ve KVKK md. 6’daki 10 özel nitelikli veri kategorisi. Maskeleme modelinden önce çalıştırılır: metin önce sınıflandırılır, sonuca göre maskeleme politikası seçilir, ardından metin maskelenir.

Eğitim verisine bakılmadan yazılmış 987 metinlik bağımsız sette micro-F1 0.874, macro-F1 0.856’dır. CPU’da metin başına yaklaşık 22 ms sürer. Çıktı yalnızca bir kategori tahminidir, hukuki nitelendirme değildir.