個人を特定できる情報( 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 it with placeholder values.
AI_REDACT は、コールセンターのコーチング、感情分析、保険と医療分析、および ML モデルトレーニングなどのユースケースのためのテキストを準備するのに役立ちます。
Tip
AI_PARSE_DOCUMENT または AI_TRANSCRIBE を使用して、 AI_REDACT を適用する前に、ドキュメントまたはスピーチデータをテキストに変換します。
AI_REDACT¶
AI_REDACT 関数は、入力テキスト内の個人を特定できる情報( PII )をプレースホルダー値に置き換えます。
重要
AI_REDACT は、 AI モデルを使用して最善を尽くして編集を実行します。出力を常に確認して、組織のデータプライバシーポリシーに準拠していることを確認してください。AI_REDACT がデータの PII の編集に失敗した場合は、Snowflakeにお知らせください。
リージョンの可用性¶
リージョンの可用性 をご参照ください。
制限事項¶
編集は AI モデルを使用して実行され、個人を特定できる情報をすべて検出しない場合があります。出力を常に確認して、組織のデータプライバシーポリシーに準拠していることを確認してください。AI_REDACT が特定の PII の編集に失敗する場合は、Snowflakeサポートにお問い合わせください。
COUNT_TOKENS および AI_COUNT_TOKENS 関数はまだ AI_REDACT をサポートしていません。
現時点では、 AI_REDACT は、文法的に正しい英語テキストで最善の機能を発揮します。パフォーマンスは、多くのスペルミス、句読点の誤り、または文法エラーのある他の言語またはテキストでは異なる場合があります。
AI_REDACT currently redacts only US PII and some UK and Canadian PII, where noted in 検出される PII カテゴリ.
AI_REDACT is currently limited in the number of tokens it can input and output. Input and output together can be up to 4,096 tokens. Output is limited to 1,024 tokens. If the input text is longer, split it into smaller chunks and redact each chunk separately, perhaps using SPLIT_TEXT_RECURSIVE_CHARACTER. See Chunking example for an example of redacting text that exceeds token limits.
注釈
トークンは、 AI モデルによって処理される最小のデータ単位です。英語のテキストの場合、業界のガイドラインでは、1トークンは約4文字、または0.75単語と見なされます。
検出される PII カテゴリ¶
AI_REDACT supports redacting the following categorise of PII. The values in the Category column are the strings supported
in the optional categories argument.
カテゴリ
メモ
NAME
Recognizes full name, first name, middle name, and last name
PHONE_NUMBER
DATE_OF_BIRTH
GENDER
Recognizes male, female, and nonbinary
AGE
ADDRESS
Identifies:
complete postal address (US, UK, CA)
street address (US, UK, CA)
postal code (US, UK, CA)
city (US, UK, CA)
州(US)または県(CA)
county, borough, or township (US)
NATIONAL_ID
Identifies Social Security numbers (US)
PASSPORT
Identifies passport numbers (US, UK, CA)
TAX_IDENTIFIER
個人の納税番号( ITNs )を識別します
PAYMENT_CARD_DATA
Identifies complete card information, card number, expiration date, and CVV
DRIVERS_LICENSE
Supported US, UK, CA
IP_ADDRESS
注釈
AI_REDACT は一部の PII カテゴリの部分的な一致をサポートしています。たとえば、[NAME] プレースホルダーを使用して編集をトリガーするには、名前だけで十分です。
Error handling¶
Ordinarily, AI_REDACT raises an error if it cannot process the input text. When a query redacts multiple rows, an error causes the entire query to fail. To allow processing to continue with other rows, you can set the session parameter AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR to FALSE. Errors then return NULL instead of stopping the query.
ALTER SESSION SET AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR=FALSE;
With this parameter set to FALSE, you can also pass TRUE as the final argument to AI_REDACT, which causes the return value to be an OBJECT that contains separate fields for the redacted text and any error message. One of these fields is NULL depending on whether the AI_REDACT call processed successfully.
コストの考慮事項¶
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.'
);
出力:
My name is [NAME] and I live at [ADDRESS]
The following example redacts only names and email addresses from the input text. Note that the text only contains a first name, which is recognized and redacted as [NAME]. The input text does not contain an email address, so no email placeholder appears in the output.
SELECT AI_REDACT(
input => 'My name is John and I live at twenty third street, San Francisco.',
categories => ['NAME', 'EMAIL']
);
出力:
My name is [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;
エラー処理の例¶
この例では、前の例に基づいて、 AI_REDACT で複数の行を処理するときにエラーを処理する方法を示します。セッションパラメーター AI_SQL_ERROR_HANDLING_USE_FAIL_ON_ERROR を設定し、 AI_REDACT の最後の引数として TRUE を渡します。これにより、関数は編集されたテキストとエラーメッセージの個別のフィールドを持つ OBJECT を返します。関数が成功したか失敗したかに応じて、その1つは NULL になります。
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);
Chunking example¶
この例では、テキストを小さなチャンクに分割し、各チャンクを個別に編集し、編集されたチャンクを再結合して最終出力を作成することによって、長いテキストから PII を編集する方法を示します。このアプローチは AI_REDACT のトークン制限で機能します。
CREATE OR REPLACE TABLE patients (
patient_id INT PRIMARY KEY,
patient_notes text
);
CREATE OR REPLACE TABLE final_temp_table AS
WITH chunked_data AS (
-- Step 1: Split text into chunks
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 (
-- Step 2: Apply AI_REDACT to each chunk
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
)
),
-- Step 3: Concatenate redacted chunks
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;
SELECT
patient_id,
LISTAGG(redacted_text, '') WITHIN GROUP (ORDER BY chunk_index) AS full_output
FROM final_temp_table
GROUP BY patient_id;
法的通知¶
インプットとアウトプットのデータ分類は以下の表の通りです。
入力データの分類 |
出力データの分類 |
指定 |
|---|---|---|
Usage Data |
Customer Data |
一般的に利用可能な関数は、カバーされている AI 機能です。プレビュー関数は、 AI 機能をプレビューします。[1] |
詳細については、 Snowflake AI と ML をご参照ください。