ML.PROCESS_DOCUMENT 関数を使用してドキュメントを処理する

このドキュメントでは、リモートモデルML.PROCESS_DOCUMENT 関数を使用して、オブジェクト テーブルのドキュメントから有用な分析情報を抽出する方法について説明します。

サポートされているロケーション

この手順で使用するリモートモデルは、US または EU マルチリージョンに作成する必要があります。ML.PROCESS_DOCUMENT 関数は、リモートモデルと同じリージョンで実行する必要があります。

必要な権限

  • Document AI プロセッサを作成するには、次のロールが必要です。

    • roles/documentai.editor
  • 接続を作成するには、次のロールのメンバーシップが必要です。

    • roles/bigquery.connectionAdmin
  • BigQuery ML を使用してモデルを作成するには、次の権限が必要です。

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • 推論を実行するには、次の権限が必要です。

    • オブジェクト テーブルに対する bigquery.tables.getData
    • モデルに対する bigquery.models.getData
    • bigquery.jobs.create

始める前に

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. BigQuery, BigQuery Connection API, and Document AI API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. BigQuery, BigQuery Connection API, and Document AI API を有効にします。

    API を有効にする

プロセッサを作成する

Document AI でドキュメントを処理するプロセッサを作成します。プロセッサは、サポートされているタイプである必要があります。

接続を作成する

クラウド リソース接続を作成し、接続のサービス アカウントを取得します。

次のオプションのいずれかを選択します。

コンソール

  1. [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. 接続を作成するには、[データを追加] をクリックし、続いて [外部データソースへの接続] をクリックします。

  3. [接続タイプ] リストで、[BigLake とリモート関数(クラウド リソース)] を選択します。

  4. [接続 ID] フィールドに接続の名前を入力します。

  5. [接続を作成] をクリックします。

  6. [接続へ移動] をクリックします。

  7. [接続情報] ペインで、次の手順で使用するサービス アカウント ID をコピーします。

bq

  1. コマンドライン環境で接続を作成します。

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID
    

    --project_id パラメータは、デフォルト プロジェクトをオーバーライドします。

    次のように置き換えます。

    接続リソースを作成すると、BigQuery は、一意のシステム サービス アカウントを作成し、それを接続に関連付けます。

    トラブルシューティング: 次の接続エラーが発生した場合は、Google Cloud SDK を更新します。

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. 後の手順で必要になるため、サービス アカウント ID を取得してコピーします。

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID
    

    出力は次のようになります。

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

main.tf ファイルに次のセクションを追加します。

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
次のように置き換えます。

サービス アカウントへのアクセスを許可する

次のオプションのいずれかを選択します。

コンソール

  1. [IAM と管理] ページに移動します。

    [IAM と管理] に移動

  2. [アクセス権を付与] をクリックします。

    [プリンシパルを追加] ダイアログが開きます。

  3. [新しいプリンシパル] フィールドに、前の手順でコピーしたサービス アカウント ID を入力します。

  4. [ロールを選択] フィールドで、[Document AI] を選択し、[Document AI 閲覧者] を選択します。

  5. [別のロールを追加] をクリックします。

  6. [ロールを選択] フィールドで、[Cloud Storage] を選択し、続いて [Storage オブジェクト閲覧者] を選択します。

  7. [保存] をクリックします。

gcloud

gcloud projects add-iam-policy-binding コマンドを実行します。

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/documentai.viewer' --condition=None
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/storage.objectViewer' --condition=None

次のように置き換えます。

  • PROJECT_NUMBER: プロジェクトの番号。
  • MEMBER: 先ほどコピーしたサービス アカウント ID。

権限を付与しないと、Permission denied エラーが発生します。

データセットを作成する

モデルとオブジェクト テーブルを含むデータセットを作成します。

モデルを作成する

CLOUD_AI_DOCUMENT_V1REMOTE_SERVICE_TYPE を使用してリモートモデルを作成します。

CREATE OR REPLACE MODEL
`PROJECT_ID.DATASET_ID.MODEL_NAME`
REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
  REMOTE_SERVICE_TYPE = 'CLOUD_AI_DOCUMENT_V1',
  DOCUMENT_PROCESSOR = 'projects/PROJECT_NUMBER/locations/LOCATION/processors/PROCESSOR_ID/processorVersions/PROCESSOR_VERSION'
);

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • DATASET_ID: モデルを格納するデータセットの ID。
  • MODEL_NAME: モデルの名前。
  • REGION: 接続で使用されるリージョン。
  • CONNECTION_ID: 接続 ID。例: myconnection

    Google Cloud コンソールで接続の詳細を表示する場合、接続 ID は接続 ID に表示される完全修飾接続 ID の最後のセクションの値です(例: projects/myproject/locations/connection_location/connections/myconnection)。

  • PROJECT_NUMBER: ドキュメント プロセッサを含むプロジェクトのプロジェクト番号。この値を確認するには、プロセッサの詳細を調べ予測エンドポイントを確認し、プロジェクト要素に続く値を取得します(例: https://us-documentai.googleapis.com/v1/projects/project_number/locations/processor_location/processors/processor_id:process)。
  • LOCATION: ドキュメント プロセッサで使用されるロケーション。この値を確認するには、プロセッサの詳細を調べ予測エンドポイントを確認し、ロケーション要素に続く値を取得します(例: https://us-documentai.googleapis.com/v1/projects/project_number/locations/processor_location/processors/processor_id:process)。
  • PROCESSOR_ID: ドキュメント プロセッサ ID。この値を確認するには、プロセッサの詳細を調べ予測エンドポイントを確認し、プロセッサ要素に続く値を取得します(例: https://us-documentai.googleapis.com/v1/projects/project_number/locations/processor_location/processors/processor_id:process)。
  • PROCESSOR_VERSION: ドキュメント プロセッサのバージョン。この値を確認するには、プロセッサの詳細を調べ、[バージョンの管理] タブを選択し、使用するバージョンのバージョン ID の値をコピーします。

モデルの出力列を表示するには、モデルの作成後にクエリ結果で [モデルに移動] をクリックします。出力列は、[スキーマ] タブの [ラベル] セクションに表示されます。

オブジェクト テーブルを作成する

Cloud Storage の一連のドキュメントにオブジェクト テーブルを作成します。オブジェクト テーブル内のドキュメントは、サポートされるタイプである必要があります。

ドキュメントを処理する

ML.PROCESS_DOCUMENT 関数を使用してドキュメントを処理します。

SELECT *
FROM ML.PROCESS_DOCUMENT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE `PROJECT_ID.DATASET_ID.OBJECT_TABLE_NAME`
);

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID。
  • DATASET_ID: モデルを格納するデータセットの ID。
  • MODEL_NAME: モデルの名前。
  • OBJECT_TABLE_NAME: 処理するドキュメントの URI を含むオブジェクト テーブルの名前。

例 1

次の例では、経費パーサーを使用して、documents テーブルで表されるドキュメントを処理します。

SELECT *
FROM ML.PROCESS_DOCUMENT(
  MODEL `myproject.mydataset.expense_parser`,
  TABLE `myproject.mydataset.documents`
);

このクエリは、通貨、合計額、受領日、経費報告書の項目を含む、解析された経費報告書を返します。ml_process_document_result 列には経費パーサーの未加工の出力が含まれ、ml_process_document_statue 列にはドキュメント処理によって返されたエラーが含まれます。

例 2

次の例は、オブジェクト テーブルをフィルタリングして処理するドキュメントを選択し、結果をテーブルに書き込む方法を示しています。

CREATE TABLE `myproject.mydataset.expense_details`
AS
SELECT uri, content_type, receipt_date, purchase_time, total_amount, currency
FROM
  ML.PROCESS_DOCUMENT(
    MODEL `myproject.mydataset.expense_parser`, TABLE `myproject.mydataset.expense_reports`)
WHERE uri LIKE '%restaurant%';

次のステップ