הטמעות

Gemini API תומך בכמה מודלים של הטמעה (embedding) שיוצרים הטמעות למילים, לביטויים, לקוד ולמשפטים. לאחר מכן אפשר להשתמש במטמיעים שנוצרו למשימות כמו חיפוש סמנטי, סיווג טקסט וקיבוץ, ועוד משימות רבות.

מהם הטמעות (embeddings)?

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

הטמעות (embeddings) מתעדות את המשמעות הסמנטית ואת ההקשר, וכתוצאה מכך לטקסטים עם משמעויות דומות יש הטמעות 'קרובות' יותר. לדוגמה, למשפטים "I took my dog to the vet" ו-"I took my cat to the vet" יהיו הטמעות (embeddings) שנמצאות קרוב זו לזו במרחב הווקטור.

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

לפני שמתחילים

לפני שמפעילים את Gemini API, צריך לוודא שה-SDK שבחרתם מותקן ושהגדרתם מפתח Gemini API מוכן לשימוש.

יצירת הטמעות (embeddings)

משתמשים בשיטה embedContent כדי ליצור הטמעות טקסט:

from google import genai

client = genai.Client(api_key="GEMINI_API_KEY")

result = client.models.embed_content(
        model="gemini-embedding-exp-03-07",
        contents="What is the meaning of life?")

print(result.embeddings)
import { GoogleGenAI } from "@google/genai";

async function main() {

    const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-exp-03-07',
        contents: 'What is the meaning of life?',
    });

    console.log(response.embeddings);
}

main();
ctx := context.Background()

client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("GEMINI_API_KEY")))
if err != nil {
    log.Fatal(err)
}
defer client.Close()

em := client.EmbeddingModel("gemini-embedding-exp-03-07")
res, err := em.EmbedContent(ctx, genai.Text("What is the meaning of life?"))

if err != nil {
    panic(err)
}
fmt.Println(res.Embedding.Values)
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-exp-03-07:embedContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-exp-03-07",
     "content": {
     "parts":[{
     "text": "What is the meaning of life?"}]}
    }'

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

סוגי המשימות

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

סוגי המשימות מאפשרים ליצור הטמעות (embeddings) אופטימיות למשימות ספציפיות, וכך לחסוך זמן ועלויות ולשפר את הביצועים.

from google import genai
from google.genai import types

client = genai.Client(api_key="GEMINI_API_KEY")

result = client.models.embed_content(
        model="gemini-embedding-exp-03-07",
        contents="What is the meaning of life?",
        config=types.EmbedContentConfig(task_type="SEMANTIC_SIMILARITY")
)
print(result.embeddings)
import { GoogleGenAI } from "@google/genai";

async function main() {

    const ai = new GoogleGenAI({ apiKey: "GEMINI_API_KEY" });

    const response = await ai.models.embedContent({
        model: 'gemini-embedding-exp-03-07',
        contents: 'What is the meaning of life?',
        config: {
            taskType: "SEMANTIC_SIMILARITY",
        }
    });

    console.log(response.embeddings);
}

main();
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-exp-03-07:embedContent?key=$GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model": "models/gemini-embedding-exp-03-07",
     "content": {
     "parts":[{
     "text": "What is the meaning of life?"}]},
     "taskType": "SEMANTIC_SIMILARITY"
    }'

סוגי המשימות הנתמכים

סוג המשימה תיאור
SEMANTIC_SIMILARITY משמש ליצירת הטמעות (embeddings) שעברו אופטימיזציה להערכת הדמיון בין טקסטים.
CLASSIFICATION משמש ליצירת הטמעות (embeddings) שעברו אופטימיזציה כדי לסווג טקסטים לפי תוויות מוגדרות מראש.
CLUSTERING משמש ליצירת הטמעות (embeddings) שמותאמות באופן אופטימלי ליצירת אשכולות של טקסטים על סמך הדמיון ביניהם.
RETRIEVAL_DOCUMENT, RETRIEVAL_QUERY, QUESTION_ANSWERING וגם FACT_VERIFICATION משמש ליצירת הטמעות (embeddings) שעברו אופטימיזציה לחיפוש מסמכים או לאחזור מידע.
CODE_RETRIEVAL_QUERY משמש לאחזור בלוק קוד על סמך שאילתה בשפה טבעית, כמו מיון מערך או הפיכת רשימת קישורים. הטמעות של בלוקי הקוד מחושבות באמצעות RETRIEVAL_DOCUMENT.

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

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

הטמעת מודלים

ב-Gemini API יש שלושה מודלים ליצירת הטמעות (embeddings) של טקסט:

המאמרים הבאים

כדאי לעיין במחברת הקוד למתחילים בנושא הטמעות (embeddings).