جاسازی‌ها

Gemini API مدل های جاسازی متن را برای ایجاد جاسازی برای کلمات، عبارات، جملات و کد ارائه می دهد. این تعبیه‌های بنیادی وظایف پیشرفته NLP مانند جستجوی معنایی، طبقه‌بندی و خوشه‌بندی را تقویت می‌کنند و نتایج دقیق‌تری نسبت به رویکردهای مبتنی بر کلیدواژه ارائه می‌دهند.

Building Retrieval Augmented Generation (RAG) سیستم‌های مورد استفاده رایج برای تعبیه‌ها است. جاسازی‌ها نقش کلیدی در افزایش قابل‌توجه خروجی‌های مدل با بهبود دقت واقعی، انسجام و غنای متنی دارند. آنها به طور موثر اطلاعات مربوطه را از پایگاه های دانش بازیابی می کنند، که توسط جاسازی ها نشان داده می شود، که سپس به عنوان زمینه اضافی در اعلان ورودی به مدل های زبان منتقل می شود و آن را برای ایجاد پاسخ های آگاهانه و دقیق تر هدایت می کند.

برای برنامه های کاربردی در سطح سازمانی و بارهای کاری با حجم بالا، پیشنهاد می کنیم از مدل های جاسازی شده در Vertex AI استفاده کنید.

ایجاد جاسازی

برای ایجاد جاسازی متن از روش 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 "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?"}]}
    }'

همچنین می‌توانید با ارسال آن‌ها به‌عنوان فهرست رشته‌ها، جاسازی‌هایی را برای چندین تکه به طور همزمان ایجاد کنید.

پایتون

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 "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 برای بررسی شباهت رشته‌های متون از نظر معنایی استفاده کنید.

پایتون

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

جاوا اسکریپت

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

استراحت

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 جاسازی ها برای ارزیابی شباهت متن بهینه شده اند. سیستم های توصیه، تشخیص تکراری
طبقه بندی جاسازی ها برای طبقه بندی متون بر اساس برچسب های از پیش تعیین شده بهینه شده اند. تجزیه و تحلیل احساسات، تشخیص هرزنامه
خوشه بندی جاسازی‌ها برای خوشه‌بندی متون بر اساس شباهت‌هایشان بهینه شده‌اند. سازماندهی اسناد، تحقیقات بازار، تشخیص ناهنجاری
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-embedding-001 ، با استفاده از تکنیک یادگیری بازنمایی ماتریوشکا (MRL) آموزش داده شده است که به یک مدل یاد می‌دهد تا جاسازی‌های با ابعاد بالا را که دارای بخش‌های اولیه (یا پیشوند) هستند که نسخه‌های مفید و ساده‌تری از همان داده‌ها هستند، یاد بگیرد. می توانید انتخاب کنید که از جاسازی کامل 3072 بعدی استفاده کنید یا می توانید آن را به اندازه کوچکتر بدون از دست دادن کیفیت برای صرفه جویی در فضای ذخیره سازی کوتاه کنید. برای بهترین کیفیت، توصیه می کنیم از اولین 768 و 1536 استفاده کنید.

با استفاده از پارامتر 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',
        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)
}

استراحت

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، باید تعبیه‌ها را به صورت زیر عادی کنید:

پایتون

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

موارد استفاده کنید

جاسازی متن برای انواع موارد استفاده رایج از هوش مصنوعی بسیار مهم است، مانند:

  • Retrieval-Augmented Generation (RAG): تعبیه‌ها کیفیت متن تولید شده را با بازیابی و ترکیب اطلاعات مرتبط در متن یک مدل افزایش می‌دهند.
  • بازیابی اطلاعات: از جاسازی‌ها برای جستجوی متن یا اسناد مشابه معنایی استفاده کنید که بخشی از متن ورودی داده شده است.

    آموزش جستجوی سند

  • تشخیص ناهنجاری: مقایسه گروه‌های جاسازی‌ها می‌تواند به شناسایی روندهای پنهان یا نقاط پرت کمک کند.

    آموزش تشخیص ناهنجاری

  • طبقه بندی: به طور خودکار متن را بر اساس محتوای آن دسته بندی کنید، مانند تجزیه و تحلیل احساسات یا تشخیص هرزنامه

    آموزشی طبقه بندی

  • خوشه‌بندی: یک راه مؤثر برای درک روابط، ایجاد خوشه‌ها و تجسم‌سازی از تعبیه‌های خود است.

    آموزش تجسم خوشه بندی

ذخیره سازی جاسازی ها

همانطور که شما تعبیه‌ها را به سمت تولید می‌برید، استفاده از پایگاه‌های داده برداری برای ذخیره، فهرست‌بندی و بازیابی بهینه جاسازی‌های با ابعاد بالا رایج است. Google Cloud خدمات داده مدیریت شده را ارائه می دهد که می توانند برای این منظور استفاده شوند، از جمله BigQuery ، AlloyDB ، و Cloud SQL .

آموزش های زیر نحوه استفاده از دیگر پایگاه های داده برداری شخص ثالث با جاسازی Gemini را نشان می دهد.

مدل های تعبیه شده

مدل عمومی موجود

مدل های میراثی

  • embedding-001 (منسوخ در 14 آگوست 2025)
  • text-embedding-004 (منسوخ در 14 ژانویه 2026)

استفاده از تعبیه ها

بر خلاف مدل‌های هوش مصنوعی مولد که محتوای جدید ایجاد می‌کنند، مدل Gemini Embedding فقط برای تبدیل قالب داده‌های ورودی شما به یک نمایش عددی در نظر گرفته شده است. در حالی که Google مسئول ارائه یک مدل جاسازی است که قالب داده‌های ورودی شما را به قالب عددی درخواستی تبدیل می‌کند، کاربران مسئولیت کامل داده‌هایی را که وارد می‌کنند و جاسازی‌های حاصله بر عهده دارند. با استفاده از مدل Gemini Embedding، تأیید می‌کنید که حقوق لازم را برای هر محتوایی که آپلود می‌کنید، دارید. محتوایی تولید نکنید که مالکیت معنوی یا حقوق خصوصی دیگران را نقض کند. استفاده شما از این سرویس مشمول خط مشی استفاده ممنوع و شرایط خدمات Google است.

ساخت و ساز را با جاسازی شروع کنید

برای بررسی قابلیت‌های مدل و یادگیری نحوه سفارشی‌سازی و تجسم جاسازی‌های خود ، نوت‌بوک شروع سریع جاسازی‌ها را بررسی کنید.