はじめに
BigQueryのML.GENERATE_TEXT関数は、Google Cloudの高度なAI機能を活用し、指定した入力データやプロンプトに基づいて自動的にテキストを生成する強力なツールです。
例えば、大量の製品レビューから要約を生成したり、ユーザーからの問い合わせに対して的確な自動応答を作成することが可能です。
ML.GENERATE_TEXT関数を導入することで、単純なデータ処理や、高度なテキスト生成が可能となり、より早く正確なデータ活用を実現できるでしょう。
この記事では、ML.GENERATE_TEXT関数の基本的な仕組みから、セットアップ方法、実際の使用方法を詳しく解説します。
セットアップでは、Google Cloud ConsoleだけでなくTerraformを使用する場合についても詳しく説明を行います。
この記事を通じて、BigQueryを活用したデータ分析業務の効率を向上させるための具体的な方法を学びましょう。
ML.GENERATE_TEXT関数とは
ML.GENERATE_TEXT関数は、Google CloudのBigQueryで提供されている機能で、AIを利用してテキストを生成するためのものです。
指定した入力データやプロンプト(質問や指示)に基づいて、テキストを生成します。例えば、製品レビューの要約を自動生成したり、ユーザーの入力に応じたカスタマイズされた応答を作成することが可能です。
セットアップ方法
1. APIの有効化
以下の3つのAPIを有効にします。
- BigQuery
- BigQuery Connection
- Vertex AI
Google Cloud Consoleを使用してAPIを有効にする場合は、このリンクをクリックしてください。
Terraformを使用する場合、以下のコードを追加してください。
2. サービスアカウントの取得
次にサービスアカウントを作成します。
Google Cloud Consoleでの手順は以下の通りです。まず、BigQueryのページに移動してください。

- [+追加]をクリックし、[外部データソースへの接続]を選択します。

- 接続タイプとして「Vertex AI リモートモデル、リモート関数、BigLake(Cloud リソース)」を選択し、任意の接続IDとリージョン(例: asia-northeast1)を設定します。

- 各設定が完了したら、[接続作成]をクリックして終了です。

作成されたサービスアカウントの情報は、後のステップで必要になるためメモしておいてください。
Terraformを使用する場合、以下のコードを追加してください。
3. アクセス権の付与
サービスアカウントにアクセス権を付与します。
Google Cloud Consoleでの手順は以下の通りです。
- IAMと管理のページを開き、[アクセス権を付与]をクリックします。

- 新しいプリンシパルとしてサービスアカウントIDを入力し、ロールは「Vertex AI ユーザー」を選択します。

- 設定が完了したら、[保存]をクリックします。

Terraformを使用する場合は、以下のコードを追加してください。
4. リモートモデルの作成
リモートモデルを作成するには、BigQueryのページでSQLエディタを使用します。以下のSQLを適宜変更して実行してください。
各項目の置き換えは以下の通りです。
- DATASET_ID:使用するデータセットID
- MODEL_NAME:作成するモデル名
- PROJECT_ID:使用するプロジェクトID
- REGION:使用するリージョン
- CONNECTION_ID:使用する接続ID
- ENDPOINT:使用するLLMのモデル名(例: gemini-pro)
※本記事では、gemini-proを使用しておりますが、text-bisonも使用が可能です。
クエリを実行し、モデルが正常に作成されたことを確認してください。

検証
次に、ML.GENERATE_TEXT関数を使用してモデルを検証します。
以下のSQLを実行して、テストデータを準備してください。
このSQLを実行すると、以下のようにテーブルが作成されます。

次に、ML.GENERATE_TEXT関数を使用してAIに関する説明を生成します。以下のクエリを使用してください。
以下のコードは、input_dataテーブルについての説明です。
上記では、promptカラムを追加で作成し、以下の様にプロンプトを作成しています。
次に、generated_outputテーブルでは、ML.GENERATE_TEXT関数を使用して、テキストの生成を行っております。生成時に使用するモデルは、test_dataset.test_model
とし、前述の作成したモデルを使用しております。
各パラメータの意味は以下の通りです。
- max_output_tokens: 生成されるテキストの最大トークン数。小さい値は短い文章、大きい値は長い文章になります。(範囲: 1〜1024、デフォルト: 50)
- temperature: 応答のランダム性を調整します。低い値は安定した答え、高い値は多様な答えを生成します。(範囲: 0.0〜1.0、デフォルト: 1.0)
- top_k: 候補となる単語の数を制限します。低い値は決まった答えを出しやすく、高い値はよりランダムな答えになります。(範囲: 1〜40、デフォルト: 40)
- top_p: 単語の選ばれやすさを調整します。高確率の単語が優先されます。(範囲: 0.0〜1.0、デフォルト: 1.0)
- flatten_json_output: 結果を平坦化するかどうかを指定します。TRUEにすると整理された結果が返され、FALSEではそのまま返されます。(デフォルト: FALSE)
検証結果
前述のクエリを実行すると、各AIについての説明が生成されます。
以下、出力結果の画面になります。

上記の通り、ML.GENERATE_TEXT関数を使用することによりテキストを生成することができます。
ml_generate_text_resultはML.GENERATE_TEXT関数によって生成されたテキストが格納されているカラムです。例えば、AIに質問をしたとき、その回答がこのカラムに入ります。
ml_generate_text_statusはML.GENERATE_TEXT関数の実行ステータスが記録されています。正常に動作が完了した際は、空の状態になります。
以下、ml_generate_text_resultに格納されている各パラメータの説明になります。
candidates
- avg_logprobs: 生成された文章の信頼度を表す数値。低いほど信頼度が高いです。
- content: モデルが生成したテキストの内容です。この場合、Siriについての説明が含まれています。
- finish_reason: テキスト生成が終了した理由。1は正常に完了したことを意味します。
- safety_ratings: 生成されたテキストが安全かどうかをチェックするデータです。categoryはチェックの種類、probabilityは問題が起こる可能性、severityはその問題の影響の大きさです。
- score: 生成されたテキストの全体的な品質スコアです。
- billable_prompt_usage: 使用されたテキストの量で、料金が発生する部分です。この場合は49の単語が含まれます。
- candidates_token_count: 生成された文章が何単語(トークン)で構成されているかを表します。この例では396トークンです。
- prompt_token_count: 入力された文章のトークン数です。この例では28トークンです。
- total_token_count: 入力と出力を合わせたトークン数です。ここでは424トークンです。
おわりに
本記事では、BigQueryのML.GENERATE_TEXT関数を使用してAIテキスト生成を効率化する方法について詳しく解説しました。
理想的なテキスト生成を実現するためには、適切なセットアップとパラメータ設定が重要です。
ML.GENERATE_TEXT関数を導入することで、データ分析業務の効率を大幅に向上させ、より高品質な分析結果を得ることが可能になります。
ぜひ、この関数を活用して、データ分析の生産性を向上させてください。
参考文献

備考
Hakky ではエンジニアを募集中です!まずは話してみたいなどでも構いませんので、ぜひお気軽に採用ページからお問い合わせくださいませ。
