独自のデータを使用してモデルをチューニングする

このドキュメントでは、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

始める前に

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery, BigQuery Connection,Vertex AI, and Compute Engine APIs.

    Enable the APIs

接続を作成する

クラウド リソース接続を作成し、接続のサービス アカウントを取得します。

次のオプションのいずれかを選択します。

コンソール

  1. BigQuery ページに移動します。

    [BigQuery] に移動

  2. 接続を作成するには、[追加] をクリックし、続いて [外部データソースへの接続] をクリックします。

  3. [接続タイプ] リストで、[Vertex AI リモートモデル、リモート関数、BigLake(Cloud リソース)] を選択します。

  4. [接続 ID] フィールドに接続の名前を入力します。

  5. [接続を作成] をクリックします。

  6. [接続へ移動] をクリックします。

  7. [接続情報] ペインで、後の手順で使用するサービス アカウント ID をコピーします。

bq

  1. コマンドライン環境で接続を作成します。

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    --project_id パラメータは、デフォルト プロジェクトをオーバーライドします。

    以下を置き換えます。

    接続リソースを作成すると、BigQuery は、一意のシステム サービス アカウントを作成し、それを接続に関連付けます。

    トラブルシューティング: 次の接続エラーが発生した場合は、Google Cloud SDK を更新します。

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. 後の手順で使用するため、サービス アカウント 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 リソース接続を作成します。


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。

Cloud Shell を準備する

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。

    このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。

ディレクトリを準備する

Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。

  1. Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tf にする必要があります(例: main.tf)。このチュートリアルでは、このファイルを main.tf とします。
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。

    新しく作成した main.tf にサンプルコードをコピーします。

    必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。

  3. 環境に適用するサンプル パラメータを確認し、変更します。
  4. 変更を保存します。
  5. Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行う必要があります。
    terraform init

    必要に応じて、最新バージョンの Google プロバイダを使用する場合は、-upgrade オプションを使用します。

    terraform init -upgrade

変更を適用する

  1. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  2. 次のコマンドを実行し、プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」のメッセージが表示されるまで待ちます。

  3. Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。

接続のサービス アカウントにアクセス権を付与する

サービス アカウントに Vertex AI へのアクセス権を付与します。権限を付与しないと、エラーが発生します。次のオプションのいずれかを選択します。

コンソール

  1. [IAM と管理] ページに移動

    [IAM と管理] に移動

  2. [アクセス権を付与] をクリックします。

  3. [新しいプリンシパル] に、前にコピーしたサービス アカウント ID を入力します。

  4. [ロールを選択] をクリックします。

  5. [フィルタ] に「Vertex AI Service Agent」と入力して、そのロールを選択します。

  6. [保存] をクリックします。

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 サービス エージェントのインスタンスであるため、サービス エージェントのロールを割り当てることができます。

教師ありチューニングでモデルを作成する

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで次のクエリを実行して、リモートモデルを作成します。

    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 行が評価データとして使用されます。ここで、nDATA_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 つだけです。デフォルト値は空の配列です。これにより、labelLABEL_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: モデルのトレーニングに使用するデータを含むテーブルの名前。

チューニング済みモデルを評価する

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで次のクエリを実行して、チューニングされたモデルを評価します。

    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 の値が大きいほど、多様な結果やクリエイティブの結果が生成される可能性があります。temperature0 の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。

    • 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 の値が高いほど、より多様で創造的な結果を導くことができます。temperature0 の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。

  • 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 の値が高いほど、より多様で創造的な結果を導くことができます。temperature0 の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。

  • 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));