BigQuery DataFrames を使用して Python でマルチモーダル データを分析する
このチュートリアルでは、BigQuery DataFrames のクラスとメソッドを使用して、Python ノートブックでマルチモーダル データを分析する方法について説明します。
このチュートリアルでは、一般公開されている Cymbal ペットショップ データセットの商品カタログを使用します。
このチュートリアルで説明するタスクがすでに入力されているノートブックをアップロードするには、BigFrames マルチモーダル DataFrame をご覧ください。
目標
- マルチモーダル DataFrame を作成する。
- 構造化データと非構造化データを DataFrame に結合する。
- 画像を変換する。
- 画像データに基づいてテキストとエンベディングを生成する。
- PDF をチャンク化してさらに分析する。
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
- BigQuery: you incur costs for the data that you process in BigQuery.
- BigQuery Python UDFs: you incur costs for using BigQuery DataFrames image transformation and chunk PDF methods.
- Cloud Storage: you incur costs for the objects stored in Cloud Storage.
- Vertex AI: you incur costs for calls to Vertex AI models.
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
詳細については、料金についての次のページをご覧ください。
始める前に
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, Cloud Storage, and Vertex AI APIs.
必要なロール
このチュートリアルを完了するために必要な権限を取得するには、管理者に次の IAM ロールを付与するよう依頼してください。
-
接続を作成する: BigQuery Connection 管理者(
roles/bigquery.connectionAdmin
) -
接続のサービス アカウントに権限を付与する: プロジェクト IAM 管理者 (
roles/resourcemanager.projectIamAdmin
) - Cloud Storage バケットを作成する: ストレージ管理者(
roles/storage.admin
) -
BigQuery ジョブを実行する: BigQuery ユーザー(
roles/bigquery.user
) -
Python UDF を作成して呼び出す: BigQuery データ編集者(
roles/bigquery.dataEditor
) -
Cloud Storage オブジェクトの読み取りと変更を可能にする URL を作成する: BigQuery ObjectRef 管理者 (
roles/bigquery.objectRefAdmin
) -
ノートブックを使用する:
-
BigQuery 読み取りセッション ユーザー(
roles/bigquery.readSessionUser
) - ノートブック ランタイム ユーザー()
roles/aiplatform.notebookRuntimeUser
- ノートブック ランタイム ユーザー()
roles/aiplatform.notebookRuntimeUser
- コード作成者()
roles/dataform.codeCreator
-
BigQuery 読み取りセッション ユーザー(
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
設定
このセクションでは、このチュートリアルで使用する Cloud Storage バケット、接続、ノートブックを作成します。
バケットの作成
変換されたオブジェクトを保存する Cloud Storage バケットを作成します。
Google Cloud コンソールで [バケット] ページに移動します。
[作成]
をクリックします。[バケットの作成] ページの [始める] セクションで、バケット名の要件を満たすグローバルに一意の名前を入力します。
[作成] をクリックします。
接続を作成する
クラウド リソース接続を作成し、接続のサービス アカウントを取得します。BigQuery は、この接続を使用して Cloud Storage 内のオブジェクトにアクセスします。
[BigQuery] ページに移動します。
[エクスプローラ] ペインで、
[データを追加] をクリックします。[データを追加] ダイアログが開きます。
[フィルタ条件] ペインの [データソースのタイプ] セクションで、[ビジネス アプリケーション] を選択します。
または、[データソースを検索] フィールドに「
Vertex AI
」と入力します。[特徴量データソース] セクションで、[Vertex AI] をクリックします。
[Vertex AI モデル: BigQuery フェデレーション] ソリューション カードをクリックします。
[接続タイプ] リストで、[Vertex AI リモートモデル、リモート関数、BigLake(Cloud リソース)] を選択します。
[接続 ID] フィールドに「
bigframes-default-connection
」と入力します。[接続を作成] をクリックします。
[接続へ移動] をクリックします。
[接続情報] ペインで、次の手順で使用するサービス アカウント ID をコピーします。
接続のサービス アカウントに権限を付与する
接続のサービス アカウントに、Cloud Storage と Vertex AI へのアクセスに必要なロールを付与します。これらのロールは、始める前にで作成または選択したプロジェクトで付与する必要があります。
ロールを付与する手順は次のとおりです。
[IAM と管理] ページに移動します。
[
アクセスを許可] をクリックします。[新しいプリンシパル] フィールドに、前の手順でコピーしたサービス アカウント ID を入力します。
[ロールを選択] フィールドで、[Cloud Storage] を選択し、続いて [Storage オブジェクト ユーザー] を選択します。
[別のロールを追加] をクリックします。
[ロールを選択] フィールドで、[Vertex AI] を選択し、[Vertex AI ユーザー] を選択します。
[保存] をクリックします。
ノートブックを作成する
Python コードを実行できるノートブックを作成します。
[BigQuery] ページに移動します。
編集ペインのタブバーで、SQL クエリアイコン
の横にあるプルダウン矢印 をクリックし、[ノートブック] をクリックします。[テンプレートを使って開始] ペインで [閉じる] をクリックします。
[接続] > [ランタイムに接続] をクリックします。
既存のランタイムがある場合は、デフォルトの設定をそのまま使用し、[接続] をクリックします。既存のランタイムがない場合は、[新しいランタイムを作成] を選択し、[接続] をクリックします。
ランタイムの設定には数分かかることがあります。
マルチモーダル DataFrame を作成する
Session
クラスの from_glob_path
メソッドを使用して、構造化データと非構造化データを統合するマルチモーダル DataFrame を作成します。
- ノートブックでコードセルを作成し、次のコードをコピーします。
[実行] をクリックします。
df_image
の最後の呼び出しにより、DataFrame に追加された画像が返されます。または、.display
メソッドを呼び出すこともできます。
DataFrame で構造化データと非構造化データを結合する
マルチモーダル DataFrame でテキストデータと画像データを結合します。
- ノートブックでコードセルを作成し、次のコードをコピーします。
[実行]
をクリックします。このコードは DataFrame データを返します。
ノートブックでコードセルを作成し、次のコードをコピーします。
[実行]
をクリックします。このコードは、
author
列の値がalice
である DataFrame から画像を返します。
画像変換を行う
Series.BlobAccessor
クラスの次のメソッドを使用して、画像データを変換します。
変換された画像は Cloud Storage に書き込まれます。
画像を変換する:
- ノートブックでコードセルを作成し、次のコードをコピーします。
{dst_bucket}
へのすべての参照を、作成したバケットを参照するように更新します(形式:gs://mybucket
)。[実行]
をクリックします。このコードは、元の画像とすべての変換を返します。
テキストを生成する
GeminiTextGenerator
クラスの predict
メソッドを使用して、マルチモーダル データからテキストを生成します。
- ノートブックでコードセルを作成し、次のコードをコピーします。
[実行]
をクリックします。このコードは、
df_image
の最初の 2 つの画像と、両方の画像に対する質問what item is it?
への回答として生成されたテキストを返します。ノートブックでコードセルを作成し、次のコードをコピーします。
[実行]
をクリックします。このコードは、
df_image
で最初の 2 つの画像を返します。最初の画像には質問what item is it?
に応答して生成されたテキストが含まれ、2 番目の画像には質問what color is the picture?
に応答して生成されたテキストが含まれます。
エンベディングを生成する
MultimodalEmbeddingGenerator
クラスの predict
メソッドを使用して、マルチモーダル データのエンベディングを生成します。
- ノートブックでコードセルを作成し、次のコードをコピーします。
[実行]
をクリックします。このコードは、エンベディング モデルの呼び出しによって生成されたエンベディングを返します。
PDF をチャンク化する
Series.BlobAccessor
クラスの pdf_chunk
メソッドを使用して、PDF オブジェクトをチャンクします。
- ノートブックでコードセルを作成し、次のコードをコピーします。
[実行]
をクリックします。コードはチャンク化された PDF データを返します。
クリーンアップする
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.