Ana içeriğe geç
DLP · 4 dk okuma

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:

ModelF1 (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)variesvariesvaries
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):

DLPTC tespitNER PERSONFalse 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:

  1. 1000-2000 etiketli cümle topla
  2. BERT tr base modeli üzerinde fine-tune (Google Colab GPU)
  3. Çıktıyı ONNX’e dönüştür
  4. 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

İlgili yazılar

Yeni rehberler için kaydolun

Ayda en fazla 2 e-posta. KVKK rehberleri, ürün güncellemeleri ve vaka çalışmaları. Tek tıkla iptal.

Double opt-in: kaydolduktan sonra e-postanıza onay bağlantısı gönderilir. Bağlantıya tıklayana kadar listeye eklenmezsiniz. KVKK Madde 11 başvuruları: dpo@veritadlp.com .