এম্বেডিং

জেমিনি এপিআই টেক্সট, ছবি, ভিডিও এবং অন্যান্য কন্টেন্টের জন্য এমবেডিং তৈরি করতে এমবেডিং মডেল সরবরাহ করে। এই প্রাপ্ত এমবেডিংগুলো পরবর্তীতে সিমান্টিক সার্চ, ক্লাসিফিকেশন এবং ক্লাস্টারিং-এর মতো কাজে ব্যবহার করা যেতে পারে, যা কীওয়ার্ড-ভিত্তিক পদ্ধতির চেয়ে আরও নির্ভুল এবং প্রাসঙ্গিক ফলাফল প্রদান করে।

সর্বশেষ মডেল, gemini-embedding-2 , হলো Gemini API-এর প্রথম মাল্টিমোডাল এমবেডিং মডেল। এটি টেক্সট, ছবি, ভিডিও, অডিও এবং ডকুমেন্টকে একটি সমন্বিত এমবেডিং স্পেসে ম্যাপ করে, যা ১০০টিরও বেশি ভাষায় ক্রস-মোডাল সার্চ, ক্লাসিফিকেশন এবং ক্লাস্টারিং সক্ষম করে। আরও জানতে মাল্টিমোডাল এমবেডিংস বিভাগটি দেখুন। শুধুমাত্র টেক্সট ব্যবহারের ক্ষেত্রে, gemini-embedding-001 এখনও উপলব্ধ রয়েছে।

রিট্রিভাল অগমেন্টেড জেনারেশন (RAG) সিস্টেম তৈরি করা এআই প্রোডাক্টের একটি সাধারণ ব্যবহার। উন্নত তথ্যগত নির্ভুলতা, সামঞ্জস্য এবং প্রাসঙ্গিক সমৃদ্ধির মাধ্যমে মডেলের আউটপুট উল্লেখযোগ্যভাবে বৃদ্ধি করতে এমবেডিং একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। আপনি যদি একটি পরিচালিত RAG সলিউশন ব্যবহার করতে চান, তবে আমরা ফাইল সার্চ টুলটি তৈরি করেছি যা RAG পরিচালনাকে আরও সহজ এবং সাশ্রয়ী করে তোলে।

এমবেডিং তৈরি করা

টেক্সট এমবেডিং তৈরি করতে embedContent মেথডটি ব্যবহার করুন:

পাইথন

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)

জাভাস্ক্রিপ্ট

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();

যান

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))
}

বিশ্রাম

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?"
        }]
        }
    }'

কর্মক্ষমতা উন্নত করতে কাজের ধরণ নির্দিষ্ট করুন।

শ্রেণিবিন্যাস থেকে শুরু করে ডকুমেন্ট অনুসন্ধান পর্যন্ত বিভিন্ন ধরনের কাজের জন্য আপনি এমবেডিং ব্যবহার করতে পারেন। সঠিক কাজের ধরন নির্দিষ্ট করলে তা উদ্দিষ্ট সম্পর্কগুলোর জন্য এমবেডিংগুলোকে অপ্টিমাইজ করতে সাহায্য করে, যার ফলে নির্ভুলতা এবং কার্যকারিতা সর্বোচ্চ পর্যায়ে পৌঁছায়।

এমবেডিং সহ টাস্কের প্রকারভেদ ২

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}

উদাহরণ ব্যবহার

পাইথন

# Generate embedding for a task's query. Use your correct task here:
def prepare_query(query):
    # return f"task: question answering | query: {query}"
    # return f"task: fact checking | query: {query}"
    # return f"task: code retrieval | query: {query}"
    return f"task: search result | query: {query}"

# Generate embedding for document of an asymmetric retrieval task:
def prepare_document(content, title=None):
    if title is None:
        title = "none"
    return f"title: {title} | text: {content}"

একক-ইনপুট ব্যবহারের ক্ষেত্র (প্রতিসম বিন্যাস)

প্রতিসম ব্যবহারের ক্ষেত্রে, একই কাজের জন্য কোয়েরি এবং ডকুমেন্ট উভয়ের ক্ষেত্রেই একই ফরম্যাটিং ব্যবহার করুন।

ব্যবহারের ক্ষেত্র ইনপুট কাঠামো
শ্রেণিবিন্যাস task: classification | query: {content}
ক্লাস্টারিং task: clustering | query: {content}
শব্দার্থগত সাদৃশ্য task: sentence similarity | query: {content}
অনুসন্ধান বা পুনরুদ্ধারের জন্য এটি ব্যবহার করবেন না। এটি শব্দার্থগত পাঠ্য সাদৃশ্যের জন্য উদ্দিষ্ট।

উদাহরণ ব্যবহার

পাইথন

# Generate embedding for query & document of your task.
def prepare_query_and_document(content):
    # return f'task: clustering | query: {content}'
    # return f'task: sentence similarity | query: {content}'
    return f'task: classification | query: {content}'

টাস্কটি সামঞ্জস্যপূর্ণভাবে ব্যবহার করা গুরুত্বপূর্ণ। যেমন, যদি ডকুমেন্টগুলো f'task: classification | query: {content}' দিয়ে এমবেড করা হয়, তাহলে কোয়েরিটিও এই টাস্ক ফরম্যাট অনুসরণ করে এমবেড করতে হবে।

এমবেডিং সহ টাস্কের প্রকারভেদ ১

gemini-embedding-001 এর জন্য, আপনি embedContent মেথডে task_type নির্দিষ্ট করতে পারেন। সমর্থিত টাস্ক টাইপগুলির সম্পূর্ণ তালিকার জন্য, সমর্থিত টাস্ক টাইপ সারণীটি দেখুন।

নিম্নলিখিত উদাহরণটি দেখায় যে কীভাবে আপনি SEMANTIC_SIMILARITY ব্যবহার করে একাধিক টেক্সট স্ট্রিংয়ের অর্থের সাদৃশ্য যাচাই করতে পারেন।

পাইথন

from google import genai
from google.genai import types
import pandas as pd
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 = client.models.embed_content(
    model="gemini-embedding-001",
    contents=texts,
    config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY")
)

# Create a 3x3 table to show the similarity matrix
df = pd.DataFrame(
    cosine_similarity([e.values for e in result.embeddings]),
    index=texts,
    columns=texts,
)

print(df)

জাভাস্ক্রিপ্ট

import { GoogleGenAI } from "@google/genai";
// npm i compute-cosine-similarity
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,
        config: { 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)
        }
    }
}

বিশ্রাম

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001:embedContent" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: $GEMINI_API_KEY" \
    -d '{
    "taskType": "SEMANTIC_SIMILARITY",
    "content": {
        "parts": [
        {
            "text": "What is the meaning of life?"
        },
        {
            "text": "How much wood would a woodchuck chuck?"
        },
        {
            "text": "How does the brain work?"
        }
        ]
    }
    }'

কোড স্নিপেটগুলো রান করলে দেখাবে যে টেক্সটের বিভিন্ন অংশগুলো একে অপরের সাথে কতটা সাদৃশ্যপূর্ণ।

সমর্থিত কাজের ধরণ

gemini-embedding-001 এর জন্য সমর্থিত টাস্কের ধরণ:

কাজের ধরণ বর্ণনা উদাহরণ
শব্দার্থিক_সাদৃশ্য পাঠ্যের সাদৃশ্য মূল্যায়নের জন্য এমবেডিংগুলো অপ্টিমাইজ করা হয়েছে। সুপারিশ ব্যবস্থা, নকল সনাক্তকরণ
শ্রেণিবিন্যাস পূর্বনির্ধারিত লেবেল অনুযায়ী টেক্সট শ্রেণীবদ্ধ করার জন্য এমবেডিংগুলো অপ্টিমাইজ করা হয়েছে। অনুভূতি বিশ্লেষণ, স্প্যাম সনাক্তকরণ
ক্লাস্টারিং সাদৃশ্যের ভিত্তিতে টেক্সটগুলোকে ক্লাস্টার করার জন্য এমবেডিং অপ্টিমাইজ করা হয়েছে। নথি সংগঠন, বাজার গবেষণা, অসঙ্গতি সনাক্তকরণ
পুনরুদ্ধার_নথি ডকুমেন্ট অনুসন্ধানের জন্য অপ্টিমাইজ করা এমবেডিং। অনুসন্ধানের জন্য প্রবন্ধ, বই বা ওয়েব পেজ সূচীবদ্ধ করা।
পুনরুদ্ধার_কোয়েরি সাধারণ সার্চ কোয়েরির জন্য অপ্টিমাইজ করা এমবেডিং। কোয়েরির জন্য RETRIEVAL_QUERY এবং ডকুমেন্ট পুনরুদ্ধারের জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। কাস্টম অনুসন্ধান
কোড_রিট্রিভাল_কোয়েরি স্বাভাবিক ভাষার কোয়েরির উপর ভিত্তি করে কোড ব্লক পুনরুদ্ধারের জন্য অপ্টিমাইজ করা এমবেডিং। কোয়েরির জন্য CODE_RETRIEVAL_QUERY এবং পুনরুদ্ধারযোগ্য কোড ব্লকের জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। কোড পরামর্শ এবং অনুসন্ধান
প্রশ্নোত্তর প্রশ্নোত্তর সিস্টেমে প্রশ্নগুলির জন্য এমবেডিং, যা প্রশ্নের উত্তর দেয় এমন ডকুমেন্ট খুঁজে বের করার জন্য অপ্টিমাইজ করা হয়েছে। প্রশ্নগুলির জন্য QUESTION_ANSWERING এবং পুনরুদ্ধারযোগ্য ডকুমেন্টগুলির জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। চ্যাটবক্স
তথ্য যাচাই যেসব বিবৃতি যাচাই করা প্রয়োজন, সেগুলোর জন্য এমবেডিং, যা বিবৃতিটির সমর্থন বা খণ্ডনকারী প্রমাণ ধারণকারী নথি পুনরুদ্ধারের জন্য অপ্টিমাইজ করা হয়েছে। লক্ষ্য পাঠ্যের জন্য FACT_VERIFICATION এবং পুনরুদ্ধারযোগ্য নথির জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। স্বয়ংক্রিয় তথ্য যাচাই ব্যবস্থা

এমবেডিং আকার নিয়ন্ত্রণ করা

gemini-embedding-001 এবং gemini-embedding-2 উভয়কেই ম্যাট্রিওশকা রিপ্রেজেন্টেশন লার্নিং (MRL) কৌশল ব্যবহার করে প্রশিক্ষণ দেওয়া হয়েছে, যা একটি মডেলকে এমন উচ্চ-মাত্রিক এমবেডিং শিখতে শেখায়, যার প্রাথমিক অংশগুলো (বা প্রিফিক্স) একই ডেটার কার্যকর ও সরল সংস্করণ হয়ে থাকে।

আউটপুট এমবেডিং ভেক্টরের আকার নিয়ন্ত্রণ করতে output_dimensionality প্যারামিটারটি ব্যবহার করুন। কম আউটপুট ডাইমেনশনালিটি নির্বাচন করলে তা স্টোরেজ স্পেস বাঁচাতে পারে এবং ডাউনস্ট্রিম অ্যাপ্লিকেশনগুলির জন্য কম্পিউটেশনাল দক্ষতা বাড়াতে পারে, অথচ মানের দিক থেকে খুব বেশি ছাড় দিতে হয় না। ডিফল্টরূপে, উভয় মডেলই একটি ৩০৭২-ডাইমেনশনাল এমবেডিং আউটপুট করে, কিন্তু স্টোরেজ স্পেস বাঁচাতে আপনি গুণমান না হারিয়েই এটিকে ছোট আকারে ছেঁটে ফেলতে পারেন। আমরা ৭৬৮, ১৫৩৬, বা ৩০৭২ আউটপুট ডাইমেনশন ব্যবহার করার পরামর্শ দিই।

পাইথন

from google import genai
from google.genai import types

client = genai.Client()

result = client.models.embed_content(
    model="gemini-embedding-2",
    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}")

জাভাস্ক্রিপ্ট

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?',
        config: { outputDimensionality: 768 },
    });

    const embeddingLength = response.embeddings[0].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-2",
        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)
}

বিশ্রাম

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

কোড স্নিপেট থেকে প্রাপ্ত আউটপুটের উদাহরণ:

Length of embedding: 768

ক্ষুদ্রতর মাপের জন্য গুণমান নিশ্চিত করা

যদিও ডিফল্ট ৩০৭২-ডাইমেনশনের এমবেডিংগুলো সর্বদা নর্মালাইজড থাকে, জেমিনি এমবেডিং ২ ট্রাঙ্কেটেড ডাইমেনশনগুলোকেও (যেমন, ৭৬৮, ১৫৩৬) স্বয়ংক্রিয়ভাবে নর্মালাইজ করে। এটি নিশ্চিত করে যে সিমান্টিক সাদৃশ্য ম্যাগনিটিউডের পরিবর্তে ভেক্টর ডিরেকশনের মাধ্যমে গণনা করা হয়, যা ইনস্টল করার সাথে সাথেই আরও নির্ভুল ফলাফল প্রদান করে।

পুরোনো মডেল : যদি আপনি gemini-embedding-001 ব্যবহার করেন, তাহলে আপনাকে অবশ্যই 3072 নয় এমন ডাইমেনশনগুলো নিম্নোক্তভাবে ম্যানুয়ালি নর্মালাইজ করতে হবে:

পাইথন

import numpy as np
from numpy.linalg import norm

# Only for embeddings from `gemini-embedding-001`
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

নিম্নলিখিত সারণিতে বিভিন্ন ডাইমেনশনের জন্য MTEB স্কোর দেখানো হয়েছে, যা এমবেডিংয়ের জন্য একটি বহুল ব্যবহৃত বেঞ্চমার্ক। লক্ষণীয় যে, ফলাফল থেকে দেখা যায় পারফরম্যান্স কঠোরভাবে এমবেডিং ডাইমেনশনের আকারের সাথে আবদ্ধ নয়, কারণ নিম্ন ডাইমেনশনগুলো তাদের উচ্চ ডাইমেনশনের সমকক্ষ স্কোর অর্জন করে।

MRL মাত্রা এমটিইবি স্কোর (জেমিনি এমবেডিং ০০১)
২০৪৮ ৬৮.১৬
১৫৩৬ ৬৮.১৭
৭৬৮ ৬৭.৯৯
৫১২ ৬৭.৫৫
২৫৬ ৬৬.১৯
১২৮ ৬৩.৩১

মাল্টিমোডাল এম্বেডিংস

gemini-embedding-2 মডেলটি মাল্টিমোডাল ইনপুট সমর্থন করে, যার ফলে আপনি টেক্সটের পাশাপাশি ছবি, ভিডিও, অডিও এবং ডকুমেন্টের বিষয়বস্তু এমবেড করতে পারেন। সমস্ত মোডালিটি একই এমবেডিং স্পেসে ম্যাপ করা থাকে, যা ক্রস-মোডাল সার্চ এবং তুলনা সক্ষম করে।

সমর্থিত পদ্ধতি এবং সীমা

সামগ্রিকভাবে সর্বোচ্চ ইনপুট টোকেনের সীমা হলো ৮১৯২টি।

পদ্ধতি স্পেসিফিকেশন এবং সীমা
পাঠ্য সর্বোচ্চ ৮,১৯২টি টোকেন সমর্থন করে।
ছবি প্রতি অনুরোধে সর্বোচ্চ ৬টি ছবি। সমর্থিত ফরম্যাট: PNG, JPEG।
অডিও সর্বোচ্চ সময়কাল ১৮০ সেকেন্ড। সমর্থিত ফরম্যাট: MP3, WAV।
ভিডিও সর্বোচ্চ সময়কাল ১২০ সেকেন্ড। সমর্থিত ফরম্যাট: MP4, MOV। সমর্থিত কোডেক: H264, H265, AV1, VP9।
সিস্টেমটি প্রতি ভিডিওতে সর্বোচ্চ ৩২টি ফ্রেম প্রসেস করে: ছোট ভিডিও (≤৩২ সেকেন্ড) প্রতি সেকেন্ডে ১ ফ্রেম হারে স্যাম্পল করা হয়, আর দীর্ঘ ভিডিওগুলো সুষমভাবে ৩২টি ফ্রেমে স্যাম্পল করা হয়। ভিডিও ফাইলে অডিও ট্র্যাক প্রসেস করা হয় না।
নথি (পিডিএফ) সর্বাধিক ৬ পৃষ্ঠা।

ছবি এমবেড করা

নিম্নলিখিত উদাহরণে gemini-embedding-2 ব্যবহার করে কীভাবে একটি ছবি এমবেড করতে হয় তা দেখানো হয়েছে।

ছবি ইনলাইন ডেটা হিসেবে অথবা ফাইলস এপিআই (Files API)- এর মাধ্যমে আপলোড করা ফাইল হিসেবে প্রদান করা যেতে পারে।

পাইথন

from google import genai
from google.genai import types

with open('example.png', 'rb') as f:
    image_bytes = f.read()

client = genai.Client()

result = client.models.embed_content(
    model='gemini-embedding-2',
    contents=[
        types.Part.from_bytes(
            data=image_bytes,
            mime_type='image/png',
        ),
    ]
)

print(result.embeddings)

জাভাস্ক্রিপ্ট

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

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

    const imgBase64 = fs.readFileSync("example.png", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2',
        contents: [{
            inlineData: {
                mimeType: 'image/png',
                data: imgBase64,
            },
        }],
    });

    console.log(response.embeddings);
}

main();

বিশ্রাম

IMG_PATH="/path/to/your/image.png"
IMG_BASE64=$(base64 -w0 "${IMG_PATH}")

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 '{
        "content": {
            "parts": [{
                "inline_data": {
                    "mime_type": "image/png",
                    "data": "'"${IMG_BASE64}"'"
                }
            }]
        }
    }'

এমবেডিং অ্যাগ্রিগেশন

মাল্টিমোডাল কন্টেন্ট নিয়ে কাজ করার সময়, আপনি আপনার ইনপুট যেভাবে সাজান তা এমবেডিং আউটপুটকে প্রভাবিত করে:

  • একাধিক অংশ (সমন্বিত): সরাসরি contents প্যারামিটারে একাধিক ইনপুট যোগ করলে সমস্ত ইনপুটের জন্য একটি সমন্বিত এমবেডিং তৈরি হয়।
  • একাধিক Content অবজেক্ট (আলাদাভাবে): প্রতিটি ইনপুটকে একটি Content অবজেক্টে মুড়ে এবং সেগুলোকে contents প্যারামিটারে পাস করলে প্রতিটি এন্ট্রির জন্য আলাদা এমবেডিং ফেরত আসে।
  • পোস্ট-স্তরের উপস্থাপনা: একাধিক মিডিয়া আইটেমযুক্ত সোশ্যাল মিডিয়া পোস্টের মতো জটিল অবজেক্টের ক্ষেত্রে, একটি সুসংহত পোস্ট-স্তরের উপস্থাপনা তৈরি করার জন্য আমরা আলাদা এমবেডিংগুলোকে একত্রিত করার (উদাহরণস্বরূপ, গড় করার মাধ্যমে) পরামর্শ দিই।

নিম্নলিখিত উদাহরণটি দেখায় কিভাবে টেক্সট এবং ইমেজ ইনপুটের জন্য একটি একত্রিত এমবেডিং তৈরি করতে হয়। কেবল contents প্যারামিটারে একাধিক ইনপুট যোগ করুন:

পাইথন

from google import genai
from google.genai import types

client = genai.Client()

with open('dog.png', 'rb') as f:
    image_bytes = f.read()

result = client.models.embed_content(
    model='gemini-embedding-2',
    contents=[
        "An image of a dog",
        types.Part.from_bytes(
            data=image_bytes,
            mime_type='image/png',
        ),
    ]
)

# This produces one embedding
for embedding in result.embeddings:
    print(embedding.values)

জাভাস্ক্রিপ্ট

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

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

    const imgBase64 = fs.readFileSync("dog.png", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2',
        contents: [
            'An image of a dog',
            {
                inlineData: {
                    mimeType: 'image/png',
                    data: imgBase64,
                },
            },
        ],
    });

    // This produces one embedding
    for (const embedding of response.embeddings) {
        console.log(embedding.values);
    }
}

main();

বিশ্রাম

IMG_PATH="/path/to/your/dog.png"
IMG_BASE64=$(base64 -w0 "${IMG_PATH}")

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 '{
        "content": {
            "parts": [
                {"text": "An image of a dog"},
                {
                    "inline_data": {
                        "mime_type": "image/png",
                        "data": "'"${IMG_BASE64}"'"
                    }
                }
            ]
        }
    }'

অন্যদিকে, যদি আপনি contents প্যারামিটারের ভিতরে Content অবজেক্ট ব্যবহার করেন, তাহলে এটি আলাদা এমবেডিং রিটার্ন করে। এই উদাহরণটি একটি এমবেডিং কলে একাধিক এমবেডিং তৈরি করে:

পাইথন

from google import genai
from google.genai import types

client = genai.Client()

with open('dog.png', 'rb') as f:
    image_bytes = f.read()

result = client.models.embed_content(
    model="gemini-embedding-2",
    contents=[
        types.Content(parts=[types.Part.from_text(text="An image of a dog")]),
        types.Content(
            parts=[
                types.Part.from_bytes(
                    data=image_bytes,
                    mime_type="image/png",
                ),
            ]
        ),
    ],
)

# This produces two embeddings
for embedding in result.embeddings:
    print(embedding.values)

জাভাস্ক্রিপ্ট

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

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

    const imgBase64 = fs.readFileSync("dog.png", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2',
        contents: [
            { parts: [{ text: 'An image of a dog' }] },
            {
                parts: [{
                    inlineData: {
                        mimeType: 'image/png',
                        data: imgBase64,
                    },
                }],
            },
        ],
    });

    // This produces two embeddings
    for (const embedding of response.embeddings) {
        console.log(embedding.values);
    }
}

main();

বিশ্রাম

IMG_PATH="/path/to/your/dog.png"
IMG_BASE64=$(base64 -w0 "${IMG_PATH}")

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2:batchEmbedContents" \
    -H "Content-Type: application/json" \
    -H "x-goog-api-key: ${GEMINI_API_KEY}" \
    -d '{
        "requests": [
            {
                "model": "models/gemini-embedding-2",
                "content": {"parts": [{"text": "An image of a dog"}]}
            },
            {
                "model": "models/gemini-embedding-2",
                "content": {"parts": [{"inline_data": {"mime_type": "image/png", "data": "'"${IMG_BASE64}"'"}}]}
            }
        ]
    }'

অডিও এমবেড করা

নিম্নলিখিত উদাহরণে gemini-embedding-2 ব্যবহার করে কীভাবে একটি অডিও ফাইল এমবেড করতে হয় তা দেখানো হয়েছে।

অডিও ফাইলগুলো ইনলাইন ডেটা হিসেবে অথবা ফাইলস এপিআই (Files API)- এর মাধ্যমে আপলোড করা ফাইল হিসেবে প্রদান করা যেতে পারে।

পাইথন

from google import genai
from google.genai import types

with open('example.mp3', 'rb') as f:
    audio_bytes = f.read()

client = genai.Client()

result = client.models.embed_content(
    model='gemini-embedding-2',
    contents=[
        types.Part.from_bytes(
            data=audio_bytes,
            mime_type='audio/mpeg',
        ),
    ]
)

print(result.embeddings)

জাভাস্ক্রিপ্ট

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

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

    const audioBase64 = fs.readFileSync("example.mp3", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2',
        contents: [{
            inlineData: {
                mimeType: 'audio/mpeg',
                data: audioBase64,
            },
        }],
    });

    console.log(response.embeddings);
}

main();

বিশ্রাম

AUDIO_PATH="/path/to/your/example.mp3"
AUDIO_BASE64=$(base64 -w0 "${AUDIO_PATH}")

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 '{
        "content": {
            "parts": [{
                "inline_data": {
                    "mime_type": "audio/mpeg",
                    "data": "'"${AUDIO_BASE64}"'"
                }
            }]
        }
    }'

ভিডিও এমবেড করা

নিম্নলিখিত উদাহরণে gemini-embedding-2 ব্যবহার করে কীভাবে একটি ভিডিও এমবেড করতে হয় তা দেখানো হয়েছে।

ভিডিও ইনলাইন ডেটা হিসেবে অথবা ফাইলস এপিআই (Files API)- এর মাধ্যমে আপলোড করা ফাইল হিসেবে প্রদান করা যেতে পারে।

পাইথন

from google import genai
from google.genai import types

client = genai.Client()

with open('example.mp4', 'rb') as f:
    video_bytes = f.read()

result = client.models.embed_content(
    model='gemini-embedding-2',
    contents=[
        types.Part.from_bytes(
            data=video_bytes,
            mime_type='video/mp4',
        ),
    ]
)

print(result.embeddings[0].values)

জাভাস্ক্রিপ্ট

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

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

    const videoBase64 = fs.readFileSync("example.mp4", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2',
        contents: [{
            inlineData: {
                mimeType: 'video/mp4',
                data: videoBase64,
            },
        }],
    });

    console.log(response.embeddings);
}

main();

বিশ্রাম

VIDEO_PATH="/path/to/your/video.mp4"
VIDEO_BASE64=$(base64 -w0 "${VIDEO_PATH}")

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 '{
        "content": {
            "parts": [{
                "inline_data": {
                    "mime_type": "video/mp4",
                    "data": "'"${VIDEO_BASE64}"'"
                }
            }]
        }
    }'

যদি আপনাকে ১২০ সেকেন্ডের বেশি দৈর্ঘ্যের ভিডিও এমবেড করতে হয়, তবে আপনি ভিডিওটিকে কয়েকটি ওভারল্যাপিং সেগমেন্টে ভাগ করে সেই সেগমেন্টগুলো আলাদাভাবে এমবেড করতে পারেন।

এমবেডিং ডকুমেন্ট

পিডিএফ ফরম্যাটের ডকুমেন্ট সরাসরি এমবেড করা যায়। মডেলটি প্রতিটি পৃষ্ঠার ভিজ্যুয়াল এবং টেক্সট কন্টেন্ট প্রসেস করে।

পিডিএফ ফাইলগুলো ইনলাইন ডেটা হিসেবে অথবা ফাইলস এপিআই (Files API)- এর মাধ্যমে আপলোড করা ফাইল হিসেবে প্রদান করা যেতে পারে।

পাইথন

from google import genai
from google.genai import types

with open('example.pdf', 'rb') as f:
    pdf_bytes = f.read()

client = genai.Client()

result = client.models.embed_content(
    model='gemini-embedding-2',
    contents=[
        types.Part.from_bytes(
            data=pdf_bytes,
            mime_type='application/pdf',
        ),
    ]
)

print(result.embeddings)

জাভাস্ক্রিপ্ট

import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";

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

    const pdfBase64 = fs.readFileSync("example.pdf", { encoding: "base64" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-2',
        contents: [{
            inlineData: {
                mimeType: 'application/pdf',
                data: pdfBase64,
            },
        }],
    });

    console.log(response.embeddings);
}

main();

বিশ্রাম

PDF_PATH="/path/to/your/example.pdf"
PDF_BASE64=$(base64 -w0 "${PDF_PATH}")

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 '{
        "content": {
            "parts": [{
                "inline_data": {
                    "mime_type": "application/pdf",
                    "data": "'"${PDF_BASE64}"'"
                }
            }]
        }
    }'

ব্যবহারের ক্ষেত্র

বিভিন্ন সাধারণ এআই ব্যবহারের ক্ষেত্রে টেক্সট এমবেডিং অত্যন্ত গুরুত্বপূর্ণ, যেমন:

  • রিট্রিভাল-অগমেন্টেড জেনারেশন (RAG): এমবেডিং একটি মডেলের প্রেক্ষাপটে প্রাসঙ্গিক তথ্য পুনরুদ্ধার ও অন্তর্ভুক্ত করার মাধ্যমে তৈরি করা টেক্সটের গুণমান উন্নত করে।
  • তথ্য পুনরুদ্ধার: প্রদত্ত ইনপুট টেক্সটের ভিত্তিতে সবচেয়ে অর্থগতভাবে সাদৃশ্যপূর্ণ টেক্সট বা ডকুমেন্ট অনুসন্ধান করা।

    ডকুমেন্ট অনুসন্ধান টিউটোরিয়াল

  • সার্চ রি-র‍্যাঙ্কিং : কোয়েরির সাপেক্ষে প্রাথমিক ফলাফলগুলোকে শব্দার্থগতভাবে স্কোর করে সবচেয়ে প্রাসঙ্গিক আইটেমগুলোকে অগ্রাধিকার দিন।

    সার্চ রি-র‍্যাঙ্কিং টিউটোরিয়াল

  • অসঙ্গতি শনাক্তকরণ: একাধিক এমবেডিংয়ের গোষ্ঠীর মধ্যে তুলনা করলে লুকানো প্রবণতা বা ব্যতিক্রমী মান শনাক্ত করা যেতে পারে।

    অসঙ্গতি সনাক্তকরণ টিউটোরিয়াল

  • শ্রেণিবিন্যাস: বিষয়বস্তুর উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে টেক্সটকে শ্রেণিবদ্ধ করা, যেমন সেন্টিমেন্ট অ্যানালাইসিস বা স্প্যাম শনাক্তকরণ।

    শ্রেণিবিন্যাস টিউটোরিয়াল

  • ক্লাস্টারিং: আপনার এমবেডিংগুলোর ক্লাস্টার ও ভিজ্যুয়ালাইজেশন তৈরি করে জটিল সম্পর্কগুলো কার্যকরভাবে উপলব্ধি করুন।

    ক্লাস্টারিং ভিজ্যুয়ালাইজেশন টিউটোরিয়াল

এমবেডিং সংরক্ষণ

যখন আপনি এমবেডিংগুলোকে প্রোডাকশনে নিয়ে যান, তখন উচ্চ-মাত্রিক এমবেডিংগুলোকে দক্ষতার সাথে সংরক্ষণ, ইন্ডেক্স এবং পুনরুদ্ধার করার জন্য ভেক্টর ডেটাবেস ব্যবহার করা একটি প্রচলিত পদ্ধতি। গুগল ক্লাউড এমন কিছু পরিচালিত ডেটা পরিষেবা প্রদান করে যা এই উদ্দেশ্যে ব্যবহার করা যেতে পারে, যার মধ্যে রয়েছে জেমিনি এন্টারপ্রাইজ এজেন্ট প্ল্যাটফর্ম ভেক্টর সার্চ ২.০ , বিগকোয়েরি , অ্যালয়ডিবি এবং ক্লাউড এসকিউএল

নিম্নলিখিত টিউটোরিয়ালগুলিতে দেখানো হয়েছে কীভাবে জেমিনি এমবেডিং-এর সাথে অন্যান্য থার্ড-পার্টি ভেক্টর ডেটাবেস ব্যবহার করতে হয়।

মডেল সংস্করণ

জেমিনি এমবেডিং ২

সম্পত্তি বর্ণনা
মডেল কোড

জেমিনি এপিআই

gemini-embedding-2

সমর্থিত ডেটা প্রকারগুলি

ইনপুট

টেক্সট, ছবি, ভিডিও, অডিও, পিডিএফ

আউটপুট

টেক্সট এমবেডিং

টোকেন সীমা [*]

ইনপুট টোকেন সীমা

৮,১৯২

আউটপুট মাত্রা আকার

নমনীয়, সমর্থন করে: ১২৮ - ৩০৭২, প্রস্তাবিত: ৭৬৮, ১৫৩৬, ৩০৭২

সংস্করণ
আরও বিস্তারিত জানতে মডেল ভার্সন প্যাটার্নগুলো পড়ুন।
  • স্থিতিশীল: gemini-embedding-2
সর্বশেষ আপডেট এপ্রিল ২০২৬

জেমিনি এমবেডিং

সম্পত্তি বর্ণনা
মডেল কোড

জেমিনি এপিআই

gemini-embedding-001

সমর্থিত ডেটা প্রকারগুলি

ইনপুট

পাঠ্য

আউটপুট

টেক্সট এমবেডিং

টোকেন সীমা [*]

ইনপুট টোকেন সীমা

২,০৪৮

আউটপুট মাত্রা আকার

নমনীয়, সমর্থন করে: ১২৮ - ৩০৭২, প্রস্তাবিত: ৭৬৮, ১৫৩৬, ৩০৭২

সংস্করণ
আরও বিস্তারিত জানতে মডেল ভার্সন প্যাটার্নগুলো পড়ুন।
  • স্থিতিশীল: gemini-embedding-001
সর্বশেষ আপডেট জুন ২০২৫

অপ্রচলিত এমবেডিংস মডেলগুলির জন্য, অপ্রচলিতকরণ পৃষ্ঠাটি দেখুন।

gemini-embedding-001 থেকে স্থানান্তর

gemini-embedding-001 এবং gemini-embedding-2 এর এমবেডিং স্পেসগুলো সামঞ্জস্যপূর্ণ নয় । এর মানে হলো, আপনি একটি মডেল দ্বারা তৈরি এমবেডিংয়ের সাথে অন্যটি দ্বারা তৈরি এমবেডিংয়ের সরাসরি তুলনা করতে পারবেন না। আপনি যদি gemini-embedding-2 তে আপগ্রেড করেন, তবে আপনাকে আপনার বিদ্যমান সমস্ত ডেটা পুনরায় এমবেড করতে হবে।

অসামঞ্জস্যতা ছাড়াও, মডেল দুটির মধ্যে আরও বেশ কিছু উল্লেখযোগ্য পার্থক্য রয়েছে:

  • টাস্কের ধরন নির্দিষ্টকরণ: gemini-embedding-001 সাথে, আপনি task_type প্যারামিটার ব্যবহার করে টাস্কের ধরন নির্দিষ্ট করেন (যেমন, SEMANTIC_SIMILARITY , RETRIEVAL_DOCUMENT )। gemini-embedding-2 এর সাথে, task_type প্যারামিটারটি সমর্থিত নয়। এর পরিবর্তে, শুধুমাত্র টেক্সট-ভিত্তিক টাস্কের জন্য আপনার সরাসরি প্রম্পটে টাস্কের নির্দেশাবলী অন্তর্ভুক্ত করা উচিত। বিভিন্ন ব্যবহারের ক্ষেত্রে প্রম্পট কীভাবে ফরম্যাট করতে হয় সে সম্পর্কে বিস্তারিত জানতে “Task types with Embeddings 2” দেখুন।

  • এমবেডিং অ্যাগ্রিগেশন: gemini-embedding-001 ইনপুটের একটি তালিকার প্রতিটি স্ট্রিং-এর জন্য স্বতন্ত্র এমবেডিং তৈরি করে। এর বিপরীতে, যখন একাধিক ইনপুট (যেমন টেক্সট এবং ছবি) সরাসরি একটি অনুরোধে প্রদান করা হয়, তখন gemini-embedding-2 একটি একক, একত্রিত এমবেডিং তৈরি করে। প্রতিটি ইনপুটের জন্য পৃথক এমবেডিং তৈরি করতে, প্রতিটি ইনপুটকে একটি Content অবজেক্টে র‍্যাপ করুন, অথবা Batch API ব্যবহার করুন। আরও তথ্যের জন্য এমবেডিং অ্যাগ্রিগেশন দেখুন।

  • নর্মালাইজেশন: আপনি যদি output_dimensionality ব্যবহার করে ৩০৭২-এর কম ডাইমেনশনযুক্ত এমবেডিং অনুরোধ করেন, তাহলে gemini-embedding-2 স্বয়ংক্রিয়ভাবে এই সংক্ষিপ্ত এমবেডিংগুলোকে নর্মালাইজ করে। gemini-embedding-001 এর ক্ষেত্রে, ৩০৭২ ব্যতীত অন্য ডাইমেনশনগুলোর জন্য আপনাকে ম্যানুয়ালি নর্মালাইজেশন করতে হবে। বিস্তারিত জানতে ‘ছোট ডাইমেনশনের জন্য গুণমান নিশ্চিতকরণ’ দেখুন।

ব্যাচ এম্বেডিং

যদি ল্যাটেন্সি কোনো উদ্বেগের বিষয় না হয়, তবে ব্যাচ এপিআই (Batch API) সহ জেমিনি এমবেডিংস (Gemini Embeddings) মডেলগুলো ব্যবহার করে দেখুন। এটি ডিফল্ট এমবেডিং মূল্যের ৫০% খরচে অনেক বেশি থ্রুপুট প্রদান করে। ব্যাচ এপিআই কুকবুকে (Batch API cookbook) কীভাবে শুরু করবেন তার উদাহরণ খুঁজে নিন।

দায়িত্বশীল ব্যবহারের বিজ্ঞপ্তি

জেনারেটিভ এআই মডেল, যা নতুন কন্টেন্ট তৈরি করে, তার থেকে ভিন্ন, জেমিনি এমবেডিং মডেলের উদ্দেশ্য শুধুমাত্র আপনার ইনপুট ডেটার ফরম্যাটকে একটি সংখ্যাসূচক উপস্থাপনায় রূপান্তর করা। যদিও গুগল আপনার ইনপুট ডেটার ফরম্যাটকে অনুরোধকৃত সংখ্যাসূচক ফরম্যাটে রূপান্তর করার জন্য একটি এমবেডিং মডেল সরবরাহ করার দায়িত্বে থাকে, ব্যবহারকারীরা তাদের ইনপুট করা ডেটা এবং এর ফলে তৈরি হওয়া এমবেডিংগুলোর সম্পূর্ণ দায়িত্ব বহন করেন। জেমিনি এমবেডিং মডেল ব্যবহার করার মাধ্যমে আপনি নিশ্চিত করছেন যে, আপনার আপলোড করা যেকোনো কন্টেন্টের জন্য আপনার প্রয়োজনীয় অধিকার রয়েছে। এমন কোনো কন্টেন্ট তৈরি করবেন না যা অন্যের মেধাস্বত্ব বা গোপনীয়তার অধিকার লঙ্ঘন করে। এই পরিষেবাটির আপনার ব্যবহার আমাদের নিষিদ্ধ ব্যবহার নীতি এবং গুগলের পরিষেবার শর্তাবলীর অধীন।

এমবেডিং দিয়ে নির্মাণ শুরু করুন

মডেলের সক্ষমতাগুলো অন্বেষণ করতে এবং আপনার এমবেডিংগুলো কীভাবে কাস্টমাইজ ও ভিজ্যুয়ালাইজ করতে হয় তা শিখতে এমবেডিং কুইকস্টার্ট নোটবুকটি দেখুন।