Bir modeli kendi metninizle ince ayardan geçirmek, o metindeki kişisel veriyi de modele öğretmek anlamına geliyor. Eğitim kümeleri isim, ev adresi, e-posta, telefon, kimlik numarası, banka hesabı ve doğum tarihiyle dolu.

Temizlenmemiş metinle eğitilen bir model bu verileri ezberleyebiliyor ve sonradan, hiç öyle bir amaç taşımayan bir istem üzerine gerçek bir kişinin bilgilerini geri verebiliyor.

Bu rehber, kişisel veriyi eğitim öncesinde yakalamak için kullanılan model bağımsız bir yaklaşımı anlatıyor: nasıl kurulduğunu, nerede zorlandığını ve ölçümlerin ne söylediğini.

Sorun form alanlarında değil

Kişisel veri nadiren düzgün bir form alanında duruyor. Müşteri destek dökümlerinde, insan kaynakları kayıtlarında, sohbet günlüklerinde ve ekiplerin ince ayar için kullandığı uzun serbest metin sütunlarında saklanıyor.

Geldiği biçim de dağınık ve çok dilli; önceden tanımlanmış hiçbir şemanın öngörmediği hâllerde karşınıza çıkıyor. Asıl zorluk bu.

  • Alışıldık araçlar çift yönlü jeton sınıflandırma modelleri, yani her jetona bir kişisel veri türü etiketleyen dönüştürücüler.
  • Bu türler eğitim anında sabitleniyor; şema donuk.
  • Personel numarası ya da kripto cüzdan adresi gibi alana özgü bir tanımlayıcı bu şemanın dışında kalıyor.
  • Eklemek için yeniden etiketleme ve yeniden eğitim gerekiyor, üstelik araç tek modele ve tek dağıtıma kilitli.

Dil modeli sorunu yeniden kuruyor

Bir dil modeli talimatlarını çıkarım anında okuyor. Bu tek fark her şeyi değiştiriyor: tespit edilecek varlıklar, çıktı biçimi ve arka uç, kod olmaktan çıkıp yapılandırmaya dönüşüyor.

Tek bir dedektör, yeni bir varlık türünü yeniden eğitim yerine istem düzenleyerek hedefleyebiliyor. Yönetilen bir API üzerinde ya da kendi sanal özel bulutunuzun içinde çalışabiliyor ve çeviri adımı olmadan sekiz dilde bağlam üzerinden akıl yürütebiliyor.

İki tasarım tercihi

Yaklaşımı model bağımsız kılan iki karar var ve ikisi de sonradan eklenebilecek şeyler değil, en baştan verilmiş olmayı gerektiriyor.

  • Talimatla yönetilen tespit: bütün tespit mantığı talimatların ve ince bir ayrıştırma katmanının içinde duruyor. Böylece hiçbir modelin kendine özgü davranışına bağlı kalmıyor.
  • Yapılandırılabilir arka uç: modele tek tip bir çıkarım arayüzü üzerinden ulaşılıyor. Mesaj listesi alıp yanıt metni döndüren her nesne bu arayüzü karşılıyor.
  • Sonuç: aynı dedektör hem yönetilen bir serviste hem de kendi GPU'nuzda çalışan açık bir modelle çalışıyor.
  • Kapalı ortam: dışarıya hiç çıkamayan kurulumlar da bu sayede kapsam içinde kalıyor.

Özelleştirme de iki bağımsız bileşenden geliyor. Birincisi model: doğruluğu, gecikmeyi ve maliyeti o belirliyor. İkincisi varlık kümesi: neyin kişisel veri sayılacağını o tanımlıyor ve değiştirmek istemde tek satırlık bir düzenleme.

Dedektörün dört parçası

Yaklaşım dört parçadan oluşuyor ve isteğin sistemden geçiş sırasına göre okunuyor.

Parçaİşi
İstemŞemayı tanımlıyor: on beş varlık kategorisi, birer satırlık tanımlar, işaretlenmeyecekler listesi
Arka uçModeli çalıştırıyor; tek tip bir çıkarım arayüzü üzerinden
AyrıştırmaYanıtı konumlandırılmış aralıklara çeviriyor
Çağrı zinciriÜçünü birbirine bağlıyor

Modelden istenen iş dar ve iyi tanımlı: metni okuyup bütün kişisel veri aralıklarını bulmak ve her birini şemadaki bir varlık türüyle etiketlemek. Yanıt yapılandırılmış JSON olarak dönüyor.

Neden konumları model vermiyor

Dedektör modelden karakter konumu istemiyor, çünkü bir dil modeli bunu güvenilir biçimde üretemiyor. Model yalnızca varlık türünü ve bulduğu tam metin değerini döndürüyor.

Konumlar sonradan hesaplanıyor: her değer kaynak metinde düzenli ifadeyle bulunup karakter aralığına çevriliyor. Bu ayrım küçük görünüyor ama dedektörün güvenilirliğinin büyük kısmı buradan geliyor. Modelden yalnızca yapabileceği işi istemek, yapamayacağı işi ona bırakmaktan çok daha sağlam bir tasarım kuruyor ve hata payını ölçülebilir bir yere taşıyor.

İstemde ayrıca işaretlenmeyecekler listesi ve isteğe bağlı birkaç örnek bulunuyor. Bu iki ekleme, modelin aşırı hevesli davranıp her özel ismi kişisel veri saymasını engellemeye yarıyor; kişisel veri tespitinde yanlış pozitif, kaçırılan kadar maliyetli olabiliyor.

Uydurma etiketleri toplamak

Dil modelleri sık sık şemaya yakın ama birebir uymayan etiketler üretiyor: DATES yerine DATE, CONTACT_INFO yerine EMAIL gibi.

  • Her etiket, biçimbilim ve hazırlanmış bir eşanlamlı tablosu üzerinden istemin kendi sözlüğüne geri oturtuluyor.
  • Hiçbir katmanın eşleyemediği etiket zorla bir yere sokulmuyor, UNK olarak işaretleniyor.
  • Böylece gerçek uydurmalar görünür kalıyor ve sessizce doğru sayılmıyor.
  • Bu davranış, ölçümün dürüstlüğü açısından tespit oranından daha önemli.

Çalıştırmak için gerekenler

Kurulum tarafı hafif. Python 3.11 ve üzeri, bir de tek çalışma zamanı bağımlılığı olarak Boto3 yetiyor; dedektör bunun dışında bir servis çalıştırmıyor.

  • Yönetilen yolda bir bulut hesabı ve seçtiğiniz model için erişim izni gerekiyor.
  • Kimlik bilgileri standart zincirden çözülüyor; uzun ömürlü sabit anahtar yerine rol ya da oturum profili öneriliyor.
  • Dedektör bir metin alıp konumlandırılmış aralıkların listesini döndürüyor, doğrudan maskeleme adımına verilebilecek biçimde.
  • Model kimliğini değiştirmek tek satırlık bir iş; dedektör ve çağrı yeri aynı kalıyor.

Kendi sunucunuzda çalıştırıyorsanız kapatma sorumluluğu da sizde kalıyor, çünkü dedektör arka uç altyapısını yönetmiyor. Yönetilen tarafta ise ödediğiniz şey yalnızca harcanan jeton.

Kıyaslama nasıl yapıldı

Değerlendirme, her biri doğrulanmış aralıklar taşıyan beş açık veri kümesiyle yapıldı. Her kümeden yaklaşık 10.000 satır örneklendi.

Toplamda 49.365 kayıt ve 222.114 çekirdek doğrulanmış aralık, sekiz dili kapsıyor: Almanca, İngilizce, İspanyolca, Fransızca, Hintçe, İtalyanca, Felemenkçe ve Telugu. Alanlar çok dilli sentetik profillerden İngilizce insan kaynakları ve müşteri hizmetleri belgelerine uzanıyor.

Bir tahmin edilen aralık, doğrulanmış aralıkla tam örtüşme koşuluyla eşleştiriliyor: başlangıç, bitiş ve etiket üçü birden tutmak zorunda. Ardından kesinlik, duyarlılık ve F1 hesaplanıyor. Bu katı eşleşme ölçütü skorları düşürüyor ama karşılaştırmayı anlamlı kılıyor.

Etiketleri hizalamak

Dedektörleri bu kümeler arasında karşılaştırmak göründüğünden zor, çünkü etiketler birbirini tutmuyor. Her dedektör ve her veri kümesi kendi sözlüğünü kullanıyor.

Adil karşılaştırma için bütün ham etiketler on iki ortak varlıktan oluşan tek bir kanonik taksonomiye eşleniyor: isim, adres, iletişim, tarih, yaş, kimlik numarası, finansal, IP, URL, kullanıcı adı, parola ve belge numarası. Her dedektör yalnızca kendisinin ve veri kümesinin ortak beyan ettiği kapsamda puanlanıyor, böylece hiçbir araç desteklemediği bir kategori yüzünden cezalandırılmıyor.

Bu kanonik taksonomi iki raporlama kapsamı da tanımlıyor. Çekirdek F1, on iki ortak tür üzerinden hesaplanan ve karşılaştırmaya esas alınan adil rakam. Genişletilmiş varlık F1 ise meslek, şirket adı ya da kripto cüzdan adresi gibi veri kümesine özgü kategorileri kapsıyor; hazır dedektörlerin çoğunun bu kategorilerden haberi bile yok.

Sonuçlar

Başlık ölçütü aralık düzeyinde çekirdek F1. Tabloda yönetilen modeller ve kendi sunucusunda çalıştırılan açık modeller birlikte yer alıyor.

  • Mistral Large 3, yönetilen tarafta %83,1 ile en yüksek skoru aldı; tespit başına yaklaşık 1,16 saniye.
  • Kendi altyapısında çalışan OSS-GPT 20B %81,6 ile hemen arkasında, benzer sürede.
  • Hazır araç olan PrivacyFilter %80,7 seviyesinde kaldı.
  • Nova Lite 2 %74,9 ile daha düşük skor verdi ama 0,77 saniyeyle en hızlısıydı.

Buradaki asıl mesaj bir sıralama değil. Skorlar birbirine yakın ve doğru seçim; doğruluk, gecikme ve maliyet arasında sizin yükünüzün nereye bastığına bağlı. Günde bir kez çalışan toplu bir temizlikte gecikme önemsiz, canlı bir akışta ise skorun birkaç puanından daha belirleyici.

Türkiye'den bakınca

KVKK kapsamında bir veri kümesini modele vermeden önce temizlemek yalnızca iyi mühendislik değil, yükümlülük. Buradaki yaklaşımın en kullanışlı yanı da şema esnekliği: TC kimlik numarası, vergi numarası ya da IBAN gibi yerel tanımlayıcılar istemde bir satır eklenerek tanımlanabiliyor.

Bir uyarı da eklemek gerekiyor. Kıyaslamadaki sekiz dil arasında Türkçe yok. Aynı dedektörün Türkçe metinde ne kadar isabetli olduğunu kendi verinizle ölçmeden varsaymayın; özellikle isim ve adres biçimleri dile çok bağlı.

Bir başka pratik nokta, dedektörü hangi aşamada çalıştıracağınız. Veriyi topladıktan hemen sonra bir kez taramak yetmiyor; kaynak sistem çalışmaya devam ettiği için yeni kayıtlar da aynı süreçten geçmeli. Tespiti tek seferlik bir temizlik işi olarak kurmak, ilk eğitimden sonra gelen her veri partisini korumasız bırakıyor.

Nerede durmalı

Tespit tek başına bir çözüm değil, bir sonraki adımın girdisi. Bulunan aralıklar maskeleme ya da silme adımına besleniyor ve asıl karar orada veriliyor: hangi veri kaldırılacak, hangisi takma adla değiştirilecek.

İkinci uyarı ölçümle ilgili. Hiçbir dedektör %100 yakalamıyor ve buradaki en iyi skor %83 seviyesinde. Yani süreci "temizlendi" diye kapatmak yerine, kalan riski kabul edilebilir bulup bulmadığınızı yazılı olarak karara bağlamak gerekiyor.