チュートリアル: Document AI でドキュメント処理パイプラインを作成する

概要

Document AI を使用すると、さまざまな形式のドキュメントを処理し、テキストの多い段落や、ロゴ、手書きテキスト(署名)、チェックマークなどのテキストを含む画像の両方から情報を抽出できます。このチュートリアルでは、必要なオブジェクトと権限を設定し、処理パイプラインで使用する Document AI モデルビルドを作成することで、 Document AI を紹介します。

このチュートリアルでは Snowsight ウェブインターフェイスを使用します。SQLを使用する必要がある手順については、SQLの実行をサポートする任意のSnowflakeクライアントを使用できます。

学習内容

このチュートリアルでは、次の方法を学習します。

  • Document AI で作業するために必要なオブジェクトと権限を設定します。

  • 構造化されていないドキュメントからデータを抽出するために、 Snowsight の Document AI ユーザーインターフェイスを使用して、 Document AI モデルビルドを準備します。

  • Document AI モデルの構築、ストリームとタスクを使用して、ステージで新しいドキュメントを継続的に処理するパイプラインを作成します。

前提条件

このチュートリアルを完了するには、以下の前提条件が必要です。

  • このチュートリアルで使用するカスタムロールを作成し、新しいロールに必要な権限を付与するために使用されるACCOUNTADMINロールを持つユーザーとして接続する必要があります。

  • Document AI でサポートされているコマーシャルリージョンのいずれかの Snowflake アカウントが必要です。サポートされている地域の詳細については、 Document AI 可用性 をご参照ください。

  • Document AI を使ってウェアハウスを準備する必要があります。ウェアハウスの選択については、 Document AI に対して最適なウェアハウスサイズを決定する をご参照ください。

必要なオブジェクトと権限の設定

このセクションでは、以下を実行します。

  • Document AI モデルビルドを格納するデータベースとスキーマを作成します。

  • Document AI モデルビルドとドキュメント処理パイプラインを準備するカスタムロールを作成します。

  • カスタムロールに必要な権限を付与します。

データベース、スキーマ、カスタムロールを作成する

データベース、スキーマ、および Document AI を操作するロールを作成するには、以下を実行します。

  1. Document AI モデルビルドを作成するためのデータベースとスキーマを作成します。

    CREATE DATABASE doc_ai_db;
    CREATE SCHEMA doc_ai_db.doc_ai_schema;
    
    Copy
  2. Document AI モデルビルドを準備し、処理パイプラインを作成するために、カスタムロール doc_ai_role を作成します。

    USE ROLE ACCOUNTADMIN;
    
    CREATE ROLE doc_ai_role;
    
    Copy

必要な権限の付与

Document AI で作業するために必要な権限を付与するには、イカを実行します。

  1. SNOWFLAKE.DOCUMENT_INTELLIGENCE_CREATOR データベースロールを doc_ai_role ロールに付与します。

    GRANT DATABASE ROLE SNOWFLAKE.DOCUMENT_INTELLIGENCE_CREATOR TO ROLE doc_ai_role;
    
    Copy
  2. doc_ai_role ロールにウェアハウスの使用権限と操作権限を付与します。

    GRANT USAGE, OPERATE ON WAREHOUSE <your_warehouse> TO ROLE doc_ai_role;
    
    Copy
  3. 作成したデータベースとスキーマを使用する権限を doc_ai_role に付与します。

    GRANT USAGE ON DATABASE doc_ai_db TO ROLE doc_ai_role;
    GRANT USAGE ON SCHEMA doc_ai_db.doc_ai_schema TO ROLE doc_ai_role;
    
    Copy
  4. doc_ai_role ロールにスキーマの作成ステージ権限を付与し、抽出用のドキュメントを保存します。

    GRANT CREATE STAGE ON SCHEMA doc_ai_db.doc_ai_schema TO ROLE doc_ai_role;
    
    Copy
  5. doc_ai_role ロールにモデルビルド( DOCUMENT_INTELLIGENCE クラスのインスタンス)を作成する権限を与えます。

    GRANT CREATE SNOWFLAKE.ML.DOCUMENT_INTELLIGENCE ON SCHEMA doc_ai_db.doc_ai_schema TO ROLE doc_ai_role;
    
    Copy
  6. doc_ai_role ロールに、ストリームとタスクを使用して処理パイプラインを作成するために必要な権限を付与します。

    GRANT CREATE STREAM, CREATE TABLE, CREATE TASK, CREATE VIEW ON SCHEMA doc_ai_db.doc_ai_schema TO ROLE doc_ai_role;
    GRANT EXECUTE TASK ON ACCOUNT TO ROLE doc_ai_role;
    
    Copy
  7. チュートリアルの次のステップで使用するために、 doc_ai_role をチュートリアルユーザーに付与します。

    GRANT ROLE doc_ai_role TO USER <your_user_name>;
    
    Copy

このセクションで学んだこと

このセクションでは、次の方法を学びました:

  • Document AI モデルビルドを含むデータベースとスキーマを作成する。

  • doc_ai_role カスタムロールを作成する。

  • doc_ai_role ロールに必要な権限を付与し、そのロールをチュートリアルユーザーに付与する。

Document AI モデルビルドを準備する

このセクションでは、 Document AI モデルビルドを作成し、モデルをテストするためのドキュメントをアップロードすることで、モデルビルドを準備します。

Document AI モデルビルドは、ドキュメントの単一の型を表します。このチュートリアルでは、検査レビューから情報を抽出するためのモデルビルドを作成します。 Document AI モデルビルドには、モデル、抽出されるデータ値、モデルをテストするためにアップロードされるドキュメントが含まれます。

Document AI モデルビルドを作成する

Document AI モデルビルドを作成するには、以下を実行します。

  1. Snowsight にサインインします。

  2. ナビゲーションメニューで AI & ML » Document AI を選択します。

  3. ウェアハウスを選択します。

  4. + Build を選択します。

  5. 表示されるダイアログで、モデルビルドの名前として inspection_reviews を入力し、場所 (doc_ai_db データベースと doc_ai_schema スキーマ)を選択します。

  6. Create を選択します。

Document AI モデルビルドへドキュメントをアップロードする

新しく作成された Document AI モデルビルドにドキュメントをアップロードするには、次のようにします。

  1. モデルビルドをテストするためのチュートリアルに必要なドキュメントを入手するには、 zipファイル をローカルファイルシステムにダウンロードしてください。

  2. PDFドキュメントを含むコンテンツを解凍します。

  3. inspection_reviews モデルビルドで、 Build Details タブを選択します。

  4. Upload documents を選択します。

  5. Browse を選択するか、ダウンロードしたドキュメントをドラッグします。

  6. Upload を選択します。

このセクションで学んだこと

このセクションでは、次の方法を学びました:

  • Document AI モデルビルドを作成します。

  • Document AI モデルビルドをテストするためのドキュメントをアップロードします。

データ値を定義して結果をレビューする

このセクションでは、 Document AI モデルに自然言語で質問して、データ値を定義します。その後、モデルが提供する回答を確認します。

データ値は、ドキュメントから抽出したい情報です。値は、値の名前と自然言語で尋ねられた質問で構成されます。

Document AI モデルビルドの値を定義するには:

  1. inspection_reviews モデルビルドで、 Build Details タブを選択します。

  2. Define values を選択します。

  3. Documents review ビューで、 + Value を選択します。

  4. 各ドキュメントについて、以下の値名と質問のペアを入力します。

    • inspection_date:検査日を教えてください。

    • inspection_grade:グレードは何ですか?

    • inspector:誰が検査を行ったのですか?

    • list_of_units:すべてのユニットは何ですか?

  5. 各ドキュメントとデータ値について、モデルが提供する回答を確認してください:

    • 回答が正しければ、チェックマークを選択してください。

    • 回答が正しくない場合は、正しい値を手入力してください。

このセクションで学んだこと

このセクションでは、次の方法を学びました:

  • 自然言語でモデルに質問して、抽出するデータ値を定義します。

  • モデルが提供した答えを確認または訂正して、結果を確認します。

Document AI モデルビルドを公開する

このセクションでは、 Document AI モデルビルドを公開し、処理パイプラインでの抽出に使用します。モデルビルドを公開することで、プロダクションで最新バージョンのモデルビルドを使用することができます。

モデルビルドを公開するには、以下を実行します。

  1. inspection_reviews モデルビルドで、 Build Details タブを選択します。

  2. Model accuracy の下で、 Publish version を選択します。

  3. 表示されるダイアログで、 Publish を選択して確定します。

注釈

モデルの精度と結果が満足のいくものでない場合は、オプションでモデルを微調整して改善することができます。微調整はこのチュートリアルでは行いません。モデルの評価とトレーニングの詳細については、 Document AI モデルの評価 をご参照ください。

このセクションで学んだこと

このセクションでは、 Document AI モデルビルドを公開し、処理パイプラインでの抽出にモデルビルドを使用します。

ドキュメント処理パイプラインを作成する

このセクションでは、すでに用意されている Document AI モデルビルド、ストリーム、タスクを使用して、処理パイプラインを作成します。パイプラインは、内部ステージングに保存された新しい検査ドキュメントから情報を抽出します。

処理パイプラインを作成するには

  • ストリームとタスクを使用してパイプラインを設定します。

  • 新しいドキュメントを内部ステージにアップロードします。

  • 抽出された情報を表示します。

処理パイプラインを設定する

  1. 内部 my_pdf_stage ステージを作成し、ドキュメントを保存します。

    CREATE OR REPLACE STAGE my_pdf_stage
      DIRECTORY = (ENABLE = TRUE)
      ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
    
    Copy
  2. my_pdf_stage ステージに my_pdf_stream ストリームを作成する:

    CREATE STREAM my_pdf_stream ON STAGE my_pdf_stage;
    
    Copy
  3. ステージングされたドキュメントファイルを格納するディレクトリテーブルのメタデータをリフレッシュします。

    ALTER STAGE my_pdf_stage REFRESH;
    
    Copy
  4. データベースおよびスキーマを指定する:

    USE DATABASE doc_ai_db;
    USE SCHEMA doc_ai_schema;
    
    Copy
  5. pdf_reviews テーブルを作成し、ドキュメントに関する情報( file_name など)と、 PDF ドキュメントから抽出するデータを格納します。

    CREATE OR REPLACE TABLE pdf_reviews (
      file_name VARCHAR,
      file_size VARIANT,
      last_modified VARCHAR,
      snowflake_file_url VARCHAR,
      json_content VARCHAR
    );
    
    Copy

    json_content 列には、抽出された情報が JSON 形式で表示されます。

  6. ステージで新しいドキュメントを処理するために、 load_new_file_data タスクを作成します。

    CREATE OR REPLACE TASK load_new_file_data
      WAREHOUSE = <your_warehouse>
      SCHEDULE = '1 minute'
      COMMENT = 'Process new files in the stage and insert data into the pdf_reviews table.'
    WHEN SYSTEM$STREAM_HAS_DATA('my_pdf_stream')
    AS
    INSERT INTO pdf_reviews (
      SELECT
        RELATIVE_PATH AS file_name,
        size AS file_size,
        last_modified,
        file_url AS snowflake_file_url,
        inspection_reviews!PREDICT(GET_PRESIGNED_URL('@my_pdf_stage', RELATIVE_PATH), 1) AS json_content
      FROM my_pdf_stream
      WHERE METADATA$ACTION = 'INSERT'
    );
    
    Copy

    新しく作成されたタスクは自動的に中断されることに注意してください。

  7. 新しく作成したタスクを開始します。

    ALTER TASK load_new_file_data RESUME;
    
    Copy

注釈

ドキュメント AI は サーバーレスタスク をサポートしていません。

内部ステージングへ新規ドキュメントをアップロードする

  1. チュートリアルに必要なドキュメントを入手するには、 zipファイル をローカルファイルシステムにダウンロードしてください。

  2. PDFファイルを含むコンテンツを解凍します。

  3. Snowsightで、 Data » Databases を選択します。

  4. doc_ai_db データベース、 doc_ai_schemamy_pdf_stage ステージを選択します。

  5. + Files を選択します。

  6. 表示される Upload Your Files ダイアログで、先ほどダウンロードしたファイルを選択します。

  7. Upload を選択します。

抽出された情報を表示する

  1. ステージにドキュメントをアップロードした後、新しいドキュメントから抽出された情報を表示します。

    SELECT * FROM pdf_reviews;
    
    Copy
  2. pdf_reviews_2 テーブルを作成し、抽出された情報を個別の列で分析します。

    CREATE OR REPLACE TABLE doc_ai_db.doc_ai_schema.pdf_reviews_2 AS (
     WITH temp AS (
       SELECT
         RELATIVE_PATH AS file_name,
         size AS file_size,
         last_modified,
         file_url AS snowflake_file_url,
         inspection_reviews!PREDICT(get_presigned_url('@my_pdf_stage', RELATIVE_PATH), 1) AS json_content
       FROM directory(@my_pdf_stage)
     )
    
     SELECT
       file_name,
       file_size,
       last_modified,
       snowflake_file_url,
       json_content:__documentMetadata.ocrScore::FLOAT AS ocrScore,
       f.value:score::FLOAT AS inspection_date_score,
       f.value:value::STRING AS inspection_date_value,
       g.value:score::FLOAT AS inspection_grade_score,
       g.value:value::STRING AS inspection_grade_value,
       i.value:score::FLOAT AS inspector_score,
       i.value:value::STRING AS inspector_value,
       ARRAY_TO_STRING(ARRAY_AGG(j.value:value::STRING), ', ') AS list_of_units
     FROM temp,
       LATERAL FLATTEN(INPUT => json_content:inspection_date) f,
       LATERAL FLATTEN(INPUT => json_content:inspection_grade) g,
       LATERAL FLATTEN(INPUT => json_content:inspector) i,
       LATERAL FLATTEN(INPUT => json_content:list_of_units) j
     GROUP BY ALL
    );
    
    Copy
  3. 出力を表示します。

    SELECT * FROM pdf_reviews_2;
    
    Copy

このテーブルでは、 FLATTEN 関数を使用して、 json_content JSON を表示しやすいように列ごとに解析しています。

このテーブルには、検査ドキュメント用にモデルビルドを作成した際に定義されたデータ値( inspection_grade_valueinspection_date_value など)と、それに対応する信頼度スコア(inspection_grade_scoreinspection_date_score)が含まれています。

このセクションで学んだこと

このセクションでは、次の方法を学びました:

  • 新しいドキュメントを保存する内部ステージを作成します。

  • 処理パイプラインの準備に必要なストリームとタスクを作成します。

  • 内部ステージにドキュメントをアップロードします。

  • 抽出された情報をテーブルに表示します。

詳細

おめでとうございます。このチュートリアルを修了しました。これで、 Document AI を使って独自のユースケースに取り組み始める準備が整いました。

その過程で、次の方法を学習しました:

  • Document AI で作業するために必要なオブジェクトと権限を設定します。

  • Document AI モデルビルドを作成します。

  • Document AI モデルビルドにドキュメントをアップロードしてモデルをテストします。

  • 自然言語でモデルに質問することで、抽出するデータ値を定義します。

  • モデルが提供する答えを確認したり修正したりして、結果を再検討します。

  • Document AI モデルビルドを公開して、処理パイプラインでの抽出にモデルビルドを使用します。

  • ストリームとタスクを作成してドキュメント処理パイプラインを準備し、 Document AI モデルビルドを使用して新しいドキュメントから情報を抽出します。

追加のリソース

以下のリソースを使って学習を続行します。