เกี่ยวกับ Codelab นี้
1 ภาพรวม
การวิจัยสิทธิบัตรเป็นเครื่องมือสำคัญในการทำความเข้าใจภาพรวมทางการแข่งขัน ระบุโอกาสในการออกใบอนุญาตหรือซื้อกิจการ และหลีกเลี่ยงการละเมิดสิทธิบัตรที่มีอยู่
การวิจัยด้านสิทธิบัตรนั้นกว้างขวางและซับซ้อน การเสาะหาบทคัดย่อทางเทคนิคจำนวนนับไม่ถ้วนเพื่อค้นหานวัตกรรมที่เกี่ยวข้องเป็นงานที่ท้าทาย การค้นหาตามคีย์เวิร์ดแบบเดิมมักไม่ถูกต้องและใช้เวลานาน บทคัดย่อจะมีความยาวมากและเป็นเทคนิค ทำให้ยากที่จะเข้าใจแนวคิดหลักได้อย่างรวดเร็ว ซึ่งอาจทำให้นักวิจัยพลาดสิทธิบัตรหลักหรือเสียเวลากับผลลัพธ์ที่ไม่เกี่ยวข้อง
วัตถุประสงค์
ใน Codelab นี้ เราจะพยายามทำให้กระบวนการค้นหาสิทธิบัตรนี้รวดเร็วขึ้น ง่ายขึ้น และแม่นยำอย่างไม่น่าเชื่อ โดยการใช้ประโยชน์จาก Spanner และแทนที่ Gemini 1.0 Pro, การฝัง และ การค้นหาเวกเตอร์ ไว้ในตัว
สิ่งที่คุณจะสร้าง
ในห้องทดลองนี้ คุณจะทำสิ่งต่อไปนี้ได้
- สร้างอินสแตนซ์ Spanner
- โหลดชุดข้อมูลสาธารณะของ Google Patents
- สร้างโมเดลระยะไกลสำหรับการฝังข้อความด้วยโมเดล Gemini 1.0 Pro
- สร้าง Generative Insights จากชุดข้อมูลที่โหลด
- สร้างการฝังจากข้อมูลเชิงลึก
- ออกคำค้นหาความคล้ายคลึงกันกับชุดข้อมูล
แผนภาพต่อไปนี้แสดงโฟลว์ของข้อมูลและขั้นตอนที่เกี่ยวข้องในการใช้งาน
ข้อกำหนด
2 ก่อนเริ่มต้น
สร้างโปรเจ็กต์
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google 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 โดยค้นหาในคอนโซล นอกจากนี้คุณยังใช้คำสั่งต่อไปนี้ในเทอร์มินัล 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
- สร้างอินสแตนซ์ของ Spaner ที่มีชื่อว่า
spanner-vertex
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
สร้างฐานข้อมูล
- เปิดหน้า Spanner ในคอนโซล Google Cloud
- เลือกอินสแตนซ์
spanner-vertex
จากรายการ - ในส่วนฐานข้อมูล ให้คลิกสร้างฐานข้อมูล
- ตั้งชื่อฐานข้อมูลเป็นสิทธิบัตร
- คลิกสร้างเพื่อสร้างฐานข้อมูล
สร้างตาราง
- เปิดหน้า 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
- คลิก Spaner Studio ในเมนูการนำทาง แผงExplorerจะแสดงรายการออบเจ็กต์ในฐานข้อมูล
- เปิดแท็บใหม่โดยคลิกแท็บเครื่องมือแก้ไข SQL ใหม่
- คัดลอกคำสั่งการค้นหา
insert
จากสคริปต์insert_into_patents_data.sql
ในตัวแก้ไข คุณสามารถคัดลอกคำสั่งแทรก 50-100 รายการเพื่อดูการสาธิตการใช้งานสั้นๆ นี้ - คลิกเรียกใช้ ผลการค้นหาจะปรากฏในตารางผลลัพธ์
5 สร้างโมเดลระยะไกลสำหรับ Gemini 1.0 Pro
หลังจากโหลดข้อมูลสิทธิบัตรไปยังฐานข้อมูลแล้ว เราจะสร้างโมเดลระยะไกลที่ใช้โมเดล Gemini 1.0 Pro Vertex AI เพื่อสร้างชุดสรุปชื่อและคีย์เวิร์ด
เรียกใช้คำสั่ง DDL ต่อไปนี้ในตัวแก้ไข Spanner Studio
- คลิก Spaner 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
- คลิก Spaner 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 สร้าง Generative Insights จาก Patent Abstracts
เราจะสร้างตาราง patents_data_gemini
เพื่อจัดเก็บ Generative Insights ที่เราจะสร้างโดยใช้โมเดล Gemini 1.5 Pro ที่เราสร้างไว้ก่อนหน้านี้
สร้างตาราง
- คลิก Spaner Studio ในเมนูการนำทาง แผงExplorerจะแสดงรายการออบเจ็กต์ในฐานข้อมูล
- เปิดแท็บใหม่โดยคลิกแท็บเครื่องมือแก้ไข SQL ใหม่
- เรียกใช้การค้นหาต่อไปนี้
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- คลิกเรียกใช้ ผลการค้นหาจะปรากฏในตารางผลลัพธ์
สร้างข้อมูลเชิงลึก
หากต้องการป้อนข้อมูลในตารางด้วย Generative Insights เราขอแนะนำให้คุณใช้แอปพลิเคชันที่ใช้วิธีการเขียนแบบกลุ่มหรือการกลายพันธุ์ สำหรับ 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
));
หมายเหตุ: หากคุณได้รับข้อผิดพลาด "เกินโควต้า" ในขั้นตอนนี้ (เป็นไปได้ในกรณีของเครดิตฟรีที่มีส่วนต่างกำไรน้อย) ให้ลองข้ามการแทรก แล้วเรียกใช้เฉพาะการค้นหาที่เลือกในส่วนวิธีแก้ปัญหาด้านล่าง
ส่วนวิธีแก้ปัญหา:
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 สร้างการฝังสำหรับข้อมูลเชิงลึกที่สร้างขึ้น
หลังจากใส่ข้อมูลเชิงลึกในตารางแล้ว เราสามารถใช้ข้อมูลเชิงลึกเหล่านี้ในการสร้างการฝังได้ การฝังเหล่านี้ช่วยเราโดยไม่ต้องอาศัยการทำงานของคีย์เวิร์ดแบบตรงทั้งหมด แต่ช่วยสร้างผลลัพธ์ตามความคล้ายคลึงเชิงแนวคิด
หมายเหตุ: หากคุณเรียกใช้การค้นหาส่วนวิธีแก้ปัญหาในขั้นตอนก่อนหน้า คุณสามารถข้ามขั้นตอนนี้และย้ายไปที่การค้นหาส่วนวิธีแก้ปัญหาในขั้นตอนนี้ได้เช่นกัน
เรียกใช้การค้นหาต่อไปนี้เพื่อสร้างการฝัง
- คลิก SPANer 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 เตรียมพร้อมสำหรับการค้นหาเวกเตอร์
ตอนนี้เราได้สร้างการฝังข้อความแล้ว เราสามารถเตรียมเว็บแอปพลิเคชันให้พร้อมสำหรับการค้นหาเวกเตอร์ความคล้ายคลึงกัน ใน Codelab นี้ เราจะสร้างเว็บแอปพลิเคชันที่รวมตรรกะในการแสดงผลการค้นหาตามความสามารถในการค้นหาความคล้ายคลึงกันของ K-Nearest Neighbors คุณสามารถใช้ชุดข้อมูลที่เตรียมไว้นี้กับแอปค้นหาเพื่อแสดงภาพว่าผลการค้นหาจะปรากฏอย่างไร
สำหรับ Codelab เราจะเรียกใช้คำค้นหาตัวอย่างที่จะค้นหาพรอมต์ สร้างผลลัพธ์ตามบริบท และจำกัดผลลัพธ์ไว้ที่ 10 รายการ
เรียกใช้การค้นหาต่อไปนี้
- คลิก Spaner 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