隐去个人身份信息 (PII)

PII includes names, addresses, phone numbers, email addresses, tax identification numbers, and other data that can be used (alone or with other information) to identify an individual. Most organizations have regulatory and compliance requirements around handling PII data. AI_REDACT is a fully-managed Cortex AI Function that helps you help redact PII from unstructured text data, using a large language model (LLM) hosted by Snowflake to identify PII and replace with placeholder values.

AI_REDACT 可以帮助您为呼叫中心指导、情绪分析、保险和医疗分析以及 ML 模型训练等用例准备文本。

小技巧

使用 AI_PARSE_DOCUMENT 或 AI_TRANSCRIBE,在应用 AI_REDACT 之前将文档或语音数据转换为文本。

AI_REDACT

AI_REDACT 函数将输入文本中的个人身份信息 (PII) 替换为占位符值。

重要

AI_REDACT 使用 AI 模型对敏感信息进行尽力隐去处理。请务必查看输出,以确保符合组织的数据隐私策略。如果 AI_REDACT 无法隐去数据中的任何 PII,请告知 Snowflake。

区域可用性

请参阅 Regional availability

限制

  • 使用 AI 模型进行隐去处理,可能无法找到所有个人身份信息。请务必查看输出,以确保符合组织的数据隐私策略。如果 AI_REDACT 无法隐去某些 PII,请联系 Snowflake 支持部门。

  • COUNT_TOKENS 和 AI_COUNT_TOKENS 函数尚不支持 AI_REDACT。

  • 此时,AI_REDACT 最适合格式正确的英文文本。性能可能因其他语言或存在许多拼写、标点符号或语法错误的文本而异。

  • AI_REDACT 目前仅隐去 US PII 和一些 UK 及加拿大的 PII,其中注明 检测到 PII 类别

  • 目前,AI_REDACT 可以输入和输出的词元数量受到限制。输入和输出总共最多可以有 4,096 个词元。输出限制为 1,024 个词元。如果输入文本较长,请将其拆分为更小的块,并分别对每个块进行隐去处理,可借助 SPLIT_TEXT_RECURSIVE_CHARACTER 完成。

    备注

    词元是 AI 模型处理的最小数据单位。对于英文文本,行业准则认为一个词元约为 4 个字符,即 0.75 个单词。

检测到 PII 类别

AI_REDACT 支持对以下类别的 PII 进行隐去处理。“类别”列中的值是可选 categories 实参中支持的字符串。指定父类别时,系统会自动检测子类别。

类别

备注

NAME

还标识名称部分 FIRST_NAME、MIDDLE_NAME 和 LAST_NAME

EMAIL

PHONE_NUMBER

DATE_OF_BIRTH

GENDER

识别值 MALE、FEMALE、NONBINARY

AGE

ADDRESS

还标识地址部分:

  • STREET_ADDRESS(US、UK、CA)

  • POSTAL_CODE(US、UK、CA)

  • CITY(US、UK、CA)

  • ADMINISTRATIVE_AREA_1(US 州、CA 省)

  • ADMINISTRATIVE_AREA_2(US 县、行政区或乡镇)

NATIONAL_ID

标识 US 社会安全号码

PASSPORT

标识 US、UK、CA 护照号码

TAX_IDENTIFIER

识别个人纳税人编号 (ITNs)

PAYMENT_CARD_DATA

还可以识别支付卡部分 PAYMENT_CARD_NUMBER、PAYMENT_CARD_EXPIRATION_DATE、PAYMENT_CARD_CVV

DRIVERS_LICENSE

标识 US、UK、CA 驾驶执照号码

IP_ADDRESS

备注

当 AI_REDACT 标识子类别(例如名字)时,输出包含主类别占位符,例如 [NAME]。

成本注意事项

AI_REDACT incurs costs based on the number of input and output tokens processed, as with other Cortex AI Functions. See the Snowflake Pricing Guide for details.

示例

基本示例

以下示例从输入文本中隐去姓名和地址。

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

输出:

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

以下示例仅从输入文本中隐去姓名和电子邮件地址。请注意,文本中仅包含名字,但由于名字属于姓名的子类别,因此仍会被识别并以 [NAME] 形式隐去。输入文本不包含电子邮件地址,因此输出中不会显示电子邮件占位符。

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

输出:

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

端到端示例

以下示例对一个表中的行进行处理,并将隐去敏感信息后的结果插入到另一个表中。您可以使用类似的方法,将隐去敏感信息的数据存储到现有表的某一列中。

隐去敏感信息后,文本将被传递到 AI_SENTIMENT 以提取整体情绪信息。

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

错误处理示例

通常情况下,如果 AI_REDACT 无法处理输入文本,则会引发错误。处理多行时,错误会导致整个操作失败。为避免这种情况,可以将会话参数 AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR 设置为 FALSE,这会导致错误条件而返回 NULL,而不是引发错误。

ALTER SESSION SET AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR=FALSE;
Copy

设置此会话参数后,通过将 TRUE 作为最后一个实参传递给 AI_REDACT,将是一个 OBJECT,其中包含隐去敏感信息后的文本以及任何错误消息的独立字段。一个或另一个是 NULL,取决于 AI_REDACT 调用是否已成功处理。您可以使用这些字段来记录无法处理的任何行的错误消息。

例如,可以修改前面的示例来记录错误消息,如下所示,用修改后的代码替换指示的块:

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
语言: 中文