1. סקירה כללית
במגוון תחומים, מחקר פטנטים הוא כלי חיוני להבנת התחרות, לזיהוי הזדמנויות פוטנציאליות לרישוי או לרכישה ולמניעת הפרה של פטנטים קיימים.
מחקר פטנטים הוא נרחב ומורכב. סינון של מאמרים טכניים רבים כדי למצוא חידושים רלוונטיים הוא משימה קשה. חיפושים מסורתיים שמבוססים על מילות מפתח הם לרוב לא מדויקים ופוגעים בזמן. תקצירים ארוכים וטכניים, ולכן קשה להבין במהירות את הרעיון המרכזי. כתוצאה מכך, חוקרים עלולים לפספס פטנטים חשובים או לבזבז זמן על תוצאות לא רלוונטיות.
מטרה
בסדנת הקוד הזו נלמד איך להשתמש ב-Spanner וב-Gemini 1.0 Pro, ב-Embeddings וב-Vector Search כדי לזרז את תהליך החיפוש של פטנטים, להפוך אותו לאינטואיטיבי יותר ולשפר את הדיוק שלו.
מה תפַתחו
במסגרת שיעור ה-Lab הזה תלמדו:
- יצירת מכונה של Spanner
- טעינת מערכי נתונים ציבוריים של Google Patents
- יצירה של מודל מרחוק להטמעת טקסט באמצעות מודל Gemini 1.0 Pro
- יצירת תובנות גנרטיביות ממערך נתונים טעון
- יצירת הטמעות (embeddings) מהתובנות
- שליחת שאילתות חיפוש לפי דמיון למערך הנתונים
התרשים הבא מייצג את זרימת הנתונים והשלבים שקשורים להטמעה.
דרישות
2. לפני שמתחילים
יצירת פרויקט
- בדף לבחירת הפרויקט במסוף Google Cloud, בוחרים או יוצרים פרויקט ב-Google Cloud.
- הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט
- נשתמש ב-Cloud Shell, סביבת שורת פקודה שפועלת ב-Google Cloud ומגיעה עם bq טעון מראש. לוחצים על Activate Cloud Shell בחלק העליון של מסוף Google Cloud.
- אחרי שמתחברים ל-Cloud Shell, בודקים שכבר בוצע אימות ושהמזהה של הפרויקט מוגדר כפרויקט באמצעות הפקודה הבאה:
gcloud auth list
- מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהפקודה gcloud מכירה את הפרויקט.
gcloud config list project
- אם הפרויקט לא מוגדר, משתמשים בפקודה הבאה כדי להגדיר אותו:
gcloud config set project <YOUR_PROJECT_ID>
- מחפשים את Vertex AI API ו-Spanner API במסוף כדי לוודא שהם מופעלים. לחלופין, אפשר להשתמש בפקודה הבאה בטרמינל של 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.
- לוחצים על Create כדי ליצור את מסד הנתונים.
צור טבלה
- במסוף Google Cloud, פותחים את הדף Spanner.
- בוחרים את המכונה
spanner-vertex
מהרשימה. - בוחרים את מסד הנתונים
patents
. - בכרטיסייה Tables, לוחצים על Create Table. הדף של Spanner Studio ייפתח.
- לוחצים על כרטיסייה חדשה של עורך 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 Patents ב-BigQuery ישמשו כמערך הנתונים שלנו. נשתמש ב-Spanner Studio כדי להריץ את השאילתות שלנו. המאגר spanner-gemini-search כולל את הסקריפט insert_into_patents_data.sql
שאנחנו מריצים כדי לטעון את נתוני הפטנטים.
- במסוף Google Cloud, פותחים את הדף Spanner.
- בוחרים את המכונה
spanner-vertex
מהרשימה. - בוחרים את מסד הנתונים
patents
. - בתפריט הניווט, לוחצים על Spanner Studio. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
- לוחצים על כרטיסייה חדשה של עורך 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 Editor:
- בתפריט הניווט, לוחצים על Spanner Studio. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
- לוחצים על כרטיסייה חדשה של עורך 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. יצירת מודל מרחוק להטמעת טקסט
התוצאה של השלב הקודם כוללת סיכום מאוחד שכולל כותרת ומילות מפתח. אנחנו נמיר את התשובה הזו להטמעות (embeddings) שיעזרו לנו ליצור התאמות מתאימות כשנפעיל שאילתה. נשתמש ב-Text Embedding Gecko 003 model
מ-Vertex AI מרחוק מ-Spanner.
- בתפריט הניווט, לוחצים על Spanner Studio. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
- לוחצים על כרטיסייה חדשה של עורך 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 מוצגת רשימה של האובייקטים במסד הנתונים.
- לוחצים על כרטיסייה חדשה של עורך SQL כדי לפתוח כרטיסייה חדשה.
- מריצים את השאילתה הבאה:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- לוחצים על Run. תוצאות השאילתה מופיעות בטבלה Results.
יצירת תובנות
כדי לאכלס את הטבלה בתובנות גנרטיביות, מומלץ להשתמש באפליקציה שמשתמשת בשיטת הכתיבה באצווה או בשיטת המוטציות. בסדנת הקוד הזו, נריץ את שאילתה ה-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',
בשאילתה.
הערה: אם הרצתם את השאילתה בקטע של הפתרון החלופי שלמעלה במקום את ה-DDL של INSERT, עליכם לדלג על החלק הזה ולהריץ במקום זאת את שאילתת ה-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. יצירת הטמעות (embeddings) לתובנות שהמערכת יוצרת
אחרי שאנחנו מאכלסים את התובנות בטבלה, אנחנו יכולים להשתמש בהן כדי ליצור הטמעות (embeddings). הטמעות הנתונים האלה עוזרות לנו לא להסתמך על התאמות מדויקות של מילות מפתח, אלא ליצור תוצאות על סמך דמיון קונספטואלי.
הערה: אם הרצתם את השאילתה בקטע של הפתרון החלופי בשלב הקודם, אתם יכולים לדלג על השלב הזה ולעבור לשאילתה בקטע של הפתרון החלופי גם בשלב הזה.
מריצים את השאילתה הבאה כדי ליצור הטמעות (embeddings):
- בתפריט הניווט, לוחצים על Spanner Studio. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
- לוחצים על כרטיסייה חדשה של עורך SQL כדי לפתוח כרטיסייה חדשה.
- מריצים את השאילתה הבאה כדי ליצור את הטבלה
patents_data_embeddings
.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- לוחצים על Run. התוצאות של השאילתה מופיעות בטבלה Results.
- מריצים את השאילתה הבאה כדי ליצור הטמעות (embeddings).
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. הכנה לחיפוש וקטורים
עכשיו, אחרי שיצרנו הטמעות טקסט, אנחנו יכולים להכין את אפליקציית האינטרנט שלנו כך שתהיה מוכנה לבצע חיפושים של וקטורים של דמיון. בקודלאב הזה נוצר אפליקציית אינטרנט שכוללת את הלוגיקה להצגת תוצאות חיפוש על סמך יכולת החיפוש לפי דמיון של K-Nearest Neighbors. אפשר להשתמש במערך הנתונים המוכון הזה עם אפליקציית חיפוש כדי לראות איך תוצאות החיפוש נראות.
בקודלאב שלנו, נריץ שאילתת לדוגמה שמחפשת הנחיה, יוצרת תוצאות על סמך הקשר ומגבילה את התוצאות ל-10 רשומות.
מריצים את השאילתה הבאה:
- בתפריט הניווט, לוחצים על Spanner Studio. בחלונית Explorer מוצגת רשימה של האובייקטים במסד הנתונים.
- לוחצים על כרטיסייה חדשה של עורך 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 על המשאבים שבהם השתמשתם בפוסט הזה, פועלים לפי השלבים הבאים:
- נכנסים לדף Manage resources במסוף Google Cloud.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete. אם אתם לא רוצים למחוק את הפרויקט, פשוט מוחקים את המכונה שיצרתם ב-Spanner.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.
11. מזל טוב
מזל טוב! ביצעתם חיפוש דמיון באמצעות חיפוש וקטורי מובנה של Spanner. בנוסף, ראינו כמה קל לעבוד עם מודלים של הטמעה ומודלים של LLM כדי לספק פונקציונליות של AI גנרטיבי ישירות באמצעות SQL.
מה השלב הבא?
מידע נוסף על התכונה 'שכנות קרובות מדויקות' (חיפוש וקטור KNN) ב-Spanner זמין כאן: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
מידע נוסף על ביצוע תחזיות אונליין באמצעות SQL באמצעות השילוב של VertexAI ב-Spanner זמין כאן: https://cloud.google.com/spanner/docs/ml