Instructions to use halilneed/turkish-pii-detection with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use halilneed/turkish-pii-detection with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="halilneed/turkish-pii-detection") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("halilneed/turkish-pii-detection") model = AutoModelForCausalLM.from_pretrained("halilneed/turkish-pii-detection", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use halilneed/turkish-pii-detection with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "halilneed/turkish-pii-detection" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "halilneed/turkish-pii-detection", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/halilneed/turkish-pii-detection
- SGLang
How to use halilneed/turkish-pii-detection with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "halilneed/turkish-pii-detection" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "halilneed/turkish-pii-detection", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "halilneed/turkish-pii-detection" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "halilneed/turkish-pii-detection", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use halilneed/turkish-pii-detection with Docker Model Runner:
docker model run hf.co/halilneed/turkish-pii-detection
turkish-pii-detection (v02)
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.
Bu repo daha önce turkish-pii-detection-v01 adıyla yayındaydı; eski adres buraya yönlendirir. v01 revision="v01" ile aynen erişilebilir. v02, v01'in devamıdır; aynı benchmark'ta 0.880'den 0.944'e çıktı ve tüm dilimlerde iyileşti; en büyük kazanç uzun metinde (0.656 → 0.844) ve tuzaklarda (0.865 → 0.950).
Girdi : MÜŞTERİ SELİM ÖNAL TC 28459163012 TEL 05357213344, İŞYERİ ARÇELİK
Çıktı : MÜŞTERİ [AD] TC [TCKN] TEL [TEL], İŞYERİ [ISYERI]
Kullanım örnekleri ve değerlendirme aracı: github.com/halilneed/turkish-pii-detection
v01'in nasıl eğitildiği ve hangi dilimlerin gerilediği: Daha büyük model eğitmedim, zayıf dilimleri eğittim (Medium)
Maskeleme öncesi kategori tespiti: halilneed/turkish-kvkk-classifier · değerlendirme seti: halilneed/turkish-kvkk-classification-benchmark
Sonuçlar
Benchmark: cagrigungor/turkish-pii-masking-benchmark — 1.000 sentetik test örneği, satır düzeyi tam eşleşme.
| v01 | v02 | |
|---|---|---|
| Tam eÅŸleÅŸme (1.000) | 0.880 | 0.944 |
| Şema-nötr (903) | 0.900 | 0.951 |
| Benchmark'ın B yarısı (531, seçimde hiç kullanılmadı) | 0.885 | 0.945 |
| Tam maskeleme | 0.851 | 0.917 |
| Beyaz liste | 0.895 | 0.940 |
| Kara liste | 0.893 | 0.967 |
| Kapsam dışı | 0.960 | 1.000 |
| PII içermeyen tuzaklar | 0.865 | 0.950 |
| Uzun metin | 0.656 | 0.844 |
| BÜYÜK HARF | 0.775 | 0.838 |
| Ek almış PII ("Cem Aslan'ın") | 0.758 | 0.803 |
| Çok kişili metin | 0.600 | 0.750 |
| Sözle yazılmış sayılar | 0.946 | 1.000 |
| Çok alanlı kayıt | 0.968 | 0.980 |
v01 sütunu bu makinede, aynı değerlendirme betiğiyle yeniden ölçüldü (kartındaki 0.882 / 0.902'den bf16 toplu çıkarım farkıyla 2 satır aşağı).
Aynı benchmark'ta diğer modellerin kendi kartlarında yayınladıkları skorlar (yeniden koşulmadı): cagrigungor/pii-guard-turkish-0.8b 0.876 / 0.889 · melikegks/turkish-pii-guard-0.8b şema-nötr 0.922.
Benchmark nasıl kullanıldı
Eğitim verisi benchmark satırlarına bakılmadan yazıldı ve otomatik kirlilik süzgecinden geçti (benchmark girdisiyle 8 kelimelik ortak dizi ya da birebir aynı talimat içeren satır atıldı). Geliştirme sırasında benchmark'tan toplu geri bildirim alındı: dilim skorları ve bir kez etiket grubu bazında toplu doğruluk. Bu yüzden benchmark id'ye göre ikiye bölündü; interpolasyon oranı A yarısı (469 satır), üreteç dev seti ve kendi yoklama cümlelerimize göre seçildi. B yarısı (531 satır) seçimde kullanılmadı; temiz karşılaştırma 0.885 → 0.945'tir. Satır içerikleri hiçbir aşamada eğitim ya da şablon için kullanılmadı.
Nasıl eğitildi
- Sentetik veri üreteci: 53 etiket, ~1.500 elle yazılmış şablon (bankacılık, İK, sağlık, telekom, e-ticaret, araç, BT logları, uzun e-posta/çağrı dökümü, çok kişili metin, çok alanlı kayıt, ~800 tuzak), ünlü uyumlu ek motoru, Türkçe BÜYÜK HARF / ASCII dönüşümü, sözle yazım ve ~600 farklı politika talimatı. 40.000 örnek.
- Öğretmen hizalaması: Etiket sınırları v01'in sınırlarına hizalandı. v01'in çıktısı girdinin geçerli bir maskelemesiyse ve etiket kümesi aynıysa v01'in sınırları alındı. Anlamsal etiketlerde (sağlık, aile, biyometrik…) v01 ile çelişen 7.136 örnek atıldı. Kalan: 32.864 örnek.
- Devam eğitimi: v01'den full fine-tune, 1 epoch, lr 2e-5, efektif batch 32, loss yalnızca çıktıda.
- Ağırlık interpolasyonu (WiSE-FT): θ = 0.5·θ_fine-tune + 0.5·θ_v01. Tek başına fine-tune benchmark'ta 0.844'e geriledi (üreteç dağılımına kaydı); interpolasyon iki modelin güçlü yanlarını birleştirdi.
Kullanım
Prompt biçimi v01 ile aynı; başta BOS token gerekir.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
MODEL = "halilneed/turkish-pii-detection"
tokenizer = AutoTokenizer.from_pretrained(MODEL)
model = AutoModelForCausalLM.from_pretrained(MODEL, dtype=torch.bfloat16, device_map="auto").eval()
# v01'i birebir kullanmak için: from_pretrained(MODEL, revision="v01")
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. Ölçüm: Intel i5-12400F, fp32, 8 iş parçacığı, batch 1 → ~600 ms / cümle (ortalama 50 karakter), ~1.6 GB RAM.
Politikalar ve 53 etiketlik şema v01 ile aynıdır (tam, beyaz liste, kara liste, kategori, kapsam dışı).
Sınırlar
- Sentetik veriyle değerlendirildi; üretime almadan önce kendi metninde ölç.
- Bağlamsız kısa parçalarda temkinli: "vergi numarası 4810271935" tek başına maskelenmeyebilir; kişi bağlamı olan cümlede ("müşterinin vergi numarası …") maskelenir. Tek alanlı kayıtları bağlamla birlikte ver.
- En zayıf dilimler: çok kişili metin (0.750), ek almış PII (0.803), BÜYÜK HARF (0.838).
- Şema dışı etiket üretebilir; çıktıyı etiket listesine karşı doğrula.
- KVKK/GDPR uyumu kullananın sorumluluğundadır. Lisans: Gemma Terms of Use.
Changelog
- v02 — 2026-09-30: 0.944 / 0.951. Yeni üreteç, öğretmen hizalaması, WiSE-FT. Repo
turkish-pii-detection-v01→turkish-pii-detectionolarak yeniden adlandırıldı. Davranış değişikliği: sürüm sabitlemeden indirenler artık v02'yi alır; v01 içinrevision="v01". - v01 — 2026-09-17: 0.882 / 0.902 (
revision="v01").
- Downloads last month
- 1,359
Model tree for halilneed/turkish-pii-detection
Base model
google/gemma-3-270mDataset used to train halilneed/turkish-pii-detection
Evaluation results
- Row-level exact match (all 1,000 rows) on Turkish PII Masking Benchmark (1,000 rows)test set self-reported0.944
- Row-level exact match, schema-neutral (903 rows) on Turkish PII Masking Benchmark (1,000 rows)test set self-reported0.951