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

このドキュメントでは、Vertex AI gemini-1.0-pro-002 モデルまたは Vertex AI text-bison モデルのバージョンを参照する BigQuery ML リモートモデルを作成し、教師ありチューニングを実行するようにモデルを構成する方法について説明します。リモートモデルを作成したら、ML.EVALUATE 関数を使用してモデルを評価し、モデルのパフォーマンスがユースケースに適していることを確認します。このモデルを ML.GENERATE_TEXT 関数と組み合わせて使用すると、BigQuery テーブルのテキストを分析できます。

詳細については、Vertex AI Gemini API モデルの教師ありチューニングまたは Vertex AI PaLM 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

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 {}
}        
次のように置き換えます。

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

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

Compute Engine のデフォルト サービス アカウントにアクセス権を付与する

Compute Engine API を有効にすると、Compute Engine のデフォルト サービス アカウントにプロジェクトの編集者ロールが自動的に付与されます。ただし、プロジェクトでこの動作を無効にしている場合は除きます。その場合は、Compute Engine のデフォルト サービス アカウントに編集者ロールを再度付与して、リモートモデルを作成してチューニングするための十分な権限を付与する必要があります。

コンソール

  1. [IAM と管理] ページに移動します。

    [IAM と管理] に移動

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

  3. [新しいプリンシパル] に、サービス アカウント ID(PROJECT_NUMBER-compute@developer.gserviceaccount.com)を入力します。

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

  5. [ロールを選択] で [基本] を選択し、[編集者] を選択します。

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

gcloud

gcloud projects add-iam-policy-binding コマンドを実行します。

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/editor' --condition=None

次のように置き換えます。

  • PROJECT_NUMBER: プロジェクトの番号。
  • MEMBER: サービス アカウント ID(PROJECT_NUMBER-compute@developer.gserviceaccount.com)。

チューニング サービス エージェントを作成する

チューニング ジョブを実行するサービス エージェントを作成します。

gemini-1.0-pro-002 モデルのサービス エージェントを作成する

Vertex AI Secure ファイン チューニング サービス エージェントのインスタンスを作成します。

  1. gcloud beta services identity create コマンドを使用して、チューニング サービス エージェントを作成します。

    gcloud beta services identity create --service=aiplatform.googleapis.com --project=PROJECT_NUMBER
    

    PROJECT_NUMBER は、使用するプロジェクト番号に置き換えます。

  2. gcloud projects add-iam-policy-binding コマンドを使用して、チューニング サービス エージェントに Vertex AI チューニング サービス エージェント(roles/aiplatform.tuningServiceAgentロールを付与します。

    gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-vertex-tune.iam.gserviceaccount.com' --role='roles/aiplatform.tuningServiceAgent'
    

    PROJECT_NUMBER は、使用するプロジェクト番号に置き換えます。

text-bison モデルのサービス エージェントを作成する

AI Platform のファイン チューニング サービス エージェントのインスタンスを作成します。

  1. gcloud beta services identity create コマンドを使用して、チューニング サービス エージェントを作成します。

    gcloud beta services identity create --service=aiplatform.googleapis.com --project=PROJECT_NUMBER
    

    PROJECT_NUMBER は、使用するプロジェクト番号に置き換えます。

  2. gcloud projects add-iam-policy-binding コマンドを使用して、チューニング サービス エージェントに Vertex AI サービス エージェント(roles/aiplatform.serviceAgentロールを付与します。

    gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-aiplatform-ft.iam.gserviceaccount.com' --role='roles/aiplatform.serviceAgent'
    

    PROJECT_NUMBER は、使用するプロジェクト番号に置き換えます。

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

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

    [BigQuery] に移動

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

gemini-1.0-pro-002

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 値。使用するモデルの名前を指定します。この場合、gemini-1.0-pro-002 にする必要があります。
  • MAX_ITERATIONS: INT64 値。教師ありチューニングで実行するステップ数を指定します。MAX_ITERATIONS 値は 1 の範囲で指定してください。

    gemini-1.0-pro-002 モデルはステップではなくエポックを使用してトレーニングするため、BigQuery ML は MAX_ITERATIONS 値をエポックに変換します。MAX_ITERATIONS のデフォルト値は、入力データの行数で 1 エポックに相当します。複数のエポックを使用するには、トレーニング データの行数を基準にエポックの数を指定します。たとえば、入力データが 100 行あり、2 つのエポックを使用する場合は、引数の値に 200 を指定します。入力データの行数に整数倍でない値を指定すると、BigQuery ML は最も近いエポックに切り上げます。たとえば、入力データが 100 行あり、MAX_ITERATIONS 値に 101 を指定すると、2 つのエポックでトレーニングが実行されます。

    gemini-1.0-pro-002 モデルのチューニングに使用されるパラメータの詳細については、チューニング ジョブを作成するをご覧ください。

  • LEARNING_RATE_MULTIPLIER: FLOAT64。推奨学習率に適用する乗数。デフォルト値は 1.0 です。
  • 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: モデルのトレーニングに使用するデータを含むテーブルの名前。

text-bison

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,
  EARLY_STOP = EARLY_STOP,
  ACCELERATOR_TYPE = 'ACCELERATOR_TYPE',
  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 値。使用するモデルの名前を指定します。この場合は、任意のバージョンの text-bison モデルである必要があります。
  • MAX_ITERATIONS: INT64 値。教師ありチューニングで実行するステップ数を指定します。MAX_ITERATIONS 値は 1 の範囲で指定してください。通常、100 ステップの完了には約 1 時間かかります。デフォルト値は 300 です。

    MAX_ITERATIONS 値と ACCELERATOR_TYPE 値を組み合わせると、モデル トレーニングで使用されるバッチサイズに影響します。バッチサイズの決定方法の詳細については、MAX_ITERATIONS をご覧ください。トレーニング ステップ数の選択に関する詳細なガイダンスについては、推奨構成をご覧ください。

  • LEARNING_RATE_MULTIPLIER: FLOAT64。推奨学習率に適用する乗数。デフォルト値は 1.0 です。
  • EARLY_STOP: BOOL 値。すべてのチューニング ステップが完了する前に、教師ありチューニングを停止するかどうかを指定します。TRUE に設定すると、評価の実行間でモデルのパフォーマンス(予測されるトークンの正確性により測定)に十分な改善が見られなかった場合、教師ありチューニングを停止します。FALSE に設定すると、すべてのチューニング ステップが完了するまで、教師ありチューニングが続行されます。デフォルト値は FALSE です。
  • ACCELERATOR_TYPE: STRING 値。教師ありチューニングに使用するアクセラレータのタイプを指定します。有効なオプションは次のとおりです。
    • GPU: 教師ありチューニングに A100 80 GB GPU を使用します。
    • TPU: 教師ありチューニングに TPU v3 Pod の 64 コアを使用します。このオプションを選択した場合:
      • クエリは europe-west4 リージョンで実行する必要があります。ロケーションなどのクエリ オプションの変更については、インタラクティブ クエリを実行するをご覧ください。
      • TPU リソースが配置されているため、教師ありチューニングの計算は europe-west4 リージョンで行われます。

    デフォルト値は GPU です。どちらの方法を使用する場合でも、十分な割り当てがあることを確認してください。

  • 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_K AS top_k, 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: プロンプトを含むテーブルの名前。このテーブルには、チューニングされた LLM の特徴列の名前と一致する名前の列が必要です。LLM の特徴列名は、モデルの作成時に PROMPT_COL オプションを使用して設定できます。そうでない場合、LLM の特徴列名はデフォルトで prompt になります。エイリアスを使用して別の名前の列を使用することもできます。
  • TOKENS: INT64 値。レスポンスで生成できるトークンの最大数を設定します。この値は [1,1024] の範囲内である必要があります。レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。デフォルトは 128 です。
  • TEMPERATURE: FLOAT64 値。トークン選択のランダム性の度合いを制御します。[0.0,1.0] の範囲内の値にする必要があります。デフォルトは 0 です。

    temperature の値が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、temperature の値が高いほど、より多様で創造的な結果を導くことができます。temperature0 の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。

  • TOP_K: [1,40] の範囲内の INT64 値。これにより、モデルが選択を検討するトークンの初期プールが決まります。ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。デフォルトは 40 です。
  • TOP_P: FLOAT64 値。[0.0,1.0] の範囲内の値にする必要があります。これは、トークンが選択される確率を特定する際に役立ちます。ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。デフォルトは 0.95 です。
  • FLATTEN_JSON: 生成されたテキストと安全性属性を別々の列で返すかどうかを決定する BOOL 値。デフォルトは FALSE です。
  • STOP_SEQUENCES: ARRAY<STRING> 値。指定された文字列がモデルからのレスポンスに含まれている場合に、その文字列を削除します。文字列は、大文字と小文字の区別を含めて完全に一致します。デフォルトは空の配列です。

次の例は、これらの特性を持つリクエストを示しています。

  • プロンプトに prompts テーブルの prompt 列を使用します。
  • 短く、中程度の確率のレスポンスを返します。
  • 生成されたテキストと安全性属性を別々の列で返します。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p,
      40 AS top_k, 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_K AS top_k, 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,1024] の範囲内である必要があります。レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。デフォルトは 128 です。
  • TEMPERATURE: FLOAT64 値。トークン選択のランダム性の度合いを制御します。[0.0,1.0] の範囲内の値にする必要があります。デフォルトは 0 です。

    temperature の値が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、temperature の値が高いほど、より多様で創造的な結果を導くことができます。temperature0 の値は確定的であり、最も高い確率のレスポンスが常に選択されることを意味します。

  • TOP_K: [1,40] の範囲内の INT64 値。これにより、モデルが選択を検討するトークンの初期プールが決まります。ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。デフォルトは 40 です。
  • TOP_P: FLOAT64 値。[0.0,1.0] の範囲内の値にする必要があります。これは、トークンが選択される確率を特定する際に役立ちます。ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。デフォルトは 0.95 です。
  • FLATTEN_JSON: 生成されたテキストと安全性属性を別々の列で返すかどうかを決定する BOOL 値。デフォルトは FALSE です。
  • STOP_SEQUENCES: ARRAY<STRING> 値。指定された文字列がモデルからのレスポンスに含まれている場合に、その文字列を削除します。文字列は、大文字と小文字の区別を含めて完全に一致します。デフォルトは空の配列です。

例 1

次の例は、これらの特性を持つリクエストを示しています。

  • articles テーブルの body 列のテキストの概要を求めます。
  • やや長く、より高確率のレスポンスを返します。
  • 生成されたテキストと安全性属性を別々の列で返します。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (
      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,
      15 AS top_k, TRUE AS flatten_json_output));

例 2

次の例は、これらの特性を持つリクエストを示しています。

  • クエリを使用して、プロンプトの接頭辞とテーブル列を連結する文字列を連結して、プロンプト データを作成します。
  • 短く、中程度の確率のレスポンスを返します。
  • 生成されたテキストと安全性属性を別々の列で返しません。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_tuned_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,
      30 AS top_k, FALSE AS flatten_json_output));