Gemini API מציע מודלים להטמעת טקסט כדי ליצור הטמעות למילים, לביטויים, למשפטים ולקוד. משימות של הטמעה, כמו חיפוש סמנטי, סיווג וקיבוץ, שמספקות תוצאות מדויקות יותר שמודעות להקשר בהשוואה לגישות שמבוססות על מילות מפתח.
בניית מערכות של יצירה משופרת באמצעות אחזור (RAG) היא תרחיש שימוש נפוץ במוצרי AI. הטמעות ממלאות תפקיד מרכזי בשיפור משמעותי של התפוקות של המודל, עם שיפור בדיוק העובדתי, בקוהרנטיות ובעושר ההקשרי. אם אתם מעדיפים להשתמש בפתרון RAG מנוהל, יצרנו את הכלי File Search (חיפוש קבצים), שמקל על ניהול RAG ומוזיל את העלויות.
יצירת הטמעות
משתמשים ב-embedContent method כדי ליצור הטמעות טקסט:
Python
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)
JavaScript
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();
Go
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))
}
REST
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?"
}]
}
}'
אפשר גם ליצור הטמעות לכמה נתחים בבת אחת על ידי העברתם כרשימה של מחרוזות.
Python
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)
JavaScript
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();
Go
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))
}
REST
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 כדי לבדוק עד כמה מחרוזות טקסט דומות מבחינת המשמעות.
Python
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)
JavaScript
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();
Go
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)
}
}
}
REST
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?"
}
]
}
}'
כשמריצים את קטעי הקוד, אפשר לראות עד כמה חלקי הטקסט השונים דומים זה לזה.
סוגי המשימות הנתמכים
| סוג המשימה | תיאור | דוגמאות |
|---|---|---|
| SEMANTIC_SIMILARITY | הטמעות שעברו אופטימיזציה להערכת הדמיון בין טקסטים. | מערכות המלצות, זיהוי כפילויות |
| CLASSIFICATION | הטמעה שעברה אופטימיזציה לסיווג טקסטים לפי תוויות מוגדרות מראש. | ניתוח סנטימנטים, זיהוי ספאם |
| CLUSTERING | הטמעות שעברו אופטימיזציה לקיבוץ טקסטים על סמך הדמיון ביניהם. | ארגון מסמכים, מחקר שוק, זיהוי אנומליות |
| RETRIEVAL_DOCUMENT | הטמעות שעברו אופטימיזציה לחיפוש מסמכים. | יצירת אינדקס של מאמרים, ספרים או דפי אינטרנט לחיפוש. |
| RETRIEVAL_QUERY |
הטמעה שעברה אופטימיזציה לשאילתות חיפוש כלליות.
משתמשים ב-RETRIEVAL_QUERY לשאילתות וב-RETRIEVAL_DOCUMENT למסמכים לאחזור.
|
חיפוש בהתאמה אישית |
| CODE_RETRIEVAL_QUERY |
Embeddings שעברו אופטימיזציה לאחזור של בלוקים של קוד על סמך שאילתות בשפה טבעית.
משתמשים ב-CODE_RETRIEVAL_QUERY לחיפושים וב-RETRIEVAL_DOCUMENT לבלוקים של קוד לאחזור.
|
הצעות קוד וחיפוש |
| QUESTION_ANSWERING |
Embeddings לשאלות במערכת למתן תשובות לשאלות, שעברו אופטימיזציה למציאת מסמכים שנותנים תשובה לשאלה.
משתמשים ב-QUESTION_ANSWERING לשאלות וב-RETRIEVAL_DOCUMENT למסמכים לאחזור.
|
תיבת צ'אט |
| FACT_VERIFICATION |
הטמעה של הצהרות שצריך לאמת, עם אופטימיזציה לאחזור מסמכים שמכילים ראיות שתומכות בהצהרה או מפריכות אותה.
משתמשים ב-FACT_VERIFICATION לטקסט היעד וב-RETRIEVAL_DOCUMENT למסמכים שאותם רוצים לאחזר
|
מערכות אוטומטיות לבדיקת עובדות |
שליטה בגודל ההטמעה
מודל ההטמעה של Gemini, gemini-embedding-001, מאומן באמצעות הטכניקה של Matryoshka Representation Learning (MRL), שמאפשרת למודל ללמוד הטמעות רב-ממדיות עם פלחים ראשוניים (או קידומות) שגם הם שימושיים, וגרסאות פשוטות יותר של אותם נתונים.
משתמשים בפרמטר output_dimensionality כדי לשלוט בגודל של וקטור ההטמעה של הפלט. בחירה של ממדי פלט קטנים יותר יכולה לחסוך מקום באחסון ולשפר את יעילות החישוב עבור אפליקציות במורד הזרם, בלי לפגוע באיכות. כברירת מחדל, הפלט הוא הטמעה של 3,072 ממדים, אבל אפשר לקצר אותה לגודל קטן יותר בלי לפגוע באיכות כדי לחסוך בנפח האחסון. מומלץ להשתמש בממדי פלט של 768, 1,536 או 3,072.
Python
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}")
JavaScript
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();
Go
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)
}
REST
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
שמירה על האיכות במאפיינים קטנים יותר
ההטמעה של 3,072 המאפיינים מנורמלת. הטמעות מנורמלות מניבות דמיון סמנטי מדויק יותר כי הן משוות את כיוון הווקטור ולא את הגודל שלו. לגבי מאפיינים אחרים, כולל 768 ו-1536, צריך לבצע נורמליזציה של ההטמעות באופן הבא:
Python
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 |
תרחישים לדוגמה
הטמעות טקסט חיוניות למגוון תרחישי שימוש נפוצים ב-AI, כמו:
- יצירה משופרת באמצעות אחזור (RAG): הטמעות משפרות את האיכות של הטקסט שנוצר על ידי אחזור ושילוב של מידע רלוונטי בהקשר של מודל.
אחזור מידע: חיפוש הטקסט או המסמכים הכי דומים מבחינה סמנטית בהינתן קטע טקסט קלט.
דירוג מחדש של תוצאות החיפוש: מתן עדיפות לפריטים הרלוונטיים ביותר על ידי ניתוח סמנטי של התוצאות הראשוניות בהשוואה לשאילתה.
זיהוי אנומליות: השוואה בין קבוצות של הטמעות יכולה לעזור לזהות מגמות נסתרות או חריגות.
סיווג: סיווג אוטומטי של טקסט על סמך התוכן שלו, כמו ניתוח סנטימנטים או זיהוי ספאם
אשכולות: כדי להבין טוב יותר את הקשרים המורכבים, אפשר ליצור אשכולות והמחשות ויזואליות של ההטמעות.
אחסון הטמעות
כשמעבירים הטמעות לייצור, נהוג להשתמש במסדי נתונים וקטוריים כדי לאחסן, ליצור אינדקס ולאחזר הטמעות רב-ממדיות בצורה יעילה. Google Cloud מציע שירותי נתונים מנוהלים שאפשר להשתמש בהם למטרה הזו, כולל BigQuery, AlloyDB ו-Cloud SQL.
במדריכים הבאים מוסבר איך להשתמש במסדי נתונים וקטוריים של צד שלישי עם Gemini Embedding.
גרסאות של מודלים
| נכס | תיאור |
|---|---|
| קוד הדגם |
Gemini API
|
| סוגי נתונים נתמכים |
קלט טקסט פלט הטמעות של טקסט |
| מגבלות על טוקנים[*] |
מגבלת טוקנים של קלט 2,048 גודל מאפיין הפלט גמיש, תומך בערכים: 128 עד 3072, מומלץ: 768, 1536, 3072 |
| גרסאות |
|
| העדכון האחרון | יוני 2025 |
למידע על מודלים של הטמעות שהוצאו משימוש, אפשר לעבור לדף הוצאות משימוש.
הטמעות באצווה
אם זמן האחזור לא חשוב לכם, נסו להשתמש במודל Gemini Embeddings עם Batch API. השינוי הזה מאפשר תפוקה גבוהה בהרבה במחיר שהוא 50% ממחיר ברירת המחדל של Embedding. במדריך Batch API cookbook יש דוגמאות שיעזרו לכם להתחיל.
הודעה על שימוש אחראי
בניגוד למודלים של AI גנרטיבי שיוצרים תוכן חדש, מודל Gemini Embedding נועד רק להמיר את פורמט נתוני הקלט לייצוג מספרי. Google אחראית לספק מודל הטמעה שממיר את הפורמט של נתוני הקלט לפורמט המספרי המבוקש, אבל המשתמשים אחראים באופן מלא לנתונים שהם מזינים ולהטמעות שמתקבלות. השימוש במודל Gemini Embedding מבטא את האישור שלכם לכך שיש לכם את הזכויות הנדרשות על התוכן שהעליתם. אסור ליצור תוכן שמפר את זכויות הקניין הרוחני או זכויות הפרטיות של אחרים. השימוש בשירות הזה כפוף למדיניות שלנו בנושא שימוש אסור ולתנאים ולהגבלות של Google.
איך מתחילים ליצור הטמעות
כדאי לעיין במדריך למתחילים בנושא הטמעות (embeddings) כדי להכיר את היכולות של המודל וללמוד איך להתאים אישית את ההטמעות ולהציג אותן בצורה ויזואלית.