Persönlich identifizierbare Informationen (PII) 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 mit PII-Daten. AI_REDACT ist eine vollständig verwaltete AISQL-Funktion, die Ihnen beim Maskieren von PII aus unstrukturierten Textdaten unter Verwendung eines von Snowflake gehosteten großen Sprachmodells (Large Language Model, LLM) hilft, um PII zu identifizieren und durch Platzhalterwerte zu ersetzen.

AI_REDACT kann Ihnen dabei helfen, Text für Call-Center-Trainings, Stimmungsanalysen, versicherungsbezogene und medizinische Analysen sowie 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 Funktion AI_REDACT ersetzt persönlich identifizierbare Informationen (PII) im Eingabetext durch Platzhalterwerte.

Wichtig

AI_REDACT führt die Maskierung auf bestmögliche Weise unter Verwendung von AI-Modellen aus. Überprüfen Sie stets das Ergebnis (bzw. die Ausgabe), um sicherzustellen, dass die Datenschutzrichtlinien Ihrer Organisation eingehalten werden. Informieren Sie Snowflake, wenn es AI_REDACT nicht gelingt, PII in Ihren Daten unkenntlich zu machen.

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 maskiert derzeit nur US-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.

    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 Maskierung der folgenden Kategorien von PII. Die Werte in der Spalte „Kategorie“ sind die Zeichenfolgen, die im optionalen categories-Argument unterstützt werden. Unterkategorien werden automatisch erkannt, wenn die übergeordnete Kategorie angegeben wird.

Kategorie

Anmerkungen

NAME

Identifiziert auch Namensteile wie FIRST_NAME, MIDDLE_NAME und LAST_NAME

EMAIL

PHONE_NUMBER

DATE_OF_BIRTH

GENDER

Erkennt die Werte MALE, FEMALE, NONBINARY

AGE

ADDRESS

Identifiziert auch Adressteile:

  • STREET_ADDRESS (US, UK, CA)

  • POSTAL_CODE (US, UK, CA)

  • CITY (US, UK, CA)

  • ADMINISTRATIVE_AREA_1 (US-Staat, CA-Provinz)

  • ADMINISTRATIVE_AREA_2 (US – County, Borough oder Township)

NATIONAL_ID

Identifiziert US-Sozialversicherungsnummern

PASSPORT

Identifiziert US-, UK-, CA-Passnummern

TAX_IDENTIFIER

Identifiziert Individual Taxpayer Numbers (ITNs)

PAYMENT_CARD_DATA

Identifiziert auch Teile von Zahlungskarten – PAYMENT_CARD_NUMBER, PAYMENT_CARD_EXPIRATION_DATE, PAYMENT_CARD_CVV

DRIVERS_LICENSE

Identifiziert Führerscheinnummern (US, UK, CA)

IP_ADDRESS

Bemerkung

Wenn AI_REDACT eine Unterkategorie identifiziert, wie z. B. einen Vornamen, enthält die Ausgabe den Platzhalter für die Hauptkategorie, z. B. [NAME].

Hinweise zu Kosten

AI_REDACT verursacht Kosten, die sich nach der Anzahl der verarbeiteten Eingabe- und Ausgabe-Token richten, wie bei anderen AISQL-Funktionen. Weitere Informationen dazu finden Sie in der Snowflake-Preisliste.

Beispiele

Grundlegende Beispiele

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.'
);
Copy

Ausgabe:

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, dieser (als Unterkategorie von Name) jedoch trotzdem erkannt und als [NAME] maskiert 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']
);
Copy

Ausgabe:

My name is [FIRST_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 ähnlich vorgehen, um die maskierten Daten in einer Spalte einer bestehenden Tabelle zu speichern.

Nach der Maskierung wird der Text an AI_SENTIMENT übergeben, um Informationen zur allgemeinen Stimmung zu extrahieren.

-- 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;
Copy

Beispiel für die Fehlerbehandlung

Normalerweise gibt die AI_REDACT-Funktion einen Fehler aus, wenn sie den Eingabetext nicht verarbeiten kann. Bei der Verarbeitung mehrerer Zeilen führt ein Fehler dazu, dass der gesamte Vorgang fehlschlägt. Um dies zu vermeiden, können Sie den Sitzungsparameter AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR auf FALSE festlegen, sodass Fehlerbedingungen NULL zurückgeben, anstatt einen Fehler auszulösen.

ALTER SESSION SET AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR=FALSE;
Copy

Wenn dieser Sitzungsparameter festgelegt ist und TRUE als letztes Argument von AI_REDACT übergeben wird, ist der Rückgabewert ein OBJECT, das separate Felder für den maskierten Text und etwaige Fehlermeldungen enthält. Je nachdem, ob der AI_REDACT-Aufruf erfolgreich verarbeitet wurde, ist das eine oder das andere NULL. Sie können diese Felder verwenden, um die Fehlermeldung für jede Zeile zu erfassen, die nicht verarbeitet werden konnte.

So könnte etwa das vorherige Beispiel geändert werden, um die Fehlermeldungen wie folgt zu erfassen, wobei die angegebenen Blöcke durch den geänderten Code ersetzt würden:

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);
Copy