ביצוע חיפוש סמנטי ויצירה משופרת באמצעות אחזור

במדריך הזה מוסבר תהליך יצירה ושימוש בהטמעות טקסט לחיפוש סמנטי וליצירה משולבת-אחזור (RAG).

במדריך הזה מוסבר איך לבצע את הפעולות הבאות:

  • יצירת מודל מרוחק של BigQuery ML על בסיס מודל הטמעה של Vertex AI.
  • שימוש במודל מרוחק עם הפונקציה AI.GENERATE_EMBEDDING כדי ליצור הטבעות מטקסט בטבלת BigQuery.
  • יצירת אינדקס וקטורי כדי ליצור אינדקס של ההטמעות ולשפר את הביצועים של החיפוש.
  • שימוש בפונקציית VECTOR_SEARCH עם ההטמעות כדי לחפש טקסט דומה.
  • כדי לבצע RAG, צריך ליצור טקסט באמצעות הפונקציה AI.GENERATE_TEXT, ולהשתמש בתוצאות של חיפוש וקטורי כדי להוסיף מידע לקלט של ההנחיה ולשפר את התוצאות.

במדריך הזה נעשה שימוש בטבלה הציבורית patents-public-data.google_patents_research.publications של BigQuery.

התפקידים הנדרשים

כדי להפעיל את המדריך הזה, אתם צריכים את התפקידים הבאים בניהול הזהויות והרשאות הגישה (IAM):

  • יצירה ושימוש במערכי נתונים, בחיבורים ובמודלים של BigQuery: אדמין של BigQuery‏ (roles/bigquery.admin).
  • נותנים הרשאות לחשבון השירות של החיבור: אדמין IAM של פרויקט (roles/resourcemanager.projectIamAdmin).

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

ההרשאות הנדרשות

  • יצירת מערך נתונים: bigquery.datasets.create
  • יצירה, הקצאה ושימוש בחיבור: bigquery.connections.*
  • הגדרת החיבור המוגדר כברירת מחדל: bigquery.config.*
  • מגדירים את ההרשאות לחשבון השירות: resourcemanager.projects.getIamPolicy ו- resourcemanager.projects.setIamPolicy
  • יצירת מודל והרצת הסקה:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

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

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

  • BigQuery ML: You incur costs for the data that you process in BigQuery.
  • Vertex AI: You incur costs for calls to the Vertex AI service that's represented by the remote model.

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

יכול להיות שמשתמשים חדשים ב- Google Cloud זכאים לתקופת ניסיון בחינם.

מידע נוסף על התמחור של BigQuery זמין במאמר תמחור ב-BigQuery במסמכי התיעוד של BigQuery.

מידע נוסף על התמחור של Vertex AI זמין בדף התמחור של Vertex AI.

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

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

יצירת מערך נתונים

יוצרים מערך נתונים ב-BigQuery לאחסון מודל ה-ML.

המסוף

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    לדף BigQuery

  2. בחלונית Explorer, לוחצים על שם הפרויקט.

  3. לוחצים על הצגת פעולות > יצירת מערך נתונים.

  4. בדף Create dataset, מבצעים את הפעולות הבאות:

    • בשדה Dataset ID (מזהה מערך הנתונים), מזינים bqml_tutorial.

    • בקטע Location type, בוחרים באפשרות במספר אזורים ואז באפשרות US (multiple regions in United States).

    • משאירים את שאר הגדרות ברירת המחדל כמו שהן ולוחצים על Create dataset (יצירת מערך נתונים).

BQ

כדי ליצור מערך נתונים חדש, משתמשים בפקודה bq mk עם הדגל --location. רשימה מלאה של הפרמטרים האפשריים זמינה במאמר בנושא הפקודה bq mk --dataset.

  1. יוצרים מערך נתונים בשם bqml_tutorial עם מיקום הנתונים שמוגדר ל-US ותיאור של BigQuery ML tutorial dataset:

    bq --location=US mk -d \
     --description "BigQuery ML tutorial dataset." \
     bqml_tutorial

    במקום להשתמש בדגל --dataset, הפקודה משתמשת בקיצור הדרך -d. אם לא מציינים את -d ואת --dataset, ברירת המחדל של הפקודה היא יצירת מערך נתונים.

  2. בודקים שמערך הנתונים נוצר:

    bq ls

API

מבצעים קריאה לשיטה datasets.insert עם משאב מוגדר של מערך נתונים.

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

יצירת המודל המרוחק ליצירת הטמעת טקסט

יוצרים מודל מרוחק שמייצג מודל אירוח של Vertex AI ליצירת הטמעות טקסט:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

    CREATE OR REPLACE MODEL `bqml_tutorial.embedding_model`
      REMOTE WITH CONNECTION DEFAULT
      OPTIONS (ENDPOINT = 'text-embedding-005');

    השאילתה מסתיימת אחרי כמה שניות, ואז אפשר לגשת למודל embedding_model דרך החלונית Explorer. מכיוון שהשאילתה משתמשת בהצהרה CREATE MODEL כדי ליצור מודל, אין תוצאות לשאילתה.

יצירת הטמעות טקסט

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

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

    CREATE OR REPLACE TABLE `bqml_tutorial.embeddings` AS
    SELECT * FROM AI.GENERATE_EMBEDDING(
      MODEL `bqml_tutorial.embedding_model`,
      (
        SELECT *, abstract AS content
        FROM `patents-public-data.google_patents_research.publications`
        WHERE LENGTH(abstract) > 0 AND LENGTH(title) > 0 AND country = 'Singapore'
      )
    )
    WHERE LENGTH(status) = 0;

השלמת השאילתה הזו תימשך כ-5 דקות.

יכול להיות שיצירת הטמעה באמצעות הפונקציה AI.GENERATE_EMBEDDING תיכשל בגלל מכסות של מודלים גדולים של שפה (LLM) ב-Vertex AI או בגלל שהשירות לא זמין. פרטי השגיאה מוחזרים בעמודה status. עמודה ריקה status מציינת שההטמעה נוצרה בהצלחה.

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

יצירת אינדקס וקטורי

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

כדי ליצור אינדקס וקטורי, משתמשים בהצהרה של שפת הגדרת נתונים (DDL): CREATE VECTOR INDEX

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את הצהרת ה-SQL הבאה:

    CREATE OR REPLACE VECTOR INDEX my_index
    ON `bqml_tutorial.embeddings`(embedding)
    OPTIONS(index_type = 'IVF',
      distance_type = 'COSINE',
      ivf_options = '{"num_lists":500}')

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

אימות המוּכנוּת של אינדקס הווקטורים

איכלוס אינדקס הווקטורים מתבצע באופן אסינכרוני. כדי לבדוק אם האינדקס מוכן לשימוש, אפשר להריץ שאילתה על התצוגה המפורטת INFORMATION_SCHEMA.VECTOR_INDEXES ולוודא שהערך בעמודה coverage_percentage גדול מ-0 והערך בעמודה last_refresh_time לא שווה ל-NULL.

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את הצהרת ה-SQL הבאה:

    SELECT table_name, index_name, index_status,
    coverage_percentage, last_refresh_time, disable_reason
    FROM `PROJECT_ID.bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES`

    מחליפים את PROJECT_ID במזהה הפרויקט.

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

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

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

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

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את הצהרת ה-SQL הבאה:

    SELECT query.query, base.publication_number, base.title, base.abstract
    FROM VECTOR_SEARCH(
      TABLE `bqml_tutorial.embeddings`, 'embedding',
      (
      SELECT embedding, content AS query
      FROM AI.GENERATE_EMBEDDING(
      MODEL `bqml_tutorial.embedding_model`,
      (SELECT 'improving password security' AS content))
      ),
      top_k => 5, options => '{"fraction_lists_to_search": 0.01}')

    הפלט אמור להיראות כך:

    +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
    |            query            | publication_number |                       title                     |                      abstract                   |
    +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
    | improving password security | SG-120868-A1       | Data storage device security method and a...    | Methods for improving security in data stora... |
    | improving password security | SG-10201610585W-A  | Passsword management system and process...      | PASSSWORD MANAGEMENT SYSTEM AND PROCESS ...     |
    | improving password security | SG-148888-A1       | Improved system and method for...               | IMPROVED SYSTEM AND METHOD FOR RANDOM...        |
    | improving password security | SG-194267-A1       | Method and system for protecting a password...  | A system for providing security for a...        |
    | improving password security | SG-120868-A1       | Data storage device security...                 | Methods for improving security in data...       |
    +-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
    

יצירת המודל המרוחק ליצירת טקסט

יוצרים מודל מרוחק שמייצג מודל אירוח של Vertex AI ליצירת טקסט:

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

    CREATE OR REPLACE MODEL `bqml_tutorial.text_model`
      REMOTE WITH CONNECTION DEFAULT
      OPTIONS (ENDPOINT = 'gemini-2.0-flash-001');

    השאילתה מסתיימת אחרי כמה שניות, ואז אפשר לגשת למודל text_model דרך החלונית Explorer. מכיוון שהשאילתה משתמשת בהצהרה CREATE MODEL כדי ליצור מודל, אין תוצאות לשאילתה.

יצירת טקסט עם תוצאות חיפוש וקטוריות

הזנת תוצאות החיפוש כהנחיות ליצירת טקסט באמצעות הפונקציה AI.GENERATE_TEXT

  1. במסוף Google Cloud , עוברים לדף BigQuery.

    כניסה ל-BigQuery

  2. בעורך השאילתות, מריצים את ההצהרה הבאה:

    SELECT result AS generated, prompt
    FROM AI.GENERATE_TEXT(
      MODEL `bqml_tutorial.text_model`,
      (
        SELECT CONCAT(
          'Propose some project ideas to improve user password security using the context below: ',
          STRING_AGG(
            FORMAT("patent title: %s, patent abstract: %s", base.title, base.abstract),
            ',\n')
          ) AS prompt,
        FROM VECTOR_SEARCH(
          TABLE `bqml_tutorial.embeddings`, 'embedding',
          (
            SELECT embedding, content AS query
            FROM AI.GENERATE_EMBEDDING(
              MODEL `bqml_tutorial.embedding_model`,
             (SELECT 'improving password security' AS content)
            )
          ),
        top_k => 5, options => '{"fraction_lists_to_search": 0.01}')
      ),
      STRUCT(600 AS max_output_tokens));

    הפלט אמור להיראות כך:

    +------------------------------------------------+------------------------------------------------------------+
    |            generated                           | prompt                                                     |
    +------------------------------------------------+------------------------------------------------------------+
    | These patents suggest several project ideas to | Propose some project ideas to improve user password        |
    | improve user password security.  Here are      | security using the context below: patent title: Active     |
    | some, categorized by the patent they build     | new password entry dialog with compact visual indication   |
    | upon:                                          | of adherence to password policy, patent abstract:          |
    |                                                | An active new password entry dialog provides a compact     |
    | **I. Projects based on "Active new password    | visual indication of adherence to password policies. A     |
    | entry dialog with compact visual indication of | visual indication of progress towards meeting all          |
    | adherence to password policy":**               | applicable password policies is included in the display    |
    |                                                | and updated as new password characters are being...        |
    +------------------------------------------------+------------------------------------------------------------+
     

הסרת המשאבים

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

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