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 را نشان می دهد.
- آموزش های ChromaDB
- آموزش QDrant
- آموزش بافت
- پیچ و مهره آموزش
نسخه های مدل
اموال | توضیحات |
---|---|
کد مدل | Gemini API |
انواع داده های پشتیبانی شده | ورودی متن خروجی جاسازی متن |
[*] | محدودیت های رمزمحدودیت رمز ورودی 2,048 اندازه ابعاد خروجی انعطاف پذیر، پشتیبانی: 128 - 3072، توصیه شده: 768، 1536، 3072 |
نسخه |
|
آخرین به روز رسانی | ژوئن 2025 |
اطلاعیه استفاده مسئولانه
بر خ��اف مدلهای هوش مصنوعی مولد که محتوای جدید ایجاد میکنند، مدل Gemini Embedding فقط برای تبدیل قالب دادههای ورودی شما به یک نمایش عددی در نظر گرفته شده است. در حالی که Google مسئول ارائه یک مدل جاسازی است که قالب دادههای ورودی شما را به قالب عددی درخواستی تبدیل میکند، کاربران مسئولیت کامل دادههایی را که وارد میکنند و جاسازیهای حاصله بر عهده دارند. با استفاده از مدل Gemini Embedding، تأیید میکنید که حقوق لازم را برای هر محتوایی که آپلود میکنید، دارید. محتوایی تولید نکنید که مالکیت معنوی یا حقوق خصوصی دیگران را نقض کند. استفاده شما از این سرویس مشمول خط مشی استفاده ممنوع و شرایط خدمات Google است.
ساخت و ساز را با جاسازی شروع کنید
برای بررسی قابلیتهای مدل و یادگیری نحوه سفارشیسازی و تجسم جاسازیهای خود ، نوتبوک شروع سریع جاسازیها را بررسی کنید.