Ocultar informações de identificação pessoal (PII)

PII incluem nomes, endereços, números de telefone, endereços de e-mail, números de identificação fiscal e outros dados que podem ser utilizados ​​(sozinhos ou com outras informações) para identificar um indivíduo. A maioria das organizações tem requisitos regulatórios e de conformidade relacionados ao tratamento de dados de PII. AI_REDACT é uma função AISQL totalmente gerenciada que ajuda você a ocultar PIIs a partir de dados de texto não estruturados, usando um modelo de linguagem grande (LLM) hospedado pelo Snowflake para identificar PII e substituí-las por valores de espaço reservado.

AI_REDACT pode ajudar você a preparar texto para treinamento de call center, análise de sentimentos, análises médicas e de seguros e treinamento de modelos de ML, entre outros casos de uso.

Dica

Use AI_PARSE_DOCUMENT ou AI_TRANSCRIBE para converter dados de documentos ou fala em texto antes de aplicar AI_REDACT.

AI_REDACT

A função AI_REDACT substitui informações de identificação pessoal (PII) no texto de entrada por valores de espaço reservado.

Importante

AI_REDACT realiza a ocultação da melhor maneira possível usando modelos de AI. Sempre revise a saída para garantir a conformidade com as políticas de privacidade de dados da sua organização. Informe a Snowflake se AI_REDACT não conseguir ocultar alguma PII em seus dados.

Disponibilidade regional

Consulte Disponibilidade regional.

Limitações

  • A ocultação é realizada usando modelos de AI e pode não encontrar todas as informações de identificação pessoal. Sempre revise a saída para garantir a conformidade com as políticas de privacidade de dados da sua organização. Entre em contato com o suporte Snowflake se AI_REDACT não conseguir ocultar certas PII.

  • As funções COUNT_TOKENS e AI_COUNT_TOKENS ainda não são compatíveis com AI_REDACT.

  • No momento, AI_REDACT funciona melhor com texto em inglês bem formulado. O desempenho pode variar com outros idiomas ou textos com muitos erros de ortografia, pontuação ou gramática.

  • AI_REDACT atualmente oculta apenas PII dos US e algumas PII do UK e canadenses, conforme indicado em Categorias de PIIs detectadas.

  • AI_REDACT está atualmente limitado no número de tokens que pode receber e produzir. A entrada e a saída juntas podem ter até 4.096 tokens. A saída é limitada a 1.024 tokens. Se o texto de entrada for mais longo, divida-o em partes menores e oculte cada parte separadamente, talvez usando SPLIT_TEXT_RECURSIVE_CHARACTER.

    Nota

    Um token é a menor unidade de dados processada pelo modelo de AI. Para texto em inglês, as diretrizes do setor consideram um token como aproximadamente quatro caracteres ou 0,75 palavra.

Categorias de PIIs detectadas

AI_REDACT é compatível com ocultação das seguintes categorias de PII. Os valores na coluna Categoria são as strings compatíveis no argumento opcional categories. As subcategorias são detectadas automaticamente quando a categoria principal é especificada.

Categoria

Notas

NAME

Também identifica partes do nome FIRST_NAME, MIDDLE_NAME e LAST_NAME

EMAIL

PHONE_NUMBER

DATE_OF_BIRTH

GENDER

Reconhece os valores MALE, FEMALE e NONBINARY

AGE

ADDRESS

Também identifica partes do endereço:

  • STREET_ADDRESS (US, UK, CA)

  • POSTAL_CODE (US, UK, CA)

  • CITY (US, UK, CA)

  • ADMINISTRATIVE_AREA_1 (estado dos US, província do CA)

  • ADMINISTRATIVE_AREA_2 (condado, distrito ou município dos US)

NATIONAL_ID

Identifica números de segurança social US

PASSPORT

Identifica números de passaporte dos US, do UK e do CA

TAX_IDENTIFIER

Identifica números de identificação fiscal individual (ITNs)

PAYMENT_CARD_DATA

Também identifica partes de cartões de pagamento PAYMENT_CARD_NUMBER, PAYMENT_CARD_EXPIRATION_DATE e PAYMENT_CARD_CVV

DRIVERS_LICENSE

Identifica números de carteira de motorista dos US, do UK e do CA

IP_ADDRESS

Nota

Quando AI_REDACT identifica uma subcategoria, como um nome próprio, a saída contém o marcador de posição da categoria principal, como [NAME].

Considerações sobre custo

AI_REDACT incorre em custos com base no número de tokens de entrada e saída processados, como acontece com outras funções AISQL. Consulte o Guia de preços do Snowflake para obter detalhes.

Exemplos

Exemplos básicos

O exemplo a seguir oculta um nome e um endereço do texto de entrada.

SELECT AI_REDACT(
    input => 'My name is John Smith and I live at twenty third street, San Francisco.'
);
Copy

Saída:

My name is [NAME] and I live at [ADDRESS]

O exemplo a seguir oculta apenas nomes e endereços de e-mail do texto de entrada. Observe que o texto contém apenas um primeiro nome, mas este (sendo uma subcategoria de nome) ainda é reconhecido e ocultado como [NAME]. O texto de entrada não contém um endereço de e-mail, portanto, nenhum espaço reservado de e-mail aparece na saída.

SELECT AI_REDACT(
    input => 'My name is John and I live at twenty third street, San Francisco.',
    categories => ['NAME', 'EMAIL']
);
Copy

Saída:

My name is [FIRST_NAME] and I live at twenty third street, San Francisco.

Exemplo de ponta a ponta

O exemplo a seguir processa linhas de uma tabela e insere a saída ocultada em outra tabela. Você pode usar uma abordagem semelhante para armazenar os dados ocultados em uma coluna em uma tabela existente.

Após a ocultação, o texto é passado para AI_SENTIMENT para extrair informações gerais de sentimento.

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

Exemplo de tratamento de erros

Normalmente, AI_REDACT gera um erro se não pode processar o texto de entrada. Ao processar várias linhas, um erro faz com que toda a operação falhe. Para evitar isso, você pode definir o parâmetro de sessão AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR para FALSE, o que faz com que as condições de erro retornem NULL em vez de gerar um erro.

ALTER SESSION SET AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR=FALSE;
Copy

Com esse parâmetro de sessão definido, ao passar TRUE como último argumento para AI_REDACT, o valor de retorno é um OBJECT que contém campos separados para o texto ocultado e qualquer mensagem de erro. Um ou outro é NULL dependendo se a chamada de AI_REDACT foi processada com sucesso. Você pode usar esses campos para registrar a mensagem de erro para qualquer linha que não tenha sido processada.

Por exemplo, o exemplo anterior pode ser modificado para registrar as mensagens de erro da seguinte forma, substituindo os blocos indicados pelo código modificado:

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