জেমিনি এপিআই টেক্সট, ছবি, ভিডিও এবং অন্যান্য কন্টেন্টের জন্য এমবেডিং তৈরি করতে এমবেডিং মডেল সরবরাহ করে। এই প্রাপ্ত এমবেডিংগুলো পরবর্তীতে সিমান্টিক সার্চ, ক্লাসিফিকেশন এবং ক্লাস্টারিং-এর মতো কাজে ব্যবহার করা যেতে পারে, যা কীওয়ার্ড-ভিত্তিক পদ্ধতির চেয়ে আরও নির্ভুল এবং প্রাসঙ্গিক ফলাফল প্রদান করে।
সর্বশেষ মডেল, gemini-embedding-2-preview , হলো Gemini API-এর প্রথম মাল্টিমোডাল এমবেডিং মডেল। এটি টেক্সট, ছবি, ভিডিও, অডিও এবং ডকুমেন্টকে একটি সমন্বিত এমবেডিং স্পেসে ম্যাপ করে, যা ১০০টিরও বেশি ভাষায় ক্রস-মোডাল সার্চ, ক্লাসিফিকেশন এবং ক্লাস্টারিং সক্ষম করে। আরও জানতে মাল্টিমোডাল এমবেডিংস সেকশনটি দেখুন। শুধুমাত্র টেক্সট ব্যবহারের ক্ষেত্রে, gemini-embedding-001 এখনও উপলব্ধ রয়েছে।
রিট্রিভাল অগমেন্টেড জেনারেশন (RAG) সিস্টেম তৈরি করা এআই প্রোডাক্টের একটি সাধারণ ব্যবহার। উন্নত তথ্যগত নির্ভুলতা, সামঞ্জস্য এবং প্রাসঙ্গিক সমৃদ্ধির মাধ্যমে মডেলের আউটপুট উল্লেখযোগ্যভাবে বৃদ্ধি করতে এমবেডিং একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। আপনি যদি একটি পরিচালিত RAG সলিউশন ব্যবহার করতে চান, তবে আমরা ফাইল সার্চ টুলটি তৈরি করেছি যা RAG পরিচালনাকে আরও সহজ এবং সাশ্রয়ী করে তোলে।
এমবেডিং তৈরি করা
টেক্সট এমবেডিং তৈরি করতে embedContent মেথডটি ব্যবহার করুন:
পাইথন
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)
জাভাস্ক্রিপ্ট
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))
}
বিশ্রাম
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 '{
"model": "models/gemini-embedding-001",
"content": {
"parts": [{
"text": "What is the meaning of life?"
}]
}
}'
এছাড়াও আপনি একাধিক চাঙ্ককে স্ট্রিং-এর একটি তালিকা হিসেবে প্রদান করে একবারে সেগুলোর জন্য এমবেডিং তৈরি করতে পারেন।
পাইথন
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)
জাভাস্ক্রিপ্ট
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))
}
বিশ্রাম
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 '{
"content": {
"parts": [
{
"text": "What is the meaning of life?"
},
{
"text": "How much wood would a woodchuck chuck?"
},
{
"text": "How does the brain work?"
}
]
},
"taskType": "SEMANTIC_SIMILARITY"
}'
কর্মক্ষমতা উন্নত করতে কাজের ধরণ নির্দিষ্ট করুন।
আপনি ক্লাসিফিকেশন থেকে শুরু করে ডকুমেন্ট সার্চ পর্যন্ত বিভিন্ন ধরনের কাজের জন্য এমবেডিং ব্যবহার করতে পারেন। সঠিক টাস্ক টাইপ নির্দিষ্ট করলে তা উদ্দিষ্ট সম্পর্কগুলোর জন্য এমবেডিংগুলোকে অপ্টিমাইজ করতে সাহায্য করে, যার ফলে নির্ভুলতা এবং কার্যকারিতা সর্বোচ্চ হয়। সমর্থিত টাস্ক টাইপগুলোর সম্পূর্ণ তালিকার জন্য, ‘সমর্থিত টাস্ক টাইপ’ টেবিলটি দেখুন।
নিম্নলিখিত উদাহরণটি দেখায় যে কীভাবে আপনি 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?"
}
]
}
}'
কোড স্নিপেটগুলো রান করলে দেখাবে যে টেক্সটের বিভিন্ন অংশগুলো একে অপরের সাথে কতটা সাদৃশ্যপূর্ণ।
সমর্থিত কাজের ধরণ
| কাজের ধরণ | বর্ণনা | উদাহরণ |
|---|---|---|
| শব্দার্থিক_সাদৃশ্য | পাঠ্যের সাদৃশ্য মূল্যায়নের জন্য এমবেডিংগুলো অপ্টিমাইজ করা হয়েছে। | সুপারিশ ব্যবস্থা, নকল সনাক্তকরণ |
| শ্রেণিবিন্যাস | পূর্বনির্ধারিত লেবেল অনুযায়ী টেক্সট শ্রেণীবদ্ধ করার জন্য এমবেডিংগুলো অপ্টিমাইজ করা হয়েছে। | অনুভূতি বিশ্লেষণ, স্প্যাম সনাক্তকরণ |
| ক্লাস্টারিং | সাদৃশ্যের ভিত্তিতে টেক্সটগুলোকে ক্লাস্টার করার জন্য এমবেডিং অপ্টিমাইজ করা হয়েছে। | নথি সংগঠন, বাজার গবেষণা, অসঙ্গতি সনাক্তকরণ |
| পুনরুদ্ধার_নথি | ডকুমেন্ট অনুসন্ধানের জন্য অপ্টিমাইজ করা এমবেডিং। | অনুসন্ধানের জন্য প্রবন্ধ, বই বা ওয়েব পেজ সূচীবদ্ধ করা। |
| পুনরুদ্ধার_কোয়েরি | সাধারণ সার্চ কোয়েরির জন্য অপ্টিমাইজ করা এমবেডিং। কোয়েরির জন্য RETRIEVAL_QUERY এবং ডকুমেন্ট পুনরুদ্ধারের জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। | কাস্টম অনুসন্ধান |
| কোড_রিট্রিভাল_কোয়েরি | স্বাভাবিক ভাষার কোয়েরির উপর ভিত্তি করে কোড ব্লক পুনরুদ্ধারের জন্য অপ্টিমাইজ করা এমবেডিং। কোয়েরির জন্য CODE_RETRIEVAL_QUERY এবং পুনরুদ্ধারযোগ্য কোড ব্লকের জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। | কোড পরামর্শ এবং অনুসন্ধান |
| প্রশ্নোত্তর | প্রশ্নোত্তর সিস্টেমে প্রশ্নগুলির জন্য এমবেডিং, যা প্রশ্নের উত্তর দেয় এমন ডকুমেন্ট খুঁজে বের করার জন্য অপ্টিমাইজ করা হয়েছে। প্রশ্নগুলির জন্য QUESTION_ANSWERING এবং পুনরুদ্ধারযোগ্য ডকুমেন্টগুলির জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। | চ্যাটবক্স |
| তথ্য যাচাই | যেসব বিবৃতি যাচাই করা প্রয়োজন, সেগুলোর জন্য এমবেডিং, যা বিবৃতিটির সমর্থন বা খণ্ডনকারী প্রমাণ ধারণকারী নথি পুনরুদ্ধারের জন্য অপ্টিমাইজ করা হয়েছে। লক্ষ্য পাঠ্যের জন্য FACT_VERIFICATION এবং পুনরুদ্ধারযোগ্য নথির জন্য RETRIEVAL_DOCUMENT ব্যবহার করুন। | স্বয়ংক্রিয় তথ্য যাচাই ব্যবস্থা |
এমবেডিং আকার নিয়ন্ত্রণ করা
gemini-embedding-001 এবং gemini-embedding-2-preview উভয়কেই ম্যাট্রিওশকা রিপ্রেজেন্টেশন লার্নিং (MRL) কৌশল ব্যবহার করে প্রশিক্ষণ দেওয়া হয়েছে, যা একটি মডেলকে এমন উচ্চ-মাত্রিক এমবেডিং শিখতে শেখায়, যার প্রাথমিক অংশগুলো (বা প্রিফিক্স) একই ডেটার কার্যকর ও সরল সংস্করণ হয়ে থাকে।
আউটপুট এমবেডিং ভেক্টরের আকার নিয়ন্ত্রণ করতে output_dimensionality প্যারামিটারটি ব্যবহার করুন। কম আউটপুট ডাইমেনশনালিটি নির্বাচন করলে তা স্টোরেজ স্পেস বাঁচাতে পারে এবং ডাউনস্ট্রিম অ্যাপ্লিকেশনগুলির জন্য কম্পিউটেশনাল দক্ষতা বাড়াতে পারে, অথচ মানের দিক থেকে খুব বেশি ছাড় দিতে হয় না। ডিফল্টরূপে, উভয় মডেলই একটি ৩০৭২-ডাইমেনশনাল এমবেডিং আউটপুট করে, কিন্তু স্টোরেজ স্পেস বাঁচাতে আপনি গুণমান না হারিয়েই এটিকে ছোট আকারে ছেঁটে ফেলতে পারেন। আমরা ৭৬৮, ১৫৩৬, বা ৩০৭২ আউটপুট ডাইমেনশন ব্যবহার করার পরামর্শ দিই।
পাইথন
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}")
জাভাস্ক্রিপ্ট
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?',
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-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)
}
বিশ্রাম
curl -X POST "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-001: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
ক্ষুদ্রতর মাপের জন্য গুণমান নিশ্চিত করা
৩০৭২ ডাইমেনশনের এমবেডিংটি নর্মালাইজড। নর্মালাইজড এমবেডিংগুলো ভেক্টরের মান নয়, বরং দিক তুলনা করার মাধ্যমে আরও নির্ভুল শব্দার্থিক সাদৃশ্য তৈরি করে। ৭৬৮ এবং ১৫৩৬ সহ অন্যান্য ডাইমেনশনের জন্য, আপনাকে এমবেডিংগুলো নিম্নোক্তভাবে নর্মালাইজ করতে হবে:
পাইথন
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
নিম্নলিখিত সারণিতে বিভিন্ন ডাইমেনশনের জন্য MTEB স্কোর দেখানো হয়েছে, যা এমবেডিংয়ের জন্য একটি বহুল ব্যবহৃত বেঞ্চমার্ক। লক্ষণীয় যে, ফলাফল থেকে দেখা যায় পারফরম্যান্স কঠোরভাবে এমবেডিং ডাইমেনশনের আকারের সাথে আবদ্ধ নয়, কারণ নিম্ন ডাইমেনশনগুলো তাদের উচ্চ ডাইমেনশনের সমকক্ষ স্কোর অর্জন করে।
| MRL মাত্রা | এমটিইবি স্কোর (জেমিনি এমবেডিং ০০১) |
|---|---|
| ২০৪৮ | ৬৮.১৬ |
| ১৫৩৬ | ৬৮.১৭ |
| ৭৬৮ | ৬৭.৯৯ |
| ৫১২ | ৬৭.৫৫ |
| ২৫৬ | ৬৬.১৯ |
| ১২৮ | ৬৩.৩১ |
মাল্টিমোডাল এম্বেডিংস
gemini-embedding-2-preview মডেলটি মাল্টিমোডাল ইনপুট সমর্থন করে, যার ফলে আপনি টেক্সটের পাশাপাশি ছবি, ভিডিও, অডিও এবং ডকুমেন্টের কন্টেন্ট এমবেড করতে পারেন। সমস্ত মোডালিটি একই এমবেডিং স্পেসে ম্যাপ করা থাকে, যা ক্রস-মোডাল সার্চ এবং তুলনাকে সম্ভব করে তোলে।
সমর্থিত পদ্ধতি এবং সীমা
সামগ্রিকভাবে সর্বোচ্চ ইনপুট টোকেনের সীমা হলো ৮১৯২টি।
| পদ্ধতি | স্পেসিফিকেশন এবং সীমা |
|---|---|
| পাঠ্য | সর্বোচ্চ ৮,১৯২টি টোকেন সমর্থন করে। |
| ছবি | প্রতি অনুরোধে সর্বোচ্চ ৬টি ছবি। সমর্থিত ফরম্যাট: PNG, JPEG। |
| অডিও | সর্বোচ্চ সময়কাল ৮০ সেকেন্ড। সমর্থিত ফরম্যাট: MP3, WAV। |
| ভিডিও | সর্বোচ্চ সময়কাল ১২০ সেকেন্ড। সমর্থিত ফরম্যাট: MP4, MOV। সমর্থিত কোডেক: H264, H265, AV1, VP9। সিস্টেমটি প্রতি ভিডিওতে সর্বোচ্চ ৩২টি ফ্রেম প্রসেস করে: ছোট ভিডিও (≤৩২ সেকেন্ড) প্রতি সেকেন্ডে ১ ফ্রেম হারে স্যাম্পল করা হয়, আর দীর্ঘ ভিডিওগুলো সুষমভাবে ৩২টি ফ্রেমে স্যাম্পল করা হয়। ভিডিও ফাইলে অডিও ট্র্যাক প্রসেস করা হয় না। |
| নথি (পিডিএফ) | সর্বাধিক ৬ পৃষ্ঠা। |
ছবি এমবেড করা
নিম্নলিখিত উদাহরণে gemini-embedding-2-preview ব্যবহার করে কীভাবে একটি ছবি এমবেড করতে হয় তা দেখানো হয়েছে।
ছবি ইনলাইন ডেটা হিসেবে অথবা ফাইলস এপিআই (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-preview',
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-preview',
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-preview: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অ্যারেতে একাধিক এন্ট্রি পাঠালে প্রতিটি এন্ট্রির জন্য আলাদা এমবেডিং ফেরত আসে। - পোস্ট-স্তরের উপস্থাপনা: একাধিক মিডিয়া আইটেমযুক্ত সোশ্যাল মিডিয়া পোস্টের মতো জটিল অবজেক্টের ক্ষেত্রে, একটি সুসংহত পোস্ট-স্তরের উপস্থাপনা তৈরি করার জন্য আমরা আলাদা এমবেডিংগুলোকে একত্রিত করার (উদাহরণস্বরূপ, গড় করার মাধ্যমে) পরামর্শ দিই।
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে টেক্সট এবং ইমেজ ইনপুটের জন্য একটি একত্রিত এমবেডিং তৈরি করতে হয়। একাধিক ইনপুট একত্রিত করতে parts ফিল্ডটি ব্যবহার করুন:
পাইথন
from google import genai
from google.genai import types
with open('dog.png', 'rb') as f:
image_bytes = f.read()
result = client.models.embed_content(
model='gemini-embedding-2-preview',
contents=[
types.Content(
parts=[
types.Part(text="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-preview',
contents: {
parts: [
{ text: 'An image of a dog' },
{ inlineData: { mimeType: 'image/png', data: imgBase64 } },
],
},
});
console.log(response.embeddings);
}
main();
বিশ্রাম
IMG_PATH="/path/to/your/dog.png"
IMG_BASE64=$(base64 -w0 "${IMG_PATH}")
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2-preview: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}"'"
}
}
]
}
}'
অন্যদিকে, এই উদাহরণটি একটি এমবেডিং কলে একাধিক এমবেডিং তৈরি করে:
পাইথন
from google import genai
from google.genai import types
with open('dog.png', 'rb') as f:
image_bytes = f.read()
result = client.models.embed_content(
model='gemini-embedding-2-preview',
contents=[
"The dog is cute",
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-preview',
contents: [
'The dog is cute',
{
inlineData: {
mimeType: 'image/png',
data: imgBase64,
},
},
],
});
console.log(response.embeddings);
}
main();
বিশ্রাম
IMG_PATH="/path/to/your/dog.png"
IMG_BASE64=$(base64 -w0 "${IMG_PATH}")
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2-preview:batchEmbedContents" \
-H "Content-Type: application/json" \
-H "x-goog-api-key: ${GEMINI_API_KEY}" \
-d '{
"requests": [
{
"model": "models/gemini-embedding-2-preview",
"content": {"parts": [{"text": "The dog is cute"}]}
},
{
"model": "models/gemini-embedding-2-preview",
"content": {"parts": [{"inline_data": {"mime_type": "image/png", "data": "'"${IMG_BASE64}"'"}}]}
}
]
}'
অডিও এমবেড করা
নিম্নলিখিত উদাহরণে দেখানো হয়েছে কিভাবে gemini-embedding-2-preview ব্যবহার করে একটি অডিও ফাইল এমবেড করতে হয়।
অডিও ফাইলগুলো ইনলাইন ডেটা হিসেবে অথবা ফাইলস এপিআই (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-preview',
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-preview',
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-preview: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-preview ব্যবহার করে কীভাবে একটি ভিডিও এম্বেড করতে হয় তা দেখানো হয়েছে।
ভিডিও ইনলাইন ডেটা হিসেবে অথবা ফাইলস এপিআই (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-preview',
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-preview',
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-preview: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-preview',
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-preview',
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-preview: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): এমবেডিং একটি মডেলের প্রেক্ষাপটে প্রাসঙ্গিক তথ্য পুনরুদ্ধার ও অন্তর্ভুক্ত করার মাধ্যমে তৈরি করা টেক্সটের গুণমান উন্নত করে।
তথ্য পুনরুদ্ধার: প্রদত্ত ইনপুট টেক্সটের ভিত্তিতে সবচেয়ে অর্থগতভাবে সাদৃশ্যপূর্ণ টেক্সট বা ডকুমেন্ট অনুসন্ধান করা।
সার্চ রি-র্যাঙ্কিং : কোয়েরির সাপেক্ষে প্রাথমিক ফলাফলগুলোকে শব্দার্থগতভাবে স্কোর করে সবচেয়ে প্রাসঙ্গিক আইটেমগুলোকে অগ্রাধিকার দিন।
অসঙ্গতি শনাক্তকরণ: একাধিক এমবেডিংয়ের গোষ্ঠীর মধ্যে তুলনা করলে লুকানো প্রবণতা বা ব্যতিক্রমী মান শনাক্ত করা যেতে পারে।
শ্রেণিবিন্যাস: বিষয়বস্তুর উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে টেক্সটকে শ্রেণিবদ্ধ করা, যেমন সেন্টিমেন্ট অ্যানালাইসিস বা স্প্যাম শনাক্তকরণ।
ক্লাস্টারিং: আপনার এমবেডিংগুলোর ক্লাস্টার ও ভিজ্যুয়ালাইজেশন তৈরি করে জটিল সম্পর্কগুলো কার্যকরভাবে উপলব্ধি করুন।
এমবেডিং সংরক্ষণ
যখন আপনি এমবেডিংগুলোকে প্রোডাকশনে নিয়ে যান, তখন উচ্চ-মাত্রিক এমবেডিংগুলোকে দক্ষতার সাথে সংরক্ষণ, ইন্ডেক্স এবং পুনরুদ্ধার করার জন্য ভেক্টর ডেটাবেস ব্যবহার করা একটি প্রচলিত পদ্ধতি। গুগল ক্লাউড এমন কিছু পরিচালিত ডেটা পরিষেবা প্রদান করে যা এই উদ্দেশ্যে ব্যবহার করা যেতে পারে, যার মধ্যে রয়েছে Vertex AI Vector Search 2.0 , BigQuery , AlloyDB এবং Cloud SQL ।
নিম্নলিখিত টিউটোরিয়ালগুলিতে দেখানো হয়েছে কীভাবে জেমিনি এমবেডিং-এর সাথে অন্যান্য থার্ড-পার্টি ভেক্টর ডেটাবেস ব্যবহার করতে হয়।
মডেল সংস্করণ
জেমিনি এমবেডিং ২ প্রিভিউ
| সম্পত্তি | বর্ণনা |
|---|---|
| মডেল কোড | জেমিনি এপিআই |
| সমর্থিত ডেটা প্রকারগুলি | ইনপুট টেক্সট, ছবি, ভিডিও, অডিও, পিডিএফ আউটপুট টেক্সট এমবেডিং |
| টোকেন সীমা [*] | ইনপুট টোকেন সীমা ৮,১৯২ আউটপুট মাত্রা আকার নমনীয়, সমর্থন করে: ১২৮ - ৩০৭২, প্রস্তাবিত: ৭৬৮, ১৫৩৬, ৩০৭২ |
| সংস্করণ |
|
| সর্বশেষ আপডেট | নভেম্বর ২০২৫ |
জেমিনি এমবেডিং
| সম্পত্তি | বর্ণনা |
|---|---|
| মডেল কোড | জেমিনি এপিআই |
| সমর্থিত ডেটা প্রকারগুলি | ইনপুট পাঠ্য আউটপুট টেক্সট এমবেডিং |
| টোকেন সীমা [*] | ইনপুট টোকেন সীমা ২,০৪৮ আউটপুট মাত্রা আকার নমনীয়, সমর্থন করে: ১২৮ - ৩০৭২, প্রস্তাবিত: ৭৬৮, ১৫৩৬, ৩০৭২ |
| সংস্করণ |
|
| সর্বশেষ আপডেট | জুন ২০২৫ |
অপ্রচলিত এমবেডিংস মডেলগুলির জন্য, অপ্রচলিতকরণ পৃষ্ঠাটি দেখুন।
gemini-embedding-001 থেকে স্থানান্তর
gemini-embedding-001 এবং gemini-embedding-2-preview মধ্যে এমবেডিং স্পেসগুলো সামঞ্জস্যপূর্ণ নয় । এর মানে হলো, আপনি একটি মডেল দ্বারা তৈরি এমবেডিংয়ের সাথে অন্যটি দ্বারা তৈরি এমবেডিংয়ের সরাসরি তুলনা করতে পারবেন না। আপনি যদি gemini-embedding-2-preview তে আপগ্রেড করেন, তবে আপনাকে আপনার বিদ্যমান সমস্ত ডেটা পুনরায় এমবেড করতে হবে।
ব্যাচ এম্বেডিং
যদি ল্যাটেন্সি কোনো উদ্বেগের বিষয় না হয়, তবে ব্যাচ এপিআই (Batch API) সহ জেমিনি এমবেডিংস (Gemini Embeddings) মডেলগুলো ব্যবহার করে দেখুন। এটি ডিফল্ট এমবেডিং মূল্যের ৫০% খরচে অনেক বেশি থ্রুপুট প্রদান করে। ব্যাচ এপিআই কুকবুকে (Batch API cookbook) কীভাবে শুরু করবেন তার উদাহরণ খুঁজে নিন।
দায়িত্বশীল ব্যবহারের বিজ্ঞপ্তি
জেনারেটিভ এআই মডেল, যা নতুন কন্টেন্ট তৈরি করে, তার থেকে ভিন্ন, জেমিনি এমবেডিং মডেলের উদ্দেশ্য শুধুমাত্র আপনার ইনপুট ডেটার ফরম্যাটকে একটি সংখ্যাসূচক উপস্থাপনায় রূপান্তর করা। যদিও গুগল আপনার ইনপুট ডেটার ফরম্যাটকে অনুরোধকৃত সংখ্যাসূচক ফরম্যাটে রূপান্তর করার জন্য একটি এমবেডিং মডেল সরবরাহ করার দায়িত্বে থাকে, ব্যবহারকারীরা তাদের ইনপুট করা ডেটা এবং এর ফলে তৈরি হওয়া এমবেডিংগুলোর সম্পূর্ণ দায়িত্ব বহন করেন। জেমিনি এমবেডিং মডেল ব্যবহার করার মাধ্যমে আপনি নিশ্চিত করছেন যে, আপনার আপলোড করা যেকোনো কন্টেন্টের জন্য আপনার প্রয়োজনীয় অধিকার রয়েছে। এমন কোনো কন্টেন্ট তৈরি করবেন না যা অন্যের মেধাস্বত্ব বা গোপনীয়তার অধিকার লঙ্ঘন করে। এই পরিষেবাটির আপনার ব্যবহার আমাদের নিষিদ্ধ ব্যবহার নীতি এবং গুগলের পরিষেবার শর্তাবলীর অধীন।
এমবেডিং দিয়ে নির্মাণ শুরু করুন
মডেলের সক্ষমতাগুলো অন্বেষণ করতে এবং আপনার এমবেডিংগুলো কীভাবে কাস্টমাইজ ও ভিজ্যুয়ালাইজ করতে হয় তা শিখতে এমবেডিং কুইকস্টার্ট নোটবুকটি দেখুন।