
Bu belge, orijinal İngilizce metnin makine çevirisidir. Bu çeviri ile orijinal İngilizce sürüm arasında herhangi bir çelişki olması durumunda, İngilizce sürüm geçerli olacaktır. İngilizce orijinal metni oku
Cihaz içi anonimleştirici: oluşturuldu ve kıyaslandı
2026-05-22 · Caiioo Team
AI sistemlerinin gerçek kişisel olarak tanımlanabilir bilgiler üzerinde eğitilmesi ve bunları saklamasıyla ilgili gizlilik sorununu çözmek istedik. "Sıfır Veri Saklama" politikaları ve anlaşmaları riski azaltır ancak istisnalarla doludur. Esasen şöyle derler: "Şunlar hariç hiçbir isteminizi veya çıktınızı saklamayacağız: (buraya güvenlik amaçları, hükümet gözetimi, dava tutmaları, ürün geliştirme, hata günlükleri, hizmetleri iyileştirme gibi uzun bir istisna listesi girin...)"
Bunu çözmek için, kullanıcının kendi makinesinde çalışan, mesajı cihazdan ayrılmadan önce gören ve kullanıcıya filtre olmadan yazılmış olsaydı alacağı cevabın aynısını döndüren bir kişisel veri filtresi oluşturduk.
Böylece bir tane inşa ettik. Caiioo'nun bir sonraki sürümü Takma Adlandırıcıyı içerecek. Temsilci sohbetindeki kalkan simgesinin yanı sıra ayarlardan da erişilebilir.
Bu teknik rapor, gizlilik filtreleme sistemimizin arkasındaki mantığı, mimariyi, değerlendirme sürecini ve tasarım ilkelerini özetlemektedir.
Ne yapmayı amaçlıyoruz
Veri minimizasyonu yoluyla genel gizlilik koruması. Bir kullanıcı uzak bir modelle sohbet ettiğinde, modelin kullanıcının sorusunu yanıtlamak için gerçek bir isme, ev adresine, gerçek bir e-postaya veya müşterinin telefon numarasına ihtiyacı yoktur. Sorunun biçimine ihtiyaç duyar ve LLM'in sorguyu bir test olarak görüp reddetmemesi için bunun gerçek bir soru gibi görünmesi gerekir. Bu nedenle filtre, AI'ya gönderilen verilerden gerçek tanımlayıcıları ayıklar ve dönüş yolunda gerçek değerleri tekrar yerine yerleştirir. Model sentetik isimler ve tanımlayıcılar görür; kullanıcı ise gerçek konuşmayı görür.
HIPAA uyumluluk yardımı. İkinci bir mod, HIPAA Safe Harbor kuralındaki (§164.514) 18 tanımlayıcıyı ve daha esnek olan Sınırlı Veri Seti (Limited Data Set) varyantını hedefler. Bir klinisyen, bir sağlık yöneticisi veya kapsam dahilindeki bir iş akışında çalışan herhangi biri, korunan sağlık bilgilerini (PHI) AI'ya göndermeden genel amaçlı bir modelle gerçek vakalar hakkında konuşabilir. Biz, kapsam dahilindeki kuruluşun uyum görevlisi değiliz — ancak PHI'nın en başta dizüstü bilgisayardan dışarı çıkmasını engelleyen katman olabiliriz. Değerlendirmelerimiz, kuruluşların filtrenin kendi uyumluluk ve gizlilik standartlarına uygunluğunu ölçmek için kullanabilecekleri ölçülebilir kıyaslama noktaları sağlar. Tüm gizlilik ve güvenlik önlemleri, kullanıcının veya kullanıcı kuruluşunun sorumluluğunda olan takdir yetkisine dayalı kararlardır.
Her ikisini de seçtik çünkü mühendislik süreçleri aynıdır ve PHI kullanım durumu, Kişisel Veri kategorisindeki daha genel verilere kıyasla gizlenmesi daha kolay olan belirgin adlandırılmış varlıkların kullanımı nedeniyle teknik olarak aslında daha kolaydır. HIPAA filtrelemesi, genellikle İngilizce veya İspanyolca olması gerçeğiyle de desteklenmektedir. Tanımlayıcıları tespit eder, aynı formatta sabit takma adlar ve ikame edilmiş tanımlayıcılar yerleştirir, dönüş yolunda bunları geri yükleriz ve gerçek değerleri asla günlüğe kaydetmeyiz (log). Sentetik bilgiler ile gerçek bilgiler arasındaki eşleşme yalnızca kullanıcının cihazında kalır, böylece kullanıcı aracının yanıtlarında gerçek bilgileri okuyabilir. Modlar arasında değişen şey, kategori listesi ve politika geçididir.
Neden sadece biri değil de, regex artı makine öğrenimi?
Takma ad oluşturucumuzda (pseudonymizer) iki ana filtre teknolojisi bulunmaktadır: regex adı verilen deterministik bir kalıp tanıma dili ve eğitilmiş makine öğrenimi modelleri.
Regex, yüzeysel formatlar konusunda rakipsizdir. Bir e-posta adresinin bir şekli vardır ([email protected]). Bir IP adresi, kredi kartı, IBAN, VIN, SSN (XXX-XX-XXXX) veya bir API anahtarı da öyledir. Format güvenilirse, regex bunu her seferinde, model yüklemesi ve çıkarım maliyeti olmadan deterministik olarak yakalar.
Ancak regex, bağlam konusunda çaresizdir. "Sarah'nın geçen Salı günkü çizelgesi" bir kişi ve bir tarih içerir, ancak her ikisi de yalnızca formatlarından ayırt edilemez. "14 Elm'deki hasta" ifadesi, adres olmayan binlerce ifadeyle örtüşen bir adres içerir. "MRN numaraları 7741032" ifadesinin bir anlam ifade etmesi için sayının etrafındaki kelimelere ihtiyaç vardır.
Küçük, ince ayarlı bir dil modeli bağlamı yönetir — bizimki, çok dilli küçük bir dil modelinden damıtılmış, özel olarak eğitilmiş 110M parametreli bir kodlayıcıdır (encoder) —. Bu model alt diziyi değil, cümleyi okur ve bir cihazda, hatta bir cep telefonunda bile son derece hızlı çalışacak kadar küçüktür.
Kıyaslamalar (benchmarks), iki katmanın birbirini tamamlayan güçlü yönlerini göstermektedir. Her birinin gerçekten üzerine düşeni yaptığından emin olmak için iki katmanı ayrı ayrı test ettik. Soruların ve cevapların modelin eğitiminde açıkça KULLANILMADIĞI 150 soruluk PrivacyBench-PD soru setinde:
| Katman | Yakalanan PII | Yakalama oranı |
|---|---|---|
| Sadece Regex | 205 / 670 | %30,6 |
| Sadece ML | 516 / 670 | %77,0 |
| Her ikisi (üretim) | 625 / 670 | %93,3 |
Tek başına regex, tanımlayıcıların dörtte üçünü kaçırır çünkü gerçek metinlerdeki çoğu tanımlayıcı yapılandırılmamıştır. Tek başına ML, regex katmanının yakalayabileceği 16 yüzdelik puanı kaçırır — bunlar tamamen şekillerinden ibaret olan şeylerdir (bir kredi kartı, kredi kartı gibi görünür; modelin ekleyebileceği ekstra bir sinyal yoktur). Birlikte, hiçbirinin tek başına kapsayamadığı alanları kapsarlar.
Her bir katmanın nerede belirleyici olduğuna daha derinlemesine bakıldığında: aynı set genelinde, 16 test değeri yalnızca regex tarafından yakalanmış (e-postalar, IP'ler, finansal hesaplar, yapılandırılmış kimlikler) ve 327 değer yalnızca ML tarafından yakalanmıştır (isimler, bağlamsal tanımlayıcılar, çok dilli ifadeler).
Küçük, akıllı, hızlı — ve her yerde çalışıyor
Filtrenin cihaz üzerinde çalışmasını sağlamak zorundaydık, bu bir mühendislik zorluğuydu.
Küçük olmalıydı çünkü uygulamamız birçok sistemde cihaz üzerinde çalışıyor: bir tarayıcı uzantısı, bir macOS uygulaması, bir iOS uygulaması, bir Android uygulaması veya Windows ve Linux içinde. Paket, model başına yaklaşık 113 MB'dır. İki model vardır — biri genel kişisel veriler için, diğeri korunan sağlık bilgileri için — ve Güvenli Liman modu her ikisini de paralel olarak çalıştırır. Bunlar arasında, düşük segment bir Android cihaz en az performans gösterenidir, ancak sistemimiz sorunsuz çalışmaktadır.
Akıllı olmalıydı çünkü yanlış negatifler gerçek verileri uzak bir LLM'ye sızdırır ve yanlış pozitifler konuşmayı bozar. İsimler sansürlenmeli; zamirler sansürlenmemelidir. Yönlendirilen bir dizideki doktorun e-postası sansürlenmeli; [email protected] alt bilgisi muhtemelen edilmemelidir.
Hızlı olmalıydı çünkü kullanıcının gönderdiği veya aldığı her mesajın doğrudan yolunda duruyor. Tek bir CPU iş parçacığında (thread), çoğunlukla tokenizasyon kaynaklı 200 ms'nin altında bir gidiş-dönüş ek yükü ölçtük. WebGPU ve Apple'ın Neural Engine biriminde, LLM çağrısının ağ gecikmesine kıyasla bu süre çok küçüktür.
Birden fazla çalışma zamanında çalışmalıydı çünkü Caiioo çok platformludur. Aynı sistem Chrome uzantılarında, macOS ve iOS'ta, Android'de ve Windows ile Linux'ta çalışır. Tek bir algılama modeli, tek bir regex kütüphanesi, tek bir birleştirici, tek bir politika — Caiioo'nun çalıştığı her yüzeyde özdeş davranış.
Skorlar
Tur turlar süren test ve eğitimlerden sonra, modellerimizin 16. versiyonunda karar kıldık. Aşağıda, her biri farklı bir şeyi ölçen üç kıyaslama (benchmark) yer almaktadır.
Kendi test setimiz, modelin daha önce hiç görmediği 150 soru
Genel kıyaslamalara karşı test etmeden önce, Personal Data filtremizi, eğitim verilerinin dışında tuttuğumuz dahili bir test setinde çalıştırdık; böylece dedektör bu soruların hiçbirini daha önce görmemiş oldu. 150 soru dört gruba ayrıldı (kod parçacıkları, doküman metinleri, kasıtlı olarak alışılmadık ifadeler ve 10 yabancı dil), ayrıca hiçbir özel veri içermeyen bir "negatif" grup eklendi (gereksiz sansürleme yapıp yapmadığımızı kontrol etmek için bir sağlamlık testi). Birleştirilmiş regex + ML işleme hattı:
| Alt kıyaslama | Yakalanan | Oran |
|---|---|---|
| code_bench | 69 / 74 | 93.2 % |
| doc_bench | 233 / 247 | 94.3 % |
| generalization_bench | 123 / 133 | 92.5 % |
| multilingual_bench | 200 / 216 | 92.6 % |
| Tüm 4 pozitif kıyaslama | 625 / 670 | 93.3 % |
(Negatif grupta bulunacak özel veri yoktu. Filtre, olmaması gereken bir şeyi maskeledi — bu durum aşağıda belirtilen kesinlik (precision) rakamlarıyla tutarlıdır.)
Değerlendirici katıdır: Sorunun puan alabilmesi için beklenen her bir özel veri parçasının maskelenmiş çıktıdan tamamen kaybolması gerekir. Kısmi puan veya "yeterince yakın" kabul edilmez. Bu, yargıç olarak başka bir LLM kullanan kıyaslamalardan daha sert bir yöntemdir (LLM yargıçlar cömert olma eğilimindedir). Diğer sistemlerle doğrudan karşılaştırılabilir rakamlar için aşağıdaki baş başa karşılaştırma bölümüne bakın.
PrivacyBenchHIPAA — 40 sağlık sorusu
Her soru, maskelenmesi gereken korunan sağlık bilgilerini (isimler, tıbbi kayıt numaraları vb.) VE korunması gereken sinyalleri (tarihler, coğrafya, 90 yaş altı ise yaş — HIPAA Sınırlı Veri Seti kuralı) listeler. Değerlendirici her iki yönü de kontrol eder: Kaldırmamız gerekenleri kaldırdık mı ve dokunmamamız gerekenleri bıraktık mı?
| Mod | PHI maskelendi | Tutulanlar korundu |
|---|---|---|
| Limited Data Set (tarih / coğrafya / yaş ≤89 koru) | 79 / 79 (100 %) | 34 / 34 |
| Safe Harbor (tarihler dahil her şeyi maskele) | 99 / 104 (95.2 %) | — |
Limited Data Set alt modu bu kıyaslamada kusursuzdur. Maskelenecek daha fazla öğe, dolayısıyla hata payı daha yüksek olan Safe Harbor ise %95.2 oranına ulaşmıştır.
Kendi verilerimizde kategori bazlı sonuçlar, mod başına 200 örnek
Genel kıyaslamalar her şeyi bir araya toplar. Dahili test verilerimiz sonuçları kategoriye göre ayırır (isimler, e-postalar, adresler vb.) ve her birini üç şekilde çalıştırır: sadece regex, sadece ML ve her ikisi birlikte. Bu bize tam olarak hangi teknolojinin hangi tür tanımlayıcıyı yakaladığını ve her birinin nerede diğerine ihtiyaç duyduğunu söyler. En son çalışma, 2026-05-20:
Üç filtre modunun özeti
| Mod | Birleşik geri çağırma | Kesinlik | F2 | Örnekler |
|---|---|---|---|---|
| Personal Data filtresi | 97.3 % | 97.8 % | 97.4 | 200 |
| HIPAA filtresi — Limited Data Set | 92.3 % | 92.3 % | 92.3 | 200 |
| HIPAA filtresi — Safe Harbor | 91.9 % | 91.5 % | 91.8 | 200 |
Bu rakamlar, kasıtlı olarak dokunmadığımız URL'leri hariç tutar; bir URL'yi bozmak, "bu bağlantıyı aç" veya "şu sayfayı getir" gibi sonraki işlemleri engeller. Bu konuda daha fazla bilgi aşağıdaki iş akışı bölümündedir.
Kategori tablolarından önceki genel tablo: Her modda, bir kişiyi gerçekten tanımlayan belirteçler %100'e yakın oranda yakalanır. İsimler, e-postalar, telefon numaraları, posta adresleri, devlet kimlikleri, biyometrik kimlikler, kesin coğrafi konum, tıbbi kayıt numaraları, doğum tarihleri, sosyal güvenlik numaraları — her örnekte, her testte yakalanmıştır. %100'ün altına düştüğümüz kategoriler tahmin edilebilirdir: cihaz kimlikleri (gerçek metinlerde çok çeşitli formatlar), çeşitli kurumsal kimlikler (sadakat numaraları, çalışan kimlikleri — aynı sorun) ve fotoğraflar (yalnızca metin tabanlı bir filtre bir görüntünün içini göremez). Bunların hiçbiri, sızıntı açısından gerçekten önemli olan "çizelgedeki isim" veya "taslaktaki e-posta" gibi kritik tanımlayıcılar değildir. Riskli kategoriler güvenilir olanlardır.
Personal Data filtresi
Birleşik geri çağırma (en iyi önce) ve ardından risk kademesine (T1 = en hassas) göre sıralanmıştır.
| Kategori | Kademe | Regex geri çağırma | ML geri çağırma (ham) | Birleşik geri çağırma | Altın n |
|---|---|---|---|---|---|
| biometric_id | T1 | 100.0 % (10/10) | 100.0 % (10/10) | 100.0 % | 10 |
| email_address | T1 | 100.0 % (20/20) | 100.0 % (20/20) | 100.0 % | 20 |
| government_id | T1 | 100.0 % (10/10) | 100.0 % (10/10) | 100.0 % | 10 |
| person_name | T1 | 13.3 % (4/30) | 96.7 % (29/30) | 100.0 % | 30 |
| phone_or_fax | T1 | 100.0 % (10/10) | 100.0 % (10/10) | 100.0 % | 10 |
| postal_address | T1 | 0.0 % (0/10) | 100.0 % (10/10) | 100.0 % | 10 |
| precise_geolocation | T1 | 100.0 % (10/10) | 100.0 % (10/10) | 100.0 % | 10 |
| birth_date | T2 | 0.0 % (0/10) | 100.0 % (10/10) | 100.0 % | 10 |
| ip_address | T2 | 100.0 % (10/10) | 100.0 % (10/10) | 100.0 % | 10 |
| online_handle | T2 | 40.0 % (4/10) | 100.0 % (10/10) | 100.0 % | 10 |
| vehicle_id | T2 | 50.0 % (5/10) | 100.0 % (10/10) | 100.0 % | 10 |
| authentication_secret | T4 | 40.0 % (4/10) | 100.0 % (10/10) | 100.0 % | 10 |
| financial_account | T1 | 90.0 % (18/20) | 100.0 % (20/20) | 90.0 % | 20 |
| institutional_id | T3 | 80.0 % (8/10) | 90.0 % (9/10) | 90.0 % | 10 |
| device_id | T3 | 40.0 % (4/10) | 50.0 % (5/10) | 80.0 % | 10 |
Tablo incelendiğinde, iki katmanlı tasarımın meyvelerini verdiği görülmektedir. Posta adresleri, doğum tarihleri ve kişi isimleri tek başına regex ile %0–13 puan almaktadır — eşleşecek belirli bir kalıp olmadığı için bunları yalnızca ML modeli yakalayabilir. E-postalar, telefon numaraları, IP'ler, devlet kimlikleri, biyometrik kimlikler ve kesin coğrafi konum, tek başına regex ile %100 puan alır — bunlar ML modelinin zahmetsizce yakaladığı yüzeysel formatlardır. Çevrimiçi kullanıcı adları, araç kimlikleri ve kimlik doğrulama sırları karışıktır: regex standart formları yakalar, ML geri kalanını halleder. Birleşik geri çağırma, her kategoride hangi tek katman daha güçlüyse onu karşılar veya geçer.
Cihaz kimlikleri ve çeşitli kurumsal kimlikler %100'ün altındaki kategorilerdir ve bunun nedenini biliyoruz: Bunlar gerçek metinlerde en geniş format çeşitliliğine sahiptir. Filtrenin her yerde mükemmel olduğunu iddia etmek yerine, geri çağırmanın düştüğü kategoriler konusunda dürüst olmayı tercih ediyoruz.
HIPAA filtresi — Limited Data Set alt modu
Limited Data Set alt modu, tasarım gereği tarihleri, coğrafyayı ve 89 yaş veya altındaki yaşları korur — bunlar HIPAA'nın bir kuruluşun meşru klinik araştırma ve operasyonlar için saklamasına izin verdiği sinyallerdir.
| Kategori | Kademe | Regex geri çağırma | ML geri çağırma (ham) | Birleşik geri çağırma | Altın n |
|---|---|---|---|---|---|
| biometric_id | T1 | 100.0 % (12/12) | 100.0 % (12/12) | 100.0 % | 12 |
| email_address | T1 | 100.0 % (13/13) | 100.0 % (13/13) | 100.0 % | 13 |
| medical_record_number | T1 | 100.0 % (26/26) | 100.0 % (26/26) | 100.0 % | 26 |
| person_name | T1 | 15.4 % (4/26) | 100.0 % (26/26) | 100.0 % | 26 |
| phone_or_fax | T1 | 100.0 % (13/13) | 100.0 % (13/13) | 100.0 % | 13 |
| social_security_number | T1 | 100.0 % (12/12) | 100.0 % (12/12) | 100.0 % | 12 |
| account_number | T2 | 0.0 % (0/13) | 100.0 % (13/13) | 100.0 % | 13 |
| health_plan_id | T2 | 0.0 % (0/13) | 100.0 % (13/13) | 100.0 % | 13 |
| ip_address | T2 | 100.0 % (12/12) | 100.0 % (12/12) | 100.0 % | 12 |
| license_number | T2 | 0.0 % (0/12) | 100.0 % (12/12) | 100.0 % | 12 |
| vehicle_id | T2 | 25.0 % (3/12) | 100.0 % (12/12) | 100.0 % | 12 |
| device_id | T3 | 41.7 % (5/12) | 100.0 % (12/12) | 100.0 % | 12 |
| photo | T2 | 0.0 % (0/12) | 0.0 % (0/12) | 0.0 % | 12 |
Fotoğraflar bilinen bir eksikliktir — yalnızca metin içeren bir filtre bir görüntünün içini göremez. Görüntü-PHI, henüz sunmadığımız ayrı bir sorundur. Bu moddaki diğer tüm kategoriler %100 seviyesindedir.
HIPAA filtresi — Safe Harbor alt modu
Safe Harbor, Limited Data Set alt modunun koruyacağı her şeyi — tarihleri, 89 yaş üstü yaşları, coğrafyayı — temizler. En sıkı kapsamı elde etmek için her iki filtre modelini paralel olarak çalıştırır: HIPAA'ya özel olan ve genel kişisel veri olan.
| Kategori | Kademe | Regex geri çağırma | ML geri çağırma (ham) | Birleşik geri çağırma | Altın n |
|---|---|---|---|---|---|
| age_over_89 | T1 | 100.0 % (18/18) | 0.0 % (0/18) | 100.0 % | 18 |
| biometric_id | T1 | 100.0 % (9/9) | 100.0 % (9/9) | 100.0 % | 9 |
| email_address | T1 | 100.0 % (10/10) | 100.0 % (10/10) | 100.0 % | 10 |
| medical_record_number | T1 | 100.0 % (20/20) | 100.0 % (20/20) | 100.0 % | 20 |
| person_name | T1 | 20.0 % (4/20) | 100.0 % (20/20) | 100.0 % | 20 |
| phone_or_fax | T1 | 100.0 % (10/10) | 100.0 % (10/10) | 100.0 % | 10 |
| social_security_number | T1 | 90.0 % (9/10) | 100.0 % (10/10) | 100.0 % | 10 |
| account_number | T2 | 0.0 % (0/10) | 100.0 % (10/10) | 100.0 % | 10 |
| general_date | T2 | 100.0 % (27/27) | 29.6 % (8/27) | 100.0 % | 27 |
| health_plan_id | T2 | 0.0 % (0/10) | 100.0 % (10/10) | 100.0 % | 10 |
| ip_address | T2 | 100.0 % (9/9) | 100.0 % (9/9) | 100.0 % | 9 |
| license_number | T2 | 0.0 % (0/10) | 100.0 % (10/10) | 100.0 % | 10 |
| vehicle_id | T2 | 10.0 % (1/10) | 100.0 % (10/10) | 100.0 % | 10 |
| device_id | T3 | 22.2 % (2/9) | 88.9 % (8/9) | 77.8 % | 9 |
| photo | T2 | 0.0 % (0/9) | 0.0 % (0/9) | 0.0 % | 9 |
İki ilginç satır genel tarihler (regex %100, ML %30) ve 89 yaş üstü yaşlardır (regex %100, ML %0). Safe Harbor'da her ikisini de bilinçli olarak regex'e bıraktık: Tarihlerin regex'in her seferinde yakaladığı bir kalıbı vardır ve olasılıksal bir modelin ">89" gibi sayısal bir eşiği sorgulamasını istemiyoruz. Deterministik bir kural, ML modelinden aynı kuralı öğrenmesini istemekten daha güvenilirdir.
Tüm kategorilerdeki genel rakamlar
Hepsini toplarsak: Tam işleme hattı (regex + ML birlikte), tek başına katmanlarla nasıl karşılaştırılır?
| Mod | Katmanlar | Geri çağırma | Kesinlik | F2 |
|---|---|---|---|---|
| Personal Data | sadece regex | 65.8 % | 93.0 % | 69.9 % |
| Personal Data | sadece ML | 95.4 % | 92.4 % | 94.8 % |
| Personal Data | her ikisi | 96.9 % | 98.0 % | 97.1 % |
| Limited Data Set | sadece regex | 55.9 % | 95.0 % | 60.9 % |
| Limited Data Set | sadece ML | 92.9 % | 84.5 % | 91.0 % |
| Limited Data Set | her ikisi | 92.9 % | 89.3 % | 92.1 % |
| Safe Harbor | sadece regex | 58.9 % | 93.6 % | 63.6 % |
| Safe Harbor | sadece ML | 82.4 % | 88.3 % | 83.5 % |
| Safe Harbor | her ikisi | 92.4 % | 88.9 % | 91.7 % |
Personal Data filtresinin "her ikisi" satırı, her metrikte tek katmanlı versiyonları geride bırakıyor — regex'i (yüzeysel formatlar için) ML modeliyle (bağlam için) birleştirmek, tek başına hiçbir katmanın sağlayamayacağı bir sonuç sunuyor. Bu yazının başındaki %97.3'lük ana rakam, gerçek bir kullanıcının elde ettiği sonucu yansıtan rakamdır. Yukarıdaki tablodaki rakamın biraz daha düşük olmasının tek nedeni, bağlantıları ve araç çağrılarını bozmamak için kasıtlı olarak koruduğumuz URL kategorisini içermesidir.
Diğer özel gizlilik filtreleriyle baş başa karşılaştırma
Bizimki gibi cihaz üzerinde çalışan, neredeyse anlık bir gizlilik filtresi için adil karşılaştırma, mesaj başına saniyeler süren ve ağ gidiş-dönüşüne ihtiyaç duyan devasa bulut tabanlı LLM'ler değil, diğer cihaz üzerinde çalışan, neredeyse anlık gizlilik filtreleridir. Bu sınıftaki her sistemi aynı test setlerine karşı, aynı eşleştirme kurallarını kullanarak çalıştırdık. Herkes için aynı standart.
Emsal sınıfı:
- openai/privacy-filter — OpenAI'ın açık kaynaklı özel gizlilik filtresi. Yaklaşık 50 milyon parametre, herhangi bir modern tarayıcıda çalışacak kadar küçük.
- piiranha-v1 — iiiorg'dan 278 milyon parametreli bir dedektör. Lisansı onu yalnızca araştırma ve değerlendirme ile sınırlandırır (ölçebiliriz ancak ticari olarak sunamayız).
- Microsoft Presidio — bağlam için küçük bir dil modeliyle geleneksel kalıp eşleştirmeyi birleştiren, en yaygın kullanılan açık kaynaklı sansürleyici.
- GLiNER PII ailesi — küçük, genel amaçlı varlık sınıflandırıcı ailesi. Knowledgator küçük (~44M), temel (~86M) ve büyük (~304M) varyantlar sunar; NVIDIA Ekim 2025'te 570M varyantını yayınladı.
- Caiioo üç modda da (Personal Data, HIPAA Limited Data Set, HIPAA Safe Harbor).
Caiioo ilk sırada olacak şekilde beş test setindeki geri çağırma oranları:
| Sistem | PrivacyBench PD-25 | Caiioo sentetik PD-200 | PrivacyBenchHIPAA-40 | Caiioo sentetik PHI-200 | Çok dilli PD-40 (10 bölge) |
|---|---|---|---|---|---|
| Caiioo — Personal Data | 96.2 % (76/79) | 99.0 % (198/200) | — | — | 92.6 % (200/216) |
| Caiioo — HIPAA Limited Data Set | — | — | 100.0 % (79/79) | 100.0 % (200/200) | — |
| Caiioo — HIPAA Safe Harbor | — | — | 100.0 % (79/79) | 100.0 % (200/200) | — |
| openai/privacy-filter (50M) | 96.2 % (76/79) | 83.0 % (166/200) | 93.7 % (74/79) | 77.0 % (154/200) | 94.9 % (205/216) |
| gliner_pii_nvidia (570M) | 94.9 % (75/79) | 85.5 % (171/200) | 84.8 % (67/79) | 85.0 % (170/200) | 76.9 % (166/216) |
| gliner_pii_large (~304M) | 72.2 % (57/79) | 86.5 % (173/200) | 84.8 % (67/79) | 93.0 % (186/200) | 50.0 % (108/216) |
| gliner_pii_base (~86M) | 87.3 % (69/79) | 66.0 % (132/200) | 74.7 % (59/79) | 66.0 % (132/200) | 51.4 % (111/216) |
| gliner_pii_small (~44M) | 88.6 % (70/79) | 84.5 % (169/200) | 91.1 % (72/79) | 83.0 % (166/200) | 68.5 % (148/216) |
| Microsoft Presidio | 82.3 % (65/79) | 76.5 % (153/200) | 84.8 % (67/79) | 76.5 % (153/200) | 69.0 % (149/216) |
| piiranha-v1 (~278M) | 60.8 % (48/79) | 58.5 % (117/200) | 43.0 % (34/79) | 47.0 % (94/200) | 82.4 % (178/216) |
Caiioo, en büyük iki testte (PD-200 ve PHI-200) özel filtre sınıfına liderlik ediyor, genel kıyaslamalarda başa baş gidiyor veya liderlik ediyor ve çok dilli testlerde ikinci sırada yer alıyor. En küçük testte (PrivacyBench PD-25, sadece 25 soru) Caiioo ve openai/privacy-filter %96.2 ile berabere kalıyor. Çok dilli testlerde openai/privacy-filter %94.9 ile hala öndeyken Caiioo %92.6 seviyesindedir — en çok geride kaldığımız dil Çince; diğer her yerde zirvede veya zirveye yakınız. Çok dilli kapsam kritikse, openai/privacy-filter makul bir alternatiftir. Bu sınıftaki diğer çoğu iş yükü için Caiioo en iyisidir.
HIPAA sonucu asıl manşettir. Her iki Caiioo HIPAA modu da her HIPAA testinde %100 geri çağırma oranına ulaştı — her hasta ismi, her tıbbi kayıt numarası, her doğum tarihi, her hesap numarası yakalandı. İkinci en iyi sistem, PrivacyBenchHIPAA'da %93.7 ile openai/privacy-filter oldu — her hatanın gerçek dünyada bir ifşa olduğu bir kıyaslamada 6.3 puanlık bir fark.
Okumaya değer ikinci bir rakam: aşırı maskeleme — aslında özel veri olmayan şeyleri maskelemek. Aşırı maskeleme bir gizlilik zararı değil, bir kullanılabilirlik maliyetidir. Çok fazla şeyi maskelerseniz LLM'in muhakemesi kötüleşir ve dönen cevap kalitesizleşir. Caiioo, test setleri genelinde 1–24 kez gereksiz maskeleme yaptı. Presidio: 10–51. NVIDIA'nın GLiNER'ı: Sadece HIPAA testlerinde 31–64. Hedef en az ifşa ile mümkün olan en iyi cevabı almak olduğunda, kesinlik (precision) en az geri çağırma (recall) kadar önemlidir.
Peki ya filtre olarak sadece bir öncü LLM kullanmak?
Kullanabilirler — ve ham geri çağırma oranında kazanırlar. Bulutta veya yerelde çalışan büyük genel amaçlı LLM'ler (Llama 3.1 8B, Gemma 4, Qwen 3.5 9B ve benzerleri), çok dilli dahil her testte %95–100 puan alabilir. Bu, maksimum geri çağırmaya ihtiyaç duyan ve bunun bedelini ödemeye razı olan kullanıcılar için gerçek bir seçenektir.
Ancak dezavantajları gerçektir:
- Yavaştır. Milisaniyeler yerine mesaj başına saniyeler sürer. Filtre, kullanıcının gönderdiği her mesajın önünde durur.
- Ya mesaj kullanıcının makinesinden çıkar ya da model. Bulutta filtreleme yapmak için mesajın oraya gitmesi gerekir — bu da amacı bozar. Cihaz üzerinde filtreleme yapmak için 1–17 GB'lık bir model indirmek gerekir.
- Kandırılabilir. Üretken bir model, mesajın ortasında maskeleme yapmaması için ikna edilebilir ("prompt injection" saldırısı). Bizimki gibi küçük bir sınıflandırıcı kandırılamaz.
- Aynı girdi, farklı çıktı. Üretken modeller her zaman aynı cevabı iki kez vermez. Bu, gidiş-dönüş sürecini bozar — giderken maskeleme ve dönerken maskeyi kaldırma işlemi, aynı gerçek değerin her zaman aynı sahte değerle eşleşmesine dayanır.
Caiioo, bu ödünleşimin diğer tarafı için üretilmiştir: Kullanıcı gönder tuşuna basmadan önce yazma alanında çalışan, küçük, öngörülebilir, saniye altı hızda bir filtre. Bir konuşma içinde aynı gerçek değer için her zaman aynı sahte değeri üretir, böylece gidiş-dönüş süreci tutarlı kalır. Yukarıdaki emsal sınıfı tablosu, bu tür bir kullanım durumu için elmalarla elmaların karşılaştırılmasıdır.
Gerçek performans kullanımda belli olur
Kıyaslamalar (benchmarks) bir bitiş çizgisi değil, sadece bir başlangıç noktasıdır. Filtre, Caiioo'nun yeni özelliği olan pseudonymizer'a (takma ad oluşturucu) entegre edilmiştir; bu bileşen, yazıcı ile model arasında yer alan asıl kısımdır.
Kullanıcı gönder düğmesine bastığında şunlar gerçekleşir:
- Tespit Et. İlk olarak regex katmanı çalışır; bu katman deterministiktir ve mikrosaniye hızında sonuç verir. Ardından, geri kalan kısımlar üzerinde ML modeli çalışır. Eğer iki katman aynı metin parçası üzerinde çakışırsa basit bir kural uygularız: Yüzeysel formatlarda regex, bağlamda ise ML önceliklidir.
- Kendi ve Diğer Etiketlemesi. Caiioo, kullanıcıya atıfta bulunan tanımlayıcıları diğer kişilere atıfta bulunanlardan ayırır. Kullanıcı sadece birini veya her ikisini birden gizlemeyi seçebilir. Kullanıcının kişisel sözlüğüne eklediği isimler her zaman "kendi" olarak sayılır.
- İkame Et. Her gerçek değer, tutarlı ve stile uygun bir takma ad (pseudonym) alır. "Sarah Goldberg", "Maya Hartwell" olur ve tüm konuşma boyunca "Maya Hartwell" olarak kalır; böylece modelin o kişi hakkındaki muhakemesi konuşma turları arasında bölünmez. Gerçekten sahteye dönüşüm tablosu, kullanıcının cihazında tutulur ve platformun anahtar zincirinden (keychain) alınan bir anahtarla şifrelenir.
- Gönder. Model tamamen sahte bir mesaj alır. Hiçbir gerçek tanımlayıcı ağ üzerinden iletilmez ve denetim günlüğümüz (audit log) değerlerin kendisini değil, yalnızca sayısal verileri kaydeder.
- Geri Yükle. Akış halindeki yanıt (streaming response) ulaştığı anda geri eşleştirilir. Modelin yanıtındaki "Maya Hartwell", ekrana ulaşmadan önce "Sarah Goldberg"e dönüşür ve kullanıcının neyin korunduğunu bir bakışta görebilmesi için küçük bir parıltı efektiyle (glow pill) işlenir.
- Araç Argümanlarını da Geri Yükle. Eğer model bir araç çağırırsa (e-posta gönder, bilet oluştur, bir dokümana yaz gibi) ve argümanlar sahte değerler içeriyorsa, araç çalışmadan önce gerçek değerleri geri yerleştiririz. Model sahte değerler üzerinden muhakeme yürütür; eylem ise gerçek değeri kullanır.
Filtre, hangi AI servisinin kullanıldığını önemsemez. Mesaj modele ulaşmadan önce çalıştığı için OpenRouter, Anthropic, Google, OpenAI ve yerel bir Ollama'nın tamamı aynı maskelenmiş veriyi alır. Yeni bir sağlayıcı eklemek gizlilik açığı oluşturmaz.
Kimi korur
Kullanıcıyı. Bir kullanıcının adı, e-postası, adresi, telefonu, IP'si ve biyometrik tanımlayıcıları — bir araya getirildiğinde bir kişiyi bir veri toplayıcıya tanımlayan şeyler — filtre açıkken asla cihazdan ayrılmaz.
Kullanıcının bahsettiği kişileri. Çoğu gizlilik aracı yazan kişiye odaklanır, ancak göz ardı ettikleri şey 'sosyal sözleşme'dir — hepimizin kendimize olduğu kadar başkalarına karşı da sorumluluk taşıdığımız gerçeği. Sistem günlüklerinde süresiz olarak kaydedilebileceği bir LLM'ye "Lütfen Bay Saunders'ın yetersizlik davranışını analiz et" şeklinde bir talep göndermek sorumsuzca (ve potansiyel olarak iftira niteliğinde) bir davranıştır. 1.000 iş ortağı içeren bir Google E-Tablosu ile ilgili yardım için bir LLM'ye danışmak, hepsini veri saklama yapışkanına bırakır (yürürlükteki gerçek 'sıfır veri saklama' durumuna bağlı olarak değişen derecelerde). Caiioo'nun filtresi üçüncü tarafları da kapsar: sözleşme hazırlanan müşteri, kaydı incelenen hasta, e-postası bağlama yapıştırılan meslektaş. Onlar, tanımlayıcılarının uzak bir LLM tarafından görülmesine izin vermediler. Filtre buna varsayılan olarak saygı duyar; bir iş akışı gerektiriyorsa kullanıcı "yalnızca kendim" veya "yalnızca başkaları" moduna geçebilir.
Kuruluşları — işletmeler, hastaneler, firmalar. Hesap numaraları, lisans numaraları, tıbbi kayıt numaraları, finansal yönlendirme detayları, dahili kimlikler, API anahtarları, müşteri listeleri. Bir işletmenin de bir kişiyle aynı veri minimizasyonu çıkarı vardır. Bir taburcu notu hazırlamak için Caiioo'yu kullanan bir klinisyen, hastanın tıbbi kayıt numarasını OpenAI'a göndermez. Bir avukat, müşterinin hesap numarasını Anthropic'e göndermez. Bir destek mühendisi, müşterinin günlüğündeki API anahtarını Google'a göndermez. Filtre, tanımlayıcının bir kişiye mi yoksa bir kuruluşa mı ait olduğunu sormaz — sadece cihazda tutar.
Maksimum fayda, minimum maruziyet
Asıl mesele, kullanıcının filtreyi hissetmemesi gerektiğidir.
Çoğu gizlilik aracı bir seçim yapmaya zorlar: agresif bir şekilde sansürle ve modelin cevabının kötüleşmesini izle ya da istemi kullanılabilir tut ve gizlilik vaadinin aşınmasını izle. Biz bu ödünden vazgeçtik. Model hala tam olarak şekillenmiş bir istem alır — bir isim, bir yer, bir tarih, bir tıbbi kayıt numarası görür, hepsi doğru dilbilgisi konumlarındadır. Sadece sahte olanları görür. Muhakemesi aynıdır; sadece dizeler temizlenmiştir.
Bunu işe yaratan şey kararlı ikamedir (stable substitution). Aynı gerçek değer bir konuşma boyunca her zaman aynı sahte değerle eşleştiği için — kullanıcının mesajında, o isme atıfta bulunarak geri gelen araç sonucunda, modelin ondan bahseden önceki yanıtında — modelin hakkında akıl yürütebileceği tutarlı bir kişi, yer veya nesne vardır. Çok turlu konuşmalar birbirine karışmaz. Araç çağrıları bozulmaz. Alt temsilciler ana konuşmanın haritasını devralır ve tüm görev boyunca tutarlı kalır.
Kullanıcının gördüğü çıktı gerçek konuşmadır. Sağlayıcının gördüğü veri ise tutarlı bir kurgudur. İş, bu iki görünüm arasındaki boşlukta gerçekleşir ve hedef — tek hedef — bu boşluğu görünmez kılmaktır.
Engel olan bir gizlilik filtresi kapatılacaktır. İş akışının içinde kaybolan bir gizlilik filtresi, sunulmaya değer tek türdür.
İnşa ederken hedeflediğimiz çıta buydu.