テキスト エンベディングをチューニングする

このページでは、テキスト エンベディング モデルtextembedding-geckotextembedding-gecko-multilingual をチューニングする方法について説明します。これらの基盤モデルは、大規模な公開テキストデータでトレーニングされています。独自のトレーニング データを必要とする独自のユースケースについては、モデルのチューニングを使用できます。基盤エンベディング モデルをチューニングしたら、モデルをユースケースに合わせてチューニングする必要があります。チューニングは、テキスト エンベディング モデルの安定バージョンでサポートされています。

テキスト エンベディング モデルは、教師ありチューニングをサポートしています。教師ありチューニングでは、推論時にテキスト エンベディング モデルから得ようとしている出力のタイプを示すラベル付きサンプルを使用します。テキスト エンベディング モデルは、人間からのフィードバックを用いた強化学習(RLHF)を使用したチューニングをサポートしていません。

モデルのチューニングの詳細については、モデルのチューニングの仕組みをご覧ください。

期待される品質の向上

Vertex AI は、パラメータ効率の高いチューニング方法を使用してカスタマイズを行います。この方法では、一般公開されている検索ベンチマーク データセットで実施したテストで、品質が最大 41%(平均 12%)向上しています。

エンベディング モデルをチューニングするユースケース

テキスト エンベディング モデルをチューニングすると、モデルを特定の領域やタスクへのエンベディングに適応させることができます。これは、事前トレーニング済みのエンベディング モデルが特定のニーズに合わない場合に有効です。たとえば、自社のカスタマー サポート チケットの特定のデータセットでエンベディング モデルを微調整できます。これにより、chatbot は、顧客が一般的に直面するさまざまなカスタマー サポートの問題を理解し、より効果的に質問に回答できるようになります。チューニングを行わないと、モデルはカスタマー サポート チケットの具体的な内容や、プロダクトの特定の問題に対する解決策を把握できません。

チューニング ワークフロー

Vertex AI で textembedding-geckotextembedding-gecko-multilingual のモデルをチューニングするワークフローは次のとおりです。

  • モデルのチューニング用データセットを準備します。
  • モデルのチューニング用データセットを Cloud Storage バケットにアップロードする。
  • Vertex AI Pipelines 用にプロジェクトを構成します。
  • モデルのチューニング ジョブを作成します。
  • チューニング済みモデルを同じ名前の Vertex AI エンドポイントにデプロイします。テキストまたは Codey モデルのチューニング ジョブとは異なり、テキストのエンベディング チューニング ジョブは、チューニング済みモデルを Vertex AI エンドポイントにデプロイしません。

エンベディング データセットを準備する

エンベディング モデルのチューニングに使用されるデータセットには、モデルに実行させるタスクに対応するデータが含まれています。

エンベディング モデルをチューニングするためのデータセット形式

トレーニング データセットは、次のファイルで構成されています。これらのファイルは、Cloud Storage に保存する必要があります。ファイルのパスは、チューニング パイプラインの起動時にパラメータによって定義されます。ファイルには、コーパス ファイルクエリファイルラベルの 3 種類があります。必要であるのはトレーニング ラベルのみですが、より詳細に制御するために検証ラベルとテストラベルを指定することもできます。

  • コーパス ファイル: パスはパラメータ corpus_path で定義されます。これは、各行にフィールド _idtitletext と文字列値を持つ JSONL ファイルです。_idtext は必須ですが、title は省略可能です。corpus.jsonl ファイルの例を以下に示します。

    {"_id": "doc1", "title": "Get an introduction to generative AI on Vertex AI", "text": "Vertex AI's Generative AI Studio offers a Google Cloud console tool for rapidly prototyping and testing generative AI models. Learn how you can use Generative AI Studio to test models using prompt samples, design and save prompts, tune a foundation model, and convert between speech and text."}
    {"_id": "doc2", "title": "Use gen AI for summarization, classification, and extraction", "text": "Learn how to create text prompts for handling any number of tasks with Vertex AI's generative AI support. Some of the most common tasks are classification, summarization, and extraction. Vertex AI's PaLM API for text lets you design prompts with flexibility in terms of their structure and format."}
    {"_id": "doc3", "title": "Custom ML training overview and documentation", "text": "Get an overview of the custom training workflow in Vertex AI, the benefits of custom training, and the various training options that are available. This page also details every step involved in the ML training workflow from preparing data to predictions."}
    {"_id": "doc4", "text": "Text embeddings are useful for clustering, information retrieval, retrieval-augmented generation (RAG), and more."}
    {"_id": "doc5", "title": "Text embedding tuning", "text": "Google's text embedding models can be tuned on Vertex AI."}
    
  • クエリファイル: クエリファイルにはサンプルクエリが含まれています。パスは queries_path パラメータで定義されます。クエリファイルは JSONL 形式であり、コーパス ファイルと同じフィールドを持ちます。queries.jsonl ファイルの例を以下に示します。

    {"_id": "query1", "text": "Does Vertex support generative AI?"}
    {"_id": "query2", "text": "What can I do with Vertex GenAI offerings?"}
    {"_id": "query3", "text": "How do I train my models using Vertex?"}
    {"_id": "query4", "text": "What is a text embedding?"}
    {"_id": "query5", "text": "Can text embedding models be tuned on Vertex?"}
    {"_id": "query6", "text": "embeddings"}
    {"_id": "query7", "text": "embeddings for rag"}
    {"_id": "query8", "text": "custom model training"}
    {"_id": "query9", "text": "Google Cloud PaLM API"}
    
  • トレーニング ラベル: パスはパラメータ train_label_path で定義されます。train_label_path は、トレーニング ラベルデータの場所への Cloud Storage URI であり、チューニング ジョブの作成時に指定されます。ラベルはヘッダー付きの TSV ファイルであることが必要です。クエリのサブセットとコーパスをトレーニング ラベルファイルに追加する必要があります。ファイルには query-idcorpus-idscore の各列が必要です。query-id はクエリファイルの _id キーと一致する文字列であり、corpus-id はコーパス ファイル内の _id と一致する文字列です。Score は正の整数値です。スコアが 0 より大きい場合は、ドキュメントがクエリに関連していることを示します。数値が大きいほど、関連性が高いことを表します。スコアが省略されている場合、デフォルト値は 1 です。train_labels.tsv ファイルの例を以下に示します。

    query-id  corpus-id   score
    query1    doc1    1
    query2    doc2    1
    query3    doc3    2
    query3    doc5  1
    query4    doc4  1
    query4    doc5  1
    query5    doc5  2
    query6    doc4  1
    query6    doc5  1
    query7    doc4  1
    query8    doc3  1
    query9    doc2  1
    
  • テストラベル: 省略可。テストラベルはトレーニング ラベルと同じ形式であり、test_label_path パラメータで指定します。test_label_path が指定されていない場合、テストラベルはトレーニング ラベルから自動的に分割されます。

  • 検証ラベル: 省略可。検証ラベルはトレーニング ラベルと同じ形式であり、validation_label_path パラメータで指定します。validation_label_path が指定されていない場合、検証ラベルはトレーニング ラベルから自動的に分割されます。

データセットのサイズ要件

指定したデータセット ファイルは、次の制約を満たしている必要があります。

  • クエリ数は 9~40,000 の範囲にする必要があります。

  • コーパス内のドキュメント数は 9~500,000 の範囲にする必要があります。

  • 各データセットのラベルファイルには、少なくとも 3 個のクエリ ID を配置する必要があります。また、すべてのデータセットの分割に、少なくとも 9 個のクエリ ID を配置する必要があります。

  • ラベルの総数は 500,000 未満にする必要があります。

Vertex AI Pipelines 用にプロジェクトを構成する

チューニングは、Vertex AI Pipelines プラットフォームを使用してプロジェクト内で実行されます。

権限の構成

パイプラインは、2 つの Google 管理サービス アカウントでトレーニング コードを実行します。これらのアカウントには、特定の権限を構成する必要があります。

Compute Engine のデフォルトのサービス アカウント
PROJECT_NUMBER-compute@developer.gserviceaccount.com

このサービス アカウントには、次の対象が必要です。

  • Cloud Storage で作成した各データセット ファイルへの Storage Object Viewer アクセス権。

  • パイプラインの出力 Cloud Storage ディレクトリ(PIPELINE_OUTPUT_DIRECTORY)への Storage Object User アクセス権。

  • プロジェクトへの Vertex AI User アクセス権。

Compute Engine のデフォルトのサービス アカウントの代わりに、カスタム サービス アカウントを指定できます。詳細については、詳細な権限を持つサービス アカウントを構成するをご覧ください。

Vertex AI サービス エージェント
service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com

このサービス アカウントには、次の対象が必要です。

  • Cloud Storage で作成した各データセット ファイルへの Storage Object Viewer アクセス権。

  • パイプラインの出力 Cloud Storage ディレクトリ(PIPELINE_OUTPUT_DIRECTORY)への Storage Object User アクセス権。

Cloud Storage データセットの権限の構成について詳しくは、パイプライン アーティファクト用に Cloud Storage バケットを構成するをご覧ください。

アクセラレータの使用

チューニングには、次のいずれかのアクセラレータを使用できます。

  • NVIDIA_L4

  • NVIDIA_TESLA_A100

  • NVIDIA_TESLA_T4

  • NVIDIA_TESLA_V100

  • NVIDIA_TESLA_P100

チューニング ジョブを開始するには、選択したアクセラレータ タイプとリージョンに十分な Restricted image training GPUs 割り当て(例: Restricted image training Nvidia V100 GPUs per region)が必要です。プロジェクトの割り当てを増やすには、割り当ての増加をリクエストするをご覧ください。

すべてのアクセラレータがすべてのリージョンで利用できるわけではありません。詳細については、Vertex AI でのアクセラレータの使用をご覧ください。

エンベディング モデルのチューニング ジョブを作成する

エンベディング モデルのチューニング ジョブは、Google Cloud コンソールまたは REST API を使用して作成できます。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • DISPLAY_NAME: pipelineJob の表示名。
  • PIPELINE_OUTPUT_DIRECTORY: パイプライン出力アーティファクトのパス(「gs://」で始まります)。
  • PROJECT_ID: Google Cloud プロジェクト ID。
  • LOCATION: パイプラインを実行する Google Cloud プロジェクト リージョン。チューニングは、プロジェクトに十分な GPU 割り当てがあるリージョンでサポートされています。詳細については、アクセラレータの使用をご覧ください。他のリージョンではリソースの提供が制限される可能性があるため、us-central1 が推奨されます。
  • QUERIES_PATH: クエリデータを保存する Cloud Storage バケットの URI(「gs://」で始まります)。
  • CORPUS_PATH: コーパスデータの Cloud Storage URI(「gs://」で始まります)。
  • TRAIN_LABEL_PATH: トレーニング ラベルデータの場所の Cloud Storage URI(「gs://」で始まります)。
  • TEST_LABEL_PATH: 省略可。テストラベル データの場所の Cloud Storage URI(「gs://」で始まります)。空の文字列を渡すと、トレーニング データセットからテスト データセットを自動的に分割するようパイプラインに指示されます。
  • VALIDATION_LABEL_PATH: 省略可。検証ラベルデータの場所の Cloud Storage URI(「gs://」で始まります)。空の文字列を渡すと、トレーニング データセットから検証データセットを自動的に分割するようパイプラインに指示されます。
  • ACCELERATOR_TYPE: 省略可。トレーニングに使用するアクセラレータの種類。デフォルトは NVIDIA_TESLA_V100 です。設定可能な値については、アクセラレータの使用をご覧ください。
  • ACCELERATOR_COUNT: 省略可。トレーニング時に使用するアクセラレータの数。アクセラレータの数を増やすとトレーニングが高速化される可能性がありますが、品質には影響しません。デフォルトは 4 です。
  • MACHINE_TYPE: 省略可。トレーニングに使用するマシンタイプ。デフォルトは n1-standard-16 です。選択したアクセラレータのタイプと数に一致するマシンタイプの選択については、GPU プラットフォームをご覧ください。
  • BASE_MODEL_VERSION_ID: 省略可。チューニングするテキスト エンベディング モデルを指定するために使用します。デフォルトは textembedding-gecko@001 です。設定可能な値については、安定版をご覧ください。
  • MODEL_DISPLAY_NAME: 省略可。Model Registry に表示されるチューニング済みモデルの表示名。デフォルトは「tuned-text-embedding-model」です。
  • TASK_TYPE: 省略可。このパラメータを設定すると、特定のダウンストリーム タスク用にチューニング済みモデルが最適化されます。デフォルトは DEFAULT です。詳細については、テキスト エンベディングを取得するをご覧ください。
  • BATCH_SIZE: 省略可。トレーニングのバッチサイズ。デフォルトは 128 です。
  • ITERATIONS: 省略可。モデルのチューニングを行うステップ数。デフォルトは 1,000 です。30 より大きな値にする必要があります。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs

リクエストの本文(JSON):

{
  "displayName": "DISPLAY_NAME",
  "runtimeConfig": {
    "gcsOutputDirectory": "PIPELINE_OUTPUT_DIRECTORY",
    "parameterValues": {
      "project": "PROJECT_ID",
      "location": "LOCATION",
      "queries_path": "QUERIES_PATH",
      "corpus_path": "CORPUS_PATH",
      "train_label_path": "TRAIN_LABEL_PATH",
      "test_label_path": "TEST_LABEL_PATH",
      "validation_label_path": "VALIDATION_LABEL_PATH",
      "accelerator_type": "ACCELERATOR_TYPE",
      "accelerator_count": "ACCELERATOR_COUNT",
      "machine_type": "MACHINE_TYPE",
      "base_model_version_id": "BASE_MODEL_VERSION_ID",
      "model_display_name": "MODEL_DISPLAY_NAME",
      "task_type": "TASK_TYPE",
      "batch_size": "BATCH_SIZE",
      "iterations": "ITERATIONS"
    }
  },
  "templateUri": "https://us-kfp.pkg.dev/ml-pipeline/llm-text-embedding/tune-text-embedding-model/v1.1.2"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

パイプラインを起動したら、Google Cloud コンソールでチューニング ジョブの進捗状況を確認します。

Google Cloud コンソールに移動

Java

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

package aiplatform;

// [START aiplatform_sdk_embedding_tuning]
import com.google.cloud.aiplatform.v1beta1.CreatePipelineJobRequest;
import com.google.cloud.aiplatform.v1beta1.LocationName;
import com.google.cloud.aiplatform.v1beta1.PipelineJob;
import com.google.cloud.aiplatform.v1beta1.PipelineJob.RuntimeConfig;
import com.google.cloud.aiplatform.v1beta1.PipelineServiceClient;
import com.google.cloud.aiplatform.v1beta1.PipelineServiceSettings;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class CreatePipelineJobEmbeddingModelTuningSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "PROJECT";
    String baseModelVersionId = "BASE_MODEL_VERSION_ID";
    String taskType = "TASK_TYPE";
    String location = "us-central1";
    String pipelineJobDisplayName = "PIPELINE_JOB_DISPLAY_NAME";
    String modelDisplayName = "MODEL_DISPLAY_NAME";
    String outputDir = "OUTPUT_DIR";
    String queriesPath = "DATASET_URI";
    String corpusPath = "DATASET_URI";
    String trainLabelPath = "DATASET_URI";
    String testLabelPath = "DATASET_URI";
    int batchSize = 50;
    int iterations = 300;

    createPipelineJobEmbeddingModelTuningSample(
        project,
        baseModelVersionId,
        taskType,
        location,
        pipelineJobDisplayName,
        modelDisplayName,
        outputDir,
        queriesPath,
        corpusPath,
        trainLabelPath,
        testLabelPath,
        batchSize,
        iterations);
  }

  // Create a model tuning job
  public static void createPipelineJobEmbeddingModelTuningSample(
      String project,
      String baseModelVersionId,
      String taskType,
      String location,
      String pipelineJobDisplayName,
      String modelDisplayName,
      String outputDir,
      String queriesPath,
      String corpusPath,
      String trainLabelPath,
      String testLabelPath,
      int batchSize,
      int iterations)
      throws IOException {
    final String endpoint = String.format("%s-aiplatform.googleapis.com:443", location);
    PipelineServiceSettings pipelineServiceSettings =
        PipelineServiceSettings.newBuilder().setEndpoint(endpoint).build();

    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (PipelineServiceClient client = PipelineServiceClient.create(pipelineServiceSettings)) {
      Map<String, Value> parameterValues = new HashMap<>();
      parameterValues.put("project", stringToValue(project));
      parameterValues.put("base_model_version_id", stringToValue(baseModelVersionId));
      parameterValues.put("task_type", stringToValue(taskType));
      parameterValues.put(
          "location",
          stringToValue(
              "us-central1")); // Deployment is only supported in us-central1.
      parameterValues.put("queries_path", stringToValue(queriesPath));
      parameterValues.put("corpus_path", stringToValue(corpusPath));
      parameterValues.put("train_label_path", stringToValue(trainLabelPath));
      parameterValues.put("test_label_path", stringToValue(testLabelPath));
      parameterValues.put("batch_size", numberToValue(batchSize));
      parameterValues.put("iterations", numberToValue(iterations));

      RuntimeConfig runtimeConfig =
          RuntimeConfig.newBuilder()
              .setGcsOutputDirectory(outputDir)
              .putAllParameterValues(parameterValues)
              .build();

      PipelineJob pipelineJob =
          PipelineJob.newBuilder()
              .setTemplateUri(
                  "https://us-kfp.pkg.dev/ml-pipeline/llm-text-embedding/tune-text-embedding-model/v1.1.2")
              .setDisplayName(pipelineJobDisplayName)
              .setRuntimeConfig(runtimeConfig)
              .build();

      LocationName parent = LocationName.of(project, location);
      CreatePipelineJobRequest request =
          CreatePipelineJobRequest.newBuilder()
              .setParent(parent.toString())
              .setPipelineJob(pipelineJob)
              .build();

      PipelineJob response = client.createPipelineJob(request);
      System.out.format("response: %s\n", response);
      System.out.format("Name: %s\n", response.getName());
    }
  }

  static Value stringToValue(String str) {
    return Value.newBuilder().setStringValue(str).build();
  }

  static Value numberToValue(int n) {
    return Value.newBuilder().setNumberValue(n).build();
  }
}

// [END aiplatform_sdk_embedding_tuning]

コンソール

Google Cloud コンソールを使用してテキスト エンベディング モデルをチューニングするには、次の手順でカスタマイズ パイプラインを起動します。

  1. Google Cloud コンソールの [Vertex AI] セクションで、[Vertex AI Pipelines] ページに移動します。

    Vertex AI Pipelines に移動

  2. [実行を作成] をクリックして、[パイプライン実行の作成] ペインを開きます。
  3. [既存のパイプラインから選択] をクリックして、次の詳細を入力します。
    1. [リソースを選択] プルダウンから [ml-pipeline] を選択します。
    2. [リポジトリ] プルダウンから [llm-text-embedding] を選択します。
    3. [パイプラインまたはコンポーネント] プルダウンから [tune-text-embedding-model] を選択します。
    4. [バージョン] プルダウンから「v1.1.2」というラベルのバージョンを選択します。
  4. パイプライン実行を一意に識別できるように実行名を指定します。
  5. [リージョン] プルダウン リストで、パイプライン実行を作成するリージョンを選択します。現在サポートされているのは us-central1 のみです。
  6. [続行] をクリックします。[ランタイムの構成] ペインが表示されます。
  7. [Cloud Storage のロケーション] で [参照] をクリックして、パイプライン出力アーティファクトを保存する Cloud Storage バケットを選択し、[選択] をクリックします。
  8. [パイプライン パラメータ] で、チューニング パイプラインのパラメータを指定します。パラメータの意味については、REST ドキュメントをご覧ください。
  9. [送信] をクリックして、パイプライン実行を作成します。

curl コマンドの例

PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
BASE_MODEL_VERSION_ID=BASE_MODEL_VERSION_ID
PIPELINE_OUTPUT_DIRECTORY=PIPELINE_OUTPUT_DIRECTORY
QUERIES_PATH=QUERIES_PATH
CORPUS_PATH=CORPUS_PATH
TRAIN_LABEL_PATH=TRAIN_LABEL_PATH

curl -X POST  \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json; charset=utf-8" \
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/pipelineJobs?pipelineJobId=tune-text-embedding-$(date +%Y%m%d%H%M%S)" \
-d '{
  "displayName": "tune-text-embedding-model",
  "runtimeConfig": {
    "gcsOutputDirectory": "'${PIPELINE_OUTPUT_DIRECTORY}'",
    "parameterValues": {
      "project":  "'${PROJECT_ID}'",
      "base_model_version_id":  "'${BASE_MODEL_VERSION_ID}'",
      "location":   "'${LOCATION}'",
      "queries_path":  "'${QUERIES_PATH}'",
      "corpus_path":  "'${CORPUS_PATH}'",
      "train_label_path":  "'${TRAIN_LABEL_PATH}'"
    }
  },
  "templateUri": "https://us-kfp.pkg.dev/ml-pipeline/llm-text-embedding/tune-text-embedding-model/v1.1.2"
}'

チューニング済みモデルを使用する

Model Registry でチューニング済みモデルを表示する

チューニング ジョブが完了しても、チューニング済みモデルはエンドポイントに自動的にはデプロイされません。Model Registry でモデルリソースとして使用できます。Google Cloud コンソールを使用して、現在のプロジェクト内のモデルのリスト(調整済みのモデルを含む)を表示できます。

Google Cloud コンソールでチューニングしたモデルを表示するには、[Vertex AI Model Registry] ページに移動します。

Vertex AI Model Registry に移動

モデルをデプロイする

エンベディング モデルをチューニングしたら、モデルリソースをデプロイする必要があります。チューニング済みのエンベディング モデルをデプロイするには、エンドポイントにモデルをデプロイするをご覧ください。

基盤モデルとは異なり、チューニング済みテキスト エンベディング モデルはユーザーが管理します。これには、マシンタイプやアクセラレータなどのサービス提供リソースの管理が含まれます。予測中にメモリ不足エラーが発生しないようにするには、任意の入力長に対して最大 5 までのバッチサイズをサポートできる NVIDIA_TESLA_A100 GPU タイプを使用してデプロイすることをおすすめします。

textembedding-gecko 基盤モデルと同様に、チューニング済みモデルは最大 3,072 個のトークンをサポートし、それより長い入力を切り捨てることができます。

デプロイされたモデルで予測を取得する

チューニング済みモデルをデプロイしたら、次のいずれかのコマンドを使用して、チューニング済みモデルのエンドポイントにリクエストを発行できます。

チューニング済みの textembedding-gecko@001 モデルの curl コマンドの例

チューニング済みバージョンの textembedding-gecko@001 から予測を取得するには、以下の curl コマンドの例を使用します。

PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
ENDPOINT_URI=https://${LOCATION}-aiplatform.googleapis.com
MODEL_ENDPOINT=TUNED_MODEL_ENDPOINT_ID

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json"  \
    ${ENDPOINT_URI}/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${MODEL_ENDPOINT}:predict \
    -d '{
  "instances": [
    {
      "content": "Dining in New York City"
    },
    {
      "content": "Best resorts on the east coast"
    }
  ]
}'

textembedding-gecko@001 以外のモデルに対する curl コマンドの例

他のモデルのチューニング済みバージョン(textembedding-gecko@003textembedding-gecko-multilingual@001 など)には、task_typetitle の 2 つの追加入力が必要です。これらのパラメータの詳細については、curl コマンドをご覧ください。

PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
ENDPOINT_URI=https://${LOCATION}-aiplatform.googleapis.com
MODEL_ENDPOINT=TUNED_MODEL_ENDPOINT_ID

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json"  \
    ${ENDPOINT_URI}/v1/projects/${PROJECT_ID}/locations/${LOCATION}/endpoints/${MODEL_ENDPOINT}:predict \
    -d '{
  "instances": [
    {
      "content": "Dining in New York City",
      "task_type": "DEFAULT",
      "title": ""
    },
    {
      "content": "There are many resorts to choose from on the East coast...",
      "task_type": "RETRIEVAL_DOCUMENT",
      "title": "East Coast Resorts"
    }
  ]
}'

出力例

この出力は、バージョンに関係なく、textembedding-gecko モデルと textembedding-gecko-multilingual モデルの両方に適用されます。

{
 "predictions": [
   [ ... ],
   [ ... ],
   ...
 ],
 "deployedModelId": "...",
 "model": "projects/.../locations/.../models/...",
 "modelDisplayName": "tuned-text-embedding-model",
 "modelVersionId": "1"
}

次のステップ