エンベディング

Gemini API は、単語、フレーズ、コード、文のエンベディングを生成する複数のエンベディング モデルをサポートしています。生成されたエンベディングは、セマンティック検索、テキスト分類、クラスタリングなどのタスクに使用できます。

エンベディングとは

エンベディングは、テキスト(または他のメディア形式)の数値表現であり、入力間の関係をとらえます。テキスト エンベディングは、テキストを浮動小数点数の配列(ベクトル)に変換することで機能します。こうしたベクトルは、テキストの意味を捉えるように設計されています。エンベディング配列の長さは、ベクトルの次元数と呼ばれます。テキストの一節は、数百の次元を含むベクトルで表せます。

エンベディングは意味論的意味とコンテキストをキャプチャするため、意味が類似するテキストは「近い」エンベディングになります。たとえば、「犬を動物病院に連れて行った」と「猫を動物病院に連れて行った」という文は、ベクトル空間内で互いに近いエンベディングを持つことになります。

エンベディングを使用すると、さまざまなテキストを比較して、それらの関連性を把握できます。たとえば、テキスト「cat」と「dog」のエンベディングが近い場合、これらの単語は意味、コンテキスト、またはその両方で類似していると推測できます。これにより、さまざまな一般的な AI ユースケースが可能になります。

エンベディングを生成する

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

PythonJavaScriptGoREST
from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

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

print(result.embeddings)
import { GoogleGenAI } from "@google/genai";

async function main() {

    const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });

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

    console.log(response.embeddings);
}

main();
ctx := context.Background()

client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("GEMINI_API_KEY")))
if err != nil {
    log.Fatal(err)
}
defer client.Close()

em := client.EmbeddingModel("gemini-embedding-exp-03-07")
res, err := em.EmbedContent(ctx, genai.Text("What is the meaning of life?"))

if err != nil {
    panic(err)
}
fmt.Println(res.Embedding.Values)
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-exp-03-07:embedContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-exp-03-07",
     "content": {
     "parts":[{
     "text": "What is the meaning of life?"}]}
    }'

複数のチャンクのエンベディングを一度に生成するには、文字列のリストとして渡します。

タスクの種類

検索拡張生成(RAG)システムを構築する場合、一般的な設計では、テキスト エンベディングを使用して類似性検索を行います。質問とその回答が意味的に類似していないため、品質が低下することがあります。たとえば、「空はなぜ青いのか」という質問とその回答である「太陽光の散乱によって青色になる」は、文面として明らかに意味が異なります。つまり、RAG システムはこれらの関係を自動的に認識しません。

タスクタイプを使用すると、特定のタスク用に最適化されたエンベディングを生成できます。これにより、時間と費用を節約し、パフォーマンスを向上させることができます。

PythonJavaScriptREST
from google import genai
from google.genai import types

client = genai.Client(api_key="GEMINI_API_KEY")

result = client.models.embed_content(
        model="gemini-embedding-exp-03-07",
        contents="What is the meaning of life?",
        config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY")
)
print(result.embeddings)
import { GoogleGenAI } from "@google/genai";

async function main() {

    const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-exp-03-07',
        contents: 'What is the meaning of life?',
        config: {
            taskType: "SEMANTIC_SIMILARITY",
        }
    });

    console.log(response.embeddings);
}

main();
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-exp-03-07:embedContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-exp-03-07",
     "content": {
     "parts":[{
     "text": "What is the meaning of life?"}]},
     "taskType": "SEMANTIC_SIMILARITY"
    }'

サポートされているタスクの種類

タスクのタイプ 説明
SEMANTIC_SIMILARITY テキストの類似性を評価するために最適化されたエンベディングの生成に使用されます。
CLASSIFICATION 事前設定されたラベルに従ってテキストを分類するように最適化されたエンベディングの生成に使用
CLUSTERING 類似性に基づいてテキストをクラスタ化するように最適化されたエンベディングの生成に使用
RETRIEVAL_DOCUMENTRETRIEVAL_QUERYQUESTION_ANSWERINGFACT_VERIFICATION ドキュメント検索や情報検索に最適化されたエンベディングの生成に使用されます。
CODE_RETRIEVAL_QUERY 配列の並べ替えやリンクリストの逆順など、自然言語クエリに基づいてコードブロックを取得するために使用。コードブロックのエンベディングは RETRIEVAL_DOCUMENT を使用して計算されます。

ユースケース

テキスト エンベディングは、次のようなさまざまな一般的な AI ユースケースで使用されます。

エンベディング モデル

Gemini API には、テキスト エンベディングを生成する 3 つのモデルがあります。

次のステップ

エンベディングのクイックスタート ノートブックをご覧ください。