独自のデータを使用してモデルをチューニングする
このドキュメントでは、Vertex AI モデルを参照する BigQuery ML リモートモデルを作成し、教師ありチューニングを実行するようにモデルを構成する方法について説明します。Vertex AI モデルは次のいずれかである必要があります。
gemini-1.5-pro-002
gemini-1.5-flash-002
gemini-1.0-pro-002
(プレビュー)
リモートモデルを作成したら、ML.EVALUATE
関数を使用してモデルを評価し、モデルのパフォーマンスがユースケースに適していることを確認します。このモデルを ML.GENERATE_TEXT
関数と組み合わせて使用すると、BigQuery テーブルのテキストを分析できます。
詳細については、Vertex AI Gemini API モデルの教師ありチューニングをご覧ください。
必要な権限
接続を作成するには、次の Identity and Access Management(IAM)ロールのメンバーシップが必要です。
roles/bigquery.connectionAdmin
接続のサービス アカウントに権限を付与するには、次の権限が必要です。
resourcemanager.projects.setIamPolicy
BigQuery ML を使用してモデルを作成するには、次の IAM 権限が必要です。
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
推論を実行するには、次の権限が必要です。
- テーブルに対する
bigquery.tables.getData
- モデルに対する
bigquery.models.getData
bigquery.jobs.create
- テーブルに対する
始める前に
-
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,Vertex AI, and Compute Engine APIs.
接続を作成する
クラウド リソース接続を作成し、接続のサービス アカウントを取得します。
次のオプションのいずれかを選択します。
コンソール
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
google_bigquery_connection
リソースを使用します。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
次の例では、US
リージョンに my_cloud_resource_connection
という名前の Cloud リソース接続を作成します。
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tf
にする必要があります(例:main.tf
)。このチュートリアルでは、このファイルをmain.tf
とします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行う必要があります。
terraform init
必要に応じて、最新バージョンの Google プロバイダを使用する場合は、
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行し、プロンプトで「
yes
」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」のメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
接続のサービス アカウントにアクセス権を付与する
サービス アカウントに Vertex AI へのアクセス権を付与します。権限を付与しないと、エラーが発生します。次のオプションのいずれかを選択します。
コンソール
[IAM と管理] ページに移動
[
アクセス権を付与] をクリックします。[新しいプリンシパル] に、前にコピーしたサービス アカウント ID を入力します。
[ロールを選択] をクリックします。
[フィルタ] に「
Vertex AI Service Agent
」と入力して、そのロールを選択します。[保存] をクリックします。
gcloud
gcloud projects add-iam-policy-binding
コマンドを実行します。
gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.serviceAgent' --condition=None
次のように置き換えます。
PROJECT_NUMBER
: プロジェクトの番号MEMBER
: 先ほどコピーしたサービス アカウント ID。
接続に関連付けられたサービス アカウントは BigQuery Connection Delegation サービス エージェントのインスタンスであるため、サービス エージェントのロールを割り当てることができます。
教師ありチューニングでモデルを作成する
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のクエリを実行して、リモートモデルを作成します。
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS ( ENDPOINT = 'ENDPOINT', MAX_ITERATIONS = MAX_ITERATIONS, LEARNING_RATE_MULTIPLIER = LEARNING_RATE_MULTIPLIER, DATA_SPLIT_METHOD = 'DATA_SPLIT_METHOD', DATA_SPLIT_EVAL_FRACTION = DATA_SPLIT_EVAL_FRACTION, DATA_SPLIT_COL = 'DATA_SPLIT_COL', EVALUATION_TASK = 'EVALUATION_TASK', PROMPT_COL = 'INPUT_PROMPT_COL', INPUT_LABEL_COLS = INPUT_LABEL_COLS) AS SELECT PROMPT_COLUMN, LABEL_COLUMN FROM `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`;
次のように置き換えます。
PROJECT_ID
: モデルの作成を行うプロジェクトのプロジェクト ID。DATASET_ID
: モデルを保存するデータセットの ID。このデータセットは、サポートされているパイプライン ジョブとモデル アップロード リージョンに存在する必要があります。MODEL_NAME
: モデルの名前。REGION
: 接続で使用されるリージョン。CONNECTION_ID
: BigQuery 接続の ID。この接続は、使用しているデータセットと同じロケーションに存在する必要があります。Google Cloud コンソールで接続の詳細を表示する場合、これは [接続 ID] に表示される完全修飾接続 ID の最後のセクションの値です。例:
projects/myproject/locations/connection_location/connections/myconnection
ENDPOINT
: 使用するモデルの名前を指定するSTRING
値。MAX_ITERATIONS
:INT64
値。教師ありチューニングで実行するステップ数を指定します。MAX_ITERATIONS
値は1
~∞
の範囲で指定してください。Gemini モデルはステップではなくエポックを使用してトレーニングするため、BigQuery ML は
MAX_ITERATIONS
値をエポックに変換します。MAX_ITERATIONS
のデフォルト値は、入力データの行数で 1 エポックに相当します。複数のエポックを使用するには、トレーニング データの行数を基準にエポックの数を指定します。たとえば、入力データが 100 行あり、2 つのエポックを使用する場合は、引数の値に200
を指定します。入力データの行数に整数倍でない値を指定すると、BigQuery ML は最も近いエポックに切り上げます。たとえば、入力データが 100 行あり、MAX_ITERATIONS
値に101
を指定すると、2 つのエポックでトレーニングが実行されます。Gemini モデルのチューニングに使用されるパラメータの詳細については、チューニング ジョブを作成するをご覧ください。
DATA_SPLIT_METHOD
:STRING
値。入力データをトレーニング セットと評価セットに分割する方法を指定します。有効なオプションは次のとおりです。AUTO_SPLIT
: BigQuery ML はデータを自動的に分割します。データの分割方法は入力テーブルの行数によって異なります。これはデフォルト値です。RANDOM
: データは、セットに分割される前にランダム化されます。データ分割をカスタマイズするには、このオプションをDATA_SPLIT_EVAL_FRACTION
オプションとともに使用します。CUSTOM
:DATA_SPLIT_COL
オプションで指定された列を使用してデータが分割されます。DATA_SPLIT_COL
の値は、BOOL
型の列の名前にする必要があります。値がTRUE
またはNULL
の行は評価データとして使用されます。値がFALSE
の行はトレーニング データとして使用されます。SEQ
:DATA_SPLIT_COL
オプションで指定された列を使用してデータを分割します。DATA_SPLIT_COL
の値は、次のいずれかの型の列の名前にする必要があります。NUMERIC
BIGNUMERIC
STRING
TIMESTAMP
指定された列でデータが小さい順から大きい順に並べ替えられます。
最初の n 行が評価データとして使用されます。ここで、n は
DATA_SPLIT_EVAL_FRACTION
に指定された値です。残りの行はトレーニング データとして使用されます。NO_SPLIT
: データ分割なし。すべての入力データがトレーニング データとして使用されます。
これらのデータ分割オプションの詳細については、
DATA_SPLIT_METHOD
をご覧ください。DATA_SPLIT_EVAL_FRACTION
:FLOAT64
値。教師ありチューニングの際に評価データとして使用するデータの割合を指定します。[0, 1.0]
の範囲内の値にする必要があります。デフォルト値は0.2
です。このオプションは、
DATA_SPLIT_METHOD
オプションの値としてRANDOM
またはSEQ
を指定する場合に使用します。データ分割をカスタマイズするには、DATA_SPLIT_METHOD
オプションとDATA_SPLIT_EVAL_FRACTION
オプションを使用します。DATA_SPLIT_COL
:STRING
値。入力データをトレーニング セットまたは評価セットに並べ替える際に使用する列の名前を指定します。DATA_SPLIT_METHOD
オプションの値としてCUSTOM
またはSEQ
を指定する場合に使用します。EVALUATION_TASK
:STRING
値。モデルのチューニングで実行するタスクのタイプを指定します。有効なオプションは次のとおりです。TEXT_GENERATION
CLASSIFICATION
SUMMARIZATION
QUESTION_ANSWERING
UNSPECIFIED
デフォルト値は
UNSPECIFIED
です。INPUT_PROMPT_COL
:STRING
値。トレーニング データ テーブルのプロンプト列の名前。これは、教師ありチューニングの実行時に使用されます。デフォルト値はprompt
です。INPUT_LABEL_COLS
:ARRAY<<STRING>
値。トレーニング データ テーブルのラベル列の名前。これは、教師ありチューニングで使用します。配列で指定できる要素は 1 つだけです。デフォルト値は空の配列です。これにより、label
がLABEL_COLUMN
引数のデフォルト値になります。PROMPT_COLUMN
:LABEL_COLUMN
列のコンテンツを評価するためのプロンプトが含まれているトレーニング データ テーブル内の列。この列はSTRING
型であるか、STRING
にキャストされる必要があります。INPUT_PROMPT_COL
オプションの値を指定する場合は、PROMPT_COLUMN
にも同じ値を指定する必要があります。それ以外の場合は、この値をprompt
にする必要があります。テーブルにprompt
列がない場合は、エイリアスを使用して既存のテーブル列を指定します。例:AS SELECT hint AS prompt, label FROM mydataset.mytable
。LABEL_COLUMN
: モデルをトレーニングする例を含むトレーニング データ テーブルの列。この列はSTRING
型であるか、STRING
にキャストされる必要があります。INPUT_LABEL_COLS
オプションの値を指定する場合は、LABEL_COLUMN
にも同じ値を指定する必要があります。それ以外の場合は、この値をlabel
にする必要があります。テーブルにlabel
列がない場合は、エイリアスを使用して既存のテーブル列を指定します。例:AS SELECT prompt, feature AS label FROM mydataset.mytable
。TABLE_PROJECT_ID
: トレーニング データ テーブルを含むプロジェクトのプロジェクト ID。TABLE_DATASET
: トレーニング データ テーブルを含むデータセットの名前。TABLE_NAME
: モデルのトレーニングに使用するデータを含むテーブルの名前。
チューニング済みモデルを評価する
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のクエリを実行して、チューニングされたモデルを評価します。
SELECT * FROM ML.EVALUATE( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, TABLE `TABLE_PROJECT_ID.TABLE_DATASET.TABLE_NAME`, STRUCT('TASK_TYPE' AS task_type, TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_K AS top_k, TOP_P AS top_p));
次のように置き換えます。
PROJECT_ID
: モデルを含むプロジェクトのプロジェクト ID。DATASET_ID
: モデルを格納するデータセットの ID。MODEL_NAME
: モデルの名前。TABLE_PROJECT_ID
: 評価データテーブルを含むプロジェクトのプロジェクト ID。TABLE_DATASET
: 評価データテーブルを含むデータセットの名前。TABLE_NAME
: 評価データを含むテーブルの名前。テーブルには、モデルのトレーニング時に指定されたプロンプト列名と一致する名前の列が必要です。この値は、モデルのトレーニング中に
prompt_col
オプションを使用して指定できます。prompt_col
が指定されていない場合、トレーニング データのprompt
という名前の列が使用されます。prompt
という名前の列が存在しない場合、エラーが返されます。テーブルには、モデルのトレーニング中に指定されたラベル列名と一致する名前の列が必要です。この値は、モデルのトレーニング中に
input_label_cols
オプションを使用して指定できます。input_label_cols
が未指定の場合は、トレーニング データでlabel
という名前の列が使用されます。label
という名前の列が存在しない場合、エラーが返されます。TASK_TYPE
:STRING
値。モデルを評価するタスクのタイプを指定します。有効なオプションは次のとおりです。TEXT_GENERATION
CLASSIFICATION
SUMMARIZATION
QUESTION_ANSWERING
UNSPECIFIED
TOKENS
:INT64
値。レスポンスで生成できるトークンの最大数を設定します。この値は[1,1024]
の範囲内である必要があります。レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。デフォルトは128
です。TEMPERATURE
:FLOAT64
値。トークン選択のランダム性の度合いを制御します。[0.0,1.0]
の範囲内の値にする必要があります。デフォルトは0
です。temperature
の値が小さいほど、確定的でオープンなレスポンスやクリエイティブのレスポンスが少ないプロンプトに適しています。一方、temperature
の値が大きいほど、多様な結果やクリエイティブの結果が生成される可能性があります。temperature
の0
の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。TOP_K
:[1,40]
の範囲内のINT64
値。これにより、モデルが選択を検討するトークンの初期プールが決まります。ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。デフォルト値は40
です。TOP_P
:FLOAT64
値。TOP_K
によって決定されるプールからどのトークンを選択するかを指定します。[0.0,1.0]
の範囲内の値にする必要があります。ランダムなレスポンスが少ない場合は低い値を指定し、ランダムなレスポンスが多い場合は高い値を指定します。デフォルトは0.95
です。
テキストを生成する
ML.GENERATE_TEXT
関数を使用してテキストを生成します。
プロンプト列
テーブルの列を使用してプロンプトを入力することで、テキストを生成します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, TABLE PROJECT_ID.DATASET_ID.TABLE_NAME, STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output, STOP_SEQUENCES AS stop_sequences) );
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。DATASET_ID
: モデルを格納するデータセットの ID。MODEL_NAME
: モデルの名前TABLE_NAME
: プロンプトを含むテーブルの名前。このテーブルには、チューニングされたモデルの特徴列の名前と一致する名前の列が必要です。モデルの特徴列名は、モデルの作成時にPROMPT_COL
オプションを使用して設定できます。そうでない場合、モデルの特徴列名はデフォルトでprompt
になります。エイリアスを使用して別の名前の列を使用することもできます。TOKENS
:INT64
値。レスポンスで生成できるトークンの最大数を設定します。この値は[1,8192]
の範囲内である必要があります。レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。デフォルトは128
です。TEMPERATURE
:FLOAT64
値。トークン選択のランダム性の度合いを制御します。[0.0,2.0]
の範囲内の値にする必要があります。デフォルトは0
です。temperature
の値が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、temperature
の値が高いほど、より多様で創造的な結果を導くことができます。temperature
の0
の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。TOP_P
:FLOAT64
値。[0.0,1.0]
の範囲内の値にする必要があります。これは、トークンが選択される確率を特定する際に役立ちます。ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。デフォルトは0.95
です。FLATTEN_JSON
: 生成されたテキストと安全性属性を別々の列で返すかどうかを決定するBOOL
値。デフォルトはFALSE
です。STOP_SEQUENCES
:ARRAY<STRING>
値。指定された文字列がモデルからのレスポンスに含まれている場合に、その文字列を削除します。文字列は、大文字と小文字の区別を含めて完全に一致します。デフォルトは空の配列です。GROUND_WITH_GOOGLE_SEARCH
: Vertex AI モデルがレスポンスを生成するときに Google 検索による Grounding を使用するかどうかを決定するBOOL
値。グラウンディングを使用すると、モデルは回答の生成時にインターネットから追加情報を使用できるため、モデルの回答をより具体的で事実に基づくものにできます。flatten_json_output
とこのフィールドの両方がTrue
に設定されている場合、結果に追加のml_generate_text_grounding_result
列が含まれ、モデルが追加情報の収集に使用したソースが示されます。デフォルトはFALSE
です。SAFETY_SETTINGS
: レスポンスのフィルタリングに使用するコンテンツ セーフティのしきい値を構成するARRAY<STRUCT<STRING AS category, STRING AS threshold>>
値。構造体の最初の要素は有害性カテゴリを指定し、構造体の 2 番目の要素は対応するブロックのしきい値を指定します。モデルは、これらの設定に違反するコンテンツを除外します。各カテゴリを指定できるのは 1 回のみです。たとえば、STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold)
とSTRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_ONLY_HIGH' AS threshold)
の両方を指定することはできません。特定のカテゴリに安全設定がない場合、BLOCK_MEDIUM_AND_ABOVE
安全設定が使用されます。サポートされているカテゴリは次のとおりです。
HARM_CATEGORY_HATE_SPEECH
HARM_CATEGORY_DANGEROUS_CONTENT
HARM_CATEGORY_HARASSMENT
HARM_CATEGORY_SEXUALLY_EXPLICIT
サポートされているしきい値は次のとおりです。
BLOCK_NONE
(制限付き)BLOCK_LOW_AND_ABOVE
BLOCK_MEDIUM_AND_ABOVE
(デフォルト)BLOCK_ONLY_HIGH
HARM_BLOCK_THRESHOLD_UNSPECIFIED
次の例は、これらの特性を持つリクエストを示しています。
- プロンプトに
prompts
テーブルのprompt
列を使用します。 - 短く、中程度の確率のレスポンスを返します。
- 生成されたテキストと安全性属性を別々の列で返します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.mymodel`, TABLE mydataset.prompts, STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, TRUE AS flatten_json_output));
プロンプト クエリ
クエリを使用してプロンプトを入力することでテキストを生成します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, (PROMPT_QUERY), STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature, TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output, STOP_SEQUENCES AS stop_sequences) );
次のように置き換えます。
PROJECT_ID
: プロジェクト ID。DATASET_ID
: モデルを格納するデータセットの ID。MODEL_NAME
: モデルの名前PROMPT_QUERY
: プロンプト データを提供するクエリ。TOKENS
:INT64
値。レスポンスで生成できるトークンの最大数を設定します。この値は[1,8192]
の範囲内である必要があります。レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。デフォルトは128
です。TEMPERATURE
:FLOAT64
値。トークン選択のランダム性の度合いを制御します。[0.0,2.0]
の範囲内の値にする必要があります。デフォルトは0
です。temperature
の値が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、temperature
の値が高いほど、より多様で創造的な結果を導くことができます。temperature
の0
の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。TOP_P
:FLOAT64
値。[0.0,1.0]
の範囲内の値にする必要があります。これは、トークンが選択される確率を特定する際に役立ちます。ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。デフォルトは0.95
です。FLATTEN_JSON
: 生成されたテキストと安全性属性を別々の列で返すかどうかを決定するBOOL
値。デフォルトはFALSE
です。STOP_SEQUENCES
:ARRAY<STRING>
値。指定された文字列がモデルからのレスポンスに含まれている場合に、その文字列を削除します。文字列は、大文字と小文字の区別を含めて完全に一致します。デフォルトは空の配列です。GROUND_WITH_GOOGLE_SEARCH
: Vertex AI モデルがレスポンスを生成するときに Google 検索による Grounding を使用するかどうかを決定するBOOL
値。グラウンディングを使用すると、モデルは回答の生成時にインターネットから追加情報を使用できるため、モデルの回答をより具体的で事実に基づくものにできます。flatten_json_output
とこのフィールドの両方がTrue
に設定されている場合、結果に追加のml_generate_text_grounding_result
列が含まれ、モデルが追加情報の収集に使用したソースが示されます。デフォルトはFALSE
です。SAFETY_SETTINGS
: レスポンスのフィルタリングに使用するコンテンツ セーフティのしきい値を構成するARRAY<STRUCT<STRING AS category, STRING AS threshold>>
値。構造体の最初の要素は有害性カテゴリを指定し、構造体の 2 番目の要素は対応するブロックのしきい値を指定します。モデルは、これらの設定に違反するコンテンツを除外します。各カテゴリを指定できるのは 1 回のみです。たとえば、STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold)
とSTRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_ONLY_HIGH' AS threshold)
の両方を指定することはできません。特定のカテゴリに安全設定がない場合、BLOCK_MEDIUM_AND_ABOVE
安全設定が使用されます。サポートされているカテゴリは次のとおりです。
HARM_CATEGORY_HATE_SPEECH
HARM_CATEGORY_DANGEROUS_CONTENT
HARM_CATEGORY_HARASSMENT
HARM_CATEGORY_SEXUALLY_EXPLICIT
サポートされているしきい値は次のとおりです。
BLOCK_NONE
(制限付き)BLOCK_LOW_AND_ABOVE
BLOCK_MEDIUM_AND_ABOVE
(デフォルト)BLOCK_ONLY_HIGH
HARM_BLOCK_THRESHOLD_UNSPECIFIED
例 1
次の例は、これらの特性を持つリクエストを示しています。
articles
テーブルのbody
列のテキストの概要を求めます。- やや長く、より高確率のレスポンスを返します。
- 生成されたテキストと安全性属性を別々の列で返します。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.mymodel`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT( 0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p, TRUE AS flatten_json_output));
例 2
次の例は、これらの特性を持つリクエストを示しています。
- クエリを使用して、プロンプトの接頭辞とテーブル列を連結する文字列を連結して、プロンプト データを作成します。
- 短く、中程度の確率のレスポンスを返します。
- 生成されたテキストと安全性属性を別々の列で返しません。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.mytuned_model`, ( SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt FROM mydataset.input_table ), STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, FALSE AS flatten_json_output));