Este repositorio ajusta un sistema de detección de PII de última generación y mejora el rendimiento con la generación de datos de PII sintética.
INTRODUCCIÓN • Destacos • Datos sintéticos de PII • Sistemas de detección de entidades PII • Problemas •
La información de identificación personal (PII) son datos confidenciales utilizados para identificar, localizar o contactar a un individuo. Los sistemas de detección de entidades PII pueden identificar, clasificar y redactar información confidencial en texto no estructurado. Mejorar los sistemas de detección de PII ayudan a mantener la privacidad y la seguridad de las personas, cumplir con los requisitos legales y reglamentarios, y prevenir el robo de identidad, el fraude u otros tipos de daños. La Figura 1 proporciona un ejemplo de entidades PII que usan formato interno, exterior, comienzo (IOB).

Figura 1: Ejemplo de datos PII en formato IOB [fuente].
El trabajo en este repositorio se derivó durante la competencia de Kaggle, el laboratorio de la agencia de aprendizaje - Detección de datos PII. El uso de las técnicas en este repositorio proporcionará soluciones en el 1% superior para la competencia.
PII PlaceHolders en lugar de poner directamente los datos de PII en un aviso.class_weights en el entrenador de la cara abrazada y con una pérdida focal o una pérdida de entropía cruzada. El formato IOB, también comúnmente conocido como el formato biografía, es un formato de etiquetado común para etiquetar tokens en una tarea de fragmentación, como aplicaciones de reconocimiento de entidad (NER) nombrados. La creación de conjuntos de datos biografía etiquetados puede ser el tiempo y el trabajo intensivo para conjuntos de datos específicos del dominio. Un enfoque alternativo es generar sintéticamente conjuntos de datos PII que representan estrechamente su aplicación de la vida real. Consulte el directorio gen-data para el código para crear datos de PII específicos de dominio. Los siguientes archivos se ejecutarían secuencialmente porque representan una tarea diferente en la creación de datos de PII sintética.
Los datos sintéticos de PII se crearon utilizando funciones Faker y personalizadas para crear información PII. Estos datos se colocaron en el texto no estructurado generado por LLM que se creó en el siguiente paso.
Los LLM generativos (p. Ej., LLAMA3) se usaron para generar texto no estructurado que se asemeja al texto específico del dominio. En este repositorio, los datos imitan los ensayos de los estudiantes en un curso en línea. Consulte las diversas indicaciones para solicitar ejemplos utilizados en este trabajo.
Aviso : una visión útil aprendida durante este trabajo fue incitar a la LLM a crear placeholders para los datos de PII. Los datos del paso #1 se inyectarán en los marcadores de posición. El enfoque de marcador de posición PII proporcionó los siguientes beneficios anecdóticos:
Se dan dos ejemplos de estrategias de indicación que demuestran las diferencias entre la provisión con PII directamente (Ejemplo 1) y luego con los marcadores de posición (ejemplo 2).
Ejemplo 1: solicitante de LLM con inyección directa de datos de 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].Esta técnica de impulso introdujo rutinariamente algunos errores de los LLM que fueron difíciles de reconocer programáticamente y conducir a un mal marcado de PII en el formato biografía. El ejemplo 1 le pide al modelo que inserte directamente los datos de PII en el texto y observe los pocos errores:
[email protected] .Ejemplo 2: solicitante de LLM con marcadores de posición 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}.Con el ejemplo 2, el LLM no tuvo la oportunidad de transponer ningún error en el phine_num o con el nombre full_name. Además, parecía que el LLM incorporaba con menos frecuencia entidades PII adicionales.
Los dos pasos anteriores desacoplaron datos de PII y generación de texto específica del dominio. En el paso #3, los datos de PII del paso 1 se insertan en el texto generado por el dominio LLM del paso 2 del paso 2. Esto es útil porque puede experimentar fácilmente con diferentes combinaciones de datos de PII y datos de generación de texto específicos del dominio.
El modelo LLM de mejor rendimiento para la detección de entidades PII fue el Bert mejorado de Microsoft mejorado con el modelo V3 de atención sin rendimiento. Este modelo funciona constantemente para las tareas del modelo de codificador, como el reconocimiento de entidad nombrado (NER), la pregunta y la respuesta, y la clasificación.
Un buen punto de partida para capacitar a un modelo Deberta-V3 es con el módulo de ajuste de basal de DebtA-V3. En este módulo, se creó un entrenador de cara de abrazadera personalizada para entrenar con pérdida focal o pérdida de CE para tener en cuenta el desequilibrio de clases.
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 lossOtros trucos y consejos para ayudar a ajustar los sistemas de detección de PII que están contenidos en el directorio de capacitación son:
unlabeled datasets para exponer un modelo a patrones de lenguaje específicos de dominio y terminología. Autorando un modelo que se sometió a un pretraben adicional en una tarea o dominio específico, comenzando con un punto de control inicial adaptado para la tarea y la distribución de datos a mano, generalmente produce un mejor rendimiento en comparación con los modelos de ajuste fino que comienzan desde un punto de control inicial genérico [fuentes: 1, 2].Nota : Este flujo de trabajo presentado aquí se puede adaptar para muchas aplicaciones de aprendizaje profundo que abrazan, no solo LLM.
Este repositorio hará todo lo posible para mantenerse. Si enfrenta algún problema o desea realizar mejoras, plantee un problema o envíe una solicitud de extracción. ?