1. סקירה כללית
במגוון תעשיות, מחקר פטנטים הוא כלי חשוב להבנת הסביבה התחרותית, לזיהוי הזדמנויות פוטנציאליות לרישוי או לרכישה ולמניעת הפרה של פטנטים קיימים.
מחקר פטנטים הוא נרחב ומורכב. החיפוש בין תקצירים טכניים רבים כדי למצוא חידושים רלוונטיים הוא משימה לא פשוטה. חיפושים מסורתיים שמבוססים על מילות מפתח הם לרוב לא מדויקים וגוזלים זמן. התקצירים ארוכים וטכניים, ולכן קשה להבין במהירות את הרעיון המרכזי. כתוצאה מכך, חוקרים עלולים לפספס פטנטים חשובים או לבזבז זמן על תוצאות לא רלוונטיות.
מטרה
ב-codelab הזה, נשתמש ב-Spanner, ב-Gemini 1.0 Pro, בהטמעות ובחיפוש וקטורי כדי להפוך את תהליך החיפוש של פטנטים למהיר, אינטואיטיבי ומדויק במיוחד.
מה תפַתחו
במסגרת ה-Lab הזה:
- יצירת מופע Spanner
- טעינה של מערכי נתונים ציבוריים של Google פטנטים
- יצירת מודל מרוחק להטמעות טקסט באמצעות מודל Gemini 1.0 Pro
- יצירת תובנות גנרטיביות מקבוצת נתונים שנטענה
- יצירת הטמעות מהתובנות
- הנפקת שאילתות חיפוש דמיון לקבוצת הנתונים
הדיאגרמה הבאה מייצגת את זרימת הנתונים והשלבים הכרוכים בהטמעה.

דרישות
2. לפני שמתחילים
יצירת פרויקט
- ב-מסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים או יוצרים פרויקט ב-Google Cloud.
- הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
- תשתמשו ב-Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud ומגיעה עם bq שנטען מראש. לוחצים על 'הפעלת Cloud Shell' בחלק העליון של מסוף Google Cloud.

- אחרי שמתחברים ל-Cloud Shell, אפשר לבדוק שכבר בוצע אימות ושהפרויקט מוגדר למזהה הפרויקט שלכם באמצעות הפקודה הבאה:
gcloud auth list
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שפקודת gcloud מכירה את הפרויקט.
gcloud config list project
- אם הפרויקט לא מוגדר, משתמשים בפקודה הבאה כדי להגדיר אותו:
gcloud config set project <YOUR_PROJECT_ID>
- מוודאים שממשקי ה-API של Vertex AI ו-Spanner מופעלים. כדי לעשות זאת, מחפשים אותם במסוף. לחלופין, אפשר להשתמש בפקודה הבאה בטרמינל של Cloud Shell:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
אפשרות נוספת היא להשתמש בקישור הזה.
אפשר לעיין במאמרי העזרה בנושא פקודות gcloud ושימוש בהן.
3. הכנת מסד הנתונים של Spanner
ניצור עכשיו מופע, מסד נתונים וטבלה ב-Spanner, שבהם ייטען מערך הנתונים של הפטנטים.
יצירת מופע Spanner
- יוצרים מופע Spanner בשם
spanner-vertex.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
יצירת מסד נתונים
- במסוף Google Cloud, פותחים את הדף Spanner.
- בוחרים את מופע
spanner-vertexמהרשימה. - בקטע Databases (מסדי נתונים), לוחצים על Create Database (יצירת מסד נתונים).
- מגדירים את שם מסד הנתונים ל-patents.
- לוחצים על יצירה כדי ליצור את מסד הנתונים.
צור טבלה
- במסוף Google Cloud, פותחים את הדף Spanner.
- בוחרים את מופע
spanner-vertexמהרשימה. - בוחרים את מסד הנתונים
patents. - בכרטיסייה Tables, לוחצים על Create Table. ייפתח הדף Spanner Studio.
- פותחים כרטיסייה חדשה על ידי לחיצה על New SQL editor tab (כרטיסייה חדשה של עורך SQL).
- מריצים את השאילתה הבאה:
CREATE TABLE patents_data (
id string(25), type string(25), number string(20), country string(2), date string(20), abstract string(300000), title string(100000),kind string(5), num_claims numeric, filename string(100), withdrawn numeric,
) PRIMARY KEY (id);
4. טעינת נתוני פטנטים למסד הנתונים
נשתמש ב-Google פטנטים Public Datasets ב-BigQuery כמערך הנתונים שלנו. נשתמש ב-Spanner Studio כדי להריץ את השאילתות. מאגר spanner-gemini-search כולל את סקריפט insert_into_patents_data.sql שנריץ כדי לטעון את נתוני הפטנטים.
- במסוף Google Cloud, פותחים את הדף Spanner.
- בוחרים את מופע
spanner-vertexמהרשימה. - בוחרים את מסד הנתונים
patents. - בתפריט הניווט, לוחצים על Spanner Studio. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
- פותחים כרטיסייה חדשה על ידי לחיצה על New SQL editor tab (כרטיסייה חדשה של עורך SQL).
- מעתיקים את הצהרת השאילתה
insertמהסקריפטinsert_into_patents_data.sqlבעורך. אפשר להעתיק 50-100 הצהרות insert כדי ליצור הדגמה מהירה של תרחיש השימוש הזה. - לוחצים על Run. התוצאות של השאילתה יופיעו בטבלה Results.
5. יצירת מודל מרוחק ל-Gemini 1.0 Pro
אחרי שנטען את נתוני הפטנטים למסד הנתונים, ניצור מודל מרוחק שמשתמש במודל Gemini 1.0 Pro Vertex AI כדי ליצור קבוצה מסוכמת של כותרות ומילות מפתח.
מריצים את פקודת ה-DDL הבאה בעורך של Spanner Studio:
- בתפריט הניווט, לוחצים על Spanner Studio. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
- פותחים כרטיסייה חדשה על ידי לחיצה על New SQL editor tab (כרטיסייה חדשה של עורך SQL).
- מריצים את השאילתה הבאה:
CREATE MODEL gemini_pro_model INPUT(
prompt STRING(MAX),
) OUTPUT(
content STRING(MAX),
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/gemini-pro',
default_batch_size = 1
);
- לוחצים על Run. התוצאות של השאילתה יופיעו בטבלה Results.
6. יצירת מודל מרוחק להטמעות טקסט
התוצאה של השלב הקודם כוללת סיכום מאוחד שמורכב מכותרת וממילות מפתח. אנחנו נמיר את התשובה הזו להטמעות שיעזרו לנו ליצור התאמות מתאימות כשנריץ שאילתה. נשתמש ב-Text Embedding Gecko 003 model מ-Vertex AI מרחוק מ-Spanner.
- בתפריט הניווט, לוחצים על Spanner Studio. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
- פותחים כרטיסייה חדשה על ידי לחיצה על New SQL editor tab (כרטיסייה חדשה של עורך SQL).
- מריצים את השאילתה הבאה:
CREATE MODEL text_embeddings INPUT(content STRING(MAX))
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/textembedding-gecko@003');
- לוחצים על Run. התוצאות של השאילתה יופיעו בטבלה Results.
7. יצירת תובנות גנרטיביות מתקצירי פטנטים
ניצור patents_data_gemini טבלה לאחסון תובנות גנרטיביות שייווצרו באמצעות מודל Gemini 1.5 Pro שיצרנו קודם.
יצירת הטבלה
- בתפריט הניווט, לוחצים על Spanner Studio. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
- פותחים כרטיסייה חדשה על ידי לחיצה על New SQL editor tab (כרטיסייה חדשה של עורך SQL).
- מריצים את השאילתה הבאה:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- לוחצים על Run. התוצאות של השאילתה יופיעו בטבלה Results.
יצירת תובנות
כדי לאכלס את הטבלה בתובנות גנרטיביות, מומלץ להשתמש באפליקציה שמשתמשת בשיטת הכתיבה באצווה או בשיטת המוטציות. במהלך ה-codelab הזה, נריץ את שאילתת ה-DDL הבאה עד 4 פעמים כדי לאכלס את הטבלה.
INSERT INTO patents_data_gemini (id, gemini_response)
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b where id not in (select id from patents_data_gemini) limit 50
));
הערה: אם בשלב הזה מופיעה השגיאה Quota Exceeded (חריגה מהמכסה) (יכול לקרות אם יש לכם יתרה קטנה של קרדיטים ללא תשלום), נסו לדלג על ההוספה ולהריץ רק את שאילתת הבחירה שבפתרון הבעיה שבהמשך.
Workaround section:
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))
עיון בתובנות
הטבלה כוללת תובנות שנוצרו עבור ההנחיה 'Identify the areas of work or keywords in this abstract', בשאילתה.
הערה: אם הרצתם את השאילתה של פתרון הבעיה שמופיעה למעלה במקום את ה-INSERT DDL, דלגו על החלק הזה והריצו במקום זאת את שאילתת ה-SELECT האחרונה בדף הזה.
כדי לאמת את התוצאות של התובנות, נריץ את השאילתה הבאה:
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
התוצאות שמתקבלות הן:

הערה: אם הפעלתם את השאילתה שבקטע 'פתרון עקיף', צריך להחליף את שם הטבלה בשאילתת הבחירה שלמעלה בשאילתה שבקטע 'פתרון עקיף'. לכן, במקום זאת, מריצים את הפקודה הבאה:
select title, abstract, gemini_response from patents_data a inner join (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))) b
on a.id = b.id;
התוצאה צריכה להיות זהה לתוצאה שמופיעה בצילום המסך שלמעלה.
8. יצירת הטמעות לתובנות שנוצרו
אחרי שממלאים את התובנות בטבלה, אפשר להשתמש בהן כדי ליצור הטמעות. ההטמעות האלה עוזרות לנו לא להסתמך על התאמות מדויקות למילות מפתח, אלא ליצור תוצאות שמבוססות על דמיון מושגי.
הערה: אם הפעלתם את השאילתה של פתרון הבעיה בשלב הקודם, אתם יכולים לדלג על השלב הזה ולהפעיל את השאילתה של פתרון הבעיה בשלב הזה.
מריצים את השאילתה הבאה כדי ליצור הטמעות:
- בתפריט הניווט, לוחצים על Spanner Studio. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
- פותחים כרטיסייה חדשה על ידי לחיצה על New SQL editor tab (כרטיסייה חדשה של עורך SQL).
- מריצים את השאילתה הבאה כדי ליצור את הטבלה
patents_data_embeddings.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- לוחצים על Run. התוצאות של השאילתה יופיעו בטבלה Results.
- מריצים את השאילתה הבאה כדי ליצור הטמעות.
INSERT INTO patents_data_embeddings (id, patents_embeddings)
SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM patents_data_gemini));
- לוחצים על Run. התוצאות של השאילתה יופיעו בטבלה Results.
התבוננות בתוצאות
הטבלה כוללת הטמעות שנוצרו עבור הכותרת והטקסט המופשט.
כדי לאמת את התוצאות, נריץ את השאילתה הבאה:
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
התוצאות שמתקבלות הן:

פתרון עקיף:
אם ביצעתם את הפתרון העקיף שמופיע בקטע אחר, השתמשו בשאילתה הזו:
select title, abstract, b.patents_embeddings from patents_data a inner join
(SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
)))))) b
on a.id = b.id;
התוצאות שיתקבלו צריכות להיות זהות לתוצאות שמוצגות בצילום המסך שלמעלה.
9. הכנה לחיפוש וקטורי
אחרי שיצרנו הטמעות טקסט, אפשר להכין את אפליקציית האינטרנט שלנו לביצוע חיפושים של וקטורים דומים. ב-codelab הזה אנחנו יוצרים אפליקציית אינטרנט שכוללת את הלוגיקה להצגת תוצאות חיפוש שמבוססות על יכולת החיפוש של K-Nearest Neighbors Similarity Search. אתם יכולים להשתמש במערך הנתונים המוכן הזה עם אפליקציית חיפוש כדי לראות איך תוצאות החיפוש ייראו.
ב-codelab הזה, נריץ שאילתה לדוגמה שמחפשת הנחיה, יוצרת תוצאות על סמך ההקשר ומגבילה את התוצאות ל-10 רשומות.
מריצים את השאילתה הבאה:
- בתפריט הניווט, לוחצים על Spanner Studio. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
- פותחים כרטיסייה חדשה על ידי לחיצה על New SQL editor tab (כרטיסייה חדשה של עורך SQL).
- מריצים את השאילתה הבאה כדי ליצור את הטבלה
patents_data_embeddings.
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join patents_data_gemini b on a.id = b.id
inner join patents_data_embeddings c on a.id = c.id
ORDER BY distance
LIMIT 10;
- לוחצים על Run. התוצאות של השאילתה יופיעו בטבלה Results.
הערה: אם השתמשתם בשאילתות שבפתרון העקיף, בגלל שגיאות במכסת המכסה באחת מהצהרות ההוספה המוקדמות ביותר, אתם יכולים לדלג על כל השלבים האחרים ולהריץ ישירות את השאילתה שלמטה כדי לראות את התוצאות של ביצוע חיפוש של השכן הקרוב ביותר בהטמעות וקטוריות במסד נתונים של Spanner:
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join (SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b
)))))) c on a.id = c.id
ORDER BY distance
LIMIT 2;
התבוננות בתוצאות
השאילתה הקודמת משתמשת בשיטה COSINE_DISTANCE כדי למצוא את 10 ההתאמות הקרובות ביותר להנחיה שלנו.
התוצאות שמתקבלות הן:

התוצאות שנוצרות קרובות מאוד מבחינת ההקשר להנחיה שהייתה חלק מהשאילתה.
10. הסרת המשאבים
כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם במאמר הזה:
- במסוף Google Cloud, עוברים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete. אם לא רוצים למחוק את הפרויקט, אפשר למחוק רק את המופע שיצרתם ב-Spanner.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
11. מזל טוב
ברכות! ביצעת בהצלחה חיפוש דמיון באמצעות חיפוש וקטורי מובנה ב-Spanner. בנוסף, ראיתם כמה קל לעבוד עם מודלים של הטמעה ו-LLM כדי לספק פונקציונליות של AI גנרטיבי ישירות באמצעות SQL.
מה השלב הבא?
מידע נוסף על התכונה 'חיפוש וקטורים של k השכנים הקרובים ביותר (KNN)' ב-Spanner זמין כאן: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
בקישור הבא אפשר לקרוא מידע נוסף על ביצוע תחזיות אונליין באמצעות SQL באמצעות השילוב של Spanner עם VertexAI: https://cloud.google.com/spanner/docs/ml