このチュートリアルでは、TensorFlow モデルを BigQuery ML データセットにインポートします。次に、SQL クエリを使用して、インポートしたモデルから予測を行います。
データセットを作成する
ML モデルを保存する BigQuery データセットを作成します。
コンソール
Google Cloud コンソールで、[BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
[アクションを表示] > [データセットを作成] をクリックします。
[データセットを作成する] ページで、次の操作を行います。
[データセット ID] に「
bqml_tutorial
」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[US(米国の複数のリージョン)] を選択します。
残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。
bq
新しいデータセットを作成するには、--location
フラグを指定した bq mk
コマンドを使用します。使用可能なパラメータの一覧については、bq mk --dataset
コマンドのリファレンスをご覧ください。
データの場所が
US
に設定され、BigQuery ML tutorial dataset
という説明の付いた、bqml_tutorial
という名前のデータセットを作成します。bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
このコマンドでは、
--dataset
フラグの代わりに-d
ショートカットを使用しています。-d
と--dataset
を省略した場合、このコマンドはデフォルトでデータセットを作成します。データセットが作成されたことを確認します。
bq ls
API
定義済みのデータセット リソースを使用して datasets.insert
メソッドを呼び出します。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrames
このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
TensorFlow モデルをインポートする
次の手順は、Cloud Storage からモデルをインポートする方法を示しています。モデルのパスは gs://cloud-training-demos/txtclass/export/exporter/1549825580/*
です。インポートされたモデル名は imported_tf_model
です。
Cloud Storage URI はワイルドカード文字(*
)で終わることに注意してください。この文字は、BigQuery ML がモデルに関連付けられているアセットをインポートすることを示します。
インポートしたモデルは、特定の記事タイトルをどのウェブサイトが公開したかを予測する TensorFlow テキスト分類モデルです。
TensorFlow モデルをデータセットにインポートする手順は次のとおりです。
コンソール
Google Cloud コンソールで、[BigQuery] ページに移動します。
[新規作成] で [SQL クエリ] をクリックします。
クエリエディタで次の
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
のようなメッセージが表示されます。新しいモデルが [リソース] パネルに表示されます。モデルにはモデルアイコン
がついています。
[リソース] パネルで新しいモデルを選択すると、そのモデルに関する情報がクエリエディタの下に表示されます。
bq
次の
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/*')"
モデルをインポートしたら、モデルがデータセットに表示されていることを確認します。
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
オブジェクトを使用してモデルをインポートします。
形式やストレージの要件など、BigQuery ML への TensorFlow モデルのインポートの詳細は、TensorFlow モデルをインポートするための CREATE MODEL
ステートメントをご覧ください。
インポートした TensorFlow モデルを使用して予測を行う
TensorFlow モデルをインポートしたら、ML.PREDICT
関数を使用してモデルで予測を行います。
次のクエリでは、imported_tf_model
を使用して、一般公開データセット hacker_news
の full
テーブルの入力データから予測を行います。このクエリでは、TensorFlow モデルの serving_input_fn
関数は、モデルが input
という単一の入力文字列を想定することを指定しています。サブクエリは、サブクエリの SELECT
ステートメントの title
列にエイリアス input
を割り当てます。
インポートした TensorFlow モデルで予測を行う手順は次のとおりです。
コンソール
Google Cloud コンソールで、[BigQuery] ページに移動します。
[新規作成] で [SQL クエリ] をクリックします。
クエリエディタで、
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 モデルを実行します。
結果は次のようになります。
クエリ結果には dense_1
列には確率値の配列が含まれ、input
列には入力テーブルの対応する文字列値が含まれます。各配列要素の値は、対応する入力文字列が特定の公開物の記事タイトルである確率を表します。