Kembali ke BlogTeknikal

Data Latihan ML: Preset Privasi untuk Kebolehulangan

Dataset latihan ML yang dianonimkan memerlukan preset kebolehulangan — pemisahan data yang sama akan menghasilkan anonymization yang sama setiap kali.

March 15, 20266 min baca
ML training datareproducible privacyGDPR AI ActCNIL enforcementdata science compliance

Data Latihan ML: Preset Privasi untuk Kebolehulangan

Apabila melatih model pembelajaran mesin dengan data pelanggan, anda mungkin perlu:

  1. Buat dataset latihan v1.0 dengan 100,000 rekod yang telah dibenamkan
  2. Latih model
  3. Dalam 3 bulan, buat dataset v1.1 dengan 50,000 rekod baru + 100,000 lama
  4. Fine-tune model

Jika penganoniman bukan deterministik, ID pelanggan yang sama akan diubah dengan cara yang berbeda antara v1.0 dan v1.1:

v1.0: "Customer CUST_2024_5731 placed order on 2024-01-15"
v1.0 anonymized: "Customer [CUSTOMER_ABC123] placed order on [DATE_1]"

v1.1: "Customer CUST_2024_5731 placed order on 2024-02-20"
v1.1 anonymized: "Customer [CUSTOMER_XYZ789] placed order on [DATE_2]" ← **Different!**

Model tidak dapat belajar pola konsisten kerana ID yang sama dilambangkan secara berbeza.

Preset Penganoniman Deterministik

Gunakan hash fungsi deterministik untuk memetakan ID ke pengganti secara konsisten:

import hashlib
import json

def create_deterministic_preset(entity_list, seed="ml_training_v1"):
  """
  Buat pemetaan konsisten dari entiti asli ke ID pengganti.
  ID yang sama selalu memetakan ke pengganti yang sama.
  """
  preset = {}
  
  for entity in entity_list:
    # Hash entiti + benih untuk menghasilkan ID pengganti unik
    hash_input = f"{seed}_{entity['type']}_{entity['value']}"
    hash_output = hashlib.sha256(hash_input.encode()).hexdigest()[:8]
    
    preset[f"{entity['type']}_{entity['value']}"] = f"[{entity['type']}_{hash_output}]"
  
  return preset

Aliran Latihan ML v1.0 → v1.1

v1.0: Buat Preset Awal

# Ekstrak semua entiti daripada 100,000 rekod
all_entities_v1 = extract_entities_from_dataset(dataset_v1_0)

# Buat preset deterministik
preset_v1 = create_deterministic_preset(
  all_entities_v1,
  seed="ml_training_v1.0"
)

# Simpan preset untuk kebolehulangan
with open("presets/ml_training_v1_0.json", "w") as f:
  json.dump(preset_v1, f)

# Anonimkan semua rekod dengan preset
anonymized_v1 = anonymize_with_preset(dataset_v1_0, preset_v1)

# Latih model
model_v1 = train_model(anonymized_v1)

v1.1: Gunakan Preset Lama + Tambah Baru

# Muat preset v1.0 (untuk ID lama)
preset_v1 = json.load(open("presets/ml_training_v1_0.json"))

# Ekstrak entiti daripada 50,000 rekod baru
new_entities_v1_1 = extract_entities_from_dataset(dataset_v1_1_new)

# Untuk entiti baharu yang tidak ada dalam preset_v1:
preset_v1_1 = preset_v1.copy()

for entity in new_entities_v1_1:
  key = f"{entity['type']}_{entity['value']}"
  if key not in preset_v1_1:
    # Gunakan benih yang sama untuk kejelasan
    hash_output = hashlib.sha256(f"ml_training_v1.0_{key}".encode()).hexdigest()[:8]
    preset_v1_1[key] = f"[{entity['type']}_{hash_output}]"

# Gabungkan 100k lama (sudah dibenamkan dengan preset_v1) + 50k baru (dengan preset_v1_1)
combined_dataset = dataset_v1_0_anonymized + anonymize_with_preset(dataset_v1_1_new, preset_v1_1)

# Fine-tune model dengan data gabungan
model_v1_1 = finetune_model(model_v1, combined_dataset)

Manfaat untuk Kebolehulangan ML

  1. Konsistensi lintas versi: "CUST_2024_5731" selalu memetakan ke "[CUSTOMER_abc123]"
  2. Pembelajaran yang tahan: Model belajar pola berkaitan untuk ID yang sama di semua dataset
  3. Audit: Preset boleh disimpan dan dicapai untuk menunjukkan bagaimana data telah dianonimkan
  4. Skala: Tambahkan data baru tanpa melatih semula model — gunakan preset yang ada

Pertimbangan Keamanan

Caveat: Preset hash bukan penganoniman sejati GDPR. Hash dapat diserang dengan:

  • Serangan kamus: Jika penyerang mengetahui ID tersebut (contohnya "CUST_2024_5731"), mereka boleh hash dan cocokkan dengan dataset
  • Kecil ruang PII: Jika hanya 100,000 pelanggan unik wujud, ruang pencarian adalah kecil

Untuk perlindungan maksimum:

  • Gunakan salt yang kuat (bukan "ml_training_v1")
  • Simpan preset dalam storan terenkripsi berasingan
  • Jangan letak preset yang sama di GitHub atau log terpisah
  • Gunakan HMAC, bukan SHA sederhana: hmac.new(b"secret_key", entity.encode()).hexdigest()

Kesimpulan: Preset hash deterministik memastikan penganoniman konsisten di seluruh versi dataset latihan ML, memungkinkan model untuk belajar pola berkaitan untuk ID yang sama.

Sedia untuk melindungi data anda?

Mulakan pengenalan PII dengan 285+ jenis entiti dalam 48 bahasa.