एंबेड करना

Gemini API, टेक्स्ट एम्बेडिंग मॉडल उपलब्ध कराता है. इनकी मदद से शब्दों, वाक्यांशों, वाक्यों, और कोड के लिए एम्बेडिंग जनरेट की जा सकती हैं. ये बुनियादी एम्बेडिंग, एनएलपी से जुड़े मुश्किल टास्क को पूरा करने में मदद करती हैं. जैसे, सिमैंटिक सर्च, क्लासिफ़िकेशन, और क्लस्टरिंग. इससे कीवर्ड के आधार पर खोज करने के तरीकों की तुलना में, ज़्यादा सटीक और कॉन्टेक्स्ट के हिसाब से नतीजे मिलते हैं.

एम्बेडिंग का इस्तेमाल, आम तौर पर रीट्रिवल ऑगमेंटेड जनरेशन (आरएजी) सिस्टम बनाने के लिए किया जाता है. मॉडल के आउटपुट को बेहतर बनाने में एम्बेडिंग की अहम भूमिका होती है. इससे तथ्यों के सटीक होने, सुसंगतता, और कॉन्टेक्स्ट की जानकारी के बेहतर होने में मदद मिलती है. ये, नॉलेज बेस से काम की जानकारी को आसानी से ढूंढ लेते हैं. नॉलेज बेस को एम्बेडिंग के तौर पर दिखाया जाता है. इसके बाद, इस जानकारी को इनपुट प्रॉम्प्ट में अतिरिक्त कॉन्टेक्स्ट के तौर पर भाषा मॉडल को भेजा जाता है. इससे भाषा मॉडल को ज़्यादा जानकारी और सटीक जवाब जनरेट करने में मदद मिलती है.

एंटरप्राइज़-ग्रेड ऐप्लिकेशन और ज़्यादा वर्कलोड के लिए, हमारा सुझाव है कि Vertex AI पर एम्बेडिंग मॉडल का इस्तेमाल करें.

एंबेडिंग जनरेट करना

टेक्स्ट एम्बेडिंग जनरेट करने के लिए, embedContent तरीके का इस्तेमाल करें:

Python

from google import genai

client = genai.Client()

result = client.models.embed_content(
        model="gemini-embedding-001",
        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-001',
        contents: 'What is the meaning of life?',
    });

    console.log(response.embeddings);
}

main();

शुरू करें

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-001",
        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-001:embedContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-001",
     "content": {"parts":[{"text": "What is the meaning of life?"}]}
    }'

एक साथ कई हिस्सों के लिए एम्बेडिंग जनरेट की जा सकती हैं. इसके लिए, उन्हें स्ट्रिंग की सूची के तौर पर पास करें.

Python

from google import genai

client = genai.Client()

result = client.models.embed_content(
        model="gemini-embedding-001",
        contents= [
            "What is the meaning of life?",
            "What is the purpose of existence?",
            "How do I bake a cake?"
        ])

for embedding in result.embeddings:
    print(embedding)

JavaScript

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

async function main() {

    const ai = new GoogleGenAI({});

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-001',
        contents: [
            'What is the meaning of life?',
            'What is the purpose of existence?',
            'How do I bake a cake?'
        ],
    });

    console.log(response.embeddings);
}

main();

शुरू करें

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.NewContentFromText("How does photosynthesis work?"),
        genai.NewContentFromText("Tell me about the history of the internet."),
    }
    result, err := client.Models.EmbedContent(ctx,
        "gemini-embedding-001",
        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-001:embedContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-001",
     "content": [
        {"parts": [{"text": "What is the meaning of life?"}]},
        {"parts": [{"text": "What is the purpose of existence?"}]},
        {"parts": [{"text": "How do I bake a cake?"}]}
        ]
    }'

परफ़ॉर्मेंस को बेहतर बनाने के लिए टास्क का टाइप तय करना

क्लासिफ़िकेशन से लेकर दस्तावेज़ खोजने तक, कई तरह के टास्क के लिए एम्बेडिंग का इस्तेमाल किया जा सकता है. सही टास्क टाइप तय करने से, एम्बेडिंग को सही संबंधों के लिए ऑप्टिमाइज़ करने में मदद मिलती है. इससे सटीक नतीजे मिलते हैं और काम बेहतर तरीके से होता है. इस्तेमाल किए जा सकने वाले टास्क टाइप की पूरी सूची देखने के लिए, इस्तेमाल किए जा सकने वाले टास्क टाइप टेबल देखें.

यहां दिए गए उदाहरण में बताया गया है कि SEMANTIC_SIMILARITY का इस्तेमाल करके, यह कैसे पता लगाया जा सकता है कि टेक्स्ट की स्ट्रिंग का मतलब कितना मिलता-जुलता है.

Python

from google import genai
from google.genai import types
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

client = genai.Client()

texts = [
    "What is the meaning of life?",
    "What is the purpose of existence?",
    "How do I bake a cake?"]

result = [
    np.array(e.values) for e in client.models.embed_content(
        model="gemini-embedding-001",
        contents=texts, 
        config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY")).embeddings
]

# Calculate cosine similarity. Higher scores = greater semantic similarity.

embeddings_matrix = np.array(result)
similarity_matrix = cosine_similarity(embeddings_matrix)

for i, text1 in enumerate(texts):
    for j in range(i + 1, len(texts)):
        text2 = texts[j]
        similarity = similarity_matrix[i, j]
        print(f"Similarity between '{text1}' and '{text2}': {similarity:.4f}")

JavaScript

import { GoogleGenAI } from "@google/genai";
import * as cosineSimilarity from "compute-cosine-similarity";

async function main() {
    const ai = new GoogleGenAI({});

    const texts = [
        "What is the meaning of life?",
        "What is the purpose of existence?",
        "How do I bake a cake?",
    ];

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-001',
        contents: texts,
        taskType: 'SEMANTIC_SIMILARITY'
    });

    const embeddings = response.embeddings.map(e => e.values);

    for (let i = 0; i < texts.length; i++) {
        for (let j = i + 1; j < texts.length; j++) {
            const text1 = texts[i];
            const text2 = texts[j];
            const similarity = cosineSimilarity(embeddings[i], embeddings[j]);
            console.log(`Similarity between '${text1}' and '${text2}': ${similarity.toFixed(4)}`);
        }
    }
}

main();

शुरू करें

package main

import (
    "context"
    "fmt"
    "log"
    "math"

    "google.golang.org/genai"
)

// cosineSimilarity calculates the similarity between two vectors.
func cosineSimilarity(a, b []float32) (float64, error) {
    if len(a) != len(b) {
        return 0, fmt.Errorf("vectors must have the same length")
    }

    var dotProduct, aMagnitude, bMagnitude float64
    for i := 0; i < len(a); i++ {
        dotProduct += float64(a[i] * b[i])
        aMagnitude += float64(a[i] * a[i])
        bMagnitude += float64(b[i] * b[i])
    }

    if aMagnitude == 0 || bMagnitude == 0 {
        return 0, nil
    }

    return dotProduct / (math.Sqrt(aMagnitude) * math.Sqrt(bMagnitude)), nil
}

func main() {
    ctx := context.Background()
    client, _ := genai.NewClient(ctx, nil)
    defer client.Close()

    texts := []string{
        "What is the meaning of life?",
        "What is the purpose of existence?",
        "How do I bake a cake?",
    }

    var contents []*genai.Content
    for _, text := range texts {
        contents = append(contents, genai.NewContentFromText(text, genai.RoleUser))
    }

    result, _ := client.Models.EmbedContent(ctx,
        "gemini-embedding-001",
        contents,
        &genai.EmbedContentRequest{TaskType: genai.TaskTypeSemanticSimilarity},
    )

    embeddings := result.Embeddings

    for i := 0; i < len(texts); i++ {
        for j := i + 1; j < len(texts); j++ {
            similarity, _ := cosineSimilarity(embeddings[i].Values, embeddings[j].Values)
            fmt.Printf("Similarity between '%s' and '%s': %.4f\n", texts[i], texts[j], similarity)
        }
    }
}

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "contents": [
        {"parts": [{"text": "What is the meaning of life?"}]},
        {"parts": [{"text": "What is the purpose of existence?"}]},
        {"parts": [{"text": "How do I bake a cake?"}]}
    ],
    "embedding_config": {
        "task_type": "SEMANTIC_SIMILARITY"
    }
}'

इस कोड स्निपेट का उदाहरण यहां दिया गया है:

Similarity between 'What is the meaning of life?' and 'What is the purpose of existence?': 0.9481

Similarity between 'What is the meaning of life?' and 'How do I bake a cake?': 0.7471

Similarity between 'What is the purpose of existence?' and 'How do I bake a cake?': 0.7371

इस्तेमाल किए जा सकने वाले टास्क टाइप

टास्क किस तरह का है ब्यौरा उदाहरण
SEMANTIC_SIMILARITY टेक्स्ट की समानता का आकलन करने के लिए, ऑप्टिमाइज़ किए गए एम्बेडिंग. सुझाव देने वाले सिस्टम, डुप्लीकेट कॉन्टेंट का पता लगाना
CLASSIFICATION एम्बेडिंग को ऑप्टिमाइज़ किया गया है, ताकि पहले से तय किए गए लेबल के हिसाब से टेक्स्ट को कैटगरी में बांटा जा सके. भावनाओं का विश्लेषण, स्पैम का पता लगाना
क्लस्टरिंग इन एम्बेडिंग को इस तरह से ऑप्टिमाइज़ किया जाता है कि वे मिलते-जुलते टेक्स्ट को एक साथ ग्रुप कर सकें. दस्तावेज़ व्यवस्थित करना, मार्केट रिसर्च करना, गड़बड़ी की पहचान करना
RETRIEVAL_DOCUMENT दस्तावेज़ खोजने के लिए ऑप्टिमाइज़ किए गए एम्बेडिंग. खोज के लिए लेखों, किताबों या वेब पेजों को इंडेक्स करना.
RETRIEVAL_QUERY सामान्य खोज क्वेरी के लिए ऑप्टिमाइज़ की गई एम्बेडिंग. क्वेरी के लिए RETRIEVAL_QUERY और वापस लाए जाने वाले दस्तावेज़ों के लिए RETRIEVAL_DOCUMENT का इस्तेमाल करें. कस्टम सर्च
CODE_RETRIEVAL_QUERY नैचुरल लैंग्वेज क्वेरी के आधार पर कोड ब्लॉक को वापस पाने के लिए, ऑप्टिमाइज़ की गई एम्बेडिंग. क्वेरी के लिए CODE_RETRIEVAL_QUERY और कोड ब्लॉक को वापस पाने के लिए RETRIEVAL_DOCUMENT का इस्तेमाल करें. कोड से जुड़े सुझाव और खोज
QUESTION_ANSWERING सवाल-जवाब वाले सिस्टम में सवालों के लिए एम्बेडिंग. इन्हें ऐसे दस्तावेज़ ढूंढने के लिए ऑप्टिमाइज़ किया जाता है जिनमें सवाल का जवाब दिया गया हो. सवाल पूछने के लिए QUESTION_ANSWERING और दस्तावेज़ों को वापस पाने के लिए RETRIEVAL_DOCUMENT का इस्तेमाल करें. चैटबॉक्स
FACT_VERIFICATION ऐसे स्टेटमेंट के लिए एम्बेडिंग जिनकी पुष्टि करनी है. साथ ही, ऐसे दस्तावेज़ों को वापस पाने के लिए ऑप्टिमाइज़ किया गया है जिनमें स्टेटमेंट के पक्ष या विपक्ष में सबूत मौजूद हैं. टारगेट किए गए टेक्स्ट के लिए FACT_VERIFICATION का इस्तेमाल करें; दस्तावेज़ों को वापस पाने के लिए RETRIEVAL_DOCUMENT का इस्तेमाल करें तथ्यों की जांच करने वाले ऑटोमेटेड सिस्टम

एम्बेड किए गए कॉन्टेंट के साइज़ को कंट्रोल करना

Gemini के एम्बेडिंग मॉडल, gemini-embedding-001 को Matryoshka Representation Learning (MRL) तकनीक का इस्तेमाल करके ट्रेन किया जाता है. यह तकनीक, मॉडल को ज़्यादा डाइमेंशन वाले एम्बेडिंग सीखने में मदद करती है. इन एम्बेडिंग में शुरुआती सेगमेंट (या प्रीफ़िक्स) होते हैं, जो एक ही डेटा के ज़्यादा काम के और आसान वर्शन होते हैं. आपके पास 3,072 डाइमेंशन वाली पूरी एम्बेडिंग का इस्तेमाल करने का विकल्प होता है. इसके अलावा, स्टोरेज की जगह बचाने के लिए, क्वालिटी में कोई बदलाव किए बिना इसे छोटे साइज़ में काटा जा सकता है. बेहतर क्वालिटी के लिए, हमारा सुझाव है कि आप पहले 768 और 1536 का इस्तेमाल करें.

output_dimensionality पैरामीटर का इस्तेमाल करके, उपयोगकर्ता आउटपुट एम्बेडिंग वेक्टर के साइज़ को कंट्रोल कर सकते हैं. आउटपुट डाइमेंशनैलिटी को कम करने से, स्टोरेज स्पेस बचाया जा सकता है. साथ ही, डाउनस्ट्रीम ऐप्लिकेशन के लिए कंप्यूटेशनल क्षमता को बढ़ाया जा सकता है. हालांकि, इससे क्वालिटी में थोड़ा अंतर आ सकता है.

Python

from google import genai
from google.genai import types

client = genai.Client()

result = client.models.embed_content(
    model="gemini-embedding-001",
    contents="What is the meaning of life?",
    config=types.EmbedContentConfig(output_dimensionality=768)
)

[embedding_obj] = result.embeddings
embedding_length = len(embedding_obj.values)

print(f"Length of embedding: {embedding_length}")

JavaScript

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

async function main() {
    const ai = new GoogleGenAI({});

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

    const embeddingLength = response.embedding.values.length;
    console.log(`Length of embedding: ${embeddingLength}`);
}

main();

शुरू करें

package main

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/genai"
)

func main() {
    ctx := context.Background()
    // The client uses Application Default Credentials.
    // Authenticate with 'gcloud auth application-default login'.
    client, err := genai.NewClient(ctx, nil)
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    contents := []*genai.Content{
        genai.NewContentFromText("What is the meaning of life?", genai.RoleUser),
    }

    result, err := client.Models.EmbedContent(ctx,
        "gemini-embedding-001",
        contents,
        &genai.EmbedContentRequest{OutputDimensionality: 768},
    )
    if err != nil {
        log.Fatal(err)
    }

    embedding := result.Embeddings[0]
    embeddingLength := len(embedding.Values)
    fmt.Printf("Length of embedding: %d\n", embeddingLength)
}

REST

curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
-H "x-goog-api-key: YOUR_GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "contents": [
        {"parts": [{"text": "What is the meaning of life?"}]}
    ],
    "embedding_config": {
        "output_dimensionality": 768
    }
}'

आउटपुट का उदाहरण:

Length of embedding: 768

3072 डाइमेंशन एम्बेडिंग को नॉर्मलाइज़ किया जाता है. सामान्य किए गए एम्बेडिंग, वेक्टर की दिशा की तुलना करके सिमैंटिक समानता का ज़्यादा सटीक पता लगाते हैं, न कि मैग्नीट्यूड की तुलना करके. 768 और 1536 जैसे अन्य डाइमेंशन के लिए, आपको एम्बेडिंग को इस तरह से सामान्य करना होगा:

Python

import numpy as np
from numpy.linalg import norm

embedding_values_np = np.array(embedding_obj.values)
normed_embedding = embedding_values_np / np.linalg.norm(embedding_values_np)

print(f"Normed embedding length: {len(normed_embedding)}")
print(f"Norm of normed embedding: {np.linalg.norm(normed_embedding):.6f}") # Should be very close to 1

आउटपुट का उदाहरण:

Normed embedding length: 768
Norm of normed embedding: 1.000000

उपयोग के उदाहरण

टेक्स्ट एम्बेडिंग, एआई के कई सामान्य इस्तेमाल के उदाहरणों के लिए ज़रूरी होती हैं. जैसे:

एम्बेड किए गए डेटा को सेव करना

एम्बेडिंग को प्रोडक्शन में ले जाते समय, वेक्टर डेटाबेस का इस्तेमाल करना आम बात है. इससे ज़्यादा डाइमेंशन वाली एम्बेडिंग को आसानी से सेव, इंडेक्स, और वापस पाया जा सकता है. Google Cloud, मैनेज की गई डेटा सेवाएं उपलब्ध कराता है. इनका इस्तेमाल इस काम के लिए किया जा सकता है. इनमें BigQuery, AlloyDB, और Cloud SQL शामिल हैं.

यहाँ दिए गए ट्यूटोरियल में, Gemini Embedding के साथ तीसरे पक्ष के अन्य वेक्टर डेटाबेस इस्तेमाल करने का तरीका बताया गया है.

मॉडल एम्बेड करना

सामान्य तौर पर उपलब्ध मॉडल

लेगसी मॉडल

  • embedding-001 (14 अगस्त, 2025 से बंद हो जाएगी)
  • text-embedding-004 (14 जनवरी, 2026 से काम नहीं करेगा)

एम्बेड करने की सुविधा का इस्तेमाल करना

जनरेटिव एआई मॉडल नया कॉन्टेंट बनाते हैं. हालांकि, Gemini Embedding मॉडल का मकसद सिर्फ़ आपके इनपुट डेटा के फ़ॉर्मैट को संख्यात्मक रूप में बदलना है. Google की ज़िम्मेदारी है कि वह एक ऐसा एम्बेडिंग मॉडल उपलब्ध कराए जो आपके इनपुट डेटा के फ़ॉर्मैट को, अनुरोध किए गए संख्यात्मक फ़ॉर्मैट में बदल दे. हालांकि, उपयोगकर्ताओं की यह ज़िम्मेदारी है कि वे जो डेटा इनपुट करते हैं वह सही हो. साथ ही, वे एम्बेडिंग के लिए भी पूरी तरह से ज़िम्मेदार हैं. Gemini Embedding मॉडल का इस्तेमाल करने पर, यह पुष्टि हो जाती है कि अपलोड किए जाने वाले कॉन्टेंट को इस्तेमाल करने से जुड़े ज़रूरी अधिकार आपके पास हैं. ऐसा कोई कॉन्टेंट जनरेट न करें जिससे किसी की बौद्धिक संपत्ति या निजता के अधिकारों का उल्लंघन होता हो. इस सेवा के इस्तेमाल पर, इस्तेमाल से जुड़ी पाबंदी की हमारी नीति और Google की सेवा की शर्तें लागू होती हैं.

एम्बेडिंग का इस्तेमाल करके ऐप्लिकेशन बनाना शुरू करना

मॉडल की क्षमताओं के बारे में जानने के लिए, एम्बेडिंग की क्विकस्टार्ट नोटबुक देखें. साथ ही, यह भी जानें कि एम्बेडिंग को अपनी पसंद के मुताबिक कैसे बनाया जाए और उन्हें विज़ुअलाइज़ कैसे किया जाए.