Effectuer des prédictions à l'aide de modèles TensorFlow importés

Présentation

Cette page explique comment importer des modèles TensorFlow dans un ensemble de données BigQuery ML, puis comment s'en servir pour effectuer des prédictions à partir d'une requête SQL. Vous pouvez importer des modèles TensorFlow à l'aide des interfaces suivantes :

  • La console Google Cloud
  • La commande bq query dans l'outil de ligne de commande bq
  • L'API BigQuery

Pour en savoir plus sur l'importation de modèles TensorFlow dans BigQuery ML, y compris sur les exigences de format et de stockage, consultez la section Instruction CREATE MODEL pour l'importation de modèles TensorFlow.

Importer des modèles TensorFlow

Pour importer des modèles TensorFlow dans un ensemble de données, procédez comme suit :

Console

  1. Dans Google Cloud Console, accédez à la page "BigQuery".

    Accéder à BigQuery

  2. Dans l'éditeur de requêtes, saisissez l'instruction CREATE MODEL suivante :

     CREATE OR REPLACE MODEL `example_dataset.imported_tf_model`
      OPTIONS (MODEL_TYPE='TENSORFLOW',
       MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')
    

    La requête précédente importe un modèle situé à l'emplacement gs://cloud-training-demos/txtclass/export/exporter/1549825580/* en tant que modèle BigQuery ML nommé imported_tf_model. L'URI Cloud Storage se termine par un caractère générique (*), qui permet à BigQuery ML d'importer également les éléments associés au modèle. Le modèle importé est un modèle de classificateur de texte TensorFlow capable d'identifier le site Web ayant publié un titre d'article donné.

  3. Votre nouveau modèle devrait désormais s'afficher dans le panneau Ressources. À mesure que vous développez chacun des ensembles de données d'un projet, les modèles sont répertoriés avec les autres ressources BigQuery des ensembles de données. Les modèles sont indiqués par l'icône icône de modèle.

  4. Si vous sélectionnez le nouveau modèle dans le panneau Ressources, les informations relatives au modèle s'affichent sous l'éditeur de requête.

    Informations sur le modèle TensorFlow

bq

Pour importer un modèle TensorFlow à partir de Cloud Storage, exécutez une requête par lot en saisissant une commande semblable à celle-ci :

bq query \
--use_legacy_sql=false \
"CREATE MODEL
  `mydataset.mymodel`
OPTIONS
  (MODEL_TYPE='TENSORFLOW',
   MODEL_PATH='gs://bucket/path/to/saved_model/*')"

Exemple :

bq query --use_legacy_sql=false \
"CREATE OR REPLACE MODEL
  `example_dataset.imported_tf_model`
OPTIONS
  (MODEL_TYPE='TENSORFLOW',
    MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')"

Une fois le modèle importé, il doit apparaître dans le résultat de la requête bq ls [dataset_name] :

$ bq ls example_dataset

       tableId        Type    Labels   Time Partitioning
 ------------------- ------- -------- -------------------
  imported_tf_model   MODEL

API

Insérez une nouvelle tâche et renseignez la propriété jobs#configuration.query comme dans le corps de la requête suivante :

{
  "query": "CREATE MODEL `project_id:mydataset.mymodel` OPTIONS(MODEL_TYPE='TENSORFLOW' MODEL_PATH='gs://bucket/path/to/saved_model/*')"
}

Effectuer des prédictions à l'aide des modèles TensorFlow importés

Pour effectuer des prédictions à l'aide des modèles TensorFlow importés, procédez comme suit : Les exemples suivants supposent que vous avez importé le modèle TensorFlow comme vous l'avez fait dans l'exemple précédent.

Console

  1. Dans Google Cloud Console, accédez à la page "BigQuery".

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez une requête à l'aide de ML.PREDICT comme ceci :

     SELECT *
       FROM ML.PREDICT(MODEL example_dataset.imported_tf_model,
         (
          SELECT title AS input
          FROM bigquery-public-data.hacker_news.full
         )
     )
     

    La requête précédente utilise le modèle nommé imported_tf_model dans l'ensemble de données example_dataset du projet en cours pour effectuer des prédictions à partir des données d'entrée de la table publique full de l'ensemble de données hacker_news du projet bigquery-public-data. Dans ce cas, la fonction serving_input_fn du modèle TensorFlow spécifie que le modèle s'attend à une seule chaîne d'entrée nommée input. Par conséquent, la sous-requête attribue l'alias input à la colonne dans l'instruction SELECT de la sous-requête.

    Cette requête renvoie les résultats ci-dessous. Dans cet exemple, le modèle génère la colonne dense_1, qui contient un tableau de valeurs de probabilité, ainsi qu'une colonne input qui affiche les valeurs de chaîne correspondantes de la table d'entrée. Chaque valeur d'élément dans le tableau représente la probabilité que la chaîne d'entrée correspondante soit un titre d'article issu d'une publication spécifique.

    Résultats de la requête

bq

Pour effectuer des prédictions à partir des données d'entrée de la table input_data, saisissez une commande comme suit, à l'aide du modèle TensorFlow importé my_model :

bq query \
--use_legacy_sql=false \
'SELECT *
 FROM ML.PREDICT(
   MODEL `my_project.my_dataset.my_model`,
   (SELECT * FROM input_data))'

Exemple :

bq query \
--use_legacy_sql=false \
'SELECT *
FROM ML.PREDICT(
  MODEL `tensorflow_sample.imported_tf_model`,
  (SELECT title AS input FROM `bigquery-public-data.hacker_news.full`))'

Cet exemple renvoie ce type de résultats :

    +------------------------------------------------------------------------+----------------------------------------------------------------------------------+
    |                               dense_1                                  |                                       input                                      |
    +------------------------------------------------------------------------+----------------------------------------------------------------------------------+
    |   ["0.6251608729362488","0.2989124357700348","0.07592673599720001"]    | How Red Hat Decides Which Open Source Companies t...                             |
    |   ["0.014276246540248394","0.972910463809967","0.01281337533146143"]   | Ask HN: Toronto/GTA mastermind around side income for big corp. dev?             |
    |   ["0.9821603298187256","1.8601855117594823E-5","0.01782100833952427"] | Ask HN: What are good resources on strategy and decision making for your career? |
    |   ["0.8611106276512146","0.06648492068052292","0.07240450382232666"]   | Forget about promises, use harvests                                              |
    +------------------------------------------------------------------------+----------------------------------------------------------------------------------+

API

Insérez une nouvelle tâche et renseignez la propriété jobs#configuration.query comme dans le corps de la requête suivante :

{
  "query": "SELECT * FROM ML.PREDICT(MODEL `my_project.my_dataset.my_model`, (SELECT * FROM input_data))"
}

Étape suivante