Traiter des documents avec la fonction ML.PROCESS_DOCUMENT

Ce document explique comment utiliser la fonction ML.PROCESS_DOCUMENT avec un modèle distant pour extraire des insights utiles des documents d'une table d'objet.

Pays acceptés

Vous devez créer le modèle distant utilisé dans cette procédure dans l'emplacement multirégional US ou EU. Vous devez exécuter la fonction ML.PROCESS_DOCUMENT dans la même région que le modèle distant.

Autorisations requises

  • Pour créer un processeur Document AI, vous devez disposer du rôle suivant :

    • roles/documentai.editor
  • Pour créer une connexion, vous devez être inscrit au rôle suivant :

    • roles/bigquery.connectionAdmin
  • Pour créer le modèle à l'aide de BigQuery ML, vous devez disposer des autorisations suivantes :

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • Pour exécuter une inférence, vous devez disposer des autorisations suivantes :

    • bigquery.tables.getData sur la table d'objets
    • bigquery.models.getData sur le modèle
    • bigquery.jobs.create

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  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

Créer un outil de traitement

Créez un outil de traitement dans Document AI pour traiter les documents. Le processeur doit être d'un type compatible.

Créer une connexion

Créez une connexion de ressource cloud et obtenez le compte de service de la connexion.

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Pour créer une connexion, cliquez sur Ajouter, puis sur Connexions aux sources de données externes.

  3. Dans la liste Type de connexion, sélectionnez Modèles distants Vertex AI, fonctions distantes et BigLake (ressource Cloud).

  4. Dans le champ ID de connexion, saisissez un nom pour votre connexion.

  5. Cliquez sur Créer une connexion.

  6. Cliquez sur Accéder à la connexion.

  7. Dans le volet Informations de connexion, copiez l'ID du compte de service à utiliser à l'étape suivante.

bq

  1. Dans un environnement de ligne de commande, créez une connexion :

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

    Le paramètre --project_id remplace le projet par défaut.

    Remplacez les éléments suivants :

    • REGION : votre région de connexion
    • PROJECT_ID : ID de votre projet Google Cloud
    • CONNECTION_ID : ID de votre connexion

    Lorsque vous créez une ressource de connexion, BigQuery crée un compte de service système unique et l'associe à la connexion.

    Dépannage : Si vous obtenez l'erreur de connexion suivante, mettez à jour le Google Cloud SDK :

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Récupérez et copiez l'ID du compte de service pour l'utiliser lors d'une prochaine étape :

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    Le résultat ressemble à ce qui suit :

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

Terraform

Ajoutez la section suivante à votre fichier 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 {}
}        
Remplacez les éléments suivants :

  • CONNECTION_ID : ID de votre connexion
  • PROJECT_ID : ID de votre projet Google Cloud
  • REGION : votre région de connexion

Accorder l'accès au compte de service

Sélectionnez l'une des options suivantes :

Console

  1. Accédez à la page IAM et administration.

    Accéder à IAM et administration

  2. Cliquez sur Accorder l'accès.

    La boîte de dialogue Ajouter des comptes principaux s'ouvre.

  3. Dans le champ Nouveaux comptes principaux, saisissez l'ID du compte de service que vous avez copié précédemment.

  4. Dans le champ Sélectionner un rôle, sélectionnez Document AI, puis Lecteur Document AI.

  5. Cliquez sur Ajouter un autre rôle.

  6. Dans le champ Sélectionner un rôle, sélectionnez Cloud Storage, puis Lecteur des objets Storage.

  7. Cliquez sur Enregistrer.

gcloud

Exécutez la commande 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

Remplacez les éléments suivants :

  • PROJECT_NUMBER : votre numéro de projet.
  • MEMBER : ID du compte de service que vous avez copié précédemment

L'échec de l'attribution de l'autorisation génère une erreur Permission denied.

Créer un ensemble de données

Créez un ensemble de données pour contenir le modèle et la table d'objets.

Créer un modèle

Créez un modèle distant avec une valeur 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 = 'projects/PROJECT_NUMBER/locations/LOCATION/processors/PROCESSOR_ID/processorVersions/PROCESSOR_VERSION'
);

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données pour contenir le modèle.
  • MODEL_NAME : nom du modèle
  • REGION : région utilisée par la connexion.
  • CONNECTION_ID : ID de connexion, par exemple myconnection.

    Lorsque vous affichez les détails de la connexion dans la console Google Cloud, il s'agit de la valeur de la dernière section de l'ID de connexion complet affiché dans ID de connexion (par exemple, projects/myproject/locations/connection_location/connections/myconnection).

  • PROJECT_NUMBER : numéro du projet contenant le processeur de documents. Pour trouver cette valeur, procédez comme suit :Affichez les détails du processeur, regardez le Point de terminaison de prédiction, et prenez la valeur qui suit l'élément Projets (par exemple, https://us-documentai.googleapis.com/v1/projects/project_number/locations/processor_location/processors/processor_id:process).
  • LOCATION : emplacement utilisé par le processeur de documents. Pour trouver cette valeur, procédez comme suit :Affichez les détails du processeur, regardez le Point de terminaison de prédiction, et prenez la valeur qui suit l'élément emplacements (par exemple https://us-documentai.googleapis.com/v1/projects/project_number/locations/processor_location/processors/processor_id:process).
  • PROCESSOR_ID : ID du processeur de documents Pour trouver cette valeur, procédez comme suit : Affichez les détails du processeur, regardez le Point de terminaison de prédiction, et prenez la valeur qui suit l'élément processeurs (par exemple, https://us-documentai.googleapis.com/v1/projects/project_number/locations/processor_location/processors/processor_id:process).
  • PROCESSOR_VERSION : version du processeur de documents. Pour trouver cette valeur, procédez comme suit : Affichez les détails du processeur, sélectionnez l'onglet Gérer les versions puis copiez la valeur de l'ID de la version que vous souhaitez utiliser.

Pour afficher les colonnes de sortie du modèle, cliquez sur Go to model (Accéder au modèle) dans le résultat de la requête après la création du modèle. Les colonnes de résultat sont affichées dans la section Libellés de l'onglet Schéma.

Créer une table d'objets

Créez une table d'objets sur un ensemble de documents dans Cloud Storage. Les documents de la table d'objets doivent être d'un type compatible.

Traiter des documents

Traitez les documents avec la fonction ML.PROCESS_DOCUMENT :

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

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet.
  • DATASET_ID : ID de l'ensemble de données contenant le modèle.
  • MODEL_NAME : nom du modèle
  • OBJECT_TABLE_NAME : nom de la table d'objets contenant les URI des documents à traiter.

Examples

Exemple 1

L'exemple suivant utilise l'analyseur de dépenses pour traiter les documents représentés par la table documents :

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

Cette requête renvoie les rapports de dépenses analysés, y compris la devise, le montant total, la date de réception et les lignes des rapports de dépenses. La colonne ml_process_document_result contient le résultat brut de l'analyseur de dépenses, et la colonne ml_process_document_status contient les erreurs renvoyées par le traitement du document.

Exemple 2

L'exemple suivant montre comment filtrer la table d'objets pour choisir les documents à traiter, puis écrire les résultats dans une table :

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

Étapes suivantes