הטמעות

‫Gemini API מציע מודלים להטמעת טקסט כדי ליצור הטמעות למילים, לביטויים, למשפטים ולקוד. הטמעות בסיסיות כאלה מאפשרות לבצע משימות מתקדמות של NLP, כמו חיפוש סמנטי, סיווג וקיבוץ לאשכולות, ומספקות תוצאות מדויקות יותר שמתחשבות בהקשר, בהשוואה לגישות שמבוססות על מילות מפתח.

יצירת מערכות Retrieval Augmented Generation‏ (RAG) היא תרחיש שימוש נפוץ להטמעות. הטמעות ממלאות תפקיד מרכזי בשיפור משמעותי של התפוקות של המודל, עם דיוק עובדתי משופר, קוהרנטיות ועושר הקשרי. הם מאחזרים ביעילות מידע רלוונטי ממאגרי ידע, שמיוצגים על ידי הטמעות, ואז מעבירים אותם כהקשר נוסף בהנחיית הקלט למודלים של שפה, כדי להנחות אותם ליצור תשובות מושכלות ומדויקות יותר.

לאפליקציות ברמת הארגון ולעומסי עבודה גדולים, מומלץ להשתמש במודלים של הטמעה ב-Vertex AI.

יצירת הטמעות

משתמשים ב-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 "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?"}]}
    }'

אפשר גם ליצור הטמעות לכמה נתחים בבת אחת על ידי העברתם כרשימה של מחרוזות.

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 "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 כדי לבדוק עד כמה מחרוזות טקסט דומות מבחינת המשמעות.

Python

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

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 -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 הטמעות שעברו אופטימיזציה להערכת הדמיון בין טקסטים. מערכות המלצות, זיהוי כפילויות
CLASSIFICATION הטמעה שעברה אופטימיזציה לסיווג טקסטים לפי תוויות מוגדרות מראש. ניתוח סנטימנטים, זיהוי ספאם
CLUSTERING הטמעה שעברה אופטימיזציה לקיבוץ טקסטים על סמך הדמיון ביניהם. ארגון מסמכים, מחקר שוק, זיהוי אנומליות
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‏, gemini-embedding-001, מאומן באמצעות טכניקת Matryoshka Representation Learning (MRL). הטכניקה הזו מלמדת מודל ללמוד הטמעות רב-ממדיות שיש להן פלחים ראשוניים (או קידומות) שגם הם שימושיים, גרסאות פשוטות יותר של אותם נתונים. אתם יכולים להשתמש בהטמעה מלאה בתלת-ממד (3,072 ממדים), או לקטום אותה לגודל קטן יותר בלי לפגוע באיכות כדי לחסוך בנפח האחסון. כדי לקבל את האיכות הכי טובה, מומלץ להשתמש בערכים הראשונים 768 ו-1536.

הפרמטר output_dimensionality מאפשר למשתמשים לשלוט בגודל של וקטור ההטמעה של הפלט. בחירה של ממדי פלט קטנים יותר יכולה לחסוך מקום אחסון ולשפר את יעילות החישוב עבור אפליקציות במורד הזרם, בלי לפגוע באיכות.

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

ההטמעה של המאפיין בגודל 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

תרחישים לדוגמה

הטמעות טקסט חיוניות למגוון תרחישי שימוש נפוצים ב-AI, כמו:

  • יצירה משופרת באמצעות אחזור (RAG): הטמעות משפרות את האיכות של הטקסט שנוצר על ידי אחזור ושילוב של מידע רלוונטי בהקשר של מודל.
  • אחזור מידע: אפשר להשתמש בהטמעות כדי לחפש טקסט או מסמכים שדומים מבחינה סמנטית, על סמך קטע טקסט שמוזן.

    הדרכה לחיפוש מסמכים

  • זיהוי אנומליות: השוואה בין קבוצות של הטמעות יכולה לעזור לזהות מגמות נסתרות או ערכים חריגים.

    הדרכה בנושא זיהוי אנומליות

  • סיווג: סיווג אוטומטי של טקסט על סמך התוכן שלו, כמו ניתוח סנטימנטים או זיהוי ספאם

    מדריך לסיווג

  • אשכולות: דרך יעילה להבין את הקשרים היא ליצור אשכולות והדמיות של ההטמעות.

    מדריך לתצוגה חזותית של אשכולות

אחסון הטמעות

כשמעבירים הטמעות לסביבת ייצור, נהוג להשתמש במסדי נתונים וקטוריים כדי לאחסן, ליצור אינדקס ולאחזר הטמעות רב-ממדיות בצורה יעילה. ‫Google Cloud מציע שירותי נתונים מנוהלים שאפשר להשתמש בהם למטרה הזו, כולל BigQuery, ‏ AlloyDB ו-Cloud SQL.

במדריכים הבאים מוסבר איך להשתמש במאגרי נתוני וקטורים של חברות אחרות עם Gemini Embedding.

מודלים להטמעה

מודל שזמין לכלל המשתמשים

מודלים מדור קודם

  • embedding-001 (יצא משימוש ב-14 באוגוסט 2025)
  • text-embedding-004 (יוצא משימוש ב-14 בינואר 2026)

שימוש בהטמעות

בניגוד למודלים של AI גנרטיבי שיוצרים תוכן חדש, מודל Gemini Embedding נועד רק להמיר את הפורמט של נתוני הקלט לייצוג מספרי. ‫Google אחראית לספק מודל הטמעה שממיר את הפורמט של נתוני הקלט לפורמט המספרי המבוקש, אבל המשתמשים אחראים באופן מלא לנתונים שהם מזינים ולהטמעות שמתקבלות. השימוש במודל Gemini Embedding הוא אישור לכך שיש לך את הזכויות הנדרשות על התוכן שהתכוונת להעלות. אסור ליצור תוכן שמפר את הקניין הרוחני או זכויות הפרטיות של אנשים אחרים. השימוש בשירות הזה כפוף למדיניות שלנו בנושא שימוש אסור ולתנאים ולהגבלות של Google.

איך מתחילים ליצור הטמעות

כדאי לעיין במדריך למתחילים בנושא הטמעות כדי להכיר את היכולות של המודל וללמוד איך להתאים אישית את ההטמעות ולהציג אותן בצורה חזותית.