جاسازی‌ها

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

ساخت سیستم‌های بازیابی افزوده نسل (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";
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 "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 ، با استفاده از تکنیک یادگیری نمایش ماتریوشکا (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 '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 امتیاز MTEB
۲۰۴۸ ۶۸.۱۶
۱۵۳۶ ۶۸.۱۷
۷۶۸ عدد ۶۷.۹۹
۵۱۲ ۶۷.۵۵
۲۵۶ ۶۶.۱۹
۱۲۸ ۶۳.۳۱

موارد استفاده

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

  • تولید افزوده‌شده با بازیابی (RAG): جاسازی‌ها با بازیابی و گنجاندن اطلاعات مرتبط در متن یک مدل، کیفیت متن تولید شده را افزایش می‌دهند.
  • بازیابی اطلاعات: جستجوی متن یا اسنادی که از نظر معنایی بیشترین شباهت را به یک متن ورودی دارند.

    جستجوی اسناد

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

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

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

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

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

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

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

    آموزش خوشه‌بندی و مصورسازی نمودار

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

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

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

نسخه‌های مدل

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

رابط برنامه‌نویسی کاربردی Gemini

gemini-embedding-001

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

ورودی

متن

خروجی

جاسازی متن

محدودیت‌های توکن [*]

محدودیت توکن ورودی

۲,۰۴۸

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

انعطاف‌پذیر، پشتیبانی از: ۱۲۸ - ۳۰۷۲، توصیه شده: ۷۶۸، ۱۵۳۶، ۳۰۷۲

نسخه
برای جزئیات بیشتر ، الگوهای نسخه مدل را مطالعه کنید.
  • پایدار: gemini-embedding-001
آخرین به‌روزرسانی ژوئن ۲۰۲۵

برای مدل‌های منسوخ‌شده‌ی Embeddings، به صفحه‌ی Deprecations مراجعه کنید.

جاسازی‌های دسته‌ای

اگر تأخیر نگران‌کننده نیست، از مدل Gemini Embeddings با Batch API استفاده کنید. این امر امکان دستیابی به توان عملیاتی بسیار بالاتر را با ۵۰٪ قیمت پیش‌فرض Embedding فراهم می‌کند. مثال‌هایی در مورد نحوه شروع کار را در کتاب آشپزی Batch API بیابید.

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

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

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

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