Esse repositório ajusta um sistema de detecção de última geração do PII e melhora o desempenho com a geração de dados sintéticos do PII.
Introdução • Destaques • Dados sintéticos de PII • Sistemas de detecção de entidades PII • Problemas •
Informações identificáveis pessoais (PII) são dados sensíveis usados para identificar, localizar ou entrar em contato com um indivíduo. Os sistemas de detecção de entidades PII podem identificar, categorizar e redigir informações confidenciais em texto não estruturado. Melhorar os sistemas de detecção de PII ajuda a manter a privacidade e a segurança dos indivíduos, a cumprir com os requisitos legais e regulatórios e impedir o roubo de identidade, fraude ou outros tipos de danos. A Figura 1 fornece um exemplo de entidades PII usando formato interno, externo e inicial (IOB).

Figura 1: Exemplo de dados PII no formato IOB [fonte].
O trabalho neste repositório foi derivado durante a competição Kaggle, o laboratório da agência de aprendizagem - PII Detecção de dados. O uso das técnicas neste repositório fornecerá soluções entre 1% superior para a concorrência.
PII PlaceHolders em vez de colocar diretamente os dados do PII em um prompt.class_weights no Hugging Face Trainer e com uma perda focal ou perda de entropia cruzada. O formato IOB, também comumente chamado de formato biológico, é um formato comum de marcação para marcar tokens em uma tarefa de Chunking, como aplicativos de reconhecimento de entidade nomeados (NER). Criar conjuntos de dados biológicos rotulados pode ser intensiva em tempo e mão -de -obra para conjuntos de dados específicos de domínio. Uma abordagem alternativa é gerar sinteticamente conjuntos de dados PII que representam de perto seu aplicativo da vida real. Consulte o diretório gen-data para criar código para criar dados PII específicos de domínio. Os arquivos abaixo seriam executados sequencialmente porque cada um representam uma tarefa diferente na criação de dados sintéticos do PII.
Os dados sintéticos do PII foram criados usando Faker e funções personalizadas para criar informações de PII. Esses dados foram colocados no texto não estruturado gerado por LLM, criado na próxima etapa.
LLMs generativos (por exemplo, LLAMA3) foram usados para gerar texto não estruturado que se assemelha ao texto específico do domínio. Neste repositório, os dados imitam ensaios de alunos em um curso on -line. Consulte os vários prompts para obter exemplos de promoção usados neste trabalho.
Aviso : Um insight útil aprendido durante este trabalho foi solicitar ao LLM a criar placeholders para os dados do PII. Os dados da etapa 1 serão injetados nos espaços reservados. A abordagem de espaço reservado para PII forneceu os seguintes benefícios anedóticos:
São dados dois exemplos de estratégias de solicitação, que demonstram as diferenças entre solicitar diretamente com o PII (Exemplo 1) e depois com os espaços reservados (Exemplo 2).
Exemplo 1: LLM solicitando com injeção direta de dados do 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].Essa técnica de impulsionamento introduziu rotineiramente alguns erros dos LLMs que eram difíceis de reconhecer e levarem programáticos à marcação de PII no formato biológico. O Exemplo 1 pede ao modelo que insira diretamente os dados do PII no texto e observe os poucos erros:
[email protected] .Exemplo 2: LLM solicitando os espaços reservados 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}.Com o Exemplo 2, o LLM não teve a oportunidade de transpor nenhum erro no Phone_num ou com o Full_Name. Além disso, parecia que o LLM incorporaria com menos frequência entidades PII extras.
As duas etapas acima dissociaram os dados do PII e a geração de texto específica do domínio. Na etapa #3, os dados da Etapa 1 PII são inseridos no domínio LLM do Etapa 2 do LLM, um texto gerado específico. Isso é útil porque você pode experimentar facilmente diferentes combinações de dados PII e dados de geração de texto específicos de domínio.
O modelo LLM de melhor desempenho para a detecção de entidades PII foi o Bert decodificador da Microsoft com o modelo de atenção v3 de atenção. Esse modelo tem um bom desempenho para tarefas de modelos de codificadores, como reconhecimento de entidade nomeado (NER), perguntas e respostas e classificação.
Um bom ponto de partida para treinar um modelo Deberta-V3 é com o módulo de ajuste fino de Deberta-V3 da linha de base. Neste módulo, foi criado um treinador de rosto de abraço personalizado para treinar com perda focal ou perda de CE para explicar o desequilíbrio da classe.
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 lossMais truques e dicas para ajudar os sistemas de detecção de PII de ajuste fino que estão contidos no diretório de treinamento são:
unlabeled datasets para expor um modelo a padrões de linguagem e terminologia específicos de domínio. Ajuste fino de um modelo que foi submetido a pré-treinamento adicional em uma tarefa ou domínio específico, começando com um ponto de verificação inicial adaptado para a distribuição de tarefas e dados em questão, geralmente produz melhor desempenho em comparação com modelos de ajuste fino que começam a partir de um ponto de verificação inicial genérico [fontes: 1, 2].NOTA : Este fluxo de trabalho apresentado aqui pode ser adaptado para muitos aplicativos de aprendizado profundo, não apenas LLMs.
Este repositório é que fará o possível para ser mantido. Se você enfrentar algum problema ou deseja fazer melhorias, aumente um problema ou envie uma solicitação de tração. ?