インポートされた TensorFlow モデルで予測を行う

このチュートリアルでは、TensorFlow モデルを BigQuery ML データセットにインポートします。次に、SQL クエリを使用して、インポートしたモデルから予測を行います。

データセットを作成する

ML モデルを保存する BigQuery データセットを作成します。

コンソール

  1. Google Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [エクスプローラ] ペインで、プロジェクト名をクリックします。

  3. [アクションを表示] > [データセットを作成] をクリックします。

  4. [データセットを作成する] ページで、次の操作を行います。

    • [データセット ID] に「bqml_tutorial」と入力します。

    • [ロケーション タイプ] で [マルチリージョン] を選択してから、[US(米国の複数のリージョン)] を選択します。

    • 残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。

bq

新しいデータセットを作成するには、--location フラグを指定した bq mk コマンドを使用します。使用可能なパラメータの一覧については、bq mk --dataset コマンドのリファレンスをご覧ください。

  1. データの場所が US に設定され、BigQuery ML tutorial dataset という説明の付いた、bqml_tutorial という名前のデータセットを作成します。

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    このコマンドでは、--dataset フラグの代わりに -d ショートカットを使用しています。-d--dataset を省略した場合、このコマンドはデフォルトでデータセットを作成します。

  2. データセットが作成されたことを確認します。

    bq ls

API

定義済みのデータセット リソースを使用して datasets.insert メソッドを呼び出します。

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

BigQuery DataFrames

このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。

import google.cloud.bigquery

bqclient = google.cloud.bigquery.Client()
bqclient.create_dataset("bqml_tutorial", exists_ok=True)

TensorFlow モデルをインポートする

次の手順は、Cloud Storage からモデルをインポートする方法を示しています。モデルのパスは gs://cloud-training-demos/txtclass/export/exporter/1549825580/* です。インポートされたモデル名は imported_tf_model です。

Cloud Storage URI はワイルドカード文字(*)で終わることに注意してください。この文字は、BigQuery ML がモデルに関連付けられているアセットをインポートすることを示します。

インポートしたモデルは、特定の記事タイトルをどのウェブサイトが公開したかを予測する TensorFlow テキスト分類モデルです。

TensorFlow モデルをデータセットにインポートする手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [新規作成] で [SQL クエリ] をクリックします。

  3. クエリエディタで次の CREATE MODEL ステートメントを入力し、[実行] をクリックします。

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

    オペレーションが完了すると、Successfully created model named imported_tf_model のようなメッセージが表示されます。

  4. 新しいモデルが [リソース] パネルに表示されます。モデルにはモデルアイコン モデルアイコン がついています。

  5. [リソース] パネルで新しいモデルを選択すると、そのモデルに関する情報がクエリエディタの下に表示されます。

    TensorFlow モデル情報

bq

  1. 次の CREATE MODEL ステートメントを入力して、TensorFlow モデルを Cloud Storage からインポートします。

    bq query --use_legacy_sql=false \
    "CREATE OR REPLACE MODEL
      `bqml_tutorial.imported_tf_model`
    OPTIONS
      (MODEL_TYPE='TENSORFLOW',
        MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')"
  2. モデルをインポートしたら、モデルがデータセットに表示されていることを確認します。

    bq ls -m bqml_tutorial

    出力は次のようになります。

    tableId             Type
    ------------------- -------
    imported_tf_model   MODEL

API

新しいジョブを挿入し、リクエスト本文に jobs#configuration.query プロパティを入力します。

{
  "query": "CREATE MODEL `PROJECT_ID:bqml_tutorial.imported_tf_model` OPTIONS(MODEL_TYPE='TENSORFLOW' MODEL_PATH='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')"
}

PROJECT_ID は、プロジェクトとデータセットの名前に置き換えます。

BigQuery DataFrames

このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。

TensorFlowModel オブジェクトを使用してモデルをインポートします。

import bigframes
from bigframes.ml.imported import TensorFlowModel

bigframes.options.bigquery.project = PROJECT_ID
# You can change the location to one of the valid locations: https://cloud.google.com/bigquery/docs/locations#supported_locations
bigframes.options.bigquery.location = "US"

imported_tensorflow_model = TensorFlowModel(
    model_path="gs://cloud-training-demos/txtclass/export/exporter/1549825580/*"
)

形式やストレージの要件など、BigQuery ML への TensorFlow モデルのインポートの詳細は、TensorFlow モデルをインポートするための CREATE MODEL ステートメントをご覧ください。

インポートした TensorFlow モデルを使用して予測を行う

TensorFlow モデルをインポートしたら、ML.PREDICT 関数を使用してモデルで予測を行います。

次のクエリでは、imported_tf_model を使用して、一般公開データセット hacker_newsfull テーブルの入力データから予測を行います。このクエリでは、TensorFlow モデルの serving_input_fn 関数は、モデルが input という単一の入力文字列を想定することを指定しています。サブクエリは、サブクエリの SELECT ステートメントの title 列にエイリアス input を割り当てます。

インポートした TensorFlow モデルで予測を行う手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] ページに移動

  2. [新規作成] で [SQL クエリ] をクリックします。

  3. クエリエディタで、ML.PREDICT 関数を使用する次のクエリを入力します。

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

    クエリの結果は次のようになります。

    クエリ結果

bq

次のコマンドを入力して、ML.PREDICT を使用するクエリを実行します。

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

結果は次のようになります。

+------------------------------------------------------------------------+----------------------------------------------------------------------------------+
|                               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

新しいジョブを挿入し、リクエスト本文に jobs#configuration.query プロパティを入力します。project_id は、プロジェクト名で置き換えます。

{
  "query": "SELECT * FROM ML.PREDICT(MODEL `project_id.bqml_tutorial.imported_tf_model`, (SELECT * FROM input_data))"
}

BigQuery DataFrames

このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。

predict 関数を使用して、TensorFlow モデルを実行します。

import bigframes.pandas as bpd

df = bpd.read_gbq("bigquery-public-data.hacker_news.full")
df_pred = df.rename(columns={"title": "input"})
predictions = imported_tensorflow_model.predict(df_pred)
predictions.head(5)

結果は次のようになります。

Result_visualization

クエリ結果には dense_1 列には確率値の配列が含まれ、input 列には入力テーブルの対応する文字列値が含まれます。各配列要素の値は、対応する入力文字列が特定の公開物の記事タイトルである確率を表します。