大規模言語モデル (LLM) を使用してテキスト内の名前付きエンティティを検出し、マスキングします。テキストカラムとエンティティタイプのリストを渡すと、関数はマスキング済みテキストと検出されたエンティティのリストを返します。
制限事項
-
Ververica Runtime (VVR) 11.4 以降が必要です。
-
スループットは、モデルサービスプラットフォームのレート制限ポリシーによって制限されます。トラフィックがプラットフォームのアクセス上限に達すると、Flink ジョブでバックプレッシャーが発生し、AI_MASK がボトルネックになります。深刻な場合は、演算子がタイムアウトして Flink ジョブが再起動する可能性があります。
構文
AI_MASK(
MODEL => MODEL <model_name>,
INPUT => <input_column>,
MASK_ENTITIES => <mask_entities>
)
上記の名前付き引数および位置引数の両方をサポートしています。詳細については、「例」をご参照ください。
パラメーター
| パラメーター | データ型 | 説明 |
|---|---|---|
MODEL <model_name> |
MODEL | 登録済みモデルサービスの名前です。詳細については、「モデル設定」をご参照ください。モデルの出力は VARIANT 型である必要があります。 |
<input_column> |
STRING | 分析対象のテキストカラムです。 |
<mask_entities> |
ARRAY\<STRING\> | 検出してマスキングするエンティティタイプです。このパラメーターは定数である必要があります。 |
出力
AI_MASK は入力行ごとに 1 行を返し、以下のカラムを含みます。
| カラム | データ型 | 説明 |
|---|---|---|
masked_text |
STRING | 検出されたエンティティが角括弧付きプレースホルダーに置き換えられた入力テキストです。例:[NAME]。 |
detected_entities |
ARRAY\<STRING\> | 入力テキスト内で検出されたエンティティです。各要素は、entity(元のテキストフラグメント)および type(エンティティタイプラベル)の 2 つのフィールドを持つ JSON 文字列です。例:{"entity":"Timmo","type":"name"}。 |
例
以下の例では、Qwen-Plus モデルを作成し、サンプルデータをロードして、位置引数および名前付き引数の構文の両方を使用して人名をマスキングします。
テストデータ
| id | content |
|---|---|
| 1 | ティモは本当に勉強が大好きです。暇な時間があると、いつも学習教材を読みます。 |
SQL ステートメント
CREATE TEMPORARY MODEL general_model
INPUT (`input` STRING)
OUTPUT (`content` VARIANT)
WITH (
'provider' = 'openai-compat',
'task' = 'chat/completions',
'model' = 'qwen-plus'
);
CREATE TEMPORARY VIEW infos(id, content)
AS VALUES (1, '田中一郎さんは勉強が本当に好きです。空き時間があると、いつも教材を読みます。');
-- 位置引数構文
SELECT id, masked_text, detected_entities
FROM infos,
LATERAL TABLE(
AI_MASK(
MODEL general_model,
content,
ARRAY['name']
));
-- 名前付き引数構文
SELECT id, masked_text, detected_entities
FROM infos,
LATERAL TABLE(
AI_MASK(
MODEL => MODEL general_model,
INPUT => content,
MASK_ENTITIES => ARRAY['name']
));
以下のプレースホルダーを実際の値に置き換えてください。
| プレースホルダー | 説明 |
|---|
出力
| id | masked_text | detected_entities |
|---|---|---|
| 1 | [NAME]さんは勉強が本当に好きです。空き時間があると、いつも教材を読みます。 | [{"エンティティ":"Timmo","type":"名前"}] |