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
- オブジェクト テーブルに対する
始める前に
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection API, and Document AI APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection API, and Document AI APIs.
プロセッサを作成する
Document AI でドキュメントを処理するプロセッサを作成します。プロセッサは、サポートされているタイプである必要があります。
接続を作成する
クラウド リソース接続を作成し、接続のサービス アカウントを取得します。
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
接続を作成するには、[
追加] をクリックし、続いて [外部データソースへの接続] をクリックします。[接続タイプ] リストで、[Vertex AI リモートモデル、リモート関数、BigLake(Cloud リソース)] を選択します。
[接続 ID] フィールドに接続の名前を入力します。
[接続を作成] をクリックします。
[接続へ移動] をクリックします。
[接続情報] ペインで、次の手順で使用するサービス アカウント ID をコピーします。
bq
コマンドライン環境で接続を作成します。
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
--project_id
パラメータは、デフォルト プロジェクトをオーバーライドします。次のように置き換えます。
REGION
: 接続のリージョンPROJECT_ID
: 実際の Google Cloud プロジェクト IDCONNECTION_ID
: 接続の ID
接続リソースを作成すると、BigQuery は、一意のシステム サービス アカウントを作成し、それを接続に関連付けます。
トラブルシューティング: 次の接続エラーが発生した場合は、Google Cloud SDK を更新します。
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
後の手順で使用するため、サービス アカウント 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 {} }次のように置き換えます。
CONNECTION_ID
: 接続の IDPROJECT_ID
: 実際の Google Cloud プロジェクト IDREGION
: 接続のリージョン
サービス アカウントへのアクセスを許可する
次のオプションのいずれかを選択します。
コンソール
[IAM と管理] ページに移動します。
[
アクセス権を付与] をクリックします。[プリンシパルを追加] ダイアログが開きます。
[新しいプリンシパル] フィールドに、前の手順でコピーしたサービス アカウント ID を入力します。
[ロールを選択] フィールドで、[Document AI] を選択し、[Document AI 閲覧者] を選択します。
[別のロールを追加] をクリックします。
[ロールを選択] フィールドで、[Cloud Storage] を選択し、続いて [Storage オブジェクト閲覧者] を選択します。
[保存] をクリックします。
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_V1
の REMOTE_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_status
列にはドキュメント処理によって返されたエラーが含まれます。
例 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%';
次のステップ
- BigQuery ML でのモデルの推論については、モデルの推論の概要をご覧ください。
- 各モデルタイプでサポートされている SQL ステートメントと関数については、各モデルのエンドツーエンドのユーザー ジャーニーをご覧ください。