使用 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.
在 Google Cloud 控制台中,前往 BigQuery 页面。
在探索器窗格中,点击您的项目名称。
点击
查看操作 > 创建数据集。在 创建数据集 页面上,执行以下操作:
在 Dataset ID 中,输入数据集的名称。
对于位置类型,为数据集选择一个位置。
点击创建数据集。
转到 BigQuery 页面。
在浏览器窗格中,点击
添加数据:系统随即会打开添加数据对话框。
在过滤条件窗格中的数据源类型部分,选择商务应用。
或者,在搜索数据源字段中,输入
Vertex AI
。在精选数据源部分中,点击 Vertex AI。
点击 Vertex AI 模型:BigQuery 联合解决方案卡片。
在连接类型列表中,选择 Vertex AI 远程模型、远程函数和 BigLake(Cloud 资源)。
在连接 ID 字段中,输入连接的名称。
点击创建连接。
点击转到连接。
在连接信息窗格中,复制服务账号 ID 以在后续步骤中使用。
在命令行环境中,创建连接:
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"}
- 启动 Cloud Shell。
-
设置要应用 Terraform 配置的默认 Google Cloud 项目。
您只需为每个项目运行一次以下命令,即可在任何目录中运行它。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。
-
在 Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有
.tf
扩展名,例如main.tf
。在本教程中,该文件称为main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。
将示例代码复制到新创建的
main.tf
中。(可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。
- 查看和修改要应用到您的环境的示例参数。
- 保存更改。
-
初始化 Terraform。您只需为每个目录执行一次此操作。
terraform init
(可选)如需使用最新的 Google 提供程序版本,请添加
-upgrade
选项:terraform init -upgrade
-
查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
terraform plan
根据需要更正配置。
-
通过运行以下命令并在提示符处输入
yes
来应用 Terraform 配置:terraform apply
等待 Terraform 显示“应用完成!”消息。
- 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。
前往 IAM 和管理页面。
点击
授予访问权限。系统随即会打开添加主账号对话框。
在新的主账号字段中,输入您之前复制的服务账号 ID。
在选择角色字段中,选择 Document AI,然后选择 Document AI Viewer。
点击添加其他角色。
在选择角色字段中,选择 Cloud Storage,然后选择 Storage Object Viewer。
点击保存。
PROJECT_NUMBER
:您的项目编号。MEMBER
:您之前复制的服务账号 ID。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
。PROCESSOR_ID
:文档处理器 ID。 如需查找此值,请查看处理器详情,然后查看基本信息部分中的 ID 行。PROJECT_ID
:您的项目 ID。DATASET_ID
:包含该模型的数据集的 ID。MODEL_NAME
:模型的名称。OBJECT_TABLE_NAME
:包含要处理的文档 URI 的对象表的名称。PROCESS_OPTIONS
:用于指定如何处理文档的 JSON 配置。例如,您可以使用此方法为布局解析器指定文档分块PROJECT_ID
:您的项目 ID。DATASET_ID
:包含该模型的数据集的 ID。MODEL_NAME
:模型的名称。OBJECT_TABLE_NAME
:包含要处理的文档 URI 的对象表的名称。FILTERS
:用于过滤掉您要在对象表列中处理的文档的条件。NUM_DOCUMENTS
:您要处理的文档数上限。PROCESS_OPTIONS
:用于定义配置的 JSON 配置,例如布局解析器的分块配置- 如需了解 BigQuery ML 中的模型推理,请参阅模型推理概览。
- 如需了解每种模型类型支持的 SQL 语句和函数,请参阅每个模型的端到端用户体验历程。
创建处理器
在 Document AI 中创建处理器以处理文档。处理器必须是受支持的类型。
创建数据集
您必须在同一区域中创建数据集、连接和文档处理器。
创建一个 BigQuery 数据集来存放资源:
控制台
bq
创建连接
如果您已配置了具有适当权限的默认连接,则可以跳过此步骤。
为远程模型创建要使用的 Cloud 资源连接,并获取连接的服务账号。在与上一步中创建的数据集相同的位置创建连接。
从下列选项中选择一项:
控制台
bq
Terraform
使用 google_bigquery_connection
资源。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为客户端库设置身份验证。
以下示例在 US
区域中创建一个名为 my_cloud_resource_connection
的 Cloud 资源连接:
如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。
准备 Cloud Shell
准备目录
每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。
应用更改
向服务账号授予访问权限
从下列选项中选择一项:
控制台
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
替换以下内容:
未能授予权限会导致 Permission denied
错误。
创建模型
使用 CLOUD_AI_DOCUMENT_V1
这一 REMOTE_SERVICE_TYPE
创建远程模型:
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`} OPTIONS ( REMOTE_SERVICE_TYPE = 'CLOUD_AI_DOCUMENT_V1', DOCUMENT_PROCESSOR = 'PROCESSOR_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` [, PROCESS_OPTIONS => ( JSON 'PROCESS_OPTIONS')] );
请替换以下内容:
或者,使用 ML.PROCESS_DOCUMENT
处理部分文档:
SELECT * FROM ML.PROCESS_DOCUMENT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, (SELECT * FROM `PROJECT_ID.DATASET_ID.OBJECT_TABLE_NAME` WHERE FILTERS LIMIT NUM_DOCUMENTS ) [, PROCESS_OPTIONS => ( JSON 'PROCESS_OPTIONS')] );
请替换以下内容:
示例
示例 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`, (SELECT * FROM `myproject.mydataset.expense_reports` WHERE uri LIKE '%restaurant%'));