בחירת סוג משימת הטמעה

מודלים של הטמעות ב-Gemini Enterprise Agent Platform יכולים ליצור הטמעות אופטימליות עבור סוגים שונים של משימות, כמו אחזור מסמכים, מענה על שאלות ואימות עובדות. סוגי המשימות הם תוויות שמבצעות אופטימיזציה של ההטמעות שהמודל יוצר על סמך תרחיש השימוש המיועד. במאמר הזה מוסבר איך לבחור את סוג המשימה האופטימלי להטמעות שלכם.

מודלים נתמכים

המודלים הבאים תומכים בסוגי המשימות:

  • text-embedding-005
  • text-multilingual-embedding-002
  • gemini-embedding-001

היתרונות של סוגי משימות

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

השאלות והתשובות לא דומות מבחינה סמנטית
איור 1. השאלות והתשובות לא דומות מבחינה סמנטית, כלומר לא ניתן לראות את הקשר ביניהן באופן אוטומטי בהטמעות.

לדוגמה, כשבונים מערכות Retrieval Augmented Generation (יצירה משולבת-אחזור, RAG), נהוג להשתמש בהטמעות טקסט ובחיפוש וקטורי כדי לבצע חיפוש דמיון. במקרים מסוימים, זה עלול להוביל לירידה באיכות החיפוש, כי השאלות והתשובות לא דומות מבחינה סמנטית. לדוגמה, לשאלה "למה השמיים כחולים?" ולתשובה "הפיזור של אור השמש גורם לצבע הכחול" יש משמעויות שונות בתור הצהרות, ולכן מערכת RAG לא תזהה אוטומטית את הקשר ביניהן, כפי שמוצג באיור 1. בלי סוגי משימות, מפתח RAG צריך לאמן את המודל כדי ללמוד את הקשר בין שאילתות לתשובות. לשם כך נדרשים כישורים וניסיון מתקדמים במדעי הנתונים, או להשתמש בהרחבת שאילתות שמבוססת על LLM או ב-HyDE, שיכולים להוביל לזמן אחזור גבוה ולעלויות גבוהות.

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

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

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

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

מודלים של הטמעה שמשתמשים בסוגי משימות תומכים בסוגי המשימות הבאים:

סוג המשימה תיאור
CLASSIFICATION המודל משמש ליצירת הטמעות שעברו אופטימיזציה לסיווג טקסטים לפי תוויות שהוגדרו מראש
CLUSTERING משמש ליצירת הטמעות שעברו אופטימיזציה לאשכול טקסטים על סמך הדמיון ביניהם
‫RETRIEVAL_DOCUMENT, RETRIEVAL_QUERY, QUESTION_ANSWERING וגם FACT_VERIFICATION המודל משמש ליצירת הטמעות שממוטבות לחיפוש מסמכים או לאחזור מידע
CODE_RETRIEVAL_QUERY משמש לאחזור בלוק קוד על סמך שאילתה בשפה טבעית, כמו sort an array או reverse a linked list. הטמעות של בלוקי הקוד מחושבות באמצעות RETRIEVAL_DOCUMENT.
SEMANTIC_SIMILARITY המודל הזה משמש ליצירת הטמעות שעברו אופטימיזציה להערכת הדמיון בין טקסטים. התכונה הזו לא מיועדת לתרחישי שימוש של אחזור.

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

הגדרת תרחיש השימוש של הטמעות

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

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

תרחישי שימוש באחזור
(פורמט אסימטרי)
סוג משימת שאילתה סוג המשימה במסמך
שאילתת חיפוש RETRIEVAL_QUERY RETRIEVAL_DOCUMENT
מענה לשאלות QUESTION_ANSWERING
בדיקת עובדות FACT_VERIFICATION
Code Retrieval CODE_RETRIEVAL_QUERY



תרחישי שימוש עם קלט יחיד
(פורמט סימטרי)
סוג משימת קלט
סיווג סיווג
סידור באשכולות אשכולות
דמיון סמנטי
(אין להשתמש בתרחישי שימוש של אחזור;
מיועד ל-STS)
SEMANTIC_SIMILARITY

סיווג טקסטים

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

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

הודעות טקסט לאשכול

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

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

תרחישים נוספים לשימוש באשכולות:

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

אחזור מידע מהודעות טקסט

כשמפתחים מערכת חיפוש או אחזור, עובדים עם שני סוגים של טקסט:

  • Corpus: אוסף המסמכים שרוצים לחפש בהם.
  • שאילתה: הטקסט שהמשתמש מספק כדי לחפש מידע במאגר.

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

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

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

סוגי המשימות הבאים משמשים לשאילתות:

  • ‫RETRIEVAL_QUERY: משתמשים בזה לשאילתת חיפוש רגילה שבה רוצים למצוא מסמכים רלוונטיים. המודל מחפש הטמעות של מסמכים שקרובות מבחינה סמנטית להטמעה של השאילתה.
  • ‫QUESTION_ANSWERING: משתמשים בזה כשכל השאילתות צפויות להיות שאלות תקינות, כמו 'למה השמיים כחולים?' או 'איך קושרים שרוכים?'.
  • ‫FACT_VERIFICATION: השתמשו בפונקציה הזו כשאתם רוצים לאחזר מסמך מהמאגר שלכם שמוכיח או מפריך טענה. לדוגמה, השאילתה 'apples grow underground' (תפוחים גדלים מתחת לאדמה) עשויה להחזיר מאמר על תפוחים, שבסופו של דבר יפריך את הטענה.

כדאי לעיין בתרחיש הבא מהעולם האמיתי שבו שאילתות אחזור יכולות להיות שימושיות:

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

אחזור קוד

‫text-embedding-005 תומך בסוג חדש של משימה CODE_RETRIEVAL_QUERY, שאפשר להשתמש בה כדי לאחזר בלוקים רלוונטיים של קוד באמצעות שאילתות בטקסט פשוט. כדי להשתמש בתכונה הזו, צריך להטמיע בלוקים של קוד באמצעות RETRIEVAL_DOCUMENT task type, ולהטמיע שאילתות טקסט באמצעות CODE_RETRIEVAL_QUERY.

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

לדוגמה:

REST

PROJECT_ID=PROJECT_ID

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/text-embedding-005:predict -d \
$'{
  "instances": [
    {
      "task_type": "CODE_RETRIEVAL_QUERY",
      "content": "Function to add two numbers"
    }
  ],
}'

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonההוראות להגדרה במאמר מדריך למתחילים של Agent Platform באמצעות ספריות לקוח.

כדי לבצע אימות ב-Agent Platform, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לסביבת פיתוח מקומית.

import os

from google import genai

# TODO (Developer) set the following environment variables.
PROJECT_ID = os.getenv("PROJECT_ID")
LOCATION_ID = os.getenv("LOCATION_ID", "us-central1")
MODEL_NAME = os.getenv("MODEL_NAME", "gemini-embedding-001")

QUERY_LINES = ["Retrieve a function that adds two numbers"]
CODE_RETRIEVAL_QUERY = "CODE_RETRIEVAL_QUERY"
RETRIEVAL_DOCUMENT = "RETRIEVAL_DOCUMENT"
SOURCE_CODE = [
    "def func(a, b): return a + b",
    "def func(a, b): return a - b",
    "def func(a, b): return (a ** 2 + b ** 2) ** 0.5",
]


def embed_test() -> (
    tuple[genai.types.EmbedContentResponse, genai.types.EmbedContentResponse]
):
    """Generates embeddings for source code indexing and code search queries using the Gemini API.

    Returns:
        tuple[genai.types.EmbedContentResponse, genai.types.EmbedContentResponse]: A tuple containing
        the final source code indexing response and search query embedding response.
    """
    client = genai.Client(enterprise=True, project=PROJECT_ID, location=LOCATION_ID)

    # Index Source Code
    for line in SOURCE_CODE:
        config = genai.types.EmbedContentConfig(task_type=RETRIEVAL_DOCUMENT)

        index_response = client.models.embed_content(
            model=MODEL_NAME, contents=line, config=config
        )

        print(
            f"Task: {RETRIEVAL_DOCUMENT} | "
            f"Vector length: {len(index_response.embeddings)} | "
            f"Preview: {index_response.embeddings[:3]}..."
        )

    # Embed Search Prompts
    for line in QUERY_LINES:
        config = genai.types.EmbedContentConfig(task_type=CODE_RETRIEVAL_QUERY)

        query_response = client.models.embed_content(
            model=MODEL_NAME, contents=line, config=config
        )

        print(
            f"Task: {CODE_RETRIEVAL_QUERY} | "
            f"Vector length: {len(query_response.embeddings)} | "
            f"Preview: {query_response.embeddings[:3]}..."
        )

    return index_response, query_response

הערכת הדמיון בין טקסטים

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

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

  • החתול ישן
  • החתול ישן

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

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

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

המגבלות הבאות חלות כשמשתמשים במודלים האלה:

  • אל תשתמשו במודלים האלה של תצוגה מקדימה במערכות קריטיות או במערכות ייצור.
  • הדגמים האלה זמינים רק בus-central1.
  • חיזויים באצווה לא אפשריים.
  • אין תמיכה בהתאמה אישית.

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