Procesa documentos con la función ML.Process_DOCUMENT

En este documento, se describe cómo usar la función ML.PROCESS_DOCUMENT con un modelo remoto para extraer estadísticas útiles de los documentos de una tabla de objetos

Ubicaciones admitidas

Debes crear el modelo remoto que se usa en este procedimiento en la multirregión US o EU. Debes ejecutar la función ML.PROCESS_DOCUMENT en la misma región que el modelo remoto.

Permisos necesarios

  • Para crear un procesador de Document AI, necesitas el siguiente rol:

    • roles/documentai.editor
  • Para crear una conexión, necesitas membresía en la siguiente función

    • roles/bigquery.connectionAdmin
  • Para crear el modelo con BigQuery ML, necesitas los siguientes permisos:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • Para ejecutar inferencias, necesitas los siguientes permisos:

    • bigquery.tables.getData en la tabla de objetos
    • bigquery.models.getData en el modelo
    • bigquery.jobs.create

Antes de comenzar

  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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the BigQuery, BigQuery Connection API, and Document AI APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the BigQuery, BigQuery Connection API, and Document AI APIs.

    Enable the APIs

Crea un procesador

Crear un procesador en Document AI para procesar los documentos. El procesador debe ser de un tipo compatible.

Crear una conexión

Crea una conexión de recurso de Cloud y obtén la cuenta de servicio de la conexión.

Elige una de las opciones siguientes:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Para crear una conexión, haz clic en Agregar y, luego, en Conexiones a fuentes de datos externas.

  3. En la lista Tipo de conexión, selecciona Modelos remotos de Vertex AI, funciones remotas y BigLake (Cloud Resource).

  4. En el campo ID de conexión, escribe un nombre para tu conexión.

  5. Haz clic en Crear conexión (Create connection).

  6. Haz clic en Ir a la conexión.

  7. En el panel Información de conexión, copia el ID de la cuenta de servicio para usarlo en un paso posterior.

bq

  1. En un entorno de línea de comandos, crea una conexión:

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

    El parámetro --project_id anula el proyecto predeterminado.

    Reemplaza lo siguiente:

    • REGION: tu región de conexión
    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • CONNECTION_ID: Es un ID para tu conexión.

    Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia con la conexión.

    Solución de problemas: Si recibes el siguiente error de conexión, actualiza el SDK de Google Cloud:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Recupera y copia el ID de cuenta de servicio para usarlo en un paso posterior:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    El resultado es similar a este:

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

Terraform

Agrega la siguiente sección a tu archivo 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 {}
}        
Reemplaza lo siguiente:

  • CONNECTION_ID: Es un ID para tu conexión.
  • PROJECT_ID: El ID del proyecto de Google Cloud.
  • REGION: tu región de conexión

Otorga acceso a la cuenta de servicio

Elige una de las opciones siguientes:

Console

  1. Ir a la página IAM y administración

    Ir a IAM y administración

  2. Haz clic en Otorgar acceso.

    Se abre el cuadro de diálogo Agregar principales.

  3. En el campo Principales nuevas, escribe el ID de la cuenta de servicio que copiaste antes.

  4. En el campo Elegir un rol, elige Document AI y, luego, Visualizador de Document AI.

  5. Haz clic en Agregar otro rol.

  6. En el campo Elige una función, elige Cloud Storage y, luego,Visualizador de objetos de Storage.

  7. Haz clic en Guardar.

gcloud

Usa el comando 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

Reemplaza lo siguiente:

  • PROJECT_NUMBER: Es el número de tu proyecto.
  • MEMBER: Es el ID de la cuenta de servicio que copiaste antes.

Si no se otorga el permiso, se produce un Permission denied error.

Crea un conjunto de datos

Crea un conjunto de datos para que contenga el modelo y la tabla de objetos. Debes crear el conjunto de datos, la conexión y el procesador de documentos en la misma región.

Crear un modelo

Crea un modelo remoto con un REMOTE_SERVICE_TYPE de CLOUD_AI_DOCUMENT_V1:

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 = 'PROCESSOR_ID'
);

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • DATASET_ID: El ID del conjunto de datos que contendrá el modelo.
  • MODEL_NAME: el nombre del modelo
  • REGION: Es la región que usa la conexión.
  • CONNECTION_ID: el ID de conexión, por ejemplo, myconnection.

    Cuando ves los detalles de conexión en la consola de Google Cloud, el ID de conexión es el valor en la última sección del ID de conexión por completo calificado que se muestra en ID de conexión, por ejemplo projects/myproject/locations/connection_location/connections/myconnection.

  • PROCESSOR_ID: El ID del procesador de documentos. Para encontrar este valor, consulta los detalles del procesador y, luego, observa la fila ID en la sección Información básica.

Para ver las columnas de resultados del modelo, haz clic en Go to model en el resultado de la consulta después de crear el modelo. Las columnas de resultados se muestran en la sección Etiquetas de la pestaña Esquema.

Crea una tabla de objetos

Crea una tabla de objetos sobre un conjunto de documentos en Cloud Storage. Los documentos de la tabla de objeto deben ser de un tipo compatible.

Procesa documentos

Procesa todos los documentos con ML.PROCESS_DOCUMENT:

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

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • DATASET_ID: El ID del conjunto de datos que contiene el modelo.
  • MODEL_NAME: el nombre del modelo
  • OBJECT_TABLE_NAME: el nombre de la tabla de objetos que contiene los URI de los documentos que se deben procesar.

Como alternativa, procesa algunos de los documentos con 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
  )
);

Reemplaza lo siguiente:

  • PROJECT_ID: el ID de tu proyecto
  • DATASET_ID: El ID del conjunto de datos que contiene el modelo.
  • MODEL_NAME: el nombre del modelo
  • OBJECT_TABLE_NAME: el nombre de la tabla de objetos que contiene los URI de los documentos que se deben procesar.
  • FILTERS: Son las condiciones para filtrar los documentos que deseas procesar en las columnas de la tabla de objetos.
  • NUM_DOCUMENTS: Es la cantidad máxima de documentos que deseas procesar.

Ejemplos

Ejemplo 1

En el siguiente ejemplo, se usa el analizador de gastos para procesar los documentos representados por la tabla documents:

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

Esta consulta devuelve los informes de gastos analizados, incluidos el importe, la cantidad total, la fecha de recepción y los elementos de una sola línea de los informes de gastos. La columna ml_process_document_result contiene el resultado sin procesar del analizador de gastos y la columna ml_process_document_status contiene los errores que devuelve el procesamiento del documento.

Ejemplo 2

En el siguiente ejemplo, se muestra cómo filtrar la tabla de objetos para elegir qué documentos procesar y, luego, escribir los resultados en una tabla nueva:

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%'));

¿Qué sigue?