Vertex AI PaLM API を使用した BigQuery ML と SQL のみの LLM

1. はじめに

この Codelab では、テキスト生成に Vertex AI 大規模言語モデル(text-bison)を BigQuery のホスト型リモート関数として使用して、GitHub リポジトリにあるソースコードの要約とリポジトリ内のプログラミング言語の特定を行う手順をリストしました。GitHub Archive Project のおかげで、Google BigQuery 一般公開データセットに、280 万以上のオープンソース GitHub リポジトリの完全なスナップショットが公開されました。使用されるサービスは次のとおりです。

  1. BigQuery ML
  2. Vertex AI PaLM API

作成するアプリの概要

作成する

  • モデルを格納する BigQuery データセット
  • Vertex AI PaLM API をリモート関数としてホストする BigQuery モデル
  • BigQuery と Vertex AI 間の接続を確立するための外部接続

2. 必要なもの

  • ブラウザ(ChromeFirefox など)
  • 課金を有効にした Google Cloud プロジェクト

3. 始める前に

  1. Google Cloud コンソールの [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  3. 必要な API(BigQuery API、Vertex AI API、BigQuery Connection API)がすべて有効になっていることを確認します。
  4. Cloud Shell を使用します。Cloud Shell は Google Cloud で動作するコマンドライン環境で、bq がプリロードされています。gcloud のコマンドと使用方法については、ドキュメントをご覧ください。

Cloud コンソールで、[Cloud Shell をアクティブにする] をクリックします。

51622c00acec2fa.png

プロジェクトが設定されていない場合は、次のコマンドを使用して設定します。

gcloud config set project <YOUR_PROJECT_ID>
  1. ブラウザに「https://console.cloud.google.com/bigquery」の URL を入力して、BigQuery コンソールに直接移動します。

4. データの準備

このユースケースでは、Google BigQuery 一般公開データセットにある github_repos データセットのソースコード コンテンツを使用します。これを使用するには、BigQuery コンソールで「github_repos」を検索します。Enter キーを押します。検索結果として表示されたデータセットの横にあるスターをクリックします。[スター付きのみを表示] をクリックします。一般公開データセットのみを表示するオプションを 選択できます

dc6bf1e2fa6bba8a.png

データセットのテーブルを開いて、スキーマとデータ プレビューを表示します。ここでは、contents テーブルに含まれる全データのサンプル(10%)のみを含む sample_contents を使用します。データのプレビューは次のとおりです。

e021c689c56abf22.png

5. BigQuery データセットの作成

BigQuery データセットはテーブルのコレクションです。データセット内のすべてのテーブルは、同じデータ ロケーションに保存されます。カスタム アクセス制御を接続して、データセットとそのテーブルへのアクセスを制限することもできます。

リージョン「US」にデータセットを作成する(または任意のリージョン)で bq_llm という名前を付けます。

c67e9f929629739a.png

このデータセットには、後のステップで作成する ML モデルが格納されます。通常、ML アプリケーションで使用するデータは、このデータセット自体のテーブルに格納されますが、データがすでに BigQuery の一般公開データセットに存在するため、必要に応じて新しく作成したデータセットから直接参照します。CSV(または他のファイル)に保存されている独自のデータセットに対してこのプロジェクトを行う場合は、Cloud Shell ターミナルから次のコマンドを実行して、データを BigQuery データセットからテーブルに読み込みます。

bq load --source_format=CSV --skip_leading_rows=1 bq_llm.table_to_hold_your_data \
./your_file.csv \ text:string,label:string

6. 外部接続を作成しています

外部接続を作成し(BigQuery Connection API がまだ有効になっていない場合は有効にします)、接続構成の詳細にあるサービス アカウント ID を書き留めます。

  1. BigQuery コンソールの左側の [エクスプローラ] ペインで [+ 追加] ボタンをクリックし、[外部データソースへの接続] をクリックします。記載されている人気のあるソースで
  2. 接続タイプとして [BigLake とリモート関数] を選択します。「llm-conn」と指定します。接続 ID

6b75042881eaec5f.png

  1. 接続を作成したら、接続の構成情報を参照して、生成されたサービス アカウントをメモします。

7. 権限を付与する

このステップでは、Vertex AI サービスにアクセスするための権限をサービス アカウントに付与します。

IAM を開き、外部接続の作成後にコピーしたサービス アカウントをプリンシパルとして追加し、[Vertex AI ユーザー] を選択します。役割

ff8e1d730879f972.png

8. リモート ML モデルを作成する

ホストされる Vertex AI 大規模言語モデルを表すリモートモデルを作成します。

CREATE OR REPLACE MODEL bq_llm.llm_model
  REMOTE WITH CONNECTION `us.llm-conn`
  OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

Vertex AI の CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API をリモート関数として利用する llm_model というモデルを bq_llm データセットに作成します。完了まで数秒かかることがあります。

9. ML モデルを使用してテキストを生成する

モデルを作成したら、そのモデルを使用してテキストを生成、要約、分類します。

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

**説明:

ml_generate_text_result** は、コンテンツと安全性属性の両方を含む JSON 形式のテキスト生成モデルからのレスポンスです。content は、生成されたテキストの結果 b を表します。安全性属性は、調整可能なしきい値を持つ組み込みのコンテンツ フィルタを表します。このフィルタは、大規模言語モデルからの意図しないレスポンスや予期しないレスポンスを回避するために Vertex AI Palm API で有効になっています。安全性のしきい値に違反すると、レスポンスはブロックされます。

ML.GENERATE_TEXT は、BigQuery 内で使用する構造で、Vertex AI LLM にアクセスしてテキスト生成タスクを実行します。

CONCAT は、PROMPT ステートメントとデータベース レコードを連結します。

github_repos はデータセット名、sample_contents はプロンプト設計で使用するデータを保持するテーブルの名前です。

temperature は、レスポンスのランダム性を制御するプロンプト パラメータです。値が小さいほど、関連性が高くなります。

Max_output_tokens は、レスポンスに含める単語の数です。

クエリのレスポンスは次のようになります。

1156f6eecb548cd5.png

10. クエリ結果をフラット化する

クエリで JSON を明示的にデコードしなくても済むように、結果をフラット化しましょう。

SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `bq_llm.llm_model`,
    (
  SELECT
        CONCAT('Can you read the code in the following text and generate a summary for what the code is doing and what language it is written in:', content)
        AS prompt from `bigquery-public-data.github_repos.sample_contents`
          limit 5
        ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

**説明:

Flatten_json_output** はブール値を表します。true に設定すると、JSON レスポンスから平坦でわかりやすいテキストが抽出されます。

クエリのレスポンスは次のようになります。

3b662ef7d3ba9263.png

11. クリーンアップ

この投稿で使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の操作を行います。

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。
  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

12. 完了

これで、ここでは、Vertex AI テキスト生成 LLM をプログラムで使用して、SQL クエリのみを使用してデータのテキスト分析を行うことができました。利用可能なモデルの詳細については、Vertex AI LLM プロダクトのドキュメントをご覧ください。