マルチモーダル エンベディング モデルは、提供された入力に基づいて多次元ベクトルを生成します。これには、画像、テキスト、動画データの組み合わせが含まれます。エンベディング ベクトルは、画像分類や動画コンテンツのモデレーションなどの後続のタスクに使用できます。
画像エンベディング ベクトルとテキスト エンベディング ベクトルは、同じ次元を持つ同じセマンティック空間にあります。そのため、これらのベクトルは、テキストによる画像の検索や画像による動画の検索などのユースケースでも使用できます。
テキストのみのエンベディングのユースケースでは、代わりに Gemini Enterprise Agent Platform のテキスト エンベディング API を使用することをおすすめします。たとえば、Text Embedding API は、テキストベースのセマンティック検索、クラスタリング、長時間のドキュメント分析、その他のテキスト取得や質問応答のユースケースに適しています。詳細については、テキスト エンベディングを取得するをご覧ください。
サポートされているモデル
次のモデルを使用して、マルチモーダル エンベディングを取得できます。
gemini-embedding-2multimodalembedding@001
ベスト プラクティス
マルチモーダル エンベディング モデルを使用する場合は、入力時の次のことを考慮してください。
- 画像内のテキスト - このモデルは、光学式文字認識(OCR)と同様に、画像内のテキストを認識できます。画像コンテンツの説明と画像内のテキストを区別する必要がある場合は、プロンプト エンジニアリングを使用してターゲット コンテンツを指定することを検討してください。たとえば、ユースケースに応じて単に「cat」ではなく「picture of a cat」または「the text 'cat'」と指定します。
テキスト「cat」
大きな太字フォントでレンダリングされた「cat」という単語。
猫の写真
画像クレジット: Manja Vitolic、Unsplash。 - エンベディングの類似度 - エンベディングのドット積は、調整された確率ではありません。ドット積は類似度指標であり、ユースケースによってスコア分布が異なる場合があります。品質を測定するために固定値のしきい値を使用することは避けてください。代わりに、取得にランキング アプローチを使用するか、分類にシグモイドを使用します。
gemini-embedding-2 を使用する
gemini-embedding-2 モデルは、画像、テキスト、ドキュメント、音声、動画のモダリティにわたるインターリーブ入力を受け入れます。
タスクの指示を指定してパフォーマンスを改善する
エンベディングは、分類からドキュメント検索まで、幅広いタスクに使用できます。適切なタスク指示を指定すると、目的の関係に合わせてエンベディングを最適化し、精度と効率を最大化できます。
次の表は、gemini-embedding-2 モデルを使用して対称ユースケースと非対称ユースケースのクエリとドキュメントの形式を設定する方法の例を示しています。
検索のユースケース(非対称形式)
| ユースケース | クエリの構造 | ドキュメント構造 |
|---|---|---|
| 検索クエリ | task: search result | query: {content} |
title: {title} | text: {content}タイトルがない場合は、 title: none を使用します。 |
| 質問応答 | task: question answering | query: {content} |
title: {title} | text: {content} |
| ファクト チェック | task: fact checking | query: {content} |
title: {title} | text: {content} |
| コードの取得 | task: code retrieval | query: {content} |
title: {title} | text: {content} |
単一入力のユースケース(対称形式)
| ユースケース | 入力構造 |
|---|---|
| 分類 | task: classification | query: {content} |
| クラスタリング | task: clustering | query: {content} |
| 意味的類似度 | task: sentence similarity | query: {content}検索や取得には使用しないでください。意味的テキスト類似性用です。 |
Python での使用例
Python
# Generate embedding for a search query def prepare_query(query): return f"task: search result | query: {query}" # Generate embedding for a search document def prepare_document(content, title=None): if title is None: title = "none" return f"title: {title} | text: {content}" # Generate embedding for classification def prepare_classification_input(content): return f"task: classification | query: {content}"
API の使用
API の上限
gemini-embedding-2 モデルを使用する場合は、次の上限が適用されます。
| 上限 | 値と説明 |
|---|---|
| テキスト、画像、ドキュメント、動画、音声データ | |
| 入力トークンの上限 | 8,192 個のトークン 8,192 個を超えるトークンを含む入力は、通知なしで切り捨てられます。すべてのモダリティで、合計 8,192 個のトークン コンテキスト ウィンドウが共有されます。トークンは、モダリティごとに次のようにカウントされます。
|
| 出力の次元数 | 3072(デフォルト。output_dimensionality パラメータを使用して構成可能) |
| 画像の上限 | 1 回のリクエストで 6 枚の画像 |
| 画像形式 | JPEG、PNG、WebP、BMP、HEIC、HEIF、AVIF |
| 画像のサイズ | 画像 1 枚あたり最大 16,384 × 16,384 ピクセル |
| ドキュメントの制限 | リクエストごとに 1 つのファイル、最大 6 ページ 最高の品質を得るには、PDF 1 つにつき 1 ページにすることを強くおすすめします。 |
| ドキュメント形式 | |
| 動画と音声のデータ | |
| 動画に関する制限事項 | リクエストごとに 1 つの動画、最大 120 フレーム 120 秒の上限は、デフォルトの 1 FPS 設定に基づいています。FPS を変更すると、再生時間は Duration = 120 / FPS のように変化します。 デフォルトでは、動画の音声抽出は無効になっています。音声トラック抽出オプションが有効になっている場合、再生時間は音声の最大再生時間である 180 秒に制限され、動画の合計再生時間は音声の上限とトークン コンテキスト ウィンドウ(8,192 トークン)の両方によって制限されます。 |
| 動画フォーマット | コンテナ: MOV、MP4。コーデック: AV1、H264、H265、VP9。 |
| 音声の上限 | リクエストあたり 180 秒 音声サポートは音声用に最適化されています。アンビエント サウンドや音楽の品質が最高にならないことがあります。 |
| 音声形式 | MP3、WAV |
音声抽出を含む動画の長さ
すべてのモダリティが合計 8, 192 トークンのコンテキスト ウィンドウを共有するため、audio_track_extraction を有効にすると、動画の最大長は次のように変化します。
| モダリティ | トークン数 |
|---|---|
| 音声 | 1 秒あたり 25 トークン |
| 動画フレーム | フレームあたり 66 トークン |
| タイムスタンプ | 1 秒あたり 10 トークン(1 秒あたり 2 つのタイムスタンプが「mm:ss」形式でフォーマットされます) |
| FPS | FPS 設定によって決まります(デフォルトは 1)。 |
動画の合計時間は、最大 180 秒の音声サポートと 8,192 トークンのコンテキスト ウィンドウの両方によって制限されます。
計算の例:
デフォルトのサンプリング レート 1 FPS で動画を処理し、音声抽出を有効にした場合:
- 消費率: 動画の 1 秒ごとに 66 トークン(1 フレーム)+ 25 トークン(音声の 1 秒)+ 10 トークン(タイムスタンプ)= 101 トークンが消費されます。
- 最大再生時間: トークン上限が 8,192 の場合、最大再生時間は約 8,192 / 101 ≈ 81 秒です。
入力がコンテキスト ウィンドウを超えた場合、超過した部分は自動的に切り捨てられます。
マルチモーダル エンベディングを取得する
REST
PROJECT_ID="YOUR_PROJECT_ID" LOCATION="us" curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://aiplatform.${LOCATION}.rep.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/gemini-embedding-2:embedContent" \ -d '{ "content": { "parts": [ { "text": "Whats this" }, { "file_data": { "mime_type": "video/mp4", "file_uri": "gs://cloud-samples-data/generative-ai/video/pixel8.mp4" } } ] } }'
Python
from google import genai from google.genai import types # Initialize the client. client = genai.Client(vertexai=True, project="YOUR_PROJECT_ID", location="us") content = types.Content( parts=[ types.Part.from_text(text="Audio AI"), types.Part.from_uri( file_uri="gs://cloud-samples-data/generative-ai/audio/Chirp-3-Docs-Dive.mp3", mime_type="audio/mpeg", ), ], ) response = client.models.embed_content( model="gemini-embedding-2", contents=[content] ) print(response.embeddings[0].values)
ロケーション
ロケーションは、データの保存場所を制御するためにリクエストで指定できるリージョンです。使用可能なリージョンの一覧については、Agent Platform のロケーションをご覧ください。
割り当て
gemini-embedding-2 の割り当て上限を確認するには、Gemini Enterprise Agent Platform の生成 AI の割り当てとシステム上限をご覧ください。
ディメンション
gemini-embedding-2 モデルを使用する場合は、EmbedContentConfig の output_dimensionality パラメータを使用して、より低いディメンションを指定できます。
次の例では、128 次元ベクトルを返します。gemini-embedding-2 の場合、出力エンベディングはデフォルト以外のディメンションに対してすでに L2 正規化されています(gemini-embedding-001 とは異なります)。
Python
import numpy as np from google import genai from google.genai import types # Initialize the client. client = genai.Client(vertexai=True, project="YOUR_PROJECT_ID", location="us") content = types.Content( parts=[ types.Part.from_uri( file_uri="gs://cloud-samples-data/generative-ai/audio/Chirp-3-Docs-Dive.mp3", mime_type="audio/mpeg", ), ], ) response = client.models.embed_content( model="gemini-embedding-2", contents=[content], config=types.EmbedContentConfig(output_dimensionality=128), ) embedding_values_np = np.array(response.embeddings[0].values) print(f"Embedding length: {len(embedding_values_np)}") print(f"Norm of embedding: {np.linalg.norm(embedding_values_np):.6f}") # Should be very close to 1
パラメータ
デフォルトの動画サンプリング レートは 1 フレーム/秒(FPS)です。video_metadata を使用して追加のパラメータを追加できます。
Python
from google import genai from google.genai import types # Initialize the client. client = genai.Client(vertexai=True, project="YOUR_PROJECT_ID", location="us") content = types.Content( parts=[ types.Part( file_data=types.FileData( file_uri="gs://cloud-samples-data/generative-ai/video/pixel8.mp4", mime_type="video/mp4", ), video_metadata=types.VideoMetadata( fps=0.5, start_offset="10s", end_offset="20s", ), ), ] ) response = client.models.embed_content( model="gemini-embedding-2", contents=[content] ) print(response.embeddings[0].values)
EmbedContentConfig にはその他のオプションがあります。
| オプション | タイプ | 説明 |
|---|---|---|
output_dimensionality |
int |
出力エンベディングの次元を削減します。 |
document_ocr |
bool |
ドキュメント入力の OCR を有効にします。 |
audio_track_extraction |
bool |
動画入力から音声を抽出します。 |
multimodalembedding@001 を使用する
テキストと画像のエンベディングに multimodalembedding@001 モデルを使用する場合は、次の上限が適用されます。
| 上限 | 値と説明 |
|---|---|
| テキストと画像のデータ | |
| 各プロジェクト 1 分あたりの最大 API リクエスト数 | リージョンによって 120~600 |
| テキストの最大長 | 32 トークン(約 32 ワード) テキストの最大長は 32 トークン(約 32 ワード)です。入力が 32 トークンを超える場合、この長さになるまで内部で入力が短縮されます。 |
| 言語 | 英語 |
| 画像形式 | BMP、GIF、JPG、PNG |
| イメージサイズ | Base64 エンコード画像: 20 MB(PNG にコード変換する場合) Cloud Storage 画像: 20 MB(元のファイル形式) 使用できる画像サイズは最大 20 MB です。ネットワークのレイテンシの増加を回避するには、より小さいイメージを使用してください。さらに、このモデルは画像を 512 x 512 ピクセルの解像度に変更します。そのため、より高い解像度の画像を用意する必要はありません。 |
| 動画データ | |
| 音声対応 | なし - このモデルでは、動画エンベディングの生成時に音声コンテンツが考慮されません |
| 動画フォーマット | AVI、FLV、MKV、MOV、MP4、MPEG、MPG、WEBM、WMV |
| 動画の最大長(Cloud Storage) | 上限なし。ただし、一度に分析できるコンテンツは 2 分間のみです。 |
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Gemini Enterprise Agent Platform API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Gemini Enterprise Agent Platform API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
環境の認証を設定します。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
Java
ローカル開発環境でこのページの Java サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化した後に更新して、必要なコンポーネントをインストールします。
gcloud components update gcloud components install beta
-
ローカルシェルを使用している場合は、ユーザー アカウントのローカル認証情報を作成します。
gcloud auth application-default login
Cloud Shell を使用している場合は、この操作を行う必要はありません。
認証エラーが返され、外部 ID プロバイダ(IdP)を使用している場合は、 フェデレーション ID を使用して gcloud CLI にログインしていることを確認します。
詳細については、 Google Cloud 認証ドキュメントの ローカル開発環境の ADC の設定をご覧ください。
Node.js
ローカル開発環境でこのページの Node.js サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化した後に更新して、必要なコンポーネントをインストールします。
gcloud components update gcloud components install beta
-
ローカルシェルを使用している場合は、ユーザー アカウントのローカル認証情報を作成します。
gcloud auth application-default login
Cloud Shell を使用している場合は、この操作を行う必要はありません。
認証エラーが返され、外部 ID プロバイダ(IdP)を使用している場合は、 フェデレーション ID を使用して gcloud CLI にログインしていることを確認します。
詳細については、 Google Cloud 認証ドキュメントの ローカル開発環境の ADC の設定をご覧ください。
Python
ローカル開発環境でこのページの Python サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化した後に更新して、必要なコンポーネントをインストールします。
gcloud components update gcloud components install beta
-
ローカルシェルを使用している場合は、ユーザー アカウントのローカル認証情報を作成します。
gcloud auth application-default login
Cloud Shell を使用している場合は、この操作を行う必要はありません。
認証エラーが返され、外部 ID プロバイダ(IdP)を使用している場合は、 フェデレーション ID を使用して gcloud CLI にログインしていることを確認します。
詳細については、 Google Cloud 認証ドキュメントの ローカル開発環境の ADC の設定をご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化した後に更新して、必要なコンポーネントをインストールします。
gcloud components update gcloud components install beta
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
-
- Python SDK を使用するには、Agent Platform SDK for Python をインストールするの手順に沿って操作します。詳細については、Agent Platform SDK for Python API のリファレンス ドキュメントをご覧ください。
- 省略可。この機能の料金を確認します。エンベディングの料金は、送信するデータの種類(画像やテキストなど)によって異なります。また、特定のデータタイプ(Video Plus、Video Standard、Video Essentials など)で使用するモードによっても異なります。
ロケーション
ロケーションは、データの保存場所を制御するためにリクエストで指定できるリージョンです。使用可能なリージョンの一覧については、Agent Platform のロケーションをご覧ください。
エラー メッセージ
このセクションでは、発生する可能性のある一般的なエラー メッセージについて説明します。
割り当て超過エラー
google.api_core.exceptions.ResourceExhausted: 429 Quota exceeded for
aiplatform.googleapis.com/online_prediction_requests_per_base_model with base
model: multimodalembedding. Please submit a quota increase request.
このエラーが初めて表示された場合は、 Google Cloud コンソールを使用してプロジェクトの割り当ての調整をリクエストします。増加をリクエストする前に、次のフィルタを使用します。
Service ID: aiplatform.googleapis.commetric: aiplatform.googleapis.com/online_prediction_requests_per_base_modelbase_model:multimodalembedding
割り当て調整リクエストをすでに送信している場合は、しばらく待ってから次のリクエストを送信してください。さらに割り当てを調整する必要がある場合は、割り当てリクエストの正当性を示しながら、割り当て調整リクエストを繰り返します。
低ディメンションのエンベディングを指定する
使用するモデルに応じて、エンベディング リクエストは 1,408 個の浮動小数点ベクトルまたは 3,072 個の浮動小数点ベクトルを返します。テキストデータと画像データに低次元のエンベディングを指定して、レイテンシとストレージ、または品質を最適化できます。低次元のエンベディングでは、ストレージ ニーズが減少し、後続のエンベディング タスク(検索やレコメンデーションなど)のレイテンシが低くなります。高次元のエンベディングでは、これらのタスクの精度が向上しますが、ストレージ ニーズとレイテンシが増加します。
次の表に、各モデルで使用可能なデフォルトの低次元と使用可能な低次元を示します。
| モデル | デフォルトのサイズ(最大) | サポートされているディメンション(範囲) | 推奨される下限のディメンション |
|---|---|---|---|
gemini-embedding-2 |
3072 | 128 ~ 3,072 | 128、768、または 1536 |
multimodalembedding@001 |
1408 | 128 ~ 1408 | 128、256、または 512 |
次のサンプルを使用して、低次元のエンベディングを生成します。
REST
低次元にアクセスするには、parameters.dimension フィールドを追加します。このパラメータは、モデルで使用可能なディメンション値を受け入れます。たとえば、multimodalembedding@001 モデルを使用する場合は、128、256、512、1408 を指定できます。レスポンスには、指定されたディメンションのエンベディングが含まれます。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: 実際の Google Cloud プロジェクト ID。
-
IMAGE_URI: エンベディングを取得するターゲット画像の Cloud Storage URI。例:
gs://my-bucket/embeddings/supermarket-img.png。また、画像を base64 エンコードのバイト文字列として指定することもできます。
[...] "image": { "bytesBase64Encoded": "B64_ENCODED_IMAGE" } [...] -
TEXT: エンベディングを取得するターゲット テキスト。例:
a cat -
EMBEDDING_DIMENSION: エンベディング ディメンションの数。値を小さくすると、後続のタスクでこれらのエンベディングを使用する際のレイテンシが低くなります。値が高いほど、精度が向上します。使用可能な値:
128、256、512、1408(デフォルト)。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict
リクエストの本文(JSON):
{
"instances": [
{
"image": {
"gcsUri": "IMAGE_URI"
},
"text": "TEXT"
}
],
"parameters": {
"dimension": EMBEDDING_DIMENSION
}
}
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict"
PowerShell
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict" | Select-Object -Expand Content
128 ディメンション:
{
"predictions": [
{
"imageEmbedding": [
0.0279239565,
[...128 dimension vector...]
0.00403284049
],
"textEmbedding": [
0.202921599,
[...128 dimension vector...]
-0.0365431122
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}256 ディメンション:
{
"predictions": [
{
"imageEmbedding": [
0.248620048,
[...256 dimension vector...]
-0.0646447465
],
"textEmbedding": [
0.0757875815,
[...256 dimension vector...]
-0.02749932
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}512 ディメンション:
{
"predictions": [
{
"imageEmbedding": [
-0.0523675755,
[...512 dimension vector...]
-0.0444030389
],
"textEmbedding": [
-0.0592851527,
[...512 dimension vector...]
0.0350437127
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}
Python
Go
画像とテキストのエンベディングを取得する(multimodalembedding@001)
次のコードサンプルを使用して、画像データとテキストデータのエンベディング リクエストを送信します。サンプルでは、両方のデータ型でリクエストを送信する方法を示していますが、データ型別にサービスを使用することもできます。
テキストと画像のエンベディングを取得する
REST
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: 実際の Google Cloud プロジェクト ID。
-
TEXT: エンベディングを取得するターゲット テキスト。例:
a cat - B64_ENCODED_IMG: エンベディングを取得するターゲット画像。画像は base64 でエンコードされたバイト文字列として指定する必要があります。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict
リクエストの本文(JSON):
{
"instances": [
{
"text": "TEXT",
"image": {
"bytesBase64Encoded": "B64_ENCODED_IMG"
}
}
]
}
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict"
PowerShell
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict" | Select-Object -Expand Content
{
"predictions": [
{
"textEmbedding": [
0.010477379,
-0.00399621,
0.00576670747,
[...]
-0.00823613815,
-0.0169572588,
-0.00472954148
],
"imageEmbedding": [
0.00262696808,
-0.00198890246,
0.0152047109,
-0.0103145819,
[...]
0.0324628279,
0.0284924973,
0.011650892,
-0.00452344026
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。
Node.js
このサンプルを試す前に、クライアント ライブラリを使用した Agent Platform クイックスタートの Node.js の手順に沿って設定を行ってください。詳細については、Agent Platform Node.js API リファレンス ドキュメントをご覧ください。
Agent Platform で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した Agent Platform クイックスタートの Java の手順に沿って設定を行ってください。詳細については、Agent Platform Java API リファレンス ドキュメントをご覧ください。
Agent Platform で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
このサンプルを試す前に、クライアント ライブラリを使用した Agent Platform クイックスタートの Go の手順に沿って設定を行ってください。詳細については、Agent Platform Go API リファレンス ドキュメントをご覧ください。
Agent Platform で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
動画、画像、テキストのエンベディングを取得する(multimodalembedding@001)
エンベディング リクエストを送信するときに、入力動画のみを指定することも、動画、画像、テキストデータの組み合わせを指定することもできます。
動画エンベディング モード
動画エンベディングでは、Essentials、Standard、Plus の 3 つのモードを使用できます。モードは、生成されるエンベディングの密度に対応します。これは、リクエストの interval_sec 構成で指定できます。動画の間隔(interval_sec)ごとにエンベディングが生成されます。動画の最小間隔は 4 秒です。間隔が 120 秒を超えると、生成されたエンベディングの品質に悪影響を及ぼす可能性があります。
動画エンベディングの料金は、使用するモードによって異なります。詳細は、料金をご覧ください。
次の表に、動画のエンベディングに使用できる 3 つのモードをまとめます。
| モード | 1 分あたりの最大エンベディング数 | 動画のエンベディング間隔(最小値) |
|---|---|---|
| Essential | 4 | 15 これは intervalSec >= 15 に対応します |
| Standard | 8 | 8 これは 8 <= intervalSec < 15 に対応します |
| Plus | 15 | 4 これは 4 <= intervalSec < 8 に対応します。 |
動画エンベディングのベスト プラクティス
動画エンベディングのリクエストを送信する場合は、次の点を考慮してください。
任意の長さの入力動画の最初の 2 分間に単一のエンベディングを生成するには、次の
videoSegmentConfig設定を使用します。request.json:// other request body content "videoSegmentConfig": { "intervalSec": 120 } // other request body content長さが 2 分を超える動画のエンベディングを生成するには、
videoSegmentConfigで開始時間と終了時間を指定する複数のリクエストを送信します。request1.json:// other request body content "videoSegmentConfig": { "startOffsetSec": 0, "endOffsetSec": 120 } // other request body contentrequest2.json:// other request body content "videoSegmentConfig": { "startOffsetSec": 120, "endOffsetSec": 240 } // other request body content動画のエンベディングを取得する
動画コンテンツのみのエンベディングを取得するには、次のサンプルを使用します。
REST
次の例では、Cloud Storage にある動画を使用します。video.bytesBase64Encoded フィールドを使用して、動画の base64 エンコード文字列表現を指定することもできます。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: 実際の Google Cloud プロジェクト ID。
- VIDEO_URI: エンベディングを取得するターゲット動画の Cloud Storage URI。例:
gs://my-bucket/embeddings/supermarket-video.mp4。また、動画を base64 エンコードのバイト文字列として指定することもできます。
[...] "video": { "bytesBase64Encoded": "B64_ENCODED_VIDEO" } [...] -
videoSegmentConfig(START_SECOND、END_SECOND、INTERVAL_SECONDS)。省略可。エンベディングが生成される特定の動画セグメント(秒単位)。次に例を示します。
[...] "videoSegmentConfig": { "startOffsetSec": 10, "endOffsetSec": 60, "intervalSec": 10 } [...]この構成を使用して、10 秒から 60 秒までの動画データを指定し、[10, 20)、[20, 30)、[30, 40)、[40, 50)、[50, 60) の 10 秒の動画間隔のエンベディングを生成します。この動画間隔(
"intervalSec": 10)は、 Standard 動画エンベディング モードになり、Standard モードの料金レートで請求されます。videoSegmentConfigを省略すると、サービスはデフォルト値の"videoSegmentConfig": { "startOffsetSec": 0, "endOffsetSec": 120, "intervalSec": 16 }を使用します。この動画間隔("intervalSec": 16)は、Essential 動画エンベディング モードになり、ユーザーには Essential モードの料金レートで請求されます。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict
リクエストの本文(JSON):
{
"instances": [
{
"video": {
"gcsUri": "VIDEO_URI",
"videoSegmentConfig": {
"startOffsetSec": START_SECOND,
"endOffsetSec": END_SECOND,
"intervalSec": INTERVAL_SECONDS
}
}
}
]
}
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict"
PowerShell
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict" | Select-Object -Expand Content
レスポンス(7 秒の動画、videoSegmentConfig の指定なし):
{
"predictions": [
{
"videoEmbeddings": [
{
"endOffsetSec": 7,
"embedding": [
-0.0045467657,
0.0258095954,
0.0146885719,
0.00945400633,
[...]
-0.0023291884,
-0.00493789,
0.00975185353,
0.0168156829
],
"startOffsetSec": 0
}
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}レスポンス(59 秒の動画、動画セグメントの構成: "videoSegmentConfig": { "startOffsetSec": 0, "endOffsetSec": 60, "intervalSec": 10 }):
{
"predictions": [
{
"videoEmbeddings": [
{
"endOffsetSec": 10,
"startOffsetSec": 0,
"embedding": [
-0.00683252793,
0.0390476175,
[...]
0.00657121744,
0.013023301
]
},
{
"startOffsetSec": 10,
"endOffsetSec": 20,
"embedding": [
-0.0104404651,
0.0357737206,
[...]
0.00509833824,
0.0131902946
]
},
{
"startOffsetSec": 20,
"embedding": [
-0.0113538112,
0.0305239167,
[...]
-0.00195809244,
0.00941874553
],
"endOffsetSec": 30
},
{
"embedding": [
-0.00299320649,
0.0322436653,
[...]
-0.00993082579,
0.00968887936
],
"startOffsetSec": 30,
"endOffsetSec": 40
},
{
"endOffsetSec": 50,
"startOffsetSec": 40,
"embedding": [
-0.00591270532,
0.0368893594,
[...]
-0.00219071587,
0.0042470959
]
},
{
"embedding": [
-0.00458270218,
0.0368121453,
[...]
-0.00317760976,
0.00595594104
],
"endOffsetSec": 59,
"startOffsetSec": 50
}
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。
Go
このサンプルを試す前に、クライアント ライブラリを使用した Agent Platform クイックスタートの Go の手順に沿って設定を行ってください。詳細については、Agent Platform Go API リファレンス ドキュメントをご覧ください。
Agent Platform で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
画像、テキスト、動画のエンベディングを取得する
次のサンプルを使用して、動画、テキスト、画像コンテンツのエンベディングを取得します。
REST
次の例では、画像、テキスト、動画のデータを使用します。リクエストの本文で、これらのデータ型を任意に組み合わせて使用できます。
また、このサンプルでは Cloud Storage にある動画を使用しています。video.bytesBase64Encoded フィールドを使用して、動画の base64 エンコード文字列表現を指定することもできます。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: 実際の Google Cloud プロジェクト ID。
-
TEXT: エンベディングを取得するターゲット テキスト。例:
a cat -
IMAGE_URI: エンベディングを取得するターゲット画像の Cloud Storage URI。例:
gs://my-bucket/embeddings/supermarket-img.png。また、画像を base64 エンコードのバイト文字列として指定することもできます。
[...] "image": { "bytesBase64Encoded": "B64_ENCODED_IMAGE" } [...] - VIDEO_URI: エンベディングを取得するターゲット動画の Cloud Storage URI。例:
gs://my-bucket/embeddings/supermarket-video.mp4。また、動画を base64 エンコードのバイト文字列として指定することもできます。
[...] "video": { "bytesBase64Encoded": "B64_ENCODED_VIDEO" } [...] -
videoSegmentConfig(START_SECOND、END_SECOND、INTERVAL_SECONDS)。省略可。エンベディングが生成される特定の動画セグメント(秒単位)。次に例を示します。
[...] "videoSegmentConfig": { "startOffsetSec": 10, "endOffsetSec": 60, "intervalSec": 10 } [...]この構成を使用して、10 秒から 60 秒までの動画データを指定し、[10, 20)、[20, 30)、[30, 40)、[40, 50)、[50, 60) の 10 秒の動画間隔のエンベディングを生成します。この動画間隔(
"intervalSec": 10)は、 Standard 動画エンベディング モードになり、Standard モードの料金レートで請求されます。videoSegmentConfigを省略すると、サービスはデフォルト値の"videoSegmentConfig": { "startOffsetSec": 0, "endOffsetSec": 120, "intervalSec": 16 }を使用します。この動画間隔("intervalSec": 16)は、Essential 動画エンベディング モードになり、ユーザーには Essential モードの料金レートで請求されます。
HTTP メソッドと URL:
POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict
リクエストの本文(JSON):
{
"instances": [
{
"text": "TEXT",
"image": {
"gcsUri": "IMAGE_URI"
},
"video": {
"gcsUri": "VIDEO_URI",
"videoSegmentConfig": {
"startOffsetSec": START_SECOND,
"endOffsetSec": END_SECOND,
"intervalSec": INTERVAL_SECONDS
}
}
}
]
}
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict"
PowerShell
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict" | Select-Object -Expand Content
{
"predictions": [
{
"textEmbedding": [
0.0105433334,
-0.00302835181,
0.00656806398,
0.00603460241,
[...]
0.00445805816,
0.0139605571,
-0.00170318608,
-0.00490092579
],
"videoEmbeddings": [
{
"startOffsetSec": 0,
"endOffsetSec": 7,
"embedding": [
-0.00673126569,
0.0248149596,
0.0128901172,
0.0107588246,
[...]
-0.00180952181,
-0.0054573305,
0.0117037306,
0.0169312079
]
}
],
"imageEmbedding": [
-0.00728622358,
0.031021487,
-0.00206603738,
0.0273937676,
[...]
-0.00204976718,
0.00321615417,
0.0121978866,
0.0193375275
]
}
],
"deployedModelId": "DEPLOYED_MODEL_ID"
}
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Python API リファレンス ドキュメントをご覧ください。
Go
このサンプルを試す前に、クライアント ライブラリを使用した Agent Platform クイックスタートの Go の手順に沿って設定を行ってください。詳細については、Agent Platform Go API リファレンス ドキュメントをご覧ください。
Agent Platform で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
次のステップ
- ブログ「マルチモーダル検索とは: ビジョンを持つ LLM によるビジネスの変更」を読む。
- テキスト エンベディングを取得するで、テキストのみのユースケース(テキストベースのセマンティック検索、クラスタリング、長時間のドキュメント分析、その他のテキスト取得や質問応答のユースケース)を確認する。
- Model Garden で、その他の事前トレーニング済みモデルを確認する。
- Gemini Enterprise Agent Platform の責任ある AI のベスト プラクティスと安全フィルタについて学習する。