جاسازی‌ها

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) آموزش داده شده است که به یک مدل یاد می‌دهد تا جاسازی‌های با ابعاد بالا را که دارای بخش‌های اولیه (یا پیشوند) هستند که نسخه‌های مفید و ساده‌تری از همان داده‌ها هستند، یاد بگیرد.

برای کنترل اندازه بردار جاسازی خروجی از پارامتر output_dimensionality استفاده کنید. انتخاب ابعاد خروجی کوچک‌تر می‌تواند فضای ذخیره‌سازی را ذخیره کند و کارایی محاسباتی را برای برنامه‌های پایین‌دستی افزایش دهد، در حالی که از نظر کیفیت کمی قربانی می‌کند. به طور پیش فرض، یک جاسازی 3072 بعدی را خروجی می دهد، اما می توانید برای صرفه جویی در فضای ذخیره سازی، آن را به اندازه کوچکتر بدون از دست دادن کیفیت کوتاه کنید. توصیه می کنیم از ابعاد خروجی 768، 1536 یا 3072 استفاده کنید.

پایتون

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

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

ابعاد MRL امتیاز MTEB
2048 68.16
1536 68.17
768 67.99
512 67.55
256 66.19
128 63.31

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

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

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

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

  • رتبه بندی مجدد جستجو : مرتبط ترین موارد را با امتیازدهی معنایی نتایج اولیه در برابر پرس و جو اولویت بندی کنید.

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

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

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

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

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

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

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

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

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

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

نسخه های مدل

اموال توضیحات
کد مدل

Gemini API

gemini-embedding-001

انواع داده های پشتیبانی شده

ورودی

متن

خروجی

جاسازی متن

محدودیت های رمز [*]

محدودیت رمز ورودی

2,048

اندازه ابعاد خروجی

انعطاف پذیر، پشتیبانی: 128 - 3072، توصیه شده: 768، 1536، 3072

نسخه
الگوهای نسخه مدل را برای جزئیات بیشتر بخوانید.
  • پایدار: gemini-embedding-001
  • آزمایشی: gemini-embedding-exp-03-07
آخرین به روز رسانی ژوئن 2025

اطلاعیه استفاده مسئولانه

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

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

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