Ce référentiel affiche un système de détection de pointe de pointe et améliore les performances avec la génération de données PII synthétique.
INTRODUCTION • FAIMENTS • Données PII synthétiques • Systèmes de détection d'entités PII • Problèmes •
Les informations personnelles identifiables (PII) sont des données sensibles utilisées pour identifier, localiser ou contacter une personne. Les systèmes de détection des entités PII peuvent identifier, catégoriser et rédactiver les informations sensibles dans le texte non structuré. L'amélioration des systèmes de détection PII aide à maintenir la confidentialité et la sécurité des individus, respecter les exigences juridiques et réglementaires et prévenir le vol d'identité, la fraude ou d'autres types de préjudice. La figure 1 fournit un exemple d'entités PII utilisant le format à l'intérieur, à l'extérieur, au début (IOB).

Figure 1: Exemple de données PII au format IOB [Source].
Les travaux de ce référentiel ont été dérivés lors de la compétition de Kaggle Le Laborat d'agence d'apprentissage - PII Data Detection. L'utilisation des techniques de ce référentiel fournira des solutions dans les 1% supérieurs à la concurrence.
PII PlaceHolders au lieu de mettre directement des données PII dans une invite.class_weights dans l'entraîneur de face étreint et avec une perte focale ou une perte d'entropie croisée. Le format IOB, également communément appelé le format BIO, est un format de marquage commun pour le token de marquage dans une tâche de section telle que les applications de reconnaissance d'entités nommées (NER). La création d'ensembles de données BIO étiquetés peut être en temps et en main-d'œuvre pour les ensembles de données spécifiques au domaine. Une approche alternative consiste à générer synthétiquement des ensembles de données PII qui représentent étroitement votre application réelle. Reportez-vous au répertoire gen-data pour le code afin de créer des données PII spécifiques au domaine. Les fichiers ci-dessous seraient exécutés séquentiellement parce qu'ils représentent chacun une tâche différente dans la création de données PII synthétiques.
Les données synthétiques PII ont été créées à l'aide de FAKER et de fonctions personnalisées pour créer des informations PII. Ces données ont été placées dans du texte non structuré généré par LLM qui a été créé à l'étape suivante.
Les LLM génératives (par exemple, LLAMA3) ont été utilisées pour générer du texte non structuré qui ressemble au texte spécifique au domaine. Dans ce référentiel, les données imitent les essais des étudiants dans un cours en ligne. Reportez-vous aux diverses invites pour inviter des exemples utilisés dans ce travail.
AVIS : Un aperçu utile appris au cours de ces travaux a été d'inciter le LLM à créer placeholders pour les données PII. Les données de l'étape n ° 1 seront injectées dans les espaces réservés. L'approche de l'espace réservé PII a fourni les avantages anecdotiques suivants:
Deux exemples d'incitation aux stratégies sont donnés qui démontrent les différences entre l'incitation avec les PII directement (exemple 1) puis avec les espaces réservés (exemple 2).
Exemple 1: invitation LLM avec injection directe de données PII
Model Prompt:
Write an sentence introducing yourself and include only your personal information provided below:
- FULL_NAME: John Doe
- PHONE_NUM: 555-123-4567
Model Response:
My name is John Doe and you can reach me at 555-125-4567 or by email at [email protected].Cette technique d'incitation a systématiquement introduit quelques erreurs des LLM qui étaient difficiles à reconnaître par programme et à conduire à un détournement de PII au format bio. L'exemple 1 demande au modèle d'insérer directement les données PII dans le texte et de remarquer les quelques erreurs:
[email protected] .Exemple 2: invitation LLM avec les espaces réservés PII
Model Prompt:
Write an sentence introducing yourself and include only your personal information using the placeholders provided below:
- {FULL_NAME}: First and Last Name
- {PHONE_NUM}: Personal phone number
Model Response:
My name is {FULL_NAME} and you can reach me at {PHONE_NUM}.Avec l'exemple 2, le LLM n'a pas eu la possibilité de transposer des erreurs dans le téléphone_num ou avec le Full_name. De plus, il semblait que le LLM incorporerait moins fréquemment des entités PII supplémentaires.
Les deux étapes ci-dessus ont découplé les données PII et la génération de texte spécifique au domaine. À l'étape # 3, les données PII n ° 1 sont insérées dans le texte généré spécifique du domaine LLM de l'étape # 2. Ceci est utile car vous pouvez facilement expérimenter différentes combinaisons de données PII et de données de génération de texte spécifiques au domaine.
Le modèle LLM le plus performant pour la détection d'entités PII était le modèle Bert amélioré par le décodage de Microsoft avec un modèle V3 d'attention démêlé. Ce modèle fonctionne toujours bien pour les tâches du modèle d'encodeur telles que la reconnaissance des entités nommées (NER), la question et la réponse et la classification.
Un bon point de départ pour la formation d'un modèle Deberta-V3 est avec le module de réglage fin de la ligne de base Deberta-V3. Dans ce module, un entraîneur de face étreint personnalisé a été créé pour s'entraîner avec une perte focale ou une perte de CE pour tenir compte du déséquilibre des classes.
class CustomTrainer ( Trainer ):
def __init__ (
self ,
focal_loss_info : SimpleNamespace ,
* args ,
class_weights = None ,
** kwargs ):
super (). __init__ ( * args , ** kwargs )
# Assuming class_weights is a Tensor of weights for each class
self . class_weights = class_weights
self . focal_loss_info = focal_loss_info
def compute_loss ( self , model , inputs , return_outputs = False ):
# Extract labels
labels = inputs . pop ( "labels" )
# Forward pass
outputs = model ( ** inputs )
logits = outputs . logits
# Loss calculation
if self . focal_loss_info . apply :
loss_fct = FocalLoss ( alpha = 5 , gamma = 2 , reduction = 'mean' )
loss = loss_fct ( logits . view ( - 1 , self . model . config . num_labels ),
labels . view ( - 1 ))
else :
loss_fct = CrossEntropyLoss ( weight = self . class_weights )
if self . label_smoother is not None and "labels" in inputs :
loss = self . label_smoother ( outputs , inputs )
else :
loss = loss_fct ( logits . view ( - 1 , self . model . config . num_labels ),
labels . view ( - 1 ))
return ( loss , outputs ) if return_outputs else lossD'autres astuces et conseils pour aider à affiner les systèmes de détection PII contenus dans le répertoire de formation sont:
unlabeled datasets pour exposer un modèle à des modèles de langage spécifiques au domaine et à la terminologie. Affinement un modèle qui a subi une pré-formation supplémentaire sur une tâche ou un domaine spécifique, en commençant par un point de contrôle initial adapté à la tâche et à la distribution des données à portée de main, offre généralement de meilleures performances par rapport aux modèles de réglage fin qui commencent à partir d'un point de contrôle initial générique [sources: 1, 2].Remarque : Ce flux de travail présenté ici peut être adapté pour de nombreuses applications d'apprentissage en profondeur de face étreintes, pas seulement des LLM.
Ce référentiel fera de son mieux pour être maintenu. Si vous rencontrez un problème ou si vous souhaitez apporter des améliorations, veuillez soulever un problème ou soumettre une demande de traction. ?