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

EMAIL

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:

  1. Rufen Sie AI_REDACT mit dem mode-Argument auf detect auf, um PII im Eingabetext zu identifizieren und suchen.

  2. Vergleichen Sie die erkannten Bereiche (Spans) mit einer Zulassungsliste von Werten, die Sie beibehalten möchten.

  3. 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

category

VARCHAR

Die PII-Kategorie, z. B.``NAME`` oder``ADDRESS``. Unterstützte Kategorien siehe Erkannte PII-Kategorien.

start

NUMBER

Der Startindex der erkannten PII im Eingabetext.

end

NUMBER

Der Endindex der erkannten PII im Eingabetext.

text

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

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:

  1. 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';
    
    Copy
  2. Legen Sie den Sitzungsparameter fest.

    ALTER SESSION SET AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR=FALSE;
    
    Copy
  3. Eine Ausblendungstabelle mit Spalten für value und error erstellen.

    CREATE OR REPLACE TABLE redaction_table (
      value VARCHAR,
      error VARCHAR
      );
    
    Copy
  4. PII in raw_table ausblenden und die Zeilen in redaction_table einfü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);
    
    Copy

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

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

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.

  1. 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';
    
    Copy
  2. Nicht ausgeblendete Daten anzeigen.

    SELECT * FROM raw_table;
    
    Copy
  3. Eine Ausblendungstabelle erstellen.

    CREATE OR REPLACE TABLE redaction_table (value VARCHAR);
    
    Copy
  4. PII in raw_table ausblenden und die Zeilen in redaction_table einfügen.

    INSERT INTO redaction_table
      SELECT AI_REDACT(my_column) AS value FROM raw_table;
    
    Copy
  5. Ausgeblendete Ergebnisse anzeigen.

    SELECT * FROM redaction_table;
    
    Copy
  6. Die Funktion AI_SENTIMENT für ausgeblendeten Text anzeigen.

    SELECT
        value AS redacted_text,
        AI_SENTIMENT(value) AS summary_sentiment
      FROM redaction_table;
    
    Copy

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.

  1. Erstellen Sie eine Tabelle mit Patientendaten.

    CREATE OR REPLACE TABLE patients (
      patient_id INT PRIMARY KEY,
      patient_notes TEXT
      );
    
    Copy
  2. 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;
    
    Copy
  3. 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;
    
    Copy

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

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.

  1. 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
        );
    
    Copy
  2. Die Tabelle mit der Zulassungsliste anzeigen

    SELECT * FROM string_list;
    
    Copy

    Ausgabe der Tabelle mit der Zulassungsliste:

    VALUE
    Mike
    David
    
  3. 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
      $$;
    
    Copy
  4. 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.'
      );
    
    Copy
  5. Führen Sie AI_REDACT im Modus detect aus.

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

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"
    }
  ]
}
Copy

Mein alter Vorgesetzter, [NAME ], hat in [ADDRESS] gelebt. Sein Vorname war Mike.