הטמעות

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

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

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

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

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

יצירת הטמעות (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?"}]}
    }'

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

סוגי המשימות

כשמפתחים מערכות של יצירת טקסט משופר לחיפוש (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).