AI_EXTRACTでドキュメントから情報を抽出する

AI_EXTRACTは、自然言語で質問するか、抽出する情報を記述することで、テキストやドキュメントファイルから、エンティティ、リスト、テーブルなどの構造化情報を抽出できるCortex AI関数です。他の関数と組み合わせて、さまざまなユースケースに対応したカスタムドキュメント処理パイプラインを作成できます( Cortex AI 関数:ドキュメント をご参照ください)。

AI_EXTRACTはさまざまな形式(29言語)のドキュメントを処理し、テキストの多い段落や、ロゴ、手書きテキスト(署名など)、テーブル、チェックマークなどのグラフィカルな形式のコンテンツの両方から情報を抽出できます。AI_EXTRACTは以下の構造化された形式で情報を抽出できます。

  • エンティティ:自然言語で質問するか、抽出する情報(都市、通り、またはZIPコードなど)。

  • リスト(または配列):JSONスキーマを提供して、銀行の明細書にあるすべての口座所有者の名前や、ドキュメントにあるすべての住所のリストなど、ドキュメントに存在する情報の配列またはリストを抽出します。

  • テーブル:JSONスキーマを提供し、テーブルのタイトルと抽出する必要のある列のリストを指定して、ドキュメントに存在する表形式のデータを抽出します。

AI_EXTRACTは、複数のドキュメントを同時に処理することにより、ワークロードに合わせて自動的にスケーリングされます。ドキュメントは、不要なデータ移動を回避するために、オブジェクトストレージから直接処理できます。

注釈

AI_EXTRACT は現在、カスタム ネットワークポリシー と互換性がありません。

抽出品質

AI_EXTRACTは、高精度の抽出を実現する独自のビジョンベースの大規模言語モデル(LLM)である arctic-extract を使用します。次のテーブルは、さまざまな標準的なベンチマークでのモデルのスコアを、比較のために他の一般的なモデルのスコアと合わせて示しています。

視覚的な質問応答(VQA)

オファー

DocVQAスコア

人間の評価

0.9811

Snowflake Arctic-Extract

0.9433

Azure OpenAI GPT-o3

0.9339

Google Gemini 2.5-Pro

0.9316

Google Anthropic Claude 4 Sonnet

0.9119

Azure Document Intelligence + GPT-o3

0.8853

Google Document AI + Gemini

0.8497

Azure OpenAI GPT-o3

0.9339

AWS Textract

0.8313

テキストのみの質問応答(SQuAD v2)

オファー

ANLS

完全一致

Snowflake Arctic-Extract

81.18

78.74

Anthropic Claude 4 Sonnet

80.54

77.10

Meta LLaMA 3.1 405B

80.37

76.56

Meta LLaMA 4 Scout

74.30

70.70

OpenAI GPT 4.1

70.71

66.81

Meta LLaMA 3.1 8B

59.13

54.48

これらの例では、入力ドキュメントとして以下の画像を使用しています。ドキュメントはステージに格納されています。

コンドミニアムの売買契約

エンティティの抽出

売買契約から売り手名とオファー有効期限を抽出します。

SELECT AI_EXTRACT(
  file => TO_FILE('@db.schema.stage','document.pdf'),
  responseFormat => [['seller_name', 'What is the seller name?'], ['address', 'What is the offer expiration date?']]
);
Copy

結果:

{
    "error": null,
    "response": {
        "address": "12/12/2023",
        "seller_name": "Paul Doyle"
    }
}
Copy

チェックボックス情報の抽出

この例では、ドキュメントでマークされたチェックボックスに基づいて、含まれていない項目に関する情報を抽出します。

SELECT AI_EXTRACT(
  file => TO_FILE('@db.schema.stage','document.pdf'),
  responseFormat => [['flat_items', 'What items are not included with the flat?'], ['default', 'What Default is selected?']]
);
Copy

結果:

{
    "error": null,
    "response": {
        "default": "Forfeiture of Earnest Money",
        "flat_items": "dryer, security system, satellite dish, wood stove, fireplace insert, hot tub, attached speaker(s), generator, other"
    }
}
Copy

署名ステータスの抽出

この例では、契約が署名されているかどうかに関する情報を抽出します。

SELECT AI_EXTRACT(
    file => TO_FILE('@db.schema.stage','document.pdf'),
    responseFormat => [['signature', 'Is this document signed?']]
);
Copy

結果:

{
  "error": null,
    "response": {
        "signature": "no"
    }
}
Copy

エンティティのリストの抽出

この例では、購入者名のリストを抽出します。

SELECT AI_EXTRACT(
    file => TO_FILE('@db.schema.files', 'report.pdf'),
    responseFormat => {
        'schema': {
        'type': 'object',
        'properties': {
            'buyer_list': {
            'description': 'What are the buyer names?',
            'type': 'array'
            }
        }
        }
    }
);
Copy

結果:

{
    "error": null,
    "response": {
        "buyer_list": [
        "John Davis",
        "Jane Davis"
        ]
    }
}
Copy

テーブル情報の抽出

この例では、次のドキュメントから表形式のデータを抽出します。

グレンジャー因果性検定 - P値
SELECT AI_EXTRACT(
    file => TO_FILE('@db.schema.files', 'report.pdf'),
    responseFormat => {
        'schema': {
            'type': 'object',
            'properties': {
                'income_table': {
                'description': 'Table 2: Granger Causality Tests - P-values',
                'type': 'object',
                'column_ordering': ['description', 'countries','lags','z','z_approx'],
                'properties': {
                    'description': {
                        'description': 'Description',
                        'type': 'array'
                        },
                    'countries': {
                        'description': 'Countries',
                        'type': 'array'
                        },
                    'lags': {
                        'description': 'Lags',
                        'type': 'array'
                        },
                    'z': {
                        'description': 'Z',
                        'type': 'array'
                    },
                    'z_approx': {
                        'description': 'Z approx.',
                        'type': 'array'
                    }
                }
            }
        }
    }
);
Copy
{
    "error": null,
    "response": {
        "income_table": {
            "countries": [
                "33","80","29","84","34"
            ],
            "description": [
                "Commodity exporters",
                "Non-commodity exporters",
                "AE",
                "EMDE",
                "Large or market-dominant countries"
            ],
            "lags": [
                "2","1","1","1","1"
            ],
            "z": [
                "0.11","0.08","0.89","0.12","0.07"
            ],
            "z_approx": [
                "0.25","0.19","0.95","0.25","0.14"
            ]
        }
    }
}
Copy

入力要件

AI_EXTRACT はデジタル作成およびスキャン済みドキュメントの両方に最適化されています。次のテーブルは、入力ドキュメントの制限と要件のリストです。

最大ファイルサイズ

100 MB

1ドキュメントあたりの最大ページ数

125

最大質問数

  • エンティティ(単一またはリスト)抽出では100の質問

  • テーブル抽出では10の質問

サポートされているファイルタイプ

PDF、PPT、PPTX、DOCX、EML、DOC、DOCX、HTM、HTML、TEXT、MD、TXT、BMP、JPEG、JPG、PNG、TIFF、TIF、WEBP

ステージ暗号化

サーバー側の暗号化

アクセス制御の要件

さらに、 AI_EXTRACT 関数を使用するには、 ACCOUNTADMIN ロールは、 SNOWFLAKE.CORTEX_USER データベースロールを関数を呼び出せるユーザーに付与する必要があります。詳細については Cortex LLM 権限 をご参照ください。

コストの考慮事項

Cortex AI_EXTRACT関数では、ドキュメントごとのページ数、入力プロンプトトークン、処理される出力トークンに基づいて計算コストが発生します。

  • ページ化されたファイル形式の場合(PDF、DOCX、TIF、TIFF)、各ページは970トークンとしてカウントされます。

  • 画像ファイル形式の場合(JPEG、JPG、PNG)、個々の画像ファイルはページとして請求され、970トークンとしてカウントされます

Snowflake は、Cortex AI_EXTRACT 関数を呼び出すクエリを、小規模なウェアハウス(MEDIUM 以下)で実行することを推奨しています。ウェアハウスが大きくなってもパフォーマンスは向上しません。

サポートされている言語

AI_EXTRACTは次の言語をサポートしています。

  • アラビア語

  • ベンガル語

  • ビルマ語

  • セブアノ語

  • 中国語

  • チェコ語

  • オランダ語

  • 英語

  • フランス語

  • ドイツ語

  • ヘブライ語

  • ヒンディー語

  • インドネシア語

  • イタリア語

  • 日本語

  • クメール語

  • 韓国語

  • ラオス語

  • マレー語

  • ペルシャ語

  • ポーランド語

  • ポルトガル語

  • ロシア語

  • スペイン語

  • タガログ語

  • タイ

  • トルコ語

  • ウルドゥー語

  • ベトナム語

リージョンの可用性

AI_EXTRACT のサポートは、以下のSnowflakeリージョンのアカウントで利用可能です。

AWS

Azure

US西部2

東部 US 2

US東部1

西部 US 2

US CA 中央部1

南中央US

ヨーロッパ中部1

北ヨーロッパ

ヨーロッパ西部1

西ヨーロッパ

SA東部1

インド中部

AP北東部1

日本東部

AP南東部2

東南アジアオーストラリア東部

AI_EXTRACT にはクロスリージョンサポートがあります。Cortex AI クロスリージョンのサポートの有効化については、 クロスリージョン推論 をご参照ください。

エラー条件

Snowflake Cortex AI_EXTRACT は以下のエラーメッセージを生成する可能性があります。

メッセージ

説明

Internal error.

システムエラーが発生しました。待って、もう一度お試しください。エラーが解決しない場合は、Snowflakeサポートにお問い合わせください。

Not found.

ファイルが見つかりませんでした。

Provided file cannot be found.

ファイルが見つかりませんでした。

Provided file cannot be accessed.

現在のユーザーには、ファイルにアクセスするための十分な権限がありません。

The provided file format {fil_extension} isn't supported.

ドキュメントがサポートされている形式ではありません。

The provided file isn't in the expected format or is client-side encrypted or is corrupted.

ドキュメントはサーバー側の暗号化を使ってステージに保存されていません。

Empty request.

パラメーターが提供されていません。

Missing or empty response format.

応答形式が提供されていません。

Invalid response format.

応答形式が無効なJSONです。

Duplicate feature name found: {feature_name}.

応答形式には、1つ以上の重複した機能名が含まれます。

Too many questions: {number} complex and {number} simple = {number} total, complex question weight {number}

質問数が許容制限を超えています。

Maximum number of 125 pages exceeded. The document has {actual_pages} pages.

ドキュメントが125ページの制限を超えています。

Page size in pixels exceeds 10000x10000. The page size is {actual_px} pixels.

画像入力または変換されたドキュメントページが、サポートされているディメンションよりも大きいです。

Page size in inches exceeds 50x50 (3600x3600 pt). The page size is {actual_in} inches ({actual_pt} pt).

ページがサポートされているディメンションよりも大きいです。

Maximum file size of 104857600 bytes exceeded. The file size is {actual_size} bytes.

ドキュメントが100 MB を超えています。