Masquer les informations personnelles identifiables (PII)¶
Les PII comprennent les noms, les adresses, les numéros de téléphone, les adresses e-mail, les numéros d’identification fiscale et les autres données qui peuvent être utilisés (seuls ou avec d’autres informations) pour identifier un individu. La plupart des organisations ont des exigences réglementaires et de conformité en matière de traitement des données de type PII. AI_REDACT est une fonction d’AI de Cortex entièrement gérée qui vous aide à masquer les PII des données textuelles non structurées, en utilisant un grand modèle de langage (LLM) hébergé par Snowflake pour identifier les PII et les remplacer par des valeurs d’espace réservé.
AI_REDACT peut vous aider à préparer du texte pour la formation des centres d’appels, l’analyse des sentiments, l’analyse médicale et des assurances et l’entraînement de modèles de ML, entre autres cas d’utilisation.
Astuce
Utilisez AI_PARSE_DOCUMENT ou AI_TRANSCRIBE pour convertir un document ou des données de langage en texte avant d’appliquer AI_REDACT.
AI_REDACT¶
La fonction AI_REDACT remplace les informations personnelles identifiables (PII) dans le texte d’entrée par des valeurs d’espace réservé.
Important
AI_REDACT procède au masquage de manière optimale en utilisant des modèles d’AI. Examinez toujours la sortie pour vous assurer de la conformité avec les politiques de confidentialité des données de votre organisation. Veuillez informer Snowflake si AI_REDACT ne parvient pas à masquer des PII dans vos données.
Disponibilité régionale¶
Voir Disponibilité régionale.
Limitations¶
Le masquage est effectué à l’aide de modèles d’AI et peut ne pas trouver toutes les informations personnelles identifiables. Examinez toujours la sortie pour vous assurer de la conformité avec les politiques de confidentialité des données de votre organisation. Veuillez contacter le support Snowflake si AI_REDACT ne parvient pas à masquer certaines PII.
Les fonctions COUNT_TOKENS et AI_COUNT_TOKENS ne prennent pas encore en charge AI_REDACT.
Pour l’instant, AI_REDACT fonctionne mieux avec des textes en anglais bien formés. Les performances peuvent varier avec d’autres langues ou du texte présentant de nombreuses fautes d’orthographe, de ponctuation ou de grammaire.
Actuellement, AI_REDACT masque uniquement les PII US et certaines PII UK et canadiennes, comme indiqué dans Catégories de PII détectées.
AI_REDACT est actuellement limité dans le nombre de jetons qu’il peut entrer et sortir. L’entrée et la sortie peuvent contenir jusqu’à 4 096 jetons. La sortie est limitée à 1 024 jetons. Si le texte d’entrée est plus long, divisez-le en morceaux plus petits et masquez chaque morceau séparément, par exemple en utilisant SPLIT_TEXT_RECURSIVE_CHARACTER. Consultez Exemple de découpage en morceaux pour voir un exemple de masquage de texte qui dépasse les limites de jetons.
Note
Un jeton est la plus petite unité de données traitée par le modèle d’AI. Pour les textes en anglais, les directives de l’industrie considèrent qu’un jeton équivaut à environ quatre caractères ou 0,75 mot.
Catégories de PII détectées¶
AI_REDACT prend en charge le masquage des catégories de PII suivantes. Les valeurs dans la colonne Catégorie sont les chaînes prises en charge dans l’argument categories facultatif.
Catégorie
Remarques
NAME
Reconnaît le nom complet, le premier prénom, le deuxième prénom et le nom de famille.
PHONE_NUMBER
DATE_OF_BIRTH
GENDER
Reconnaît les genres masculin, féminin et non-binaire.
AGE
ADDRESS
Identifie :
l’adresse postale complète (US, UK, CA)
le numéro et le nom de rue (US, UK, CA)
le code postal (US, UK, CA)
la ville (US, UK, CA)
l’état (US) ou la province (CA)
le comté, la municipalité ou le canton (US)
NATIONAL_ID
Identifie les numéros de sécurité sociale (US).
PASSPORT
Identifie les numéros de passeport (US, UK et CA).
TAX_IDENTIFIER
Identifie les numéros d’identification fiscale (ITNs).
PAYMENT_CARD_DATA
Identifie les informations complètes de carte bancaire, le numéro de carte, la date d’expiration et le CVV.
DRIVERS_LICENSE
US, UK et CA pris en charge
IP_ADDRESS
Note
AI_REDACT prend en charge les correspondances partielles pour certaines catégories de PII. Par exemple, un prénom seul suffit pour déclencher un masquage avec l’[espace réservé] NAME.
Traitement des erreurs¶
En règle générale, AI_REDACT signale une erreur s’il ne peut pas traiter le texte d’entrée. Lorsqu’une requête masque plusieurs lignes, une erreur entraîne l’échec de la requête entière. Pour permettre au traitement de se poursuivre avec d’autres lignes, vous pouvez définir le paramètre de session AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR sur FALSE. Les erreurs renvoient alors NULL au lieu de mettre fin à la requête.
ALTER SESSION SET AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR=FALSE;
Avec ce paramètre défini sur FALSE, vous pouvez également transmettre TRUE comme dernier argument de AI_REDACT, ce qui fait que la valeur renvoyée est un OBJECT qui contient des champs distincts pour le texte masqué et tout message d’erreur. L’un de ces champs est NULL selon que l’appel AI_REDACT s’est déroulé correctement.
Considérations relatives aux clients¶
AI_REDACT engendre des coûts en fonction du nombre de jetons d’entrée et de sortie traités, comme avec les autres fonctions d’AI de Cortex. Consultez le Guide des tarifs Snowflake pour plus de détails.
Exemples¶
Exemples de base¶
L’exemple suivant masque un nom et une adresse dans le texte d’entrée.
SELECT AI_REDACT(
input => 'My name is John Smith and I live at twenty third street, San Francisco.'
);
Sortie :
My name is [NAME] and I live at [ADDRESS]
L’exemple suivant masque uniquement les noms et les adresses e-mail dans le texte d’entrée. Notez que le texte ne contient qu’un prénom, qui est reconnu et masqué en tant que [NAME]. Le texte d’entrée ne contient pas d’adresse e-mail, de sorte qu’aucun espace réservé d’e-mail n’apparaît dans la sortie.
SELECT AI_REDACT(
input => 'My name is John and I live at twenty third street, San Francisco.',
categories => ['NAME', 'EMAIL']
);
Sortie :
My name is [NAME] and I live at twenty third street, San Francisco.
Exemple de bout en bout¶
L’exemple suivant traite les lignes d’une table et insère la sortie masquée dans une autre table. Vous pouvez utiliser une approche similaire pour stocker les données masquées dans une colonne à l’intérieur d’une table existante.
Une fois masqué, le texte est transmis à AI_SENTIMENT pour extraire des informations globales sur les sentiments.
-- Create a table with unredacted text
CREATE OR REPLACE TABLE raw_table AS
SELECT 'My previous manager, Washington, used to live in Kirkland. His first name was Mike.' AS my_column
UNION ALL
SELECT 'My name is William and I live in San Francisco. You can reach me at (415).450.0973';
-- view unredacted data
SELECT * FROM raw_table;
-- Create a redaction table
CREATE OR REPLACE TABLE redaction_table (
value VARCHAR
);
-- Redact PII from raw_table and insert into redaction_table
INSERT INTO redaction_table
SELECT AI_REDACT(my_column) AS value FROM raw_table;
-- view redacted results
SELECT * FROM redaction_table;
-- Run AI_SENTIMENT on redacted text
SELECT
value AS redacted_text,
AI_SENTIMENT(value) AS summary_sentiment
FROM redaction_table;
Exemple de traitement des erreurs¶
Cet exemple, basé sur l’exemple précédent, montre comment gérer les erreurs lors du traitement de plusieurs lignes avec AI_REDACT. Il définit le paramètre de session AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR et transmet TRUE comme dernier argument de AI_REDACT. La fonction renvoie alors un OBJECT avec des champs distincts pour le texte masqué et tout message d’erreur, dont l’un est NULL selon que la fonction a réussi ou a échoué.
ALTER SESSION SET AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR=FALSE;
-- Create a redaction table with columns for value and error message
CREATE OR REPLACE TABLE redaction_table (
value VARCHAR,
error VARCHAR
);
-- Redact PII from raw_table and insert into redaction_table
-- Both the redacted text and any error message are stored
INSERT INTO redaction_table
SELECT
result:value::STRING AS value,
result:error::STRING AS error
FROM (SELECT AI_REDACT(my_column, TRUE) AS result FROM raw_table);
Exemple de découpage en morceaux¶
Cet exemple illustre comment masquer des PII à partir d’un texte long en divisant le texte en morceaux plus petits, en masquant chaque morceau séparément, puis en recombinant les morceaux masqués dans la sortie finale. Cette approche permet de contourner les limites de jetons d’AI_REDACT.
CREATE OR REPLACE TABLE patients (
patient_id INT PRIMARY KEY,
patient_notes text
);
CREATE OR REPLACE TABLE final_temp_table AS
WITH chunked_data AS (
-- Step 1: Split text into chunks
SELECT
patient_id,
chunk.value AS chunk_text,
chunk.index AS chunk_index
FROM
patients,
LATERAL FLATTEN(
input => SNOWFLAKE.CORTEX.SPLIT_TEXT_RECURSIVE_CHARACTER(
patient_notes,
'none',
1000
)
) AS chunk
WHERE
patient_notes IS NOT NULL
AND LENGTH(patient_notes) > 0
),
redacted_chunks AS (
-- Step 2: Apply AI_REDACT to each chunk
SELECT
patient_id,
chunk_index,
chunk_text,
TO_VARIANT(results:value) AS redacted_chunk,
TO_VARIANT(results:error) AS error_string
from (
SELECT
patient_id,
chunk_index,
chunk_text,
AI_REDACT(chunk_text,TRUE) AS results
FROM
chunked_data
)
),
-- Step 3: Concatenate redacted chunks
final AS (
SELECT
chunk_text as original,
IFF(error_string IS NOT NULL, chunk_text, redacted_chunk) AS redacted_text,
patient_id,
chunk_index
FROM
redacted_chunks
)
SELECT * FROM final;
SELECT
patient_id,
LISTAGG(redacted_text, '') WITHIN GROUP (ORDER BY chunk_index) AS full_output
FROM final_temp_table
GROUP BY patient_id;
Avis juridiques¶
La classification des données d’entrées et de sorties est présentée dans la table suivante.
Classification des données d’entrée |
Classification des données de sortie |
Désignation |
|---|---|---|
Usage Data |
Customer Data |
Les fonctions généralement disponibles sont des fonctions AI couvertes. Les fonctions d’aperçu sont les fonctions AI d’aperçu. [1] |
Pour plus d’informations, reportez-vous à Snowflake AI et ML.