エンベディング

Gemini API は、テキスト、画像、動画などのコンテンツのエンベディングを生成するエンベディング モデルを提供します。生成されたエンベディングは、セマンティック検索、分類、クラスタリングなどのタスクに使用できます。これにより、キーワード ベースのアプローチよりも正確でコンテキストを認識した結果が得られます。

最新のモデル gemini-embedding-2 は、Gemini API の最初のマルチモーダル エンベディング モデルです。テキスト、画像、動画、音声、ドキュメントを統一されたエンベディング空間にマッピングし、100 以上の言語でクロスモーダル検索、分類、クラスタリングを可能にします。詳しくは、マルチモーダル エンベディングのセクションをご覧ください。テキストのみのユースケースでは、gemini-embedding-001 は引き続き使用できます。

検索拡張生成(RAG)システムの構築は、AI プロダクトの一般的なユースケースです。エンベディングは、事実の正確性、一貫性、コンテキストの豊富さを向上させ、モデルの出力を大幅に強化するうえで重要な役割を果たします。マネージド RAG ソリューションを使用する場合は、RAG の管理を容易にし、費用対効果を高める File Search ツールをご利用ください。

エンベディングの生成

embedContent メソッドを使用してテキスト エンベディングを生成します。

Python

from google import genai

client = genai.Client()

result = client.models.embed_content(
        model="gemini-embedding-2",
        contents="What is the meaning of life?"
)

print(result.embeddings)

JavaScript

import { GoogleGenAI } from "@google/genai";

async function main() {

    const ai = new GoogleGenAI({});

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2',
        contents: 'What is the meaning of life?',
    });

    console.log(response.embeddings);
}

main();

Java

import com.google.genai.Client;
import com.google.genai.types.EmbedContentResponse;
import java.util.Collections;

Client client = new Client();

EmbedContentResponse response =
    client.models.embedContent("text-embedding-004", "Why is the sky blue?", null);

response.embeddings().ifPresent(list -> {
  for (var emb : list) {
    System.out.println("Embedding values: " + emb.values().orElse(Collections.emptyList()));
  }
});

Go

package main

import (
    "context"
    "encoding/json"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }

    contents := []*genai.Content{
        genai.NewContentFromText("What is the meaning of life?", genai.RoleUser),
    }
    result, err := client.Models.EmbedContent(ctx,
        "gemini-embedding-2",
        contents,
        nil,
    )
    if err != nil {
        log.Fatal(err)
    }

    embeddings, err := json.MarshalIndent(result.Embeddings, "", "  ")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(embeddings))
}

REST

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2:embedContent" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: ${GEMINI_API_KEY}" \
    -d '{
        "model": "models/gemini-embedding-2",
        "content": {
        "parts": [{
            "text": "What is the meaning of life?"
        }]
        }
    }'

パフォーマンスを改善するためにタスクタイプを指定する

エンベディングは、分類からドキュメント検索まで、幅広いタスクに使用できます。適切なタスクタイプを指定すると、目的の関係に合わせてエンベディングを最適化し、精度と効率を最大限に高めることができます。

Embeddings 2 を使用するタスクタイプ

gemini-embedding-2 を使用するテキストのみのタスクでは、プロンプトにタスクの指示を追加することを強くおすすめします。これを行うには、クエリとドキュメントを正しいタスク接頭辞でフォーマットします。

マルチモーダル入力に基づいて単一のエンベディングを生成する場合、通常は、入力のテキスト部分にタスク指示を付加することをおすすめしません。パフォーマンスが向上する場合もあれば、低下する場合もあります。

次の表は、gemini-embedding-2 モデルを使用して対称ユースケースと非対称ユースケースのクエリとドキュメントの形式を設定する方法の例を示しています。

検索のユースケース(非対称形式)