text-bison モデルと ML.GENERATE_TEXT 関数を使用してテキストを生成する
このチュートリアルでは、text-bison@002
大規模言語モデルに基づいてリモートモデルを作成する方法を説明します。このモデルを ML.GENERATE_TEXT
関数と組み合わせて使用して、複数のテキスト生成タスクを実行します。このチュートリアルでは、bigquery-public-data.imdb.reviews
一般公開テーブルを使用します。
必要な権限
- データセットを作成するには、
bigquery.datasets.create
Identity and Access Management(IAM)権限が必要です。 接続リソースを作成するには、次の IAM 権限が必要です。
bigquery.connections.create
bigquery.connections.get
接続のサービス アカウントに権限を付与するには、次の権限が必要です。
resourcemanager.projects.setIamPolicy
モデルを作成するには、次の権限が必要です。
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.connections.delegate
推論を実行するには、次の権限が必要です。
bigquery.models.getData
bigquery.jobs.create
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
- BigQuery ML: You incur costs for the data that you process in BigQuery.
- Vertex AI: You incur costs for calls to the Vertex AI service that's represented by the remote model.
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
BigQuery の料金の詳細については、BigQuery ドキュメントの BigQuery の料金をご覧ください。
Vertex AI の料金の詳細については、Vertex AI の料金のページをご覧ください。
始める前に
-
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, and Vertex AI APIs.
データセットを作成する
ML モデルを保存する BigQuery データセットを作成します。
Google Cloud コンソールで [BigQuery] ページに移動します。
[エクスプローラ] ペインで、プロジェクト名をクリックします。
「アクションを表示」> [データセットを作成] をクリックします。
[データセットを作成する] ページで、次の操作を行います。
[データセット ID] に「
bqml_tutorial
」と入力します。[ロケーション タイプ] で [マルチリージョン] を選択してから、[US (米国の複数のリージョン)] を選択します。
一般公開データセットは
US
マルチリージョンに保存されています。わかりやすくするため、データセットを同じロケーションに保存します。残りのデフォルトの設定は変更せず、[データセットを作成] をクリックします。
接続を作成する
クラウド リソース接続を作成し、接続のサービス アカウントを取得します。前の手順で作成したデータセットと同じロケーションに接続を作成します。
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
接続を作成するには、[
追加] をクリックし、続いて [外部データソースへの接続] をクリックします。[接続タイプ] リストで、[Vertex AI リモートモデル、リモート関数、BigLake(Cloud リソース)] を選択します。
[接続 ID] フィールドに接続の名前を入力します。
[接続を作成] をクリックします。
[接続へ移動] をクリックします。
[接続情報] ペインで、次の手順で使用するサービス アカウント ID をコピーします。
bq
コマンドライン環境で接続を作成します。
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
--project_id
パラメータは、デフォルト プロジェクトをオーバーライドします。次のように置き換えます。
REGION
: 接続のリージョンPROJECT_ID
: 実際の Google Cloud プロジェクト IDCONNECTION_ID
: 接続の ID
接続リソースを作成すると、BigQuery は、一意のシステム サービス アカウントを作成し、それを接続に関連付けます。
トラブルシューティング: 次の接続エラーが発生した場合は、Google Cloud SDK を更新します。
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
後の手順で使用するため、サービス アカウント ID を取得してコピーします。
bq show --connection PROJECT_ID.REGION.CONNECTION_ID
出力は次のようになります。
name properties 1234.REGION.CONNECTION_ID {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
Terraform
main.tf
ファイルに次のセクションを追加します。
## This creates a cloud resource connection. ## Note: The cloud resource nested object has only one output only field - serviceAccountId. resource "google_bigquery_connection" "connection" { connection_id = "CONNECTION_ID" project = "PROJECT_ID" location = "REGION" cloud_resource {} }
CONNECTION_ID
: 接続の IDPROJECT_ID
: 実際の Google Cloud プロジェクト IDREGION
: 接続のリージョン
接続のサービス アカウントに権限を付与する
接続のサービス アカウントに Vertex AI ユーザーロールを付与します。このロールは、始める前にで作成または選択したプロジェクトで付与する必要があります。別のプロジェクトでロールを付与すると、「bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource
」というエラーが発生します。
ロールを付与する手順は次のとおりです。
[IAM と管理] ページに移動します。
[
アクセス権を付与] をクリックします。[新しいプリンシパル] フィールドに、前の手順でコピーしたサービス アカウント ID を入力します。
[ロールを選択] フィールドで、[Vertex AI]、[Vertex AI ユーザーロール] の順に選択します。
[保存] をクリックします。
リモートモデルを作成する
ホストされる Vertex AI 大規模言語モデル(LLM)に相当するリモートモデルを作成します。
SQL
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで、次のステートメントを実行します。
CREATE OR REPLACE MODEL `bqml_tutorial.llm_model` REMOTE WITH CONNECTION `LOCATION.CONNECTION_ID` OPTIONS (ENDPOINT = 'text-bison@002');
次のように置き換えます。
LOCATION
: 接続のロケーションCONNECTION_ID
: BigQuery 接続の IDGoogle Cloud コンソールで接続の詳細を表示する場合、これは [接続 ID] に表示される完全修飾接続 ID の最後のセクションの値です。例:
projects/myproject/locations/connection_location/connections/myconnection
クエリが完了するまでに数秒かかります。完了後、モデル
llm_model
が [エクスプローラ] ペインのbqml_tutorial
データセットに表示されます。クエリはCREATE MODEL
ステートメントを使用してモデルを作成するため、クエリの結果はありません。
BigQuery DataFrames
このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
キーワード抽出を行う
リモートモデルと ML.GENERATE_TEXT
関数を使用して、IMDB 映画レビューに対してキーワード抽出を行います。
SQL
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力して、5 つの映画レビューでキーワード抽出を行います。
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 `bqml_tutorial.llm_model`, ( SELECT CONCAT('Extract the key words from the text below: ', review) AS prompt, * FROM `bigquery-public-data.imdb.reviews` LIMIT 5 ), STRUCT( 0.2 AS temperature, 100 AS max_output_tokens));
出力は次のようになります(わかりやすくするために、生成されていない列は省略しています)。
+----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | generated_text | safety_attributes | ml_generate_text_status | prompt | ... | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | " Keywords:\n- British Airways\n- | {"blocked":false,"categories": | | Extract the key words from | | | acting\n- story\n- kid\n- switch off" | ["Death, Harm & Tragedy","Derogatory", | | the text below: I had to | | | | "Finance","Health","Insult", | | see this on the British | | | | "Profanity","Religion & Belief", | | Airways plane. It was | | | | "Sexual","Toxic"] | | terribly bad acting and | | | | "safetyRatings":[{"category": | | a dumb story. Not even | | | | "Dangerous Content","probabilityScore"... | | a kid would enjoy this... | | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | " - Family movie\n- ITV station\n- THE | {"blocked":false,"categories": | | Extract the key words from | | | REAL HOWARD SPITZ\n- Roald Dahl\n- | ["Death, Harm & Tragedy","Derogatory", | | the text below: This is | | | DOCTOR WHO\n- Pulp fiction\n- Child | "Health","Illicit Drugs","Insult", | | a family movie that was | | | abuse\n- KINDERGARTEN COP\n- PC\n- | "Legal","Profanity","Public Safety", | | broadcast on my local | | | Children's author\n- Vadim Jean\n- | "Sexual","Toxic","Violent"], | | ITV station at 1.00 am a | | | Haphazard\n- Kelsey Grammar\n- | "safetyRatings":[{"category": | | couple of nights ago. | | | Dead pan\n- Ridiculous camera angles" | "Dangerous Content","probabilityScore"... | | This might be a strange... | | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+
結果には次の列が含まれます。
generated_text
: 生成されたテキスト。safety_attributes
: 安全属性と、ブロック カテゴリのいずれかに応じたコンテンツがブロックされているかどうかに関する情報。安全性属性の詳細については、Vertex PaLM API をご覧ください。ml_generate_text_status
: 対応する行の API レスポンス ステータス。オペレーションが成功した場合、この値は空になります。prompt
: 感情分析に使用されるプロンプト。bigquery-public-data.imdb.reviews
テーブルのすべての列。
省略可: 前の手順で行ったように、関数から返された JSON を手動で解析するのではなく、
flatten_json_output
引数を使用して、生成されたテキストと安全性属性を別々の列に返します。クエリエディタで、次のステートメントを実行します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.llm_model`, ( SELECT CONCAT('Extract the key words from the text below: ', review) AS prompt, * FROM `bigquery-public-data.imdb.reviews` LIMIT 5 ), STRUCT( 0.2 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));
出力は次のようになります(わかりやすくするために、生成されていない列は省略しています)。
+----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | ml_generate_text_llm_result | ml_generate_text_rai_result | ml_generate_text_status | prompt | ... | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | Keywords: | {"blocked":false,"categories": | | Extract the key words from | | | - British Airways | ["Death, Harm & Tragedy","Derogatory", | | the text below: I had to | | | - acting | "Finance","Health","Insult", | | see this on the British | | | - story | "Profanity","Religion & Belief", | | Airways plane. It was | | | - kid | "Sexual","Toxic"] | | terribly bad acting and | | | - switch off | "safetyRatings":[{"category": | | a dumb story. Not even | | | | "Dangerous Content","probabilityScore"... | | a kid would enjoy this... | | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+ | - Family movie | {"blocked":false,"categories": | | Extract the key words from | | | - ITV station | ["Death, Harm & Tragedy","Derogatory", | | the text below: This is | | | - THE REAL HOWARD SPITZ | "Health","Illicit Drugs","Insult", | | a family movie that was | | | - Roald Dahl | "Legal","Profanity","Public Safety", | | broadcast on my local | | | - DOCTOR WHO | "Sexual","Toxic","Violent"], | | ITV station at 1.00 am a | | | - Pulp Fiction | "safetyRatings":[{"category": | | couple of nights ago. | | | - ... | "Dangerous Content","probabilityScore"... | | This might be a strange... | | +----------------------------------------+---------------------------------------------+-------------------------+----------------------------+-----+
結果には次の列が含まれます。
ml_generate_text_llm_result
: 生成されたテキスト。ml_generate_text_rai_result
: 安全属性と、ブロック カテゴリのいずれかに応じたコンテンツがブロックされているかどうかに関する情報。安全性属性の詳細については、Vertex PaLM API をご覧ください。ml_generate_text_status
: 対応する行の API レスポンス ステータス。オペレーションが成功した場合、この値は空になります。prompt
: キーワード抽出に使用されるプロンプト。bigquery-public-data.imdb.reviews
テーブルのすべての列。
BigQuery DataFrames
このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
predict
関数を使用して、リモートモデルを実行します。
次のような結果になります:
感情分析を行う
リモートモデルと ML.GENERATE_TEXT
関数を使用して、IMDB 映画レビューに対して感情分析を行います。
SQL
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを実行して、5 つの映画レビューの感情分析を行います。
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 `bqml_tutorial.llm_model`, ( SELECT CONCAT( 'perform sentiment analysis on the following text, return one the following categories: positive, negative: ', review) AS prompt, * FROM `bigquery-public-data.imdb.reviews` LIMIT 5 ), STRUCT( 0.2 AS temperature, 100 AS max_output_tokens));
出力は次のようになります(わかりやすくするために、生成されていない列は省略しています)。
+----------------+---------------------------------------------+-------------------------+----------------------------+-----+ | generated_text | safety_attributes | ml_generate_text_status | prompt | ... | +----------------+---------------------------------------------+-------------------------+----------------------------+-----+ | "negative" | {"blocked":false,"categories": | | perform sentiment analysis | | | | ["Death, Harm & Tragedy","Derogatory", | | on the following text, | | | | "Finance","Health","Insult", | | return one the following | | | | "Profanity","Religion & Belief", | | categories: positive, | | | | "Sexual","Toxic"] | | negative: I had to see | | | | "safetyRatings":[{"category": | | this on the British | | | | "Dangerous Content","probabilityScore"... | | Airways plane. It was... | | +----------------+---------------------------------------------+-------------------------+----------------------------+-----+ | "negative" | {"blocked":false,"categories": | | perform sentiment analysis | | | | ["Death, Harm & Tragedy","Derogatory", | | on the following text, | | | | "Health","Illicit Drugs","Insult", | | return one the following | | | | "Legal","Profanity","Public Safety", | | categories: positive, | | | | "Sexual","Toxic","Violent"], | | negative: This is a family | | | | "safetyRatings":[{"category": | | movie that was broadcast | | | | "Dangerous Content","probabilityScore"... | | on my local ITV station... | | +----------------+---------------------------------------------+-------------------------+----------------------------+-----+
結果には、キーワード抽出を行うで説明したものと同じ列が含まれます。
BigQuery DataFrames
このサンプルを試す前に、BigQuery DataFrames を使用した BigQuery クイックスタートの手順に沿って BigQuery DataFrames を設定してください。詳細については、BigQuery DataFrames のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
predict
関数を使用して、リモートモデルを実行します。
次のような結果になります:
クリーンアップ
- 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.