Identificarea datelor personale prin Piiranha-v1 Identificarea datelor personale prin Piiranha-v1

Identificarea datelor personale prin Piiranha-v1

În acest articol vom afla cum modelul AI Piiranha-v1 ne poate ajuta să automatizăm respectarea cerințelor legale din domeniul prelucrarii datelor cu caracter personal (GDPR).

1. Introducere

GDPR este un regulament european care reglementează prelucrarea datelor cu caracter personal. El stabilește printre mai multe măsuri obligația de prelucrării minimaliste a datelor și a stabilirea nivelelor de acces la date pe principiu “nevoii de cunoaștere” – adică datele personale ar trebui accesate doar de persoane autorizate care chiar au nevoie de ele.

În contextul digitalizării companiilor, datele cu caracter personal se găsesc în extrem de multe materiale electronice: de la documente Word, Excel, la emailuri, conversații și tot felul de aplicații interne ale companiilor.

Una din problemele care se ridică atunci când o companie vrea să implementeze cerințele GDPR este să identifice corect toate materialele și fluxurile care ajung să conțină aceste date.

Clasificarea datelor personale cu Piiranha-v1
Clasificarea datelor personale cu Piiranha-v1

Folosirea documentelor tipizate și versionate simplică un pic această identificare, dar știm cu toții că în practică acest lucru nu este tot timpul posibil, iar datele cu caracter personal sunt de obicei dinamice: nume, prenume, adrese de email, adrese de tip oraș, localitate, stradă, număr de telefon, etc. E imposibil să generezi o listă cu toate aceste informații pentru a încerca ulterior să le filtrezi din materialele digitale.

2. Identificare automată cu inteligența artificială

Aici intervine inteligența artificilă care prin machine learning poate învăța să clasifice informațiile și să le identifice ulterior fără o supervizare umană.

Piiranha-v1 a fost antrenat exact pentru acest scop și este disponibil public pe platforma HuggingFace. Modelul LLM a fost antrenat să detecteze 17 tipuri de date cu caracter personal în 6 limbi, cu o precizie de 98.27%.

Acest model LLM nu este decât o variantă antrenată special a unui alt model creeat de Microsoft și anume Mdeberta-v3-base care folosește un context de 256 tokeni.

3. Descrierea modelului Piiranha-v1

Modelul este antrenat pe limbile:

  • engleză;
  • spaniolă;
  • franceză;
  • germană;
  • italiană;
  • olandeză.

Tipurile de date identificate includ:

  • adresă: oraș, localitate, nume de stradă, numărul locuinței;
  • număr credit card;
  • dată naștere;
  • nume și prenume;
  • număr de telefon;
  • adresă de email, username, parole;
  • cod poștal.

Evaluarea modelului s-a făcut pe un set de 73 000 de propoziții și a atins o precizie de 99.44% în identificarea datelor personale și de 99.27 în clasificarea lor corectă.

Modelul are performanțe ridicate și pentru limba română, dar necesită antenamente suplimentare.

Piiranha-v1 excelează în special în identificarea numelor și adreselor de email.

4. Cum putem folosi acest model în practică?

Acest model vine cu o licență cc-by-nc-nd-4.0 care interzice folosirea lui în scopuri comerciale. Totuși nimic nu ne împiedică să îl folosim pentru a antrena propriul nostru model în mod specific pe datele pe care dorim să le identificăm.

În continuare vom discuta pe baza unui exemplu de cod și vom încerca să stabilim precizia de clasificare pe cateva texte.

Pentru a rula codul Python vom avea nevoie în prealabil să instalăm următoarele librării:

Transformers 4.44.2
Pytorch 2.4.1+cu121
Tokenizers 0.19.1

Codul propus ca exemplu este:

import torch
from transformers import AutoTokenizer, AutoModelForTokenClassification

model_name = "iiiorg/piiranha-v1-detect-personal-information"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForTokenClassification.from_pretrained(model_name)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

def mask_pii(text, aggregate_redaction=True):
    # procesarea textul de intrare
    inputs = tokenizer(text, return_tensors="pt", truncation=False, padding=True)
    inputs = {k: v.to(device) for k,v in inputs.items()}

    # generare predictii
    with torch.no_grad():
        outputs = model(**inputs)

    # setarea etichetelor
    predictions = torch.argmax(outputs.logits, dim=-1)

    # conversie predictii
    encoded_inputs = tokenizer.encode_plus(text, return_offsets_mapping=True, add_special_tokens=True)
    offset_mapping = encoded_inputs['offset_mapping']

    masked_text = list(text)
    is_redacting = False
    redaction_start = 0
    curent_pii_type = ''

    for i, (start, end) in enumerate(offset_mapping):
        if start == end:
            continue
        label = predictions[0][i].item()
        if label != model.config.label2id['O']:
            pii_type = model.config.id2label[label]
            if not is_redacting:
                is_redacting = True
                redaction_start = start
                current_pii_type = pii_type
            elif not aggregate_redaction and pii_type != current_pii_type:
                apply_redaction(masked_text, redaction_start, start, current_pii_type, aggregate_redaction)
                redaction_start = start
                current_pii_type = pii_type
        else:
            if is_redacting:
                apply_redaction(masked_text, redaction_start, end, current_pii_type, aggregate_redaction)
                is_redacting = False

    # daca pii e la sfarsit
    if is_redacting:
        apply_redaction(masked_text, redaction_start, len(masked_text), current_pii_type, aggregate_redaction)

    return ''.join(masked_text)

def apply_redaction(masked_text, start, end, pii_type, aggregate_redaction):
    for j in range(start, end):
        masked_text[j] = ''
    if aggregate_redaction:
        masked_text[start] = ' *********'
    else:
        masked_text[start] = f' [{pii_type}]'


example = "Ma numesc Ionel si locuiesc in Timisoara si numarul meu de telefon este +400456654456"

print("Textul procesat este")
masked_example = mask_pii(example, aggregate_redaction = True)
print(masked_example)

4.1. Analizare propoziții

Vom începe testarea cu câteva propoziții simple:

Ma numesc Ionel si locuiesc in Timisoara si numarul meu de telefon este +400456654456

Răspunsul modelului este:

Textul procesat  este
Ma numesc ******** locuiesc in ******** numarul meu de telefon este ********

Următoarele propoziții sunt citate din Cireșarii, de Constantin Chiriță:

Mare lucru era însă când ţinea moş Timofte la cineva

Iar textul procesat devine:

Mare lucru era însă când ţinea moş ******** la cineva

A doua propoziție din Cireșarii este:

Mama lui Ionel strîmbă puţintel din nas auzind cuvîntul vulgar folosit de madam Ursu. 

iar răspunsul programului este:

Mama lui ******** strîmbă puţintel din nas auzind cuvîntul vulgar folosit de madam ********

4.2. Analiză declarație

Pentru acest test am ales un exemplu fictiv de declarație completată:

Subsemnatul Maricel Popescu, CNP 173030520023, domiciliat în Timișoara, Strada Eusebiu Cantaragiu, nr. 14, cu telefon +40723045567, adresă de e-mail maricel@yahoo.com, născut la data de 03.05.1973 în Alba Iulia vă semnalez că....

Textul conține nume, prenume, CNP, adresă completă, email, număr de telefon, dar asta nu este o problemă deosebită pentru Piiranha-v1 care îl prelucrează astfel:

Subsemnatul ******** CNP ******** domiciliat în ******** ******** nr. ******** telefon ******** adresă de e-mail ******** născut la data de ******** ********vă semnalez că....

5. Concluzii

Piiranha-v1 este un model LLM de precizie ridicată care a reușit să identifice corect toate datele cu caracter personal din testele efectuate de noi.

Modelul poate fi adaptat pentru seturile de date necesare oricărei companii și poate fi integrat foarte ușor în aplicații care pot scana documentele interne ale acestora.

În plus clasificarea datelor personale se face on-premise, direct în rețeaua informatică a organizațiilor, fără ca datele să părăsească mediul controlat de acestea, păstrând un nivel ridicat de protecție a informațiilor sensibile.

Inteligența artificială poate automatiza toate procesele de clasificare și identificare a datelor digitale din interiorul companiilor și poate da o serioasă mână de ajutor la adaptarea organizațiilor în fața cerințelor legale din ce în ce mai stufoase, la costuri reduse și consum mimim de resurse.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *