1. ภาพรวม
การศึกษาเกี่ยวกับสิทธิบัตรเป็นเครื่องมือสําคัญในการทําความเข้าใจภาพรวมการแข่งขัน ระบุโอกาสในการขอใบอนุญาตหรือซื้อกิจการ และหลีกเลี่ยงการละเมิดสิทธิบัตรที่มีอยู่ ในอุตสาหกรรมต่างๆ
การวิจัยเกี่ยวกับสิทธิบัตรนั้นกว้างขวางและสลับซับซ้อน การคัดสรรข้อมูลสรุปทางเทคนิคจำนวนมหาศาลเพื่อค้นหานวัตกรรมที่เกี่ยวข้องเป็นงานที่ยาก การค้นหาแบบดั้งเดิมที่อิงตามคีย์เวิร์ดมักไม่ถูกต้องและใช้เวลานาน ข้อมูลสรุปมีความยาวและเป็นเรื่องเทคนิค ทำให้เข้าใจแนวคิดหลักได้ยาก ซึ่งอาจทำให้นักวิจัยพลาดสิทธิบัตรสำคัญหรือเสียเวลากับผลการค้นหาที่ไม่เกี่ยวข้อง
เคล็ดลับที่ทำให้เกิดการเปลี่ยนแปลงนี้คือ Vector Search การค้นหาเวกเตอร์จะเปลี่ยนข้อความให้อยู่ในรูปแบบตัวเลข (การฝัง) แทนการจับคู่คีย์เวิร์ดแบบง่าย วิธีนี้ช่วยให้เราค้นหาตามความหมายของข้อความค้นหา ไม่ใช่แค่คำที่เฉพาะเจาะจงที่ใช้ เครื่องมือนี้ถือเป็นการเปลี่ยนแปลงครั้งสำคัญในโลกการค้นหาข้อมูลทางวิชาการ ลองจินตนาการว่าคุณพบสิทธิบัตรสำหรับ "เครื่องวัดอัตราการเต้นของหัวใจแบบสวมใส่ได้" แม้ว่าเอกสารจะไม่ได้ใช้วลีดังกล่าวก็ตาม
วัตถุประสงค์
ในโค้ดแล็บนี้ เราจะพยายามทำให้กระบวนการค้นหาสิทธิบัตรรวดเร็วขึ้น ใช้งานง่ายขึ้น และแม่นยำอย่างไม่น่าเชื่อด้วยการใช้ AlloyDB, ส่วนขยาย pgvector และ Gemini 1.5 Pro, การฝัง และ Vector Search ที่มีอยู่
สิ่งที่คุณจะสร้าง
คุณจะทําสิ่งต่อไปนี้ได้
- สร้างอินสแตนซ์ AlloyDB และโหลดข้อมูลชุดข้อมูลสาธารณะของสิทธิบัตร
- เปิดใช้ส่วนขยาย pgvector และโมเดล Generative AI ใน AlloyDB
- สร้างการฝังจากข้อมูลเชิงลึก
- ทำการค้นหาความคล้ายคลึงแบบโคไซน์แบบเรียลไทม์สำหรับข้อความค้นหาของผู้ใช้
- ติดตั้งใช้งานโซลูชันใน Cloud Functions แบบ Serverless
แผนภาพต่อไปนี้แสดงขั้นตอนและขั้นตอนต่างๆ ของข้อมูลที่เกี่ยวข้องกับการใช้งาน
High level diagram representing the flow of the Patent Search Application with AlloyDB
ข้อกำหนด
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>
- เปิดใช้ API ที่จำเป็น คุณสามารถใช้คำสั่ง gcloud ในเทอร์มินัล Cloud Shell ได้โดยทำดังนี้
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com
อีกทางเลือกหนึ่งสำหรับคำสั่ง gcloud คือผ่านคอนโซลโดยค้นหาผลิตภัณฑ์แต่ละรายการหรือใช้ลิงก์นี้
โปรดดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ
3. เตรียมฐานข้อมูล AlloyDB
มาสร้างคลัสเตอร์ อินสแตนซ์ และตาราง AlloyDB ที่ระบบจะโหลดชุดข้อมูลสิทธิบัตรกัน
สร้างออบเจ็กต์ AlloyDB
สร้างคลัสเตอร์และอินสแตนซ์ที่มีรหัสคลัสเตอร์ "patent-cluster
", รหัสผ่าน "alloydb
", เข้ากันได้กับ PostgreSQL 15 และภูมิภาคเป็น "us-central1
" ตั้งค่าเครือข่ายเป็น "default
" ตั้งค่ารหัสอินสแตนซ์เป็น "patent-instance
" คลิก "สร้างคลัสเตอร์" โปรดดูรายละเอียดการสร้างคลัสเตอร์ในลิงก์นี้ https://cloud.google.com/alloydb/docs/cluster-create
สร้างตาราง
คุณสามารถสร้างตารางโดยใช้คำสั่ง DDL ด้านล่างใน AlloyDB Studio
CREATE TABLE patents_data ( id VARCHAR(25), type VARCHAR(25), number VARCHAR(20), country VARCHAR(2), date VARCHAR(20), abstract VARCHAR(300000), title VARCHAR(100000), kind VARCHAR(5), num_claims BIGINT, filename VARCHAR(100), withdrawn BIGINT) ;
เปิดใช้ส่วนขยาย
เราจะใช้ส่วนขยาย pgvector และ google_ml_integration ในการสร้างแอปค้นหาสิทธิบัตร ส่วนขยาย pgvector ช่วยให้คุณจัดเก็บและค้นหาการฝังเวกเตอร์ได้ ส่วนขยาย google_ml_integration มีฟังก์ชันที่คุณใช้เข้าถึงปลายทางการคาดการณ์ Vertex AI เพื่อรับการคาดการณ์ใน SQL เปิดใช้ส่วนขยายเหล่านี้โดยเรียกใช้ DDL ต่อไปนี้
CREATE EXTENSION vector;
CREATE EXTENSION google_ml_integration;
ให้สิทธิ์
เรียกใช้คำสั่งด้านล่างเพื่ออนุญาตให้ดำเนินการกับฟังก์ชัน "embedding"
GRANT EXECUTE ON FUNCTION embedding TO postgres;
มอบบทบาทผู้ใช้ Vertex AI ให้กับบัญชีบริการ AlloyDB
จากคอนโซล IAM ของ Google Cloud ให้มอบสิทธิ์เข้าถึงบทบาท "ผู้ใช้ Vertex AI" ให้กับบัญชีบริการ AlloyDB (ซึ่งมีลักษณะดังนี้ service-<<PROJECT_NUMBER >>@gcp-sa-alloydb.iam.gserviceaccount.com) PROJECT_NUMBER จะมีหมายเลขโปรเจ็กต์ของคุณ
หรือจะให้สิทธิ์เข้าถึงโดยใช้คำสั่ง gcloud ก็ได้ โดยทำดังนี้
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
แก้ไขตารางเพื่อเพิ่มคอลัมน์เวกเตอร์สำหรับจัดเก็บการฝัง
เรียกใช้ DDL ด้านล่างเพื่อเพิ่มฟิลด์ abstract_embeddings ลงในตารางที่เราเพิ่งสร้างขึ้น คอลัมน์นี้จะอนุญาตให้จัดเก็บค่าเวกเตอร์ของข้อความ
ALTER TABLE patents_data ADD column abstract_embeddings vector(768);
4. โหลดข้อมูลสิทธิบัตรลงในฐานข้อมูล
เราจะใช้ชุดข้อมูลสาธารณะของ Google Patents ใน BigQuery เป็นชุดข้อมูล เราจะใช้ AlloyDB Studio เพื่อเรียกใช้การค้นหา ที่เก็บข้อมูล alloydb-pgvector มีสคริปต์ insert_into_patents_data.sql
ที่เราจะใช้โหลดข้อมูลสิทธิบัตร
- เปิดหน้า AlloyDB ในคอนโซล Google Cloud
- เลือกคลัสเตอร์ที่สร้างขึ้นใหม่ แล้วคลิกอินสแตนซ์
- ในเมนูการนำทางของ AlloyDB ให้คลิก AlloyDB Studio ลงชื่อเข้าใช้ด้วยข้อมูลเข้าสู่ระบบ
- เปิดแท็บใหม่โดยคลิกไอคอนแท็บใหม่ทางด้านขวา
- คัดลอกคำสั่งการค้นหา
insert
จากสคริปต์insert_into_patents_data.sql
ที่กล่าวถึงข้างต้นไปยังเครื่องมือแก้ไข คุณสามารถคัดลอกคำสั่งแทรก 50-100 รายการเพื่อสาธิตกรณีการใช้งานนี้อย่างรวดเร็ว - คลิกเรียกใช้ ผลการค้นหาจะปรากฏในตารางผลลัพธ์
5. สร้างการฝังสําหรับข้อมูลสิทธิบัตร
ก่อนอื่นมาทดสอบฟังก์ชันการฝังโดยเรียกใช้การค้นหาตัวอย่างต่อไปนี้
SELECT embedding( 'textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');
ซึ่งจะแสดงผลเวกเตอร์การฝังที่ดูเหมือนอาร์เรย์ของตัวเลขทศนิยมสำหรับข้อความตัวอย่างในการค้นหา มีลักษณะดังนี้
อัปเดตช่องเวกเตอร์ abstract_embeddings
เรียกใช้ DML ด้านล่างเพื่ออัปเดตข้อมูลสรุปเกี่ยวกับสิทธิบัตรในตารางด้วยข้อมูลฝังที่เกี่ยวข้อง
UPDATE patents_data set abstract_embeddings = embedding( 'textembedding-gecko@003', abstract);
6. ทำการค้นหาเวกเตอร์
เมื่อตาราง ข้อมูล และการฝังพร้อมแล้ว ให้ทําการค้นหาเวกเตอร์แบบเรียลไทม์สําหรับข้อความค้นหาของผู้ใช้ คุณสามารถทดสอบได้โดยเรียกใช้การค้นหาด้านล่าง
SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('textembedding-gecko@003', 'A new Natural Language Processing related Machine Learning Model')::vector LIMIT 10;
ในข้อความค้นหานี้
- ข้อความค้นหาของผู้ใช้คือ "โมเดลแมชชีนเลิร์นนิงใหม่ที่เกี่ยวข้องกับการประมวลผลภาษาธรรมชาติ"
- เรากําลังแปลงเป็นรูปแบบฝังในเมธอด embedding() โดยใช้โมเดล textembedding-gecko@003
- "<=>" แสดงถึงการใช้วิธีการวัดระยะทางแบบ COSINE SIMILARITY
- เรากําลังแปลงผลลัพธ์ของวิธีการฝังเป็นประเภทเวกเตอร์เพื่อให้เข้ากันได้กับเวกเตอร์ที่จัดเก็บไว้ในฐานข้อมูล
- LIMIT 10 แสดงว่าเรากำลังเลือกข้อความที่ตรงกันที่สุด 10 รายการจากข้อความค้นหา
ผลลัพธ์มีดังนี้
ดังที่คุณเห็นในผลการค้นหา รายการที่ตรงกันนั้นใกล้เคียงกับข้อความค้นหามาก
7. นำไปใช้กับเว็บ
พร้อมที่จะย้ายแอปนี้ไปยังเว็บไหม โดยทำตามขั้นตอนต่อไปนี้
- ไปที่เครื่องมือแก้ไข Cloud Shell แล้วคลิกไอคอน "Cloud Code — ลงชื่อเข้าใช้" ที่มุมซ้ายล่าง (แถบสถานะ) ของเครื่องมือแก้ไข เลือกโปรเจ็กต์ Google Cloud ปัจจุบันที่เปิดใช้การเรียกเก็บเงิน และตรวจสอบว่าคุณได้ลงชื่อเข้าใช้โปรเจ็กต์เดียวกันจาก Gemini ด้วย (ที่มุมขวาของแถบสถานะ)
- คลิกไอคอน Cloud Code แล้วรอจนกว่ากล่องโต้ตอบ Cloud Code จะปรากฏขึ้น เลือกแอปพลิเคชันใหม่ และในป๊อปอัปสร้างแอปพลิเคชันใหม่ ให้เลือกแอปพลิเคชัน Cloud Functions
ในหน้า 2/2 ของป๊อปอัปสร้างแอปพลิเคชันใหม่ ให้เลือก Java: Hello World แล้วป้อนชื่อโปรเจ็กต์เป็น "alloydb-pgvector" ในตำแหน่งที่ต้องการ แล้วคลิก "ตกลง"
- ในโครงสร้างโปรเจ็กต์ที่ได้ ให้ค้นหา pom.xml แล้วแทนที่ด้วยเนื้อหาจากไฟล์ repo ไฟล์ดังกล่าวควรมีการพึ่งพาต่อไปนี้และอื่นๆ อีก 2-3 อย่าง
- แทนที่ไฟล์ HelloWorld.java ด้วยเนื้อหาจากไฟล์ repo
โปรดทราบว่าคุณต้องแทนที่ค่าด้านล่างด้วยค่าจริง
String ALLOYDB_DB = "postgres";
String ALLOYDB_USER = "postgres";
String ALLOYDB_PASS = "*****";
String ALLOYDB_INSTANCE_NAME = "projects/<<YOUR_PROJECT_ID>>/locations/us-central1/clusters/<<YOUR_CLUSTER>>/instances/<<YOUR_INSTANCE>>";
//Replace YOUR_PROJECT_ID, YOUR_CLUSTER, YOUR_INSTANCE with your actual values
โปรดทราบว่าฟังก์ชันนี้ต้องการข้อความค้นหาเป็นพารามิเตอร์อินพุตที่มีคีย์ "search" และในการนำใช้งานนี้ เราจะแสดงผลรายการที่ตรงกันที่สุดเพียงรายการเดียวจากฐานข้อมูล
// Get the request body as a JSON object.
JsonObject requestJson = new Gson().fromJson(request.getReader(), JsonObject.class);
String searchText = requestJson.get("search").getAsString();
//Sample searchText: "A new Natural Language Processing related Machine Learning Model";
BufferedWriter writer = response.getWriter();
String result = "";
HikariDataSource dataSource = AlloyDbJdbcConnector();
try (Connection connection = dataSource.getConnection()) {
//Retrieve Vector Search by text (converted to embeddings) using "Cosine Similarity" method
try (PreparedStatement statement = connection.prepareStatement("SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('textembedding-gecko@003', '" + searchText + "' )::vector LIMIT 1")) {
ResultSet resultSet = statement.executeQuery();
resultSet.next();
String lit = resultSet.getString("literature");
result = result + lit + "\n";
System.out.println("Matching Literature: " + lit);
}
writer.write("Here is the closest match: " + result);
}
- หากต้องการทำให้ Cloud Function ที่คุณเพิ่งสร้างขึ้นใช้งานได้ ให้เรียกใช้คำสั่งต่อไปนี้จากเทอร์มินัล Cloud Shell อย่าลืมไปที่โฟลเดอร์โปรเจ็กต์ที่เกี่ยวข้องก่อนโดยใช้คำสั่งต่อไปนี้
cd alloydb-pgvector
จากนั้นเรียกใช้คําสั่งต่อไปนี้
gcloud functions deploy patent-search --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http
ขั้นตอนสำคัญ:
เมื่อเริ่มทำให้ใช้งานได้แล้ว คุณควรจะเห็นฟังก์ชันในคอนโซล Cloud Run Functions ของ Google ค้นหาฟังก์ชันที่สร้างขึ้นใหม่แล้วเปิดฟังก์ชันนั้น แก้ไขการกําหนดค่า และทําการเปลี่ยนแปลงต่อไปนี้
- ไปที่การตั้งค่ารันไทม์ บิลด์ การเชื่อมต่อ และความปลอดภัย
- เพิ่มการหมดเวลาเป็น 180 วินาที
- ไปที่แท็บการเชื่อมต่อ
- ในส่วนการตั้งค่า Ingress ให้ตรวจสอบว่าได้เลือก "Allow all traffic" แล้ว
- ในส่วนการตั้งค่าขาออก ให้คลิกเมนูแบบเลื่อนลงของเครือข่าย แล้วเลือกตัวเลือก "เพิ่มตัวเชื่อมต่อ VPC ใหม่" แล้วทําตามวิธีการที่คุณเห็นในกล่องโต้ตอบที่ปรากฏขึ้น
- ตั้งชื่อเครื่องมือเชื่อมต่อ VPC และตรวจสอบว่าภูมิภาคตรงกับอินสแตนซ์ของคุณ ปล่อยค่าเครือข่ายเป็นค่าเริ่มต้นและตั้งค่าซับเน็ตเป็นช่วง IP ที่กําหนดเองซึ่งมีช่วง IP 10.8.0.0 หรือค่าที่คล้ายกันซึ่งพร้อมใช้งาน
- ขยาย "แสดงการตั้งค่าการปรับขนาด" และตรวจสอบว่าคุณได้กำหนดค่าเป็นค่าต่อไปนี้อย่างถูกต้อง
- คลิก "สร้าง" แล้วเครื่องมือเชื่อมต่อนี้จะแสดงอยู่ในการตั้งค่าการส่งออก
- เลือกเครื่องมือเชื่อมต่อที่สร้างขึ้นใหม่
- เลือกให้กำหนดเส้นทางการรับส่งข้อมูลทั้งหมดผ่านเครื่องมือเชื่อมต่อ VPC นี้
8. ทดสอบแอปพลิเคชัน
เมื่อติดตั้งใช้งานแล้ว คุณควรเห็นปลายทางในรูปแบบต่อไปนี้
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/patent-search
คุณสามารถทดสอบได้จากเทอร์มินัล Cloud Shell โดยเรียกใช้คำสั่งต่อไปนี้
gcloud functions call patent-search --region=us-central1 --gen2 --data '{"search": "A new Natural Language Processing related Machine Learning Model"}'
ผลลัพธ์:
นอกจากนี้ คุณยังทดสอบจากรายการ Cloud Functions ได้ด้วย เลือกฟังก์ชันที่ติดตั้งใช้งานแล้วไปที่แท็บ "การทดสอบ" ในกล่องข้อความส่วนกำหนดค่าเหตุการณ์เรียกให้แสดงสําหรับคําขอ JSON ให้ป้อนข้อมูลต่อไปนี้
{"search": "A new Natural Language Processing related Machine Learning Model"}
คลิกปุ่ม "ทดสอบฟังก์ชัน" แล้วคุณจะเห็นผลลัพธ์ทางด้านขวาของหน้า
เท่านี้ก็เรียบร้อย เพียงเท่านี้คุณก็ทำการค้นหาเวกเตอร์ความคล้ายคลึงโดยใช้รูปแบบการฝังในข้อมูล AlloyDB ได้แล้ว
9. ล้างข้อมูล
โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้
- ในคอนโซล Google Cloud ให้ไปที่จัดการ
- หน้าแหล่งข้อมูล
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเพื่อลบโปรเจ็กต์
10. ขอแสดงความยินดี
ยินดีด้วย คุณได้ทำการค้นหาความคล้ายคลึงโดยใช้ AlloyDB, pgvector และการค้นหาเวกเตอร์เรียบร้อยแล้ว การรวมความสามารถของ AlloyDB, Vertex AI และ Vector Search ช่วยให้เราสามารถก้าวไปข้างหน้าได้อย่างก้าวกระโดดในการทำให้การค้นหางานเขียนเข้าถึงได้ มีประสิทธิภาพ และตรงตามความต้องการอย่างแท้จริง