Artificial Intelligence (AI)

PII Detection and Masking in RAG Pipelines

Written by smirow

Introduction

Dans le monde actuel axé sur les données, la protection des informations personnelles identifiables (PII) est primordiale. Les informations personnelles englobent des données telles que les noms, adresses, numéros de téléphone et dossiers financiers, essentielles à l'identification individuelle. Avec l’essor de l’intelligence artificielle et de ses vastes capacités de traitement des données, il est crucial de protéger les informations personnelles tout en exploitant leur potentiel d’expériences personnalisées. La génération augmentée de récupération (RAG) apparaît comme une solution, mêlant la récupération d'informations à des modèles avancés de génération de langage. Ces systèmes passent au crible de vastes référentiels de données pour extraire des informations pertinentes, affinant les résultats générés par l'IA pour plus de précision et de contexte.

Pourtant, l’utilisation des données utilisateur présente des risques d’exposition involontaire de données personnelles. Les technologies de détection PII atténuent ce risque, en identifiant et en masquant automatiquement les données sensibles. Avec des mesures de confidentialité strictes, les modèles RAG exploitent les données des utilisateurs pour offrir des services sur mesure tout en respectant les normes de confidentialité. Cette intégration souligne les efforts continus visant à équilibrer l'utilisation personnalisée des données avec la confidentialité des utilisateurs, en donnant la priorité à la confidentialité des données à mesure que la technologie de l'IA progresse.

Objectifs d'apprentissage

  • L'article explore le développement d'un puissant outil de détection de données personnelles avec Llama Index et Presidio, une bibliothèque d'anonymisation Microsoft.
  • Presidio détecte et anonymise rapidement les données personnelles sensibles, offrant aux utilisateurs des outils de détection PII personnalisables avec des techniques avancées telles que NER, expressions régulières et algorithmes de somme de contrôle.
  • Les utilisateurs peuvent personnaliser le processus d'anonymisation grâce au cadre flexible de Presidio, améliorant ainsi le contrôle.
  • Llama Index intègre de manière transparente les fonctionnalités de Presidio pour une solution accessible.
  • L'article compare Presidio aux outils de post-traitement NER PII, mettant en valeur la supériorité et les avantages pratiques de Presidio.
Détection et masquage des informations PII dans les pipelines RAG

Cet article a été publié dans le cadre du Blogathon sur la science des données.

Détection pratique des informations personnelles à l'aide des outils de post-traitement Llama Index

Commençons notre exploration avec l'outil NERPIINodePostprocessor de Llama Index. Pour cela, nous devrons installer quelques packages nécessaires.

La liste des packages nécessaires est répertoriée ci-dessous :

llama-index==0.10.22
llama-index-agent-openai==0.1.7
llama-index-cli==0.1.11
llama-index-core==0.10.23
llama-index-indices-managed-llama-cloud==0.1.4
llama-index-legacy==0.9.48
llama-index-multi-modal-llms-openai==0.1.4
llama-index-postprocessor-presidio==0.1.1
llama-parse==0.3.9
llamaindex-py-client==0.1.13
presidio-analyzer==2.2.353
presidio-anonymizer==2.2.353
pydantic==2.5.3
pydantic_core==2.14.6
spacy==3.7.4
torch==2.2.1+cpu
transformers==4.39.1

Pour tester l'outil, nous avons besoin de données factices pour la détection des informations personnelles. À des fins d’expérimentation, des textes manuscrits contenant des noms, des dates, des numéros de carte de crédit, des numéros de téléphone et des adresses e-mail fabriqués ont été utilisés. Alternativement, n’importe quel texte de votre choix peut être utilisé pour les tests, ou GPT peut être utilisé pour générer du texte. Les textes suivants seront utilisés pour notre expérimentation :

text = """
Hi there! You can call me Max Turner. Reach out at [email protected],
and you'll find me strolling the streets of Vienna. My plastic friend, the 
Mastercard, reads 5300-1234-5678-9000. Ever vibed at a gig by Zsofia Kovacs? 
I'm curious. As for my card, it has a limit I'd rather not disclose here; 
however, my bank details are as follows: AT611904300235473201. Turner is the 
family name. Tracing my roots, I've got ancestors named Leopold Turner and
Elisabeth Baumgartner. Also, a quick FYI: I tried to visit your website, but 
my IP (203.0.113.5) seems to be barred. I did, however, manage to post a 
visual at this link: http://MegaMovieMoments.fi.
"""

Étape 1 : initialisation de l'outil et importation des dépendances

Une fois les packages installés et l'exemple de texte préparé, nous procédons à l'utilisation de l'outil NERPIINodePostprocessor. L'importation de NERPIINodePostprocessor depuis Llama Index est nécessaire, ainsi que l'importation du schéma TextNode depuis Llama Index pour créer un nœud de texte. Cette étape est cruciale car NERPIINodePostprocessor fonctionne sur des objets TextNode plutôt que sur des chaînes brutes.

Vous trouverez ci-dessous l'extrait de code pour les importations :

from llama_index.core.postprocessor import NERPIINodePostprocessor
from llama_index.core.schema import TextNode
from llama_index.core.schema import NodeWithScore

Étape 2 : Création d'objets TextNode

Suite aux importations, nous procédons à la création d'un objet TextNode en utilisant notre exemple de texte.

text_node = TextNode(text=text)

Étape 3 : Post-traitement des entités sensibles

Par la suite, nous créons un objet NERPIINodePostprocessor et l'appliquons à notre objet TextNode pour post-traiter et masquer les entités sensibles.

processor = NERPIINodePostprocessor()

new_nodes = processor.postprocess_nodes(
    [NodeWithScore(node=text_node)]
)

Étape 4 : Vérification du texte post-traité et du mappage des entités PII

Après avoir terminé le post-traitement de notre texte, nous pouvons maintenant examiner le texte post-traité ainsi que le mappage d'entité PII.

pprint(new_nodes[0].node.get_content())

# OUTPUT
# 'Hi there! You can call me [PER_26]. Reach out at [email protected], '
# "and you'll find me strolling the streets of [LOC_122]. My plastic friend, "
# 'the [ORG_153], reads 5300-1234-5678-9000. Ever vibed at a gig by [PER_215]? '
# "I'm curious. As for my card, it has a limit I'd rather not disclose here; "
# 'however, my bank details are as follows: AT611904300235473201. [PER_367] is '
# "the family name. Tracing my roots, I've got ancestors named Leopold "
# '[PER_367] and [PER_456]. Also, a quick FYI: I tried to visit your website, '
# 'but my IP (203.0.113.5) seems to be barred. I did, however, manage to post a '
# 'visual at this link: [ORG_627].fi.')

pprint(new_nodes[0].node.metadata)

# OUTPUT
# {'__pii_node_info__': {'[LOC_122]': 'Vienna',
#                        '[ORG_153]': 'Mastercard',
#                        '[ORG_627]': 'MegaMovieMoments',
#                        '[PER_215]': 'Zsofia Kovacs',
#                        '[PER_26]': 'Max Turner',
#                        '[PER_367]': 'Turner',
#                        '[PER_437]': 'Leopold Turner',
#                        '[PER_456]': 'Elisabeth Baumgartner'}}

Évaluation des limites de NERPIINodePostprocessor et introduction à Presidio

Après examen des résultats, il est évident que le post-processeur ne parvient pas à masquer les entités hautement sensibles telles que les numéros de carte de crédit, les numéros de téléphone et les adresses e-mail. Ce résultat s'écarte de notre intention, car notre objectif était de masquer toutes les entités sensibles, notamment les noms, adresses, numéros de carte de crédit et adresses e-mail.

Bien que le NERPIINodePostprocessor masque efficacement les entités nommées telles que les noms de personnes et de sociétés, avec leur type et leur nombre d'entités respectifs, il s'avère inadéquat pour masquer des textes contenant un contenu très sensible. Maintenant que nous comprenons la fonctionnalité du NERPIINodePostprocessor et ses limites dans le masquage des informations sensibles, évaluons les performances de Presidio sur le même texte. Nous explorerons d’abord les fonctionnalités de Presidio, puis procéderons à l’utilisation de l’implémentation Presidio de Llama Index.

Évaluation des limites de NERPIINodePostprocessor et introduction à Presidio

Importation de packages essentiels pour l'intégration Presidio

Pour commencer, importez les packages requis. Cela inclut l'AnalyzerEngine et l'AnonymizerEngine de Presidio. De plus, importez le PresidioPIINodePostprocessor, qui sert d’intégration de Presidio à Llama Index.

from presidio_analyzer import AnalyzerEngine
from presidio_anonymizer import AnonymizerEngine
from llama_index.postprocessor.presidio import PresidioPIINodePostprocessor

Initialisation et analyse de texte avec le moteur d'analyse

Commencez par initialiser le moteur Analyzer à l’aide de la liste des langues prises en charge. Définissez-le sur une liste contenant « en » pour la langue anglaise. Cela permet à Presidio de déterminer la langue du contenu du texte. Ensuite, utilisez l’instance d’analyseur pour analyser le texte.

analyzer = AnalyzerEngine(supported_languages=["en"])

results = analyzer.analyze(text=text, language="en")

Vous trouverez ci-dessous le résultat après analyse du contenu du texte. Il affiche le type d'entité PII, son étoile et son index de fin dans la chaîne ainsi que le score de probabilité.

Initialisation du moteur d'anonymisation

Après avoir initialisé le moteur d'analyse, procédez à l'initialisation du moteur d'anonymiseur. Ce composant anonymisera le texte original en fonction des résultats obtenus à partir du moteur d'analyse.

engine = AnonymizerEngine()

new_text = engine.anonymize(text=text, analyzer_results=results)

Vous trouverez ci-dessous le résultat du moteur d'anonymisation, présentant le texte original avec des entités PII masquées.

pprint(new_text.text)

# OUTPUT
#  "Hi there! You can call me <PERSON>. Reach out at <EMAIL_ADDRESS>, and you'll "
#  'find me strolling the streets of <LOCATION>. My plastic friend, the '
#  "<IN_PAN>, reads <IN_PAN>5678-9000. Ever vibed at a gig by <PERSON>? I'm "
#  "curious. As for my card, it has a limit I'd rather not disclose here; "
#  'however, my bank details are as follows: AT611904300235473201. <PERSON> is '
#  "the family name. Tracing my roots, I've got ancestors named <PERSON> and "
#  '<PERSON>. Also, a quick FYI: I tried to visit your website, but my IP '
#  '(<IP_ADDRESS>) seems to be barred. I did, however, manage to post a visual '
#  'at this link: <URL>.'

Lisez également : QnA de documents et mise en cache sémantique basés sur RAG avec Gemini Pro

Analyse du masquage PII avec Presidio

Presidio masque efficacement toutes les entités PII en entourant leur type d'entité entre « < » et « > ». Cependant, le masquage manque d'identifiants uniques pour les éléments d'entité. Ici, l'intégration de Llama Index améliore le processus. L'implémentation Presidio de Llama Index renvoie non seulement le texte masqué avec le nombre de types d'entités, mais fournit également une carte de désanonymisation pour la désanonymisation. Explorons comment utiliser ces fonctionnalités.

Créez d’abord un objet TextNode en utilisant le texte saisi.
text_node = TextNode(text=text)
Ensuite, créez une instance de PresidioPIINodePostprocessor et exécutez le post-processeur sur TextNode.
processor = PresidioPIINodePostprocessor()

new_nodes = processor.postprocess_nodes(
    [NodeWithScore(node=text_node)]
)
Enfin, nous obtenons le texte masqué de l'anonymiseur ainsi que la carte du désanonymiseur.
pprint(new_nodes[0].node.get_content())

# OUTPUT
#  'Hi there! You can call me <PERSON_5>. Reach out at <EMAIL_ADDRESS_1>, and '
#  "you'll find me strolling the streets of <LOCATION_1>. My plastic friend, the "
#  '<IN_PAN_2>, reads <IN_PAN_1>5678-9000. Ever vibed at a gig by <PERSON_4>? '
#  "I'm curious. As for my card, it has a limit I'd rather not disclose here; "
#  'however, my bank details are as follows: AT611904300235473201. <PERSON_3> is '
#  "the family name. Tracing my roots, I've got ancestors named <PERSON_2> and "
#  '<PERSON_1>. Also, a quick FYI: I tried to visit your website, but my IP '
#  '(<IP_ADDRESS_1>) seems to be barred. I did, however, manage to post a visual '
#  'at this link: <URL_1>.'


pprint(new_nodes[0].metadata)

# OUTPUT
# {'__pii_node_info__': {'<EMAIL_ADDRESS_1>': '[email protected]',
#                        '<IN_PAN_1>': '5300-1234-',
#                        '<IN_PAN_2>': 'Mastercard',
#                        '<IP_ADDRESS_1>': '203.0.113.5',
#                        '<LOCATION_1>': 'Vienna',
#                        '<PERSON_1>': 'Elisabeth Baumgartner',
#                        '<PERSON_2>': 'Leopold Turner',
#                        '<PERSON_3>': 'Turner',
#                        '<PERSON_4>': 'Zsofia Kovacs',
#                        '<PERSON_5>': 'Max Turner',
#                        '<URL_1>': 'MegaMovieMoments.fi'}}

Le texte masqué généré par PresidioPIINodePostprocessor masque efficacement toutes les entités PII, indiquant leur type et leur nombre d'entités. De plus, il fournit une carte de désanonymisation, facilitant la désanonymisation ultérieure du texte masqué.

Applications et limites

En tirant parti de l'outil PresidioPIINodePostprocessor, nous pouvons anonymiser de manière transparente les informations au sein de notre pipeline RAG, en donnant la priorité à la confidentialité des données des utilisateurs. Au sein du pipeline RAG, il peut servir d’anonymiseur de données lors de l’ingestion de données, masquant ainsi efficacement les informations sensibles. De même, dans le pipeline de requêtes, il peut fonctionner comme un désanonymiseur, permettant aux utilisateurs authentifiés d'accéder à des informations sensibles tout en préservant la confidentialité. La carte du désanonymiseur peut être stockée en toute sécurité dans un emplacement protégé, garantissant ainsi la confidentialité des données sensibles tout au long du processus.

Applications et limites

L'outil d'anonymisation PII trouve son utilité dans les pipelines RAG traitant de documents financiers ou d'informations sensibles sur les utilisateurs/organisations, nécessitant une protection contre les accès non identifiés ou non autorisés. Il garantit un stockage sécurisé du contenu des documents anonymisés dans le magasin vectoriel, même en cas de violation de données. De plus, cela s'avère précieux dans les pipelines RAG impliquant des e-mails d'organisation ou personnels, où les données sensibles telles que les adresses, les URL de changement de mot de passe et les OTP sont répandues, nécessitant une ingestion dans un état anonymisé.

Limites

Bien que l'outil de détection PII puisse être utile dans les pipelines RAG, sa mise en œuvre dans un pipeline RAG présente certaines limites.

  • L'ajout de la détection et du masquage des informations personnelles peut introduire un temps de traitement supplémentaire dans le pipeline RAG, ce qui peut avoir un impact sur les performances globales et la latence du système, en particulier avec de grands ensembles de données ou lorsqu'un traitement en temps réel est requis.
  • Aucun outil de détection de données personnelles n'est parfait ; il peut y avoir des cas de faux positifs, où les données non personnelles sont masquées par erreur, ou de faux négatifs, où les données personnelles réelles ne sont pas détectées. Les deux scénarios peuvent avoir des implications sur l’expérience utilisateur et l’efficacité de la protection des données.
  • Presidio peut avoir des limites dans la compréhension du contexte et des nuances dans différentes langues, réduisant potentiellement son efficacité à identifier avec précision les informations personnelles dans des ensembles de données multilingues.
  • Bien que l’outil d’anonymisation des informations personnelles puisse masquer avec précision les informations sensibles, l’ingestion initiale des données nécessite toujours une manipulation minutieuse. Si une violation se produit avant que les données ne soient anonymisées, des informations sensibles pourraient être exposées.
  • Dans les cas où l’anonymisation doit être réversible, il est essentiel de maintenir un accès sécurisé et contrôlé aux clés ou aux cartes de désanonymisation, faute de quoi cela pourrait compromettre l’intégrité du processus d’anonymisation.

Conclusion

En conclusion, l'incorporation d'outils de détection et de masquage d'informations personnelles comme Presidio dans les pipelines RAG marque une avancée notable dans la capacité de l'IA à gérer les données sensibles tout en garantissant la confidentialité des individus. Grâce à l'utilisation de techniques avancées et de fonctionnalités personnalisables, Presidio améliore la sécurité et l'adaptabilité de la génération de texte, répondant ainsi au besoin croissant de confidentialité des données à l'ère numérique. Malgré les défis potentiels tels que la latence et la précision, les avantages de la protection des données des utilisateurs avec des outils d'anonymisation sophistiqués sont indéniables, les positionnant comme un élément crucial pour le développement et le déploiement responsables de l'IA.

Points clés à retenir

  • Avec l’utilisation croissante de l’IA et du Big Data, la nécessité de protéger les informations personnelles identifiables (PII) dans tout système traitant les données des utilisateurs est essentielle.
  • Les systèmes de récupération augmentée et de génération (RAG), qui combinent la récupération d'informations avec la génération de langage, peuvent potentiellement exposer des informations personnelles. Par conséquent, l’intégration de mécanismes de détection et de masquage des informations personnelles est essentielle pour maintenir les normes de confidentialité.
  • Presidio de Microsoft offre de solides capacités de détection et d'anonymisation des informations personnelles, ce qui en fait un choix approprié pour l'intégration dans les pipelines RAG. Il fournit des détecteurs PII prédéfinis et personnalisables, exploitant le NER, les expressions régulières et la somme de contrôle.
  • Presidio est préféré aux outils de post-traitement NER PII de base en raison de ses fonctionnalités d'anonymisation sophistiquées, de sa flexibilité et de sa plus grande précision dans la détection d'un large éventail d'entités PII.
  • L'outil d'anonymisation des informations personnelles est particulièrement utile dans les pipelines RAG traitant des documents financiers, des données organisationnelles sensibles et des e-mails, garantissant que les informations privées ne sont pas exposées à des utilisateurs non autorisés.

Les médias présentés dans cet article n'appartiennent pas à Analytics Vidhya et sont utilisés à la discrétion de l'auteur.

About the author

smirow

Leave a Comment