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

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

必要な権限

  • 接続を作成するには、次の 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. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  2. Google Cloud プロジェクトで課金が有効になっていることを確認します

  3. BigQuery, BigQuery Connection,Vertex AI, and Compute Engine API を有効にします。

    API を有効にする

接続を作成する

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

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

コンソール

  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[email protected])を入力します。

  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[email protected])。

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

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

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

      詳細については、MAX_ITERATIONS をご覧ください。

    • EARLY_STOP: BOOL 値。すべてのチューニング ステップが完了する前に、教師ありチューニングを停止するかどうかを指定します。TRUE に設定すると、評価の実行間でモデルのパフォーマンス(予測されるトークンの正確性により測定)に十分な改善が見られなかった場合、教師ありチューニングを停止します。FALSE に設定すると、すべてのチューニング ステップが完了するまで、教師ありチューニングが続行されます。デフォルト値は FALSE です。
    • LEARNING_RATE_MULTIPLIER: FLOAT64。推奨学習率に適用する乗数。デフォルト値は 1.0 です。
    • 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 値。TOP_K によって決定されるプールからどのトークンを選択するかを指定します。[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 値。TOP_K によって決定されるプールからどのトークンを選択するかを指定します。[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));