1. ภาพรวม
การวิจัยสิทธิบัตรเป็นเครื่องมือสำคัญในอุตสาหกรรมต่างๆ ในการทำความเข้าใจสภาพแวดล้อมทางการแข่งขัน ระบุโอกาสในการออกใบอนุญาตหรือการเข้าซื้อกิจการที่อาจเกิดขึ้น และหลีกเลี่ยงการละเมิดสิทธิบัตรที่มีอยู่
การค้นหาข้อมูลสิทธิบัตรนั้นมีข้อมูลมากมายและซับซ้อน การกลั่นกรองบทคัดย่อทางเทคนิคจำนวนนับไม่ถ้วนเพื่อค้นหานวัตกรรมที่เกี่ยวข้องเป็นงานที่น่ากังวล การค้นหาแบบเดิมที่อิงตามคีย์เวิร์ดมักไม่แม่นยำและใช้เวลานาน บทคัดย่อมีความยาวและเป็นเชิงเทคนิค ทำให้เข้าใจแนวคิดหลักได้อย่างรวดเร็วได้ยาก ซึ่งอาจทำให้ผู้วิจัยพลาดสิทธิบัตรสำคัญหรือเสียเวลาไปกับผลการค้นหาที่ไม่เกี่ยวข้อง
วัตถุประสงค์
ในโค้ดแล็บนี้ เราจะมุ่งมั่นที่จะทำให้กระบวนการค้นหาสิทธิบัตรเร็วขึ้น ใช้งานง่ายขึ้น และแม่นยำอย่างยิ่งด้วยการใช้ประโยชน์จาก Spanner รวมถึง Gemini 1.0 Pro, Embeddings และ Vector Search ในตัว
สิ่งที่คุณจะสร้าง
ในส่วนหนึ่งของห้องทดลองนี้ คุณจะได้ทำสิ่งต่อไปนี้
- สร้างอินสแตนซ์ Spanner
- โหลดชุดข้อมูลสาธารณะของ Google Patents
- สร้างโมเดลระยะไกลสำหรับการฝังข้อความด้วยโมเดล 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>
- ตรวจสอบว่าได้เปิดใช้ 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
- สร้างอินสแตนซ์ Spanner ชื่อ
spanner-vertex
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
สร้างฐานข้อมูล
- เปิดหน้า Spanner ใน Google Cloud Console
- เลือกอินสแตนซ์
spanner-vertexจากรายการ - ในส่วนฐานข้อมูล ให้คลิกสร้างฐานข้อมูล
- ตั้งชื่อฐานข้อมูลเป็น patents
- คลิกสร้างเพื่อสร้างฐานข้อมูล
สร้างตาราง
- เปิดหน้า Spanner ใน Google Cloud Console
- เลือกอินสแตนซ์
spanner-vertexจากรายการ - เลือก
patentsฐานข้อมูล - คลิกสร้างตารางในแท็บตาราง หน้า Spanner Studio จะเปิดขึ้น
- เปิดแท็บใหม่โดยคลิกแท็บ SQL Editor ใหม่
- เรียกใช้การค้นหาต่อไปนี้
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 Console
- เลือกอินสแตนซ์
spanner-vertexจากรายการ - เลือก
patentsฐานข้อมูล - ในเมนูการนำทาง ให้คลิก Spanner Studio บานหน้าต่าง Explorer จะแสดงรายการออบเจ็กต์ในฐานข้อมูล
- เปิดแท็บใหม่โดยคลิกแท็บ SQL Editor ใหม่
- คัดลอก
insertคำสั่งค้นหาจากสคริปต์insert_into_patents_data.sqlในตัวแก้ไข คุณสามารถคัดลอกคำสั่ง INSERT 50-100 รายการเพื่อสาธิตกรณีการใช้งานนี้อย่างรวดเร็ว - คลิกเรียกใช้ ผลลัพธ์ของคำค้นหาจะปรากฏในตารางผลลัพธ์
5. สร้างโมเดลระยะไกลสำหรับ Gemini 1.0 Pro
หลังจากโหลดข้อมูลสิทธิบัตรลงในฐานข้อมูลแล้ว เราจะสร้างโมเดลระยะไกลที่ใช้โมเดล Gemini 1.0 Pro Vertex AI เพื่อสร้างชุดชื่อและคีย์เวิร์ดที่สรุปแล้ว
เรียกใช้คำสั่ง DDL ต่อไปนี้ในโปรแกรมแก้ไข Spanner Studio
- ในเมนูการนำทาง ให้คลิก Spanner Studio บานหน้าต่าง Explorer จะแสดงรายการออบเจ็กต์ในฐานข้อมูล
- เปิดแท็บใหม่โดยคลิกแท็บ SQL Editor ใหม่
- เรียกใช้การค้นหาต่อไปนี้
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. สร้างโมเดลระยะไกลสำหรับข้อความฝัง
ผลลัพธ์ของขั้นตอนก่อนหน้าประกอบด้วยข้อมูลสรุปแบบรวมที่มีชื่อและคีย์เวิร์ด เราจะแปลงคำตอบนี้เป็น Embedding ซึ่งจะช่วยให้เราสร้างการจับคู่ที่เหมาะสมเมื่อเรียกใช้การค้นหา เราจะใช้ Text Embedding Gecko 003 model จาก Vertex AI จากระยะไกลจาก Spanner
- ในเมนูการนำทาง ให้คลิก Spanner Studio บานหน้าต่าง Explorer จะแสดงรายการออบเจ็กต์ในฐานข้อมูล
- เปิดแท็บใหม่โดยคลิกแท็บ SQL Editor ใหม่
- เรียกใช้การค้นหาต่อไปนี้
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 จากบทคัดย่อสิทธิบัตร
เราจะสร้างpatents_data_geminiตารางเพื่อจัดเก็บข้อมูลเชิงลึกแบบ Generative ที่เราจะสร้างโดยใช้โมเดล Gemini 1.5 Pro ที่เราสร้างไว้ก่อนหน้านี้
สร้างตาราง
- ในเมนูการนำทาง ให้คลิก Spanner Studio บานหน้าต่าง Explorer จะแสดงรายการออบเจ็กต์ในฐานข้อมูล
- เปิดแท็บใหม่โดยคลิกแท็บ SQL Editor ใหม่
- เรียกใช้การค้นหาต่อไปนี้
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', ในคำค้นหา
หมายเหตุ: หากคุณเรียกใช้การค้นหาส่วนวิธีแก้ปัญหาด้านบนแทน DDL ของ INSERT ให้ข้ามส่วนนี้และเรียกใช้การค้นหา SELECT สุดท้ายในหน้านี้แทน
มาเรียกใช้คำค้นหาต่อไปนี้เพื่อยืนยันผลลัพธ์ของข้อมูลเชิงลึกกัน
select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;
ผลลัพธ์ที่ได้มีดังนี้

หมายเหตุ: หากเรียกใช้การค้นหาส่วนวิธีแก้ปัญหาชั่วคราว ให้แทนที่ชื่อตารางในการค้นหา SELECT ด้านบนด้วยการค้นหาในส่วนวิธีแก้ปัญหาชั่วคราว ดังนั้นคุณจึงควรเรียกใช้คำสั่งด้านล่างแทน
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 Editor ใหม่
- เรียกใช้การค้นหาต่อไปนี้เพื่อสร้างตาราง
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 Editor ใหม่
- เรียกใช้การค้นหาต่อไปนี้เพื่อสร้างตาราง
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 ได้ เนื่องจากข้อผิดพลาดเกี่ยวกับโควต้าในคำสั่ง INSERT แรกๆ รายการใดรายการหนึ่ง
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 Console ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ หากไม่ต้องการลบโปรเจ็กต์ ให้ลบเฉพาะอินสแตนซ์ที่คุณสร้างใน Spanner
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์
11. ขอแสดงความยินดี
ขอแสดงความยินดี คุณค้นหาความคล้ายคลึงโดยใช้การค้นหาเวกเตอร์ในตัวของ Spanner ได้สำเร็จ นอกจากนี้ คุณยังเห็นว่าการทำงานกับโมเดลการฝังและ LLM นั้นง่ายเพียงใดในการมอบฟังก์ชัน Generative AI โดยตรงโดยใช้ SQL
ขั้นตอนต่อไปคืออะไร
ดูข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์การค้นหาเวกเตอร์เพื่อนบ้านที่ใกล้ที่สุดแบบตรง (KNN) ของ Spanner ได้ที่ https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
นอกจากนี้ คุณยังอ่านข้อมูลเพิ่มเติมเกี่ยวกับวิธีทำการคาดการณ์ออนไลน์ด้วย SQL โดยใช้การผสานรวม Vertex AI ของ Spanner ได้ที่ https://cloud.google.com/spanner/docs/ml