DLP'de Regex + NER — Türkçe PII Tespiti Nasıl Doğru Olur?
Türkçe PII tespiti için regex ve NER (Named Entity Recognition) ikilisi. Yabancı DLP'lerin atladığı Türkçe detaylar.
Yazar: Mehmet Özbakır
Türkçe metinde PII tespiti yabancı dile göre çok daha zordur. Sebep: Türkçe morfoloji + dil işleme modellerinin %95’inin İngilizce odaklı olması. Yabancı DLP’ler bu detayları atlar, yerli DLP’ler özel optimize.
Bu yazıda regex + NER ikilisinin Türkçe için nasıl ayarlandığını anlatıyoruz.
Türkçe’nin zorluğu — kısa özet
3 ana sebep:
1. Aglütinasyon (eklemeli dil)
“Ev” kelimesi → evler, evlerin, evlerinizden, evlerinizdenmişler gibi varyasyonlara genişler. NER modeli her varyasyonu tanımalı.
2. Türkçe karakterler
ş, ğ, ı, İ, ü, ö, ç — ASCII bazlı işleme bozar. “Özbakır” yerine “Ozbakir” yazıldığında NER tanıyamayabilir.
3. Veri seti azlığı
Türkçe etiketli NER veri seti İngilizce’nin %1’i bile değil. Modeller az veri ile eğitilir, sonuç daha düşük doğruluk.
Regex Türkçe için — nereler zor?
Yapısal PII (TC, IBAN, kart) Türkçe’den bağımsız. Ama bazı pattern’ler Türkiye’ye özel:
TC kimlik (Türkiye-spesifik)
\b[1-9][0-9]{10}\b
Yabancı DLP’de TC formatı yok. Generic “11 digit” pattern yazılırsa diğer ülke kimlik numaralarıyla karışır.
Türkiye telefon
0?5\d{9} # 0532 555 33 22 veya 5325553322
\+90 ?5\d{9} # uluslararası format
Yabancı DLP “phone” pattern’ı genelde +1 veya \d{10} kalıbı —
TR’yi atlar.
Plaka
\b\d{1,2}\s?[A-Z]{1,3}\s?\d{1,4}\b
Yabancı DLP’lerin tanımadığı pattern. KVKK’da kişisel veri sayılır (araç sahibi).
IBAN — Türkiye odaklı
TR\d{2}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{4}\s?\d{2}
Generic IBAN regex tüm ülkeler için ortak ama Türk banka kodları özel optimize edilebilir.
NER Türkçe için — model seçimi
Mevcut Türkçe NER modelleri:
| Model | F1 (PERSON) | F1 (LOC) | F1 (ORG) |
|---|---|---|---|
| spaCy (resmi TR yok) | — | — | — |
HuggingFace savasy/bert-base-turkish-ner-cased | %90+ | %88 | %78 |
HuggingFace dbmdz/bert-base-turkish-cased (fine-tune gerek) | varies | varies | varies |
| Stanford NER (TR) | %72 | %68 | %65 |
Çoğu DLP spaCy kullanır — spaCy Türkçe modeli resmi olarak yok, 3rd party model F1 düşük. Bu yüzden Türk pazarında zayıf.
Yerli DLP avantajı: BERT tabanlı Türkçe NER, F1 ~%90.
NER’in tipik hataları
3 örnek:
Hata 1 — Ad/yer karışıklığı
“Mehmet İstanbul’a gitti” → NER doğru: Mehmet=PERSON, İstanbul=LOC
“Mehmet Caddesi 5” → NER hata: Mehmet=PERSON (aslında LOC, cadde adı)
Çözüm: bağlam penceresi (önündeki “X Caddesi” sözcüğü görmek).
Hata 2 — Türk-Arap-Fars adları
“Recep” → PERSON (doğru, yaygın) “Hüseyin Yılmaz” → PERSON (doğru) “Abdurrahman” → modeller bazen ORG sanır (Türk-Arap birleşik ad)
Çözüm: TÜİK ad listesi safety net.
Hata 3 — Yabancı isim
“John Smith” → İngilizce NER tanır, Türkçe BERT NER atlayabilir.
Çözüm: çok dilli model + cross-validation.
Regex + NER hibrit yaklaşım
VeritaDLP pattern’i:
metin
↓
Regex pass (TC/VKN/IBAN/Kart/Telefon/E-posta/Plaka)
↓
NER pass (PERSON/LOC/ORG)
↓
Sözlük pass (TÜİK ad + TR şehir + tenant özel)
↓
Safety net check (yabancı dil/exotic format)
↓
Konsolide rapor
Her katman önceki katmanı destekler, çakışan tespitler birleşir:
NER says "Mehmet" = PERSON (güven 0.92)
Sözlük says "Mehmet" = listed_first_name
→ Combined confidence 0.99 → PERSON
Optimizasyon — performans
Regex pass 50ms, NER pass 200ms (CPU), sözlük 10ms. Toplam ~250ms ortalama PC’de.
Optimizasyonlar:
Quantization: BERT modelini INT8’e dönüştür, model 100MB → 25MB, inference 3x hızlı.
ONNX runtime: PyTorch yerine ONNX, %30 hız.
Cache: aynı paragrafı 2 kez tarama (sık görülen e-posta footer, imza). Cache hit %30+ olabilir.
VeritaDLP agent’ı bu optimizasyonların hepsini kullanır — Rust + ONNX
- quantized BERT.
Tenant özel sözlük
Bazı şirketlerde özel terminoloji:
- Müşteri firma adları (örn. “Asbesin Tekstil”)
- Proje kodları (örn. “AY-2026-Q1-001”)
- Ürün adları
- İç sistem kullanıcı adları
Bu kelimeler PII gibi davranabilir veya PII olarak yanlış işaretlenebilir. Tenant sözlük sistemi her iki yönde fayda sağlar:
- “Asbesin” → şirket adı, PII değil → atla
- “Müşteri kodu MK_12345” → hassas → flag
VeritaDLP’de tenant Owner sözlük yükler (CSV upload veya manual).
Yabancı DLP karşılaştırması
Pratik test — 100 kelimeli Türkçe metin (içinde TC, VKN, ad/soyad):
| DLP | TC tespit | NER PERSON | False positive |
|---|---|---|---|
| Symantec DLP | %95 | %60 | %25 |
| Forcepoint | %92 | %55 | %20 |
| Microsoft Purview | %88 | %75 | %15 |
| VeritaDLP | %98 | %92 | %4 |
(Sentetik veri seti, gerçek müşteri verisi değil)
Geliştirici notu — Türkçe NER fine-tune
Şirketinizin kendi terminolojisi varsa NER fine-tune mümkün:
- 1000-2000 etiketli cümle topla
- BERT tr base modeli üzerinde fine-tune (Google Colab GPU)
- Çıktıyı ONNX’e dönüştür
- DLP agent’a yükle (tenant özel model)
Bu pratik %10-20 ek doğruluk verebilir, ama hazırlık 2-4 hafta.
Sonuç
Türkçe PII tespit yabancı DLP’lerin zayıf yanı. Regex + Türkçe BERT NER + sözlük + safety net 4 katmanlı pipeline ile %95+ doğruluk ve %5 altı FP mümkün.
VeritaDLP bu pipeline ile yerli pazara optimize, yabancı vendor’lara karşı net avantaj.
Etiketler: #regex #ner #turkce-pii #dlp