Mendapatkan embeddings multimodal

Model embedding multimodal menghasilkan vektor 1408 dimensi* berdasarkan input yang Anda berikan, yang dapat mencakup kombinasi data gambar, teks, dan video. Vektor embedding kemudian dapat digunakan untuk tugas selanjutnya seperti klasifikasi gambar atau moderasi konten video.

Vektor embedding gambar dan vektor embedding teks berada dalam ruang semantik yang sama dengan dimensi yang sama. Akibatnya, vektor ini dapat digunakan secara bergantian untuk kasus penggunaan seperti penelusuran gambar melalui teks atau penelusuran video dengan gambar.

Untuk kasus penggunaan embedding hanya teks, sebaiknya gunakan API embedding teks Vertex AI. Misalnya, API embedding teks mungkin lebih baik untuk penelusuran semantik berbasis teks, pengelompokan, analisis dokumen berformat panjang, dan kasus penggunaan pengambilan teks atau question answering lainnya. Untuk informasi selengkapnya, lihat Mendapatkan embedding teks.

* Nilai default.

Kasus penggunaan

Gambar dan teks:

  • Klasifikasi gambar: Mengambil gambar sebagai input dan memprediksi satu atau beberapa kelas (label).
  • Penelusuran gambar: Menelusuri gambar yang relevan atau mirip.
  • Rekomendasi: Membuat rekomendasi produk atau iklan berdasarkan gambar.

Gambar, teks, dan video:

  • Rekomendasi: Buat rekomendasi produk atau iklan berdasarkan video (penelusuran kemiripan).
  • Penelusuran konten video
    • Menggunakan penelusuran semantik: Mengambil teks sebagai input, dan menampilkan kumpulan frame berperingkat yang cocok dengan kueri.
    • Menggunakan penelusuran kemiripan:
      • Mengambil video sebagai input, dan menampilkan kumpulan video yang cocok dengan kueri.
      • Mengambil gambar sebagai input, dan menampilkan kumpulan video yang cocok dengan kueri.
  • Klasifikasi video: Mengambil video sebagai input dan memprediksi satu atau beberapa kelas.

Model yang didukung

Anda bisa mendapatkan embedding multimodal dengan menggunakan model berikut:

  • multimodalembedding

Praktik terbaik

Pertimbangkan aspek input berikut saat menggunakan model embedding multimodal:

  • Teks dalam gambar - Model dapat membedakan teks dalam gambar, mirip dengan pengenalan karakter optik (OCR). Jika Anda perlu membedakan antara deskripsi konten gambar dan teks dalam gambar, pertimbangkan untuk menggunakan rekayasa perintah guna menentukan konten target Anda. Misalnya: alih-alih hanya "kucing" (cat), gunakan "gambar kucing" atau "text 'kucing", bergantung pada kasus penggunaan Anda.




    teks 'kucing'

    gambar teks dengan kata kucing




    gambar kucing

    gambar kucing
    Kredit gambar: Manja Vitolic di Unsplash.
  • Kemiripan embedding - Produk titik embedding bukan merupakan probabilitas yang dikalibrasi. Produk titik adalah metrik kesamaan dan mungkin memiliki distribusi skor yang berbeda untuk kasus penggunaan yang berbeda. Oleh karena itu, hindari penggunaan nilai minimum tetap untuk mengukur kualitas. Sebagai gantinya, gunakan pendekatan peringkat untuk pengambilan, atau gunakan sigmoid untuk klasifikasi.

Penggunaan API

Batas API

Batas berikut berlaku saat Anda menggunakan model multimodalembedding untuk embedding teks dan gambar:

Limit Nilai dan deskripsi
Data teks dan gambar
Jumlah maksimum permintaan API per menit per project 120
Panjang teks maksimum 32 token (~32 kata)

Panjang teks maksimum adalah 32 token (sekitar 32 kata). Jika input melebihi 32 token, model akan mempersingkat input menjadi 32 token secara internal.
Pemodelan bahasa Inggris
Format gambar BMP, GIF, JPG, PNG
Ukuran gambar Gambar berenkode base64: 20 MB (saat di-transcoding ke PNG)
Gambar Cloud Storage: 20 MB (format file asli)

Ukuran gambar maksimum yang diterima adalah 20 MB. Untuk menghindari peningkatan latensi jaringan, gunakan gambar yang lebih kecil. Selain itu, model ini mengubah ukuran gambar menjadi resolusi 512 x 512 piksel. Jadi, Anda tidak perlu memberikan gambar yang beresolusi lebih tinggi.
Data video
Audio yang didukung T/A - Model tidak mempertimbangkan konten audio saat membuat embedding video
Format video AVI, FLV, MKV, MOV, MP4, MPEG, MPG, WEBM, dan WMV
Durasi video maksimum (Cloud Storage) Tidak ada batas. Namun, hanya konten berdurasi 2 menit yang dapat dianalisis dalam satu waktu.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Enable the Vertex AI API.

    Enable the API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Enable the Vertex AI API.

    Enable the API

  8. Siapkan autentikasi untuk lingkungan Anda.

    Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    Java

    Untuk menggunakan contoh Java di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Update dan instal komponen gcloud:
      gcloud components update
      gcloud components install beta
    4. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi Google Cloud.

    Node.js

    Untuk menggunakan contoh Node.js di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Update dan instal komponen gcloud:
      gcloud components update
      gcloud components install beta
    4. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi Google Cloud.

    Python

    Untuk menggunakan contoh Python di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Update dan instal komponen gcloud:
      gcloud components update
      gcloud components install beta
    4. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal dalam dokumentasi autentikasi Google Cloud.

    REST

    Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Update dan instal komponen gcloud:
      gcloud components update
      gcloud components install beta
  9. Untuk menggunakan Python SDK, ikuti petunjuk di bagian Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Vertex AI SDK untuk Python API.
  10. Opsional. Tinjau pricing untuk fitur ini. Harga untuk embedding bergantung pada jenis data yang Anda kirim (misalnya gambar atau teks), dan juga bergantung pada mode yang Anda gunakan untuk jenis data tertentu (seperti Video Plus, Video Standar, atau Video Penting).

Lokasi

Lokasi adalah region yang dapat Anda tentukan dalam permintaan untuk mengontrol tempat data disimpan dalam penyimpanan. Untuk mengetahui daftar region yang tersedia, lihat AI Generatif di lokasi Vertex AI.

Pesan error

Error kuota terlampaui

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.

Jika ini adalah pertama kalinya Anda menerima error ini, gunakan konsol Google Cloud guna meminta penambahan kuota untuk project Anda. Gunakan filter berikut sebelum meminta penambahan:

  • Service ID: aiplatform.googleapis.com
  • metric: aiplatform.googleapis.com/online_prediction_requests_per_base_model
  • base_model:multimodalembedding

Buka Kuota

Jika Anda telah mengirimkan permintaan penambahan kuota, tunggu sebelum mengirimkan permintaan lain. Jika Anda perlu menambah kuota lagi, ulangi permintaan penambahan kuota dengan alasan untuk permintaan kuota berkelanjutan.

Menentukan embedding dimensi lebih rendah

Secara default, permintaan embedding menampilkan vektor float 1408 untuk jenis data. Anda juga dapat menentukan embedding dimensi rendah (128, 256, atau 512 vektor float) untuk data teks dan gambar. Dengan opsi ini, Anda dapat mengoptimalkan latensi dan penyimpanan atau kualitas berdasarkan rencana penggunaan embedding. Embedding dimensi lebih rendah memberikan kebutuhan penyimpanan yang lebih rendah dan latensi yang lebih rendah untuk tugas penyematan berikutnya (seperti penelusuran atau rekomendasi), sementara embedding dengan dimensi lebih tinggi menawarkan akurasi yang lebih tinggi untuk tugas yang sama.

REST

Dimensi rendah dapat diakses dengan menambahkan kolom parameters.dimension. Parameter ini menerima salah satu nilai berikut: 128, 256, 512, atau 1408. Responsnya menyertakan embedding dimensi tersebut.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • LOCATION: Region project Anda. Misalnya, us-central1, europe-west2, atau asia-northeast3. Untuk mengetahui daftar region yang tersedia, lihat Generative AI di lokasi Vertex AI.
  • PROJECT_ID: ID project Google Cloud Anda.
  • IMAGE_URI: URI Cloud Storage video target untuk mendapatkan embeddings. Contoh, gs://my-bucket/embeddings/supermarket-img.png.

    Anda juga dapat menyediakan gambar sebagai string byte berenkode base64:

    [...]
    "image": {
      "bytesBase64Encoded": "B64_ENCODED_IMAGE"
    }
    [...]
    
  • TEXT: Teks target yang akan diberikan embedding. Contoh, a cat.
  • EMBEDDING_DIMENSION: Jumlah dimensi penyematan. Nilai yang lebih rendah menawarkan latensi yang berkurang saat menggunakan embedding ini untuk tugas berikutnya, sementara nilai yang lebih tinggi memberikan akurasi yang lebih baik. Nilai yang tersedia: 128, 256, 512, dan 1408 (default).

Metode HTTP dan URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict

Isi JSON permintaan:

{
  "instances": [
    {
      "image": {
        "gcsUri": "IMAGE_URI"
      },
      "text": "TEXT"
    }
  ],
  "parameters": {
    "dimension": EMBEDDING_DIMENSION
  }
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

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

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$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
Penyematan model menampilkan vektor float dari dimensi yang Anda tentukan. Contoh respons berikut dipersingkat untuk memberi ruang.

Dimensi 128:

{
  "predictions": [
    {
      "imageEmbedding": [
        0.0279239565,
        [...128 dimension vector...]
        0.00403284049
      ],
      "textEmbedding": [
        0.202921599,
        [...128 dimension vector...]
        -0.0365431122
      ]
    }
  ],
  "deployedModelId": "DEPLOYED_MODEL_ID"
}

Dimensi 256:

{
  "predictions": [
    {
      "imageEmbedding": [
        0.248620048,
        [...256 dimension vector...]
        -0.0646447465
      ],
      "textEmbedding": [
        0.0757875815,
        [...256 dimension vector...]
        -0.02749932
      ]
    }
  ],
  "deployedModelId": "DEPLOYED_MODEL_ID"
}

Dimensi 512:

{
  "predictions": [
    {
      "imageEmbedding": [
        -0.0523675755,
        [...512 dimension vector...]
        -0.0444030389
      ],
      "textEmbedding": [
        -0.0592851527,
        [...512 dimension vector...]
        0.0350437127
      ]
    }
  ],
  "deployedModelId": "DEPLOYED_MODEL_ID"
}

Mengirim permintaan penyematan (gambar dan teks)

Gunakan contoh kode berikut untuk mengirim permintaan embedding dengan data gambar dan teks. Contoh ini menunjukkan cara mengirim permintaan dengan kedua jenis data, tetapi Anda juga dapat menggunakan layanan dengan masing-masing jenis data.

Mendapatkan embedding teks dan gambar

REST

Untuk informasi selengkapnya tentang permintaan model multimodalembedding, lihat referensi API model multimodalembedding.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • LOCATION: Region project Anda. Misalnya, us-central1, europe-west2, atau asia-northeast3. Untuk mengetahui daftar region yang tersedia, lihat Generative AI di lokasi Vertex AI.
  • PROJECT_ID: ID project Google Cloud Anda.
  • TEXT: Teks target yang akan diberikan embedding. Contoh, a cat.
  • B64_ENCODED_IMG: Gambar target yang akan diberikan embedding. Gambar harus ditentukan sebagai string byte berenkode base64.

Metode HTTP dan URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict

Isi JSON permintaan:

{
  "instances": [
    {
      "text": "TEXT",
      "image": {
        "bytesBase64Encoded": "B64_ENCODED_IMG"
      }
    }
  ]
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

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

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$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
Embedding yang ditampilkan model adalah vektor float 1408. Respons contoh berikut disingkat karena ruang yang terbatas.
{
  "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

Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Python API.

from typing import Optional

import vertexai
from vertexai.vision_models import (
    Image,
    MultiModalEmbeddingModel,
    MultiModalEmbeddingResponse,
)

def get_image_embeddings(
    project_id: str,
    location: str,
    image_path: str,
    contextual_text: Optional[str] = None,
) -> MultiModalEmbeddingResponse:
    """Example of how to generate multimodal embeddings from image and text.

    Args:
        project_id: Google Cloud Project ID, used to initialize vertexai
        location: Google Cloud Region, used to initialize vertexai
        image_path: Path to image (local or Google Cloud Storage) to generate embeddings for.
        contextual_text: Text to generate embeddings for.
    """

    vertexai.init(project=project_id, location=location)

    model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding")
    image = Image.load_from_file(image_path)

    embeddings = model.get_embeddings(
        image=image,
        contextual_text=contextual_text,
    )
    print(f"Image Embedding: {embeddings.image_embedding}")
    print(f"Text Embedding: {embeddings.text_embedding}")

Node.js

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Node.js Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

/**
 * TODO(developer): Uncomment these variables before running the sample.\
 * (Not necessary if passing values as arguments)
 */
// const project = 'YOUR_PROJECT_ID';
// const location = 'YOUR_PROJECT_LOCATION';
// const bastImagePath = "YOUR_BASED_IMAGE_PATH"
// const textPrompt = 'YOUR_TEXT_PROMPT';
const aiplatform = require('@google-cloud/aiplatform');

// Imports the Google Cloud Prediction service client
const {PredictionServiceClient} = aiplatform.v1;

// Import the helper module for converting arbitrary protobuf.Value objects.
const {helpers} = aiplatform;

// Specifies the location of the api endpoint
const clientOptions = {
  apiEndpoint: 'us-central1-aiplatform.googleapis.com',
};
const publisher = 'google';
const model = 'multimodalembedding@001';

// Instantiates a client
const predictionServiceClient = new PredictionServiceClient(clientOptions);

async function predictImageFromImageAndText() {
  // Configure the parent resource
  const endpoint = `projects/${project}/locations/${location}/publishers/${publisher}/models/${model}`;

  const fs = require('fs');
  const imageFile = fs.readFileSync(baseImagePath);

  // Convert the image data to a Buffer and base64 encode it.
  const encodedImage = Buffer.from(imageFile).toString('base64');

  const prompt = {
    text: textPrompt,
    image: {
      bytesBase64Encoded: encodedImage,
    },
  };
  const instanceValue = helpers.toValue(prompt);
  const instances = [instanceValue];

  const parameter = {
    sampleCount: 1,
  };
  const parameters = helpers.toValue(parameter);

  const request = {
    endpoint,
    instances,
    parameters,
  };

  // Predict request
  const [response] = await predictionServiceClient.predict(request);
  console.log('Get image embedding response');
  const predictions = response.predictions;
  console.log('\tPredictions :');
  for (const prediction of predictions) {
    console.log(`\t\tPrediction : ${JSON.stringify(prediction)}`);
  }
}

await predictImageFromImageAndText();

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


import com.google.cloud.aiplatform.v1beta1.EndpointName;
import com.google.cloud.aiplatform.v1beta1.PredictResponse;
import com.google.cloud.aiplatform.v1beta1.PredictionServiceClient;
import com.google.cloud.aiplatform.v1beta1.PredictionServiceSettings;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.Value;
import com.google.protobuf.util.JsonFormat;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Base64;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PredictImageFromImageAndTextSample {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace this variable before running the sample.
    String project = "YOUR_PROJECT_ID";
    String textPrompt = "YOUR_TEXT_PROMPT";
    String baseImagePath = "YOUR_BASE_IMAGE_PATH";

    // Learn how to use text prompts to update an image:
    // https://cloud.google.com/vertex-ai/docs/generative-ai/image/edit-images
    Map<String, Object> parameters = new HashMap<String, Object>();
    parameters.put("sampleCount", 1);

    String location = "us-central1";
    String publisher = "google";
    String model = "multimodalembedding@001";

    predictImageFromImageAndText(
        project, location, publisher, model, textPrompt, baseImagePath, parameters);
  }

  // Update images using text prompts
  public static void predictImageFromImageAndText(
      String project,
      String location,
      String publisher,
      String model,
      String textPrompt,
      String baseImagePath,
      Map<String, Object> parameters)
      throws IOException {
    final String endpoint = String.format("%s-aiplatform.googleapis.com:443", location);
    final PredictionServiceSettings predictionServiceSettings =
        PredictionServiceSettings.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 (PredictionServiceClient predictionServiceClient =
        PredictionServiceClient.create(predictionServiceSettings)) {
      final EndpointName endpointName =
          EndpointName.ofProjectLocationPublisherModelName(project, location, publisher, model);

      // Convert the image to Base64
      byte[] imageData = Base64.getEncoder().encode(Files.readAllBytes(Paths.get(baseImagePath)));
      String encodedImage = new String(imageData, StandardCharsets.UTF_8);

      JsonObject jsonInstance = new JsonObject();
      jsonInstance.addProperty("text", textPrompt);
      JsonObject jsonImage = new JsonObject();
      jsonImage.addProperty("bytesBase64Encoded", encodedImage);
      jsonInstance.add("image", jsonImage);

      Value instanceValue = stringToValue(jsonInstance.toString());
      List<Value> instances = new ArrayList<>();
      instances.add(instanceValue);

      Gson gson = new Gson();
      String gsonString = gson.toJson(parameters);
      Value parameterValue = stringToValue(gsonString);

      PredictResponse predictResponse =
          predictionServiceClient.predict(endpointName, instances, parameterValue);
      System.out.println("Predict Response");
      System.out.println(predictResponse);
      for (Value prediction : predictResponse.getPredictionsList()) {
        System.out.format("\tPrediction: %s\n", prediction);
      }
    }
  }

  // Convert a Json string to a protobuf.Value
  static Value stringToValue(String value) throws InvalidProtocolBufferException {
    Value.Builder builder = Value.newBuilder();
    JsonFormat.parser().merge(value, builder);
    return builder.build();
  }
}

Mengirim permintaan penyematan (video, gambar, atau teks)

Saat mengirimkan permintaan penyematan, Anda dapat menentukan video input saja, atau menentukan kombinasi data video, gambar, dan teks.

Mode penyematan video

Ada tiga mode yang dapat digunakan dengan embedding video: Essential, Standar, atau Plus. Mode ini sesuai dengan kepadatan embedding yang dihasilkan, yang dapat ditentukan oleh konfigurasi interval_sec dalam permintaan. Untuk setiap interval video dengan panjang interval_sec, embedding akan dibuat. Durasi interval video minimal adalah 4 detik. Durasi interval yang lebih besar dari 120 detik dapat berdampak negatif pada kualitas embedding yang dihasilkan.

Harga untuk penyematan video bergantung pada mode yang Anda gunakan. Untuk mengetahui informasi selengkapnya, lihat pricing.

Tabel berikut merangkum tiga mode yang dapat Anda gunakan untuk embedding video:

Mode Jumlah maksimum embedding per menit Interval penyematan video (nilai minimum)
Penting 4 15

Ini sesuai dengan: intervalSec >= 15
Standar 8 8

Ini sesuai dengan: 8 <= intervalSec < 15
Plus 15 4

Ini sesuai dengan: 4 <= intervalSec < 8

Praktik terbaik penyematan video

Pertimbangkan hal-hal berikut saat Anda mengirim permintaan penyematan video:

  • Untuk menghasilkan satu embedding untuk dua menit pertama video input dengan durasi berapa pun, gunakan setelan videoSegmentConfig berikut:

    request.json:

    // other request body content
    "videoSegmentConfig": {
      "intervalSec": 120
    }
    // other request body content
    
  • Agar dapat membuat penyematan untuk video dengan durasi lebih dari dua menit, Anda dapat mengirim beberapa permintaan yang menentukan waktu mulai dan waktu berakhir di videoSegmentConfig:

    request1.json:

    // other request body content
    "videoSegmentConfig": {
      "startOffsetSec": 0,
      "endOffsetSec": 120
    }
    // other request body content
    

    request2.json:

    // other request body content
    "videoSegmentConfig": {
      "startOffsetSec": 120,
      "endOffsetSec": 240
    }
    // other request body content
    

Mendapatkan embedding video

Gunakan contoh berikut guna mendapatkan embedding untuk konten video saja.

REST

Untuk informasi selengkapnya tentang permintaan model multimodalembedding, lihat referensi API model multimodalembedding.

Contoh berikut menggunakan video yang terletak di Cloud Storage. Anda juga dapat menggunakan kolom video.bytesBase64Encoded untuk memberikan representasi string berenkode base64 dari video.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • LOCATION: Region project Anda. Misalnya, us-central1, europe-west2, atau asia-northeast3. Untuk mengetahui daftar region yang tersedia, lihat Generative AI di lokasi Vertex AI.
  • PROJECT_ID: ID project Google Cloud Anda.
  • VIDEO_URI: URI Cloud Storage video target untuk mendapatkan embeddings. Contoh, gs://my-bucket/embeddings/supermarket-video.mp4.

    Anda juga dapat menyediakan video sebagai string byte berenkode base64:

    [...]
    "video": {
      "bytesBase64Encoded": "B64_ENCODED_VIDEO"
    }
    [...]
    
  • videoSegmentConfig (START_SECOND, END_SECOND, INTERVAL_SECONDS). Opsional. Segmen video tertentu (dalam detik) tempat embedding dibuat.

    Contoh:

    [...]
    "videoSegmentConfig": {
      "startOffsetSec": 10,
      "endOffsetSec": 60,
      "intervalSec": 10
    }
    [...]

    Menggunakan konfigurasi ini akan menentukan data video dari 10 detik hingga 60 detik dan menghasilkan embeddings untuk interval video 10 detik berikut: [10, 20), [20, 30), [30, 40), [40, 50), [50, 60). Interval video ini ("intervalSec": 10) termasuk dalam Mode penyematan video standar, dan pengguna ditagih dengan Tarif harga mode standar.

    Jika Anda menghapus videoSegmentConfig, layanan akan menggunakan nilai default berikut: "videoSegmentConfig": { "startOffsetSec": 0, "endOffsetSec": 120, "intervalSec": 16 }. Interval video ini ("intervalSec": 16) termasuk dalam Mode penyematan video penting, dan pengguna akan ditagih dengan Tarif harga mode Penting.

Metode HTTP dan URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict

Isi JSON permintaan:

{
  "instances": [
    {
      "video": {
        "gcsUri": "VIDEO_URI",
        "videoSegmentConfig": {
          "startOffsetSec": START_SECOND,
          "endOffsetSec": END_SECOND,
          "intervalSec": INTERVAL_SECONDS
        }
      }
    }
  ]
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

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

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$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
Embedding yang ditampilkan model adalah vektor float 1408. Contoh respons berikut dipersingkat untuk spasi.

Respons (video 7 detik, tidak ada videoSegmentConfig yang ditentukan):

{
  "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"
}

Respons (video 59 detik, dengan konfigurasi segmen video berikut: "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

Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Python API.

from typing import Optional

import vertexai
from vertexai.vision_models import (
    MultiModalEmbeddingModel,
    MultiModalEmbeddingResponse,
    Video,
    VideoSegmentConfig,
)

def get_video_embeddings(
    project_id: str,
    location: str,
    video_path: str,
    contextual_text: Optional[str] = None,
    dimension: Optional[int] = 1408,
    video_segment_config: Optional[VideoSegmentConfig] = None,
) -> MultiModalEmbeddingResponse:
    """Example of how to generate multimodal embeddings from video and text.

    Args:
        project_id: Google Cloud Project ID, used to initialize vertexai
        location: Google Cloud Region, used to initialize vertexai
        video_path: Path to video (local or Google Cloud Storage) to generate embeddings for.
        contextual_text: Text to generate embeddings for.
        dimension: Dimension for the returned embeddings.
            https://cloud.google.com/vertex-ai/docs/generative-ai/embeddings/get-multimodal-embeddings#low-dimension
        video_segment_config: Define specific segments to generate embeddings for.
            https://cloud.google.com/vertex-ai/docs/generative-ai/embeddings/get-multimodal-embeddings#video-best-practices
    """

    vertexai.init(project=project_id, location=location)

    model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding")
    video = Video.load_from_file(video_path)

    embeddings = model.get_embeddings(
        video=video,
        video_segment_config=video_segment_config,
        contextual_text=contextual_text,
        dimension=dimension,
    )

    # Video Embeddings are segmented based on the video_segment_config.
    print("Video Embeddings:")
    for video_embedding in embeddings.video_embeddings:
        print(
            f"Video Segment: {video_embedding.start_offset_sec} - {video_embedding.end_offset_sec}"
        )
        print(f"Embedding: {video_embedding.embedding}")

    print(f"Text Embedding: {embeddings.text_embedding}")

Mendapatkan embedding gambar, teks, dan video

Gunakan contoh berikut guna mendapatkan embedding untuk konten video, teks, dan gambar.

REST

Untuk informasi selengkapnya tentang permintaan model multimodalembedding, lihat referensi API model multimodalembedding.

Contoh berikut menggunakan data gambar, teks, dan video. Anda dapat menggunakan kombinasi jenis data ini dalam isi permintaan.

Selain itu, contoh ini menggunakan video yang berada di Cloud Storage. Anda juga dapat menggunakan kolom video.bytesBase64Encoded untuk memberikan representasi string berenkode base64 dari video.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • LOCATION: Region project Anda. Misalnya, us-central1, europe-west2, atau asia-northeast3. Untuk mengetahui daftar region yang tersedia, lihat Generative AI di lokasi Vertex AI.
  • PROJECT_ID: ID project Google Cloud Anda.
  • TEXT: Teks target yang akan diberikan embedding. Contoh, a cat.
  • IMAGE_URI: URI Cloud Storage video target untuk mendapatkan embeddings. Contoh, gs://my-bucket/embeddings/supermarket-img.png.

    Anda juga dapat menyediakan gambar sebagai string byte berenkode base64:

    [...]
    "image": {
      "bytesBase64Encoded": "B64_ENCODED_IMAGE"
    }
    [...]
    
  • VIDEO_URI: URI Cloud Storage video target untuk mendapatkan embeddings. Contoh, gs://my-bucket/embeddings/supermarket-video.mp4.

    Anda juga dapat menyediakan video sebagai string byte berenkode base64:

    [...]
    "video": {
      "bytesBase64Encoded": "B64_ENCODED_VIDEO"
    }
    [...]
    
  • videoSegmentConfig (START_SECOND, END_SECOND, INTERVAL_SECONDS). Opsional. Segmen video tertentu (dalam detik) tempat embedding dibuat.

    Contoh:

    [...]
    "videoSegmentConfig": {
      "startOffsetSec": 10,
      "endOffsetSec": 60,
      "intervalSec": 10
    }
    [...]

    Menggunakan konfigurasi ini akan menentukan data video dari 10 detik hingga 60 detik dan menghasilkan embeddings untuk interval video 10 detik berikut: [10, 20), [20, 30), [30, 40), [40, 50), [50, 60). Interval video ini ("intervalSec": 10) termasuk dalam Mode penyematan video standar, dan pengguna ditagih dengan Tarif harga mode standar.

    Jika Anda menghapus videoSegmentConfig, layanan akan menggunakan nilai default berikut: "videoSegmentConfig": { "startOffsetSec": 0, "endOffsetSec": 120, "intervalSec": 16 }. Interval video ini ("intervalSec": 16) termasuk dalam Mode penyematan video penting, dan pengguna akan ditagih dengan Tarif harga mode Penting.

Metode HTTP dan URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/multimodalembedding@001:predict

Isi JSON permintaan:

{
  "instances": [
    {
      "text": "TEXT",
      "image": {
        "gcsUri": "IMAGE_URI"
      },
      "video": {
        "gcsUri": "VIDEO_URI",
        "videoSegmentConfig": {
          "startOffsetSec": START_SECOND,
          "endOffsetSec": END_SECOND,
          "intervalSec": INTERVAL_SECONDS
        }
      }
    }
  ]
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

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

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$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
Embedding yang ditampilkan model adalah vektor float 1408. Respons contoh berikut disingkat karena ruang yang terbatas.
{
  "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

Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Python API.

from typing import Optional

import vertexai
from vertexai.vision_models import (
    Image,
    MultiModalEmbeddingModel,
    MultiModalEmbeddingResponse,
    Video,
    VideoSegmentConfig,
)

def get_image_video_text_embeddings(
    project_id: str,
    location: str,
    image_path: str,
    video_path: str,
    contextual_text: Optional[str] = None,
    dimension: Optional[int] = 1408,
    video_segment_config: Optional[VideoSegmentConfig] = None,
) -> MultiModalEmbeddingResponse:
    """Example of how to generate multimodal embeddings from image, video, and text.

    Args:
        project_id: Google Cloud Project ID, used to initialize vertexai
        location: Google Cloud Region, used to initialize vertexai
        image_path: Path to image (local or Google Cloud Storage) to generate embeddings for.
        video_path: Path to video (local or Google Cloud Storage) to generate embeddings for.
        contextual_text: Text to generate embeddings for.
        dimension: Dimension for the returned embeddings.
            https://cloud.google.com/vertex-ai/docs/generative-ai/embeddings/get-multimodal-embeddings#low-dimension
        video_segment_config: Define specific segments to generate embeddings for.
            https://cloud.google.com/vertex-ai/docs/generative-ai/embeddings/get-multimodal-embeddings#video-best-practices
    """

    vertexai.init(project=project_id, location=location)

    model = MultiModalEmbeddingModel.from_pretrained("multimodalembedding")
    image = Image.load_from_file(image_path)
    video = Video.load_from_file(video_path)

    embeddings = model.get_embeddings(
        image=image,
        video=video,
        video_segment_config=video_segment_config,
        contextual_text=contextual_text,
        dimension=dimension,
    )

    print(f"Image Embedding: {embeddings.image_embedding}")

    # Video Embeddings are segmented based on the video_segment_config.
    print("Video Embeddings:")
    for video_embedding in embeddings.video_embeddings:
        print(
            f"Video Segment: {video_embedding.start_offset_sec} - {video_embedding.end_offset_sec}"
        )
        print(f"Embedding: {video_embedding.embedding}")

    print(f"Text Embedding: {embeddings.text_embedding}")

Langkah selanjutnya