turkish-pii-detection-v01
Türkçe metindeki kişisel verileri, metin bir LLM'e, log deposuna ya da üçüncü tarafa gitmeden önce maskeleyen 270M parametrelik model. Maskeleme politikasını talimat olarak okur: tümünü maskele, yalnızca şu alanları, şunlar hariç hepsini.
cagrigungor/pii-guard-turkish-270m modelinin devam eğitimidir. O modelin zayıf dilimlerini hedefleyen 24.000 sentetik örnekle benchmark skoru 0.740'tan 0.882'ye çıktı.
Girdi : müşteri Ayşe Yılmaz tc 12345678901 tel 0532 111 22 33
Çıktı : müşteri [AD] tc [TCKN] tel [TEL]
Kullanım örnekleri ve değerlendirme aracı: github.com/halilneed/turkish-pii-detection
Nasıl eğitildiği ve hangi dilimlerin gerilediği: Daha büyük model eğitmedim, zayıf dilimleri eğittim (Medium)
Sonuçlar
Benchmark: cagrigungor/turkish-pii-masking-benchmark — 1.000 sentetik test örneği, satır düzeyi tam eşleşme (tek yanlış etiket satırı düşürür). Benchmark yalnızca test için kullanıldı; benchmark girdileriyle çakışan üretilmiş satırlar atıldı.
| Başlangıç | Bu model | |
|---|---|---|
| Tam eşleşme (1.000) | 0.740 | 0.882 |
| Şema-nötr (903) | 0.770 | 0.902 |
| BÜYÜK HARF | 0.505 | 0.802 |
| Sözle yazılmış sayılar | 0.649 | 0.946 |
| Uzun metin | 0.521 | 0.656 |
| Ek almış PII ("Cem Aslan'ın") | 0.818 | 0.758 ↓ |
| PII içermeyen tuzaklar | 0.895 | 0.865 ↓ |
| Çok kişili metin | — | 0.600 |
"Başlangıç" sütunu başlangıç modelinin yayınlanmış skorlarıdır. İki dilim geriledi; v02'nin ilk hedefi bunlar.
Eğitim
Başlangıç: cagrigungor/pii-guard-turkish-270m (Gemma-3-270m-it tabanlı). Yöntem: full fine-tune, 1 epoch, lr 5e-5. Veri: BÜYÜK HARF, uzun kayıt, sözle yazılmış sayı ve çok kişili metinlere ağırlık veren 24.000 sentetik bankacılık/ERP mesajı. Etiket şeması başlangıç modeliyle aynı.
Tarifin tamamı, TRL ile asgari eğitim iskeleti ve dilim dilim analiz Medium yazısında.
Kullanım
Prompt biçimi eğitimle birebir aynı olmalı; başta BOS token gerekir.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
MODEL = "halilneed/turkish-pii-detection-v01"
tokenizer = AutoTokenizer.from_pretrained(MODEL)
model = AutoModelForCausalLM.from_pretrained(MODEL, dtype=torch.bfloat16, device_map="auto").eval()
def maskele(metin, talimat="Metindeki tüm kişisel verileri uygun etiketlerle maskele."):
prompt = (f"{tokenizer.bos_token}<start_of_turn>user\n{talimat}\n\n"
f"Metin: {metin}<end_of_turn>\n<start_of_turn>model\n")
girdi = tokenizer(prompt, return_tensors="pt", add_special_tokens=False).to(model.device)
with torch.inference_mode():
cikti = model.generate(**girdi, max_new_tokens=512, do_sample=False,
eos_token_id=tokenizer.convert_tokens_to_ids("<end_of_turn>"),
pad_token_id=tokenizer.eos_token_id)
return tokenizer.decode(cikti[0, girdi["input_ids"].shape[1]:], skip_special_tokens=True).strip()
print(maskele("müşteri Ayşe Yılmaz tc 12345678901 tel 0532 111 22 33"))
# -> müşteri [AD] tc [TCKN] tel [TEL]
CPU'da: dtype=torch.float32 kullan, device_map'i kaldır.
| Politika | Örnek talimat |
|---|---|
| Tam | Metindeki tüm kişisel verileri uygun etiketlerle maskele. |
| Beyaz liste | Sadece IBAN ve telefon numarasını maskele. Gerisi aynen kalsın. |
| Kara liste | Ad soyad hariç bütün hassas alanları etiketle. |
| Kategori | Yalnızca özel nitelikli kişisel veriler maskelenecek. |
| Kapsam dışı | İstenen etiket metinde yoksa çıktı girdiyle aynı kalır. |
Sınırlar
- Sentetik veriyle değerlendirildi; üretime almadan önce kendi metninde ölç.
- Şema dışı etiket üretebilir; çıktıyı etiket listesine karşı doğrula.
- Çok kişili, uzun ve ek almış PII içeren metinlerde zayıf; uzun metni parçala.
- KVKK/GDPR uyumu kullananın sorumluluğundadır. Lisans: Gemma Terms of Use.