1. ภาพรวม
การศึกษาเกี่ยวกับสิทธิบัตรเป็นเครื่องมือสําคัญในการทําความเข้าใจภาพรวมการแข่งขัน ระบุโอกาสในการขอใบอนุญาตหรือซื้อกิจการ และหลีกเลี่ยงการละเมิดสิทธิบัตรที่มีอยู่ ในอุตสาหกรรมต่างๆ
การวิจัยเกี่ยวกับสิทธิบัตรนั้นกว้างขวางและสลับซับซ้อน การคัดสรรข้อมูลสรุปทางเทคนิคจำนวนมหาศาลเพื่อค้นหานวัตกรรมที่เกี่ยวข้องเป็นงานที่ยาก การค้นหาแบบดั้งเดิมที่อิงตามคีย์เวิร์ดมักไม่ถูกต้องและใช้เวลานาน ข้อมูลสรุปมีความยาวและเป็นเรื่องเทคนิค ทำให้เข้าใจแนวคิดหลักได้ยาก ซึ่งอาจทำให้นักวิจัยพลาดสิทธิบัตรสำคัญหรือเสียเวลากับผลการค้นหาที่ไม่เกี่ยวข้อง
วัตถุประสงค์
ในโค้ดแล็บนี้ เราจะพยายามทําให้กระบวนการค้นหาสิทธิบัตรรวดเร็วขึ้น ใช้งานง่ายขึ้น และแม่นยําอย่างไม่น่าเชื่อด้วยการใช้ Spanner และฟีเจอร์การฝังและ Vector Search ใน Gemini 1.0 Pro
สิ่งที่คุณจะสร้าง
คุณจะทําสิ่งต่อไปนี้ได้
- สร้างอินสแตนซ์ Spanner
- โหลดชุดข้อมูลสาธารณะของ Google Patents
- สร้างโมเดลระยะไกลสําหรับการฝังข้อความด้วยโมเดล Gemini 1.0 Pro
- สร้างข้อมูลเชิงลึกแบบ Generative จากชุดข้อมูลที่โหลด
- สร้างการฝังจากข้อมูลเชิงลึก
- ออกคําค้นหาที่คล้ายกันกับชุดข้อมูล
แผนภาพต่อไปนี้แสดงขั้นตอนและขั้นตอนต่างๆ ของข้อมูลที่เกี่ยวข้องกับการใช้งาน
ข้อกำหนด
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>
- ตรวจสอบว่าได้เปิดใช้ Vertex AI และ Spanner API แล้วโดยค้นหา 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
สร้างฐานข้อมูล
- เปิดหน้า Spanner ในคอนโซล Google Cloud
- เลือกอินสแตนซ์
spanner-vertex
จากรายการ - ในส่วนฐานข้อมูล ให้คลิกสร้างฐานข้อมูล
- ตั้งชื่อฐานข้อมูลเป็น patents
- คลิกสร้างเพื่อสร้างฐานข้อมูล
สร้างตาราง
- เปิดหน้า Spanner ในคอนโซล Google Cloud
- เลือกอินสแตนซ์
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 Patents ใน BigQuery เป็นชุดข้อมูล เราจะใช้ Spanner Studio เพื่อเรียกใช้การค้นหา ที่เก็บข้อมูล spanner-gemini-search มีสคริปต์ insert_into_patents_data.sql
ที่เราจะใช้โหลดข้อมูลสิทธิบัตร
- เปิดหน้า Spanner ในคอนโซล Google Cloud
- เลือกอินสแตนซ์
spanner-vertex
จากรายการ - เลือกฐานข้อมูล
patents
- ในเมนูการนำทาง ให้คลิก Spanner Studio แผง Explorer จะแสดงรายการออบเจ็กต์ในฐานข้อมูล
- เปิดแท็บใหม่โดยคลิกแท็บเครื่องมือแก้ไข SQL ใหม่
- คัดลอกคำสั่งการค้นหา
insert
จากสคริปต์insert_into_patents_data.sql
ในตัวแก้ไข คุณสามารถคัดลอกคำสั่งแทรก 50-100 รายการเพื่อสาธิตกรณีการใช้งานนี้อย่างรวดเร็ว - คลิกเรียกใช้ ผลการค้นหาจะปรากฏในตารางผลลัพธ์
5. สร้างโมเดลระยะไกลสำหรับ Gemini 1.0 Pro
หลังจากโหลดข้อมูลสิทธิบัตรลงในฐานข้อมูลแล้ว เราจะสร้างโมเดลระยะไกลที่ใช้โมเดล Vertex AI ของ Gemini 1.0 Pro เพื่อสร้างชุดชื่อและคีย์เวิร์ดแบบสรุป
เรียกใช้คำสั่ง 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
);
- คลิกเรียกใช้ ผลการค้นหาจะปรากฏในตารางผลลัพธ์
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');
- คลิกเรียกใช้ ผลการค้นหาจะปรากฏในตารางผลลัพธ์
7. สร้างข้อมูลเชิงลึกที่ทำให้เกิดแนวคิดจากข้อมูลสรุปเกี่ยวกับสิทธิบัตร
เราจะสร้างตาราง patents_data_gemini
เพื่อจัดเก็บข้อมูลเชิงลึกแบบ Generative ที่จะสร้างโดยใช้โมเดล Gemini 1.5 Pro ที่สร้างไว้ก่อนหน้านี้
สร้างตาราง
- ในเมนูการนำทาง ให้คลิก Spanner Studio แผง Explorer จะแสดงรายการออบเจ็กต์ในฐานข้อมูล
- เปิดแท็บใหม่โดยคลิกแท็บเครื่องมือแก้ไข SQL ใหม่
- เรียกใช้คําค้นหาต่อไปนี้
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- คลิกเรียกใช้ ผลการค้นหาจะปรากฏในตารางผลลัพธ์
สร้างข้อมูลเชิงลึก
หากต้องการป้อนข้อมูลตารางด้วยข้อมูลเชิงลึกแบบ Generative เราขอแนะนําให้ใช้แอปพลิเคชันที่ใช้วิธีการเขียนแบบเป็นกลุ่มหรือการกลายพันธุ์ สําหรับโค้ดแล็บนี้ เราจะเรียกใช้การค้นหา 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);
- คลิกเรียกใช้ ผลการค้นหาจะปรากฏในตารางผลลัพธ์
- เรียกใช้คําค้นหาต่อไปนี้เพื่อสร้างการฝัง
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));
- คลิกเรียกใช้ ผลการค้นหาจะปรากฏในตารางผลลัพธ์
ดูผลลัพธ์
ตารางนี้ประกอบด้วยการฝังที่สร้างขึ้นสำหรับชื่อและข้อความที่ตัดตอนมา
มาเรียกใช้คําค้นหาต่อไปนี้เพื่อยืนยันผลลัพธ์กัน
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 ในการค้นหาแบบคล้ายกัน คุณสามารถใช้ชุดข้อมูลที่เตรียมไว้นี้กับแอปการค้นหาเพื่อแสดงภาพว่าผลการค้นหาจะปรากฏอย่างไร
สําหรับ 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;
- คลิกเรียกใช้ ผลการค้นหาจะปรากฏในตารางผลลัพธ์
หมายเหตุ: หากใช้การค้นหาในส่วนวิธีแก้ปัญหาเนื่องจากข้อผิดพลาดเกี่ยวกับโควต้าในคำสั่งแทรกรายการแรกสุด คุณสามารถข้ามขั้นตอนอื่นๆ ทั้งหมดและเรียกใช้การค้นหาด้านล่างโดยตรงเพื่อดูผลลัพธ์ของการดำเนินการค้นหาเพื่อนบ้านที่ใกล้ที่สุดในเวกเตอร์การฝังในฐานข้อมูล 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 ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ หากไม่ต้องการลบโปรเจ็กต์ ให้ลบอินสแตนซ์ที่คุณสร้างขึ้นใน Spanner
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์
11. ขอแสดงความยินดี
ขอแสดงความยินดี คุณได้ทำการค้นหาความคล้ายคลึงโดยใช้การค้นหาเวกเตอร์ในตัวของ Spanner เรียบร้อยแล้ว นอกจากนี้ คุณยังได้เห็นว่าการทํางานกับโมเดลการฝังและ LLM เพื่อมอบฟังก์ชัน Generative AI โดยตรงโดยใช้ SQL นั้นง่ายเพียงใด
ขั้นตอนถัดไปคือ
ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์เพื่อนบ้านที่ใกล้ที่สุดแบบตรงทั้งหมด (การค้นหาเวกเตอร์ KNN) ของ Spanner ได้ที่ https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
นอกจากนี้ คุณยังอ่านข้อมูลเพิ่มเติมเกี่ยวกับวิธีทําการคาดการณ์ออนไลน์ด้วย SQL โดยใช้การผสานรวม VertexAI ของ Spanner ได้ที่นี่ https://cloud.google.com/spanner/docs/ml