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. לוחצים על Activate 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
מהרשימה. - בקטע 'מסדי נתונים' לוחצים על יצירת מסד נתונים.
- מגדירים את שם מסד הנתונים לפטנטים.
- לוחצים על Create כדי ליצור את מסד הנתונים.
צור טבלה
- במסוף Google Cloud, פותחים את הדף Spanner.
- בוחרים את המופע
spanner-vertex
מהרשימה. - בוחרים את מסד הנתונים
patents
. - בכרטיסייה טבלאות, לוחצים על יצירת טבלה. הדף של 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 פטנטים ב-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 הצהרות הוספה כדי לראות הדגמה מהירה של התרחיש לדוגמה הזה. - לוחצים על Run. תוצאות השאילתה מופיעות בטבלה תוצאות.
5. יצירת מודל מרחוק ל-Gemini 1.0 Pro
אחרי שנתוני הפטנטים ייטענו למסד הנתונים, אנחנו ניצור מודל מרוחק שמבוסס על מודל Gemini 1.0 Pro Vertex AI כדי ליצור קבוצה מסכמת של כותרות ומילות מפתח.
מריצים את פקודת ה-DDL הבאה בעורך Spanner Studio:
- בתפריט הניווט, לוחצים על 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. תוצאות השאילתה מופיעות בטבלה תוצאות.
6. יצירת מודל מרוחק להטמעות טקסט
התוצאה של השלב הקודם כוללת סיכום מאוחד המכיל כותרת ומילות מפתח. נמיר את התשובה הזו להטמעות שיעזרו לנו ליצור התאמות מתאימות כשנריץ שאילתה. נשתמש ב-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. תוצאות השאילתה מופיעות בטבלה תוצאות.
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. תוצאות השאילתה מופיעות בטבלה תוצאות.
יצירת תובנות
כדי לאכלס את הטבלה בתובנות גנרטיביות, מומלץ להשתמש באפליקציה שמשתמשת בשיטת הכתיבה באצווה או בשיטת מוטציות. כדי לאכלס את הטבלה, נריץ את שאילתת ה-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
));
הערה: אם בשלב הזה מופיעה שגיאה של חריגה מהמכסה (יכולה להיות במקרה של שולי רווח קטנים יחסית), אפשר לדלג על ההוספה ולהריץ רק את השאילתה שנבחרה בקטע לעקיפת הבעיה שבהמשך.
הקטע שעוסק בפתרונות אפשריים:
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 מוצגת רשימה של האובייקטים במסד הנתונים.
- פותחים כרטיסייה חדשה על ידי לחיצה על הכרטיסייה החדשה עורך SQL.
- מריצים את השאילתה הבאה כדי ליצור את הטבלה
patents_data_embeddings
.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- לוחצים על Run. תוצאות השאילתה מופיעות בטבלה תוצאות.
- מריצים את השאילתה הבאה כדי ליצור הטמעות.
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. תוצאות השאילתה מופיעות בטבלה תוצאות.
צפייה בתוצאות
הטבלה כוללת הטמעות של הכותרת וטקסט מופשט.
נריץ את השאילתה הבאה כדי לאמת את התוצאות:
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 לחיפוש דמיון. תוכלו להשתמש במערך הנתונים המוכן הזה באמצעות אפליקציית חיפוש כדי להמחיש את האופן שבו תוצאות החיפוש מופיעות.
ב-Codelab שלנו, נריץ שאילתה לדוגמה שמחפשת הנחיה, יוצרת תוצאות על סמך ההקשר ומגבילה את התוצאות ל-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. תוצאות השאילתה מופיעות בטבלה תוצאות.
הערה: אם השתמשתם בשאילתות בקטע לעקיפת הבעיה, עקב שגיאות מכסה באחת מהצהרות ההוספה המוקדמות ביותר, אתם יכולים לדלג על כל השלבים האחרים ולהריץ ישירות את השאילתה הבאה כדי לצפות בתוצאות של ביצוע חיפוש סמוך ביותר בהטמעות וקטורים במסד הנתונים של 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 כדי לספק פונקציונליות של בינה מלאכותית גנרטיבית ישירות באמצעות SQL.
מה השלב הבא?
מידע נוסף על התכונה 'השכנה הקרובה ביותר של Spanner' (חיפוש וקטור של KNN) זמין כאן: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
מידע נוסף על ביצוע חיזויים אונליין באמצעות SQL באמצעות שילוב Vertex AI של Spanner זמין כאן: https://cloud.google.com/spanner/docs/ml