Persönlich identifizierbare Informationen (PII) erkennen und unkenntlich machen¶
Persönlich identifizierbare Informationen (Personally Identifiable Information, PII) umfassen Namen, Adressen, Telefonnummern, E-Mail-Adressen, Steueridentifikationsnummern und andere Daten, die (allein oder zusammen mit anderen Informationen) zur Identifizierung einer Person verwendet werden können. Die meisten Unternehmen haben gesetzliche und Compliance-Anforderungen an den Umgang mitPII-Daten. AI_REDACT ist eine vollständig verwaltete Cortex-AI-Funktion, die ein großes Sprachmodell verwendet (LLM ), um PII aus unstrukturierten Textdaten zu erkennen, zu finden und unkenntlich zu machen.
AI_REDACT kann Ihnen dabei helfen, Text für Call-Center-Trainings, Stimmungsanalysen, versicherungsbezogene und medizinische Analysen sowie Machine Learning (ML)-Modelltraining (neben anderen Anwendungsfällen) vorzubereiten.
Tipp
Verwenden Sie AI_PARSE_DOCUMENT oder AI_TRANSCRIBE, um Dokument- oder Sprechdaten vor der Anwendung von AI_REDACT in Text umzuwandeln.
AI_REDACT¶
Die AI_REDACT-Funktion hat zwei Vorgangsmodi: detect und redact. Der Standardwert ist redact. Verwenden Sie AI_REDACT im detect-Modus zur Identifizierung vonPII-Speicherorten und wählen dann programmgesteuert aus, welche PII unkenntlich gemacht werden können. Verwenden Sie AI_REDACT im``redact``-Modus, um PII im Eingabetext mit Platzhalterwerten zu ersetzen.
Wichtig
AI_REDACT führt die Erkennung und Ausblendung auf bestmögliche Weise mit AI-Modellen durch. Überprüfen Sie stets das Ergebnis (bzw. die Ausgabe), um sicherzustellen, dass die Datenschutzrichtlinien Ihrer Organisation eingehalten werden. Wenn AI_REDACT keine PII in Ihren Daten erkennen und oder ausblenden kann, wenden Sie sich an den Snowflake-Support.
Regionale Verfügbarkeit¶
Siehe Regionale Verfügbarkeit.
Einschränkungen¶
Die Maskierung erfolgt anhand von AI-Modellen. Möglicherweise werden nicht alle persönlich identifizierbaren Informationen gefunden. Überprüfen Sie stets die Ausgabe, um sicherzustellen, dass die Datenschutzrichtlinien Ihrer Organisation eingehalten werden. Wenden Sie sich an den Snowflake-Support, wenn AI_REDACT bestimmte PII nicht maskieren kann.
Die Funktionen COUNT_TOKENS und AI_COUNT_TOKENS unterstützen AI_REDACT noch nicht.
Zum jetzigen Zeitpunkt funktioniert AI_REDACT am besten mit wohlgeformtem englischen Text. Die Leistung kann bei anderen Sprachen oder bei Text mit vielen Rechtschreib-, Interpunktions- oder Grammatikfehlern variieren.
AI_REDACT unterstützt derzeit nur US-spezifische PII und einige PII in UK und Kanada, sofern dies in den Erkannte PII-Kategorien angegeben ist.
AI_REDACT ist derzeit bezüglich der Anzahl der Token beschränkt, die ein- und ausgegeben werden können. Die Ein- und Ausgabe können zusammen bis zu 4.096 Token umfassen. Die Ausgabe ist auf 1.024 Token begrenzt. Wenn der Eingabetext länger ist, teilen Sie ihn in kleinere Blöcke auf, und maskieren Sie jeden Block separat, z. B. mit SPLIT_TEXT_RECURSIVE_CHARACTER. Unter Chunking-Beispiel finden Sie ein Beispiel für das Ausblenden von Text, der die Token-Beschränkungen überschreitet.
Bemerkung
Ein Token ist die kleinste Dateneinheit, die vom AI-Modell verarbeitet wird. Bei englischen Texten gilt gemäß den Branchenrichtlinien ein Token als etwa vier Zeichen oder 0,75 Wörter.
Erkannte PII-Kategorien¶
AI_REDACT unterstützt die Erkennung und Ausblendung der folgenden Kategorien vonPII. Die Werte in der Spalte „Kategorie“ sind die Zeichenfolgen, die im optionalen categories-Argument unterstützt werden.
Kategorie
Anmerkungen
NAME
Erkennt den vollständigen Namen, den Vornamen, den zweiten Vornamen und den Nachnamen
PHONE_NUMBER
DATE_OF_BIRTH
GENDER
Erkennt männlich, weiblich und nicht-binär
AGE
ADDRESS
Erkennt:
vollständige Anschrift (US, UK, CA)
Straße und Hausnummer (US, UK, CA)
Postleitzahl (US, UK, CA)
Ort (US, UK, CA)
Bundesstaat (US) oder Provinz (CA)
County, Borough oder Township (US)
NATIONAL_ID
Identifiziert Sozialversicherungsnummern (US)
PASSPORT
Identifiziert Reisepassnummern (US, UK, CA)
TAX_IDENTIFIER
Identifiziert Individual Taxpayer Numbers (ITNs)
PAYMENT_CARD_DATA
Identifiziert vollständige Kartendaten, Kartennummer, Ablaufdatum und CVV
DRIVERS_LICENSE
Unterstützt US, UK, CA
IP_ADDRESS
Bemerkung
AI_REDACT unterstützt teilweise Übereinstimmungen für einige PII-Kategorien. So reicht beispielsweise ein Vorname allein aus, um eine Redaktion mit dem [NAME]-Platzhalter auszulösen.
Spezifische PII mit Erkennungsmodus beibehalten¶
Standardmäßig ersetzt AI_REDACT alle erkannten PII mit Platzhalterwerten. In manchen Fällen möchten Sie vielleicht bestimmte PII beibehalten und den Rest ausblenden. Sie könnten zum Beispiel alle Namen in Call-Center-Abschnitten oder Kundenbewertungen unkenntlich machen, mit Ausnahme der bekannten Namen der Mitarbeiter.
Verwenden Sie den detect-Modus zum Erstellen eines selektiven Ausblendungs-Workflows:
Rufen Sie AI_REDACT mit dem
mode-Argument aufdetectauf, um PII im Eingabetext zu identifizieren und suchen.Vergleichen Sie die erkannten Bereiche (Spans) mit einer Zulassungsliste von Werten, die Sie beibehalten möchten.
Blenden Sie nur die PII aus, die nicht in der Zulassungsliste enthalten ist.
Wenn Sie AI_REDACT im detect-Modus aufrufen, gibt die Funktion ein OBJECT zurück, das ein spans-Array enthält. Jedes Element in dem Array ist ein OBJECT mit den folgenden Feldern:
Feld |
Typ |
Beschreibung |
|---|---|---|
|
VARCHAR |
Die PII-Kategorie, z. B.``NAME`` oder``ADDRESS``. Unterstützte Kategorien siehe Erkannte PII-Kategorien. |
|
NUMBER |
Der Startindex der erkannten PII im Eingabetext. |
|
NUMBER |
Der Endindex der erkannten PII im Eingabetext. |
|
VARCHAR |
Der übereinstimmende PII-Text aus der Eingabe. |
Beispiele für die Verwendung des detect-Modus siehe Beispiele für Erkennung und selektive Ausblendung.
Fehler auf Zeilenebene in mehrzeiligen Abfragen behandeln¶
Wichtig
Wenn Ihre Abfrage für jede Zeile fehlschlägt, könnte die Ursache eine bekannte Einschränkung anstatt eines Fehlers auf Zeilenebene sein. Details zu Token-Beschränkungen, Sprachunterstützung und anderen Einschränkungen siehe:ref:label-ai_redact_pii_limitations.
Die AI_REDACT-Funktion gibt einen Fehler aus, wenn sie den Eingabetext nicht verarbeiten kann. Wenn eine Abfrage mehrere Zeilen ausblendet, führt ein Fehler dazu, dass die gesamte Abfrage fehlschlägt. Um die Verarbeitung mit anderen Zeilen fortzusetzen, können Sie den Sitzungsparameter AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR auf FALSE festlegen. Bei Fehlern wird dann NULL zurückgegeben, anstatt die Abfrage zu stoppen.
ALTER SESSION SET AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR=FALSE;
Wenn dieser Parameter auf FALSE festgelegt ist, können Sie auch TRUE als letztes Argument an AI_REDACT übergeben, wodurch der Rückgabewert ein OBJECT-Wert ist, der separate Felder für den redigierten Text und eine mögliche Fehlermeldung enthält. Eines dieser Felder ist NULL je nachdem, ob der AI_REDACT-Aufruf erfolgreich verarbeitet wurde.
Das folgende Beispiel zeigt, wie Sie die Fehlerbehandlung bei der Verarbeitung mehrerer Zeilen verwenden:
Eine Tabelle mit nicht ausgeblendetem Text erstellen.
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';
Legen Sie den Sitzungsparameter fest.
ALTER SESSION SET AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR=FALSE;
Eine Ausblendungstabelle mit Spalten für
valueunderrorerstellen.CREATE OR REPLACE TABLE redaction_table ( value VARCHAR, error VARCHAR );
PII in
raw_tableausblenden und die Zeilen inredaction_tableeinfügen, um den ausgeblendeten Text und die Fehlermeldungen zu speichern.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);
Hinweise zu Kosten¶
AI_REDACT verursacht Kosten, die sich nach der Anzahl der verarbeiteten Eingabe- und Ausgabe-Token richten, wie bei anderen Cortex AI-Funktionen. Weitere Informationen dazu finden Sie in der Snowflake-Preisliste.
Beispiele für die Ausblendung¶
Einfache Beispiele für die Ausblendung¶
Bei folgendem Beispiel werden ein Name und eine Adresse aus dem Eingabetext maskiert.
SELECT AI_REDACT(
input => 'My name is John Smith and I live at twenty third street, San Francisco.'
);
Ausgabe einfache Ausblendung:
My name is [NAME] and I live at [ADDRESS]
Im folgenden Beispiel werden nur Namen und E-Mail-Adressen aus dem Eingabetext unkenntlich gemacht. Beachten Sie, dass der Text nur einen Vornamen enthält, der als [NAME] erkannt und redigiert wird. Der Eingabetext enthält keine E-Mail-Adresse, daher wird in der Ausgabe kein E-Mail-Platzhalter angezeigt.
SELECT AI_REDACT(
input => 'My name is John and I live at twenty third street, San Francisco.',
categories => ['NAME', 'EMAIL']
);
Ausgabe selektive Ausblendung:
My name is [NAME] and I live at twenty third street, San Francisco.
End-to-End-Beispiel¶
Im folgenden Beispiel werden Zeilen aus einer Tabelle verarbeitet und die maskierte Ausgabe in eine andere Tabelle eingefügt. Sie könnten einen ähnlichen Ansatz verwenden, um die ausgeblendeten Daten in einer Spalte einer bestehenden Tabelle zu speichern. Nach der Ausblendung wird der Text an die AI_SENTIMENT-Funktion übergeben, um allgemeine Stimmungsinformationen zu extrahieren.
Eine Tabelle mit nicht ausgeblendetem Text erstellen.
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';
Nicht ausgeblendete Daten anzeigen.
SELECT * FROM raw_table;
Eine Ausblendungstabelle erstellen.
CREATE OR REPLACE TABLE redaction_table (value VARCHAR);
PII in
raw_tableausblenden und die Zeilen inredaction_tableeinfügen.INSERT INTO redaction_table SELECT AI_REDACT(my_column) AS value FROM raw_table;
Ausgeblendete Ergebnisse anzeigen.
SELECT * FROM redaction_table;
Die Funktion AI_SENTIMENT für ausgeblendeten Text anzeigen.
SELECT value AS redacted_text, AI_SENTIMENT(value) AS summary_sentiment FROM redaction_table;
Chunking-Beispiel¶
Dieses Beispiel veranschaulicht, wie Sie PII in umfangreichem Text redigieren können, indem der Text in kleinere Blöcke aufgeteilt, jeder Block separat ausgeblendet wird und dann die ausgeblendeten Blöcke in der endgültigen Ausgabe wieder kombiniert werden. Dieser Ansatz funktioniert im Rahmen der Token-Beschränkungen von AI_REDACT.
Erstellen Sie eine Tabelle mit Patientendaten.
CREATE OR REPLACE TABLE patients ( patient_id INT PRIMARY KEY, patient_notes TEXT );
Teilen Sie den Text in Blöcke auf, wenden Sie AI_REDACT auf jeden Block an und verketten Sie die ausgeblendeten Blöcke.
CREATE OR REPLACE TABLE final_temp_table AS WITH chunked_data AS ( 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 ( 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 ) ), 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;
Fragen Sie die Ergebnisse ab.
SELECT patient_id, LISTAGG(redacted_text, '') WITHIN GROUP (ORDER BY chunk_index) AS full_output FROM final_temp_table GROUP BY patient_id;
Beispiele für Erkennung und selektive Ausblendung¶
Einfaches Beispiel zur Erkennung¶
Das folgende Beispiel identifiziert und gibt die Kategorie, den Speicherort und den Text jeder erkannten PII-Instanz zurück, ohne die Eingabe auszublenden.
SELECT AI_REDACT(
input => 'My old manager, Washington, used to live in Washington. His first name was Mike.',
return_error_details => FALSE,
mode => 'detect'
);
Ausgabe einfache Erkennung:
{
"spans": [
{
"category": "NAME",
"end": 26,
"start": 16,
"text": "Washington"
},
{
"category": "ADDRESS",
"end": 54,
"start": 44,
"text": "Washington"
},
{
"category": "NAME",
"end": 79,
"start": 75,
"text": "Mike"
}
]
}
Beispiel für End-to-End mit Zulassungsliste¶
Das folgende Beispiel zeigt einen selektiven Ausblendungs-Workflow, der den detect-Modus und eine Zulassungsliste verwendet. Es wird eine Liste von Namen geladen, die aus einer Stagingdatei beibehalten werden sollen, und AI_REDACT im detect-Modus verwendet, um PII-Speicherorte zu identifizieren. Anschließend werden die Ergebnisse an eine Python-UDF übergeben, die nur die PII ausblendet, die nicht in der Zulassungsliste sind.
Behalten Sie eine Zulassungsliste mit Werten bei, indem Sie die Liste aus einem Stagingbereich in eine temporäre Tabelle laden.
CREATE OR REPLACE TEMP TABLE string_list (value STRING); COPY INTO string_list FROM @mystage/allowlist.txt FILE_FORMAT = ( TYPE = 'CSV' RECORD_DELIMITER = '\n' FIELD_DELIMITER = '\t' -- any char NOT in file TRIM_SPACE = TRUE SKIP_HEADER = 0 );
Die Tabelle mit der Zulassungsliste anzeigen
SELECT * FROM string_list;
Ausgabe der Tabelle mit der Zulassungsliste:
VALUE Mike David
Erstellen Sie eine Python-UDF, die PII basierend auf der Zulassungsliste selektiv ausblendet.
CREATE OR REPLACE FUNCTION redact_spans_with_allowlist( SPAN_DATA VARIANT, ALLOWLIST ARRAY, ORIGINAL_TEXT STRING ) RETURNS STRING LANGUAGE PYTHON RUNTIME_VERSION = '3.8' HANDLER = 'redact_text' AS $$ def redact_text(span_data, allowlist, original_text): spans = span_data.get('spans', []) # Sort descending to maintain index integrity sorted_spans = sorted(spans, key=lambda x: x['start'], reverse=True) result = original_text for span in sorted_spans: text_val = span.get('text') if text_val in allowlist: continue start, end = span['start'], span['end'] label = f"[{span['category']}]" # Splice the string result = result[:start] + label + result[end:] return result $$;
Testen Sie die UDF.
SELECT redact_spans_with_allowlist( PARSE_JSON('{"spans": [{"category": "NAME", "end": 26, "start": 16, "text": "Washington"}, {"category": "NAME", "end": 79, "start": 75, "text": "Mike"}]}'), ARRAY_CONSTRUCT('Washington'), -- This will NOT be redacted 'Hello, my name is Washington and his is Mike.' );
Führen Sie AI_REDACT im Modus
detectaus.CREATE OR REPLACE TABLE raw (message TEXT); INSERT INTO raw (message) VALUES ('My old manager, Washington, used to live in Washington. His first name was Mike.'); SELECT t.message AS message, AI_REDACT(input=>t.message, return_error_details=>FALSE, mode=>'detect') AS spans, redact_spans_with_allowlist(spans, l.str_list, message) AS result FROM raw t CROSS JOIN ( SELECT ARRAY_AGG(value) AS str_list FROM string_list ) l;
Beispielausgabe für End-to-End mit Zulassungsliste:
MESSAGE |
SPANS |
RESULT |
|---|---|---|
Mein alter Vorgesetzter, Washington, hat in Washington gelebt. Sein Vorname war Mike. |
{
"spans": [
{"category": "NAME",
"end": 26,
"start": 16,
"text": "Washington"
},
{"category": "ADDRESS",
"end": 54,
"start": 44,
"text": "Washington"
},
{"category": "NAME",
"end": 79,
"start": 75,
"text": "Mike"
}
]
}
|
Mein alter Vorgesetzter, [NAME ], hat in [ADDRESS] gelebt. Sein Vorname war Mike. |
Rechtliche Hinweise¶
Die Datenklassifizierung der Eingaben und Ausgaben ist in der folgenden Tabelle aufgeführt.
Klassifizierung von Eingabedaten |
Klassifizierung von Ausgabedaten |
Benennung |
|---|---|---|
Usage Data |
Customer Data |
Die allgemein verfügbaren Funktionen sind abgedeckte AI-Features. Die Vorschaufunktionen sind Vorschau-AI-Features. [1] |
Weitere Informationen dazu finden Sie unter KI und ML in Snowflake.