- カテゴリ:
- :doc:`/sql-reference/functions-string`(AI 関数) 
AI_CLASSIFY¶
注釈
AI_CLASSIFY は CLASSIFY_TEXT (SNOWFLAKE.CORTEX) の更新されたバージョンです。最新の関数については、 AI_CLASSIFY を使用してください。
テキストや画像を指定したカテゴリに分類します。
リージョンの可用性¶
次の表は、テキストと画像の両方で AI_CLASSIFY 関数を使用できるリージョンを示しています。
| データ型 | AWS US西部2 (オレゴン) | AWS US東部1 (N.バージニア) | AWSヨーロッパ中部1 (フランクフルト) | AWS ヨーロッパ西部1 (アイルランド) | AWS AP 南東部2 (シドニー) | AWS AP 北東部1 (東京) | Azure東部 US 2 (バージニア) | Azure西ヨーロッパ (オランダ) | AWS (リージョン横断) | 
|---|---|---|---|---|---|---|---|---|---|
| TEXT | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | 
| IMAGE | ✔ | ✔ | ✔ | ✔ | 
構文¶
AI_CLASSIFY( <input> , <list_of_categories> [, <config_object>] )
引数¶
必須:
- input
- 分類している文字列、画像、または プロンプト オブジェクト。 - テキスト分類では、入力文字列は大文字と小文字を区別します。結果は大文字と小文字を区別するかによって異なる場合があります。 
- list_of_categories
- 少なくとも1つ、最大で500件のユニークな値を持つカテゴリの配列。カテゴリは大文字と小文字を区別します。 - カテゴリは単純な文字列、または同じ型の SQL オブジェクトにすることができます。オブジェクトを使用している場合、1つまたは複数のカテゴリの説明を提供して、分類の精度を向上することができます。 - 各カテゴリについて、以下を指定してください。 - label(必須): カテゴリ名。
- description(オプション):25文字以内でカテゴリを説明します。
 - 注釈 - 説明の数は入力トークンとしてカウントされるため、分類操作のコストが高くなります。詳細については、 コストの考慮事項 をご参照ください。 
オプション:
- config_object
- キー/値のペアとして指定された構成設定。サポートされているキー: - task_description:50語以内の分類タスクの説明。これは、モデルが分類タスクのコンテキストを理解し、精度を向上させるのに役立ちます。
- output_mode: マルチラベル分類の場合は、- 'multi'に設定します。シングルラベル分類のデフォルトは- 'single'です。
- examples: フューショット学習用のオブジェクト例のリスト。各例には次が含まれています。- input: 分類のための例のテキスト。
- labels: 入力に対する正しいカテゴリのリスト。
- explanation: 入力がそのカテゴリにマッピングされる理由の説明。
 
 
戻り値¶
シリアル化されたオブジェクト。オブジェクトの labels フィールドは、入力が属するカテゴリのリストを指定する配列です。
単一ラベル分類の場合、 labels 配列には常に1つのラベルのみが含まれます。マルチラベル分類の場合、 labels フィールドには複数の要素を含めることができます。
アクセス制御の要件¶
ユーザーは、 SNOWFLAKE.CORTEX_USER データベースロール を持つロールを使用する必要があります。この権限の詳細については、 必要な権限 をご参照ください。
使用上の注意¶
最良の結果を得るには、以下のガイドラインに従ってください。
- inputと- list_of_categoriesには英語のプレーンテキストを使用する。
- コードスニペット、ログ、英語以外のテキストは避ける。 
- テキストでオープンソースでないコードや形式(独自の言語や形式など)を使用することは避ける。基になる言語モデルは、独自の形式で学習されたものではありません。 
- カテゴリラベルに略語、特殊文字、専門用語を使用しないでください。 
- 説明的なカテゴリを使用する。「Xa4s3」や「カテゴリー1」といったカテゴリー名は避けてください。 
- 相互に排他的なカテゴリを使用する。 
- 入力とカテゴリの関係が不明確または複雑な場合、明確なタスクの説明を提供することで精度を向上させることができます。 
- ラベルの説明を追加する。そうすることで、特にラベルがあいまいな場合や、特定の選択基準が必要な場合の精度を向上させることができます。各ラベルの特徴を明確に強調した説明文を記述する。 
- 各ラベル、説明、例は、 AI_CLASSIFY を呼び出すたびに入力トークン数を増やし、コストに影響します。 
- 例を挙げると、精度を向上させることができます。 
注釈
AI_CLASSIFY は、応答を生成するために入力にプロンプトを追加します。これにより、指定したテキストよりもトークン数が増えます。
例¶
以下の例では、 AI_CLASSIFY 関数を必要な引数のみで使用しています。
AI_CLASSIFY: テキスト¶
次の例では、プロンプトを旅行または料理の2つのカテゴリのどちらかに分類します。
SELECT AI_CLASSIFY('One day I will see the world', ['travel', 'cooking']);
次に示すのは、前述したコマンドの出力です。
'{
  "labels": ["travel"]
 }';
次の例では、マルチラベル分類を使用しています。
SELECT AI_CLASSIFY(
  'One day I will see the world and learn to cook my favorite dishes',
  ['travel', 'cooking', 'reading', 'driving'],
  {'output_mode': 'multi'}
);
次に示すのは、前述したコマンドの出力です。
'{
  "labels": ["travel", "cooking"]
 }';
次の例では、タスクの説明、ラベルの説明、フューショットの例を渡しています。
SELECT AI_CLASSIFY(
  'One day I will see the world and learn to cook my favorite dishes',
  [
    {'label': 'travel', 'description': 'content related to traveling'},
    {'label': 'cooking'},
    {'label': 'reading'},
    {'label': 'driving'}
  ],
  {
    'task_description': 'Determine topics related to the given text',
    'output_mode': 'multi',
    'examples': [
      {
        'input': 'i love traveling with a good book',
        'labels': ['travel', 'reading'],
        'explanation': 'the text mentions traveling and a good book which relates to reading'
      }
    ]
  });
次に示すのは、前述したコマンドの出力です。
'{
  "labels": ["travel", "cooking"]
}';
次の例では、テキストの列と、そのテキストに対して可能なカテゴリの列を含む text_classification_table を作成します。AI_CLASSIFY 関数は、テーブルの各行で呼び出され、テキスト列の文字列を分類します。
CREATE OR REPLACE TEMPORARY TABLE text_classification_table AS
SELECT 'France' AS input, ['North America', 'Europe', 'Asia'] AS classes
UNION ALL
SELECT 'Singapore', ['North America', 'Europe', 'Asia']
UNION ALL
SELECT 'one day I will see the world', ['travel', 'cooking', 'dancing']
UNION ALL
SELECT 'my lobster bisque is second to none', ['travel', 'cooking', 'dancing'];
SELECT input,
    classes,
    AI_CLASSIFY(input, classes):labels AS classification
FROM text_classification_table;
AI_CLASSIFY: 画像¶
単一ファイル入力を使用:
WITH food_pictures AS (
  SELECT
      TO_FILE(file_url) AS img
  FROM DIRECTORY(@file_stage)
)
SELECT
*,
AI_CLASSIFY(img, ['dessert', 'drink', 'main dish', 'side dish']):labels AS classification
FROM food_pictures;
PROMPT() で構築されたプロンプトオブジェクトを使用:
  WITH food_pictures AS (
  SELECT
      TO_FILE(file_url) AS img
  FROM DIRECTORY(@file_stage)
)
SELECT
*,
AI_CLASSIFY(PROMPT('Please help me classify the food within this image {0}', img),
  ['dessert', 'drink', 'main dish', 'side dish']):labels AS classification
FROM food_pictures;
制限事項¶
- Snowflake AI 関数は、動的テーブルのインクリメンタルリフレッシュをサポートしていません。 
- Snowflake AI 関数は、以下の種類のステージングのファイルから作成された FILE オブジェクトでは動作しません。 - 暗号化モード - TYPE = 'SNOWFLAKE_FULL'付き内部ステージ
- 顧客側の暗号化モードを持つ外部ステージ: - TYPE = 'AWS_CSE'
- TYPE = 'AZURE_CSE'
 
- ユーザーステージ 
- テーブルステージ 
- 名前が二重引用符で囲まれているステージ