AlloyDB, वेक्टर खोज और Vertex AI की मदद से पेटेंट खोज ऐप्लिकेशन बनाने का मौका!

1. खास जानकारी

अलग-अलग इंडस्ट्री में, प्रतिस्पर्धी परिदृश्य को समझने, लाइसेंस लेने या हासिल करने के संभावित अवसरों की पहचान करने, और मौजूदा पेटेंट का उल्लंघन करने से बचने के लिए, पेटेंट रिसर्च एक अहम टूल है.

पेटेंट से जुड़ी रिसर्च काफ़ी लंबी और मुश्किल है. काम के इनोवेशन ढूंढने के लिए, अनगिनत तकनीकी एब्स्ट्रैक्ट को छांटना एक मुश्किल काम है. कीवर्ड पर आधारित पारंपरिक खोजें अक्सर गलत होती हैं और इनमें समय भी लगता है. ऐब्स्ट्रैक्ट लंबे और तकनीकी होते हैं, जिनकी वजह से मूल आइडिया को जल्दी से समझना मुश्किल हो जाता है. इस वजह से, हो सकता है कि शोधकर्ताओं को अहम पेटेंट न मिलें या वे काम के नतीजों पर समय बर्बाद करें.

इस क्रांति का राज़, वेक्टर सर्च में है. वेक्टर सर्च, कीवर्ड मैचिंग के सामान्य तरीके के बजाय, टेक्स्ट को अंकों के तौर पर दिखाती है. इसकी मदद से, हम सिर्फ़ इस्तेमाल किए गए शब्दों के आधार पर नहीं, बल्कि क्वेरी के मतलब के आधार पर भी खोज कर सकते हैं. साहित्य से जुड़ी खोजों के लिए, यह एक अहम बदलाव है. मान लीजिए कि आपको "पहनने लायक दिल की धड़कन की दर मापने वाले मॉनिटर" का पेटेंट मिलता है, भले ही दस्तावेज़ में उस वाक्यांश का इस्तेमाल न किया गया हो.

मकसद

इस कोडलैब में, हम AlloyDB, pgvector एक्सटेंशन, और इन-प्लेस Gemini 1.5 Pro, एम्बेडिंग, और वेक्टर सर्च का इस्तेमाल करके, पेटेंट खोजने की प्रोसेस को तेज़, आसान, और सटीक बनाने की कोशिश करेंगे.

आपको क्या बनाना होगा

इस लैब में, आपको ये काम करने होंगे:

  1. AlloyDB इंस्टेंस बनाना और 'पेटेंट का सार्वजनिक डेटासेट' लोड करना
  2. AlloyDB में pgvector और जनरेटिव एआई मॉडल एक्सटेंशन चालू करना
  3. अहम जानकारी से एम्बेड जनरेट करना
  4. उपयोगकर्ता के खोज टेक्स्ट के लिए, रीयल टाइम में कोसाइन (समानता रखने वाला) खोज करें
  5. समाधान को सर्वरलेस Cloud Functions में डिप्लॉय करना

इस डायग्राम में, डेटा के फ़्लो और इसे लागू करने के चरणों के बारे में बताया गया है.

8b73c40a0d12e194.png

 High level diagram representing the flow of the Patent Search Application with AlloyDB

ज़रूरी शर्तें

  • Chrome या Firefox जैसा ब्राउज़र
  • बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट.

2. शुरू करने से पहले

प्रोजेक्ट बनाना

  1. Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, Google Cloud प्रोजेक्ट चुनें या बनाएं.
  2. पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग की सुविधा चालू हो. किसी प्रोजेक्ट के लिए बिलिंग की सुविधा चालू है या नहीं, यह देखने का तरीका जानें .
  3. आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला एक कमांड-लाइन एनवायरमेंट है. यह पहले से लोड होकर, Google Cloud में आता है. Google Cloud कंसोल में सबसे ऊपर, 'Cloud Shell चालू करें' पर क्लिक करें.

Cloud Shell चालू करने के लिए बटन की इमेज

  1. Cloud Shell से कनेक्ट होने के बाद, यह जांच करें कि आपकी पुष्टि पहले ही हो चुकी है या नहीं. साथ ही, यह भी देखें कि प्रोजेक्ट आपके प्रोजेक्ट आईडी पर सेट है या नहीं. इसके लिए, यह कमांड इस्तेमाल करें:
gcloud auth list
  1. Cloud Shell में यह कमांड चलाकर पुष्टि करें कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है.
gcloud config list project
  1. अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए नीचे दिया गया कमांड इस्तेमाल करें:
gcloud config set project <YOUR_PROJECT_ID>
  1. ज़रूरी एपीआई चालू करें. Cloud Shell टर्मिनल में gcloud कमांड का इस्तेमाल किया जा सकता है:
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.

टेबल बनाना

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 के अनुमान वाले एंडपॉइंट को ऐक्सेस किया जा सकता है. इससे, एसक्यूएल में अनुमान पाने में मदद मिलती है. नीचे दिए गए डीडीएल चलाकर इन एक्सटेंशन को चालू करें:

CREATE EXTENSION vector;
CREATE EXTENSION google_ml_integration;

अनुमति दें

"एम्बेड करना" फ़ंक्शन पर 'कार्रवाई करें' की अनुमति देने के लिए, नीचे दिया गया स्टेटमेंट चलाएं:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

AlloyDB सेवा खाते को Vertex AI उपयोगकर्ता की भूमिका दें

Google Cloud IAM Console में जाकर, AlloyDB सेवा खाते (यह इस तरह दिखता है: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) को "Vertex AI उपयोगकर्ता" की भूमिका का ऐक्सेस दें. 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"

एम्बेडिंग को संग्रहित करने के लिए एक वेक्टर कॉलम जोड़ने के लिए तालिका में बदलाव करें

हमने अभी-अभी जो टेबल बनाई है उसमें abstract_embeddings फ़ील्ड जोड़ने के लिए, नीचे दिया गया डीडीएल चलाएं. इस कॉलम में टेक्स्ट की वेक्टर वैल्यू सेव की जा सकेंगी:

ALTER TABLE patents_data ADD column abstract_embeddings vector(768);

4. डेटाबेस में पेटेंट का डेटा लोड करना

BigQuery पर मौजूद Google के सार्वजनिक डेटासेट का इस्तेमाल, हमारे डेटासेट के तौर पर किया जाएगा. हम अपनी क्वेरी चलाने के लिए, AlloyDB Studio का इस्तेमाल करेंगे. alloydb-pgvector रिपॉज़िटरी में insert_into_patents_data.sql स्क्रिप्ट शामिल होती है. हम इस स्क्रिप्ट को चलाकर, पेटेंट का डेटा लोड करेंगे.

  1. Google Cloud Console में, AlloyDB पेज खोलें.
  2. अपना नया क्लस्टर चुनें और इंस्टेंस पर क्लिक करें.
  3. AlloyDB के नेविगेशन मेन्यू में, AlloyDB Studio पर क्लिक करें. अपने क्रेडेंशियल से साइन इन करें.
  4. दाईं ओर मौजूद नया टैब आइकॉन पर क्लिक करके नया टैब खोलें.
  5. ऊपर दी गई insert_into_patents_data.sql स्क्रिप्ट से, insert क्वेरी स्टेटमेंट को एडिटर में कॉपी करें. इस इस्तेमाल के उदाहरण का तुरंत डेमो देखने के लिए, 50 से 100 इंसर्ट स्टेटमेंट कॉपी किए जा सकते हैं.
  6. चलाएं पर क्लिक करें. आपकी क्वेरी के नतीजे, नतीजे टेबल में दिखते हैं.

5. पेटेंट डेटा के लिए एम्बेडिंग बनाएं

सबसे पहले, एम्बेड करने की सुविधा की जांच करने के लिए, यहां दी गई सैंपल क्वेरी चलाएं:

SELECT embedding( 'textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');

इससे, क्वेरी में मौजूद सैंपल टेक्स्ट के लिए, एम्बेडिंग वेक्टर दिखेगा. यह फ़्लोट के कलेक्शन जैसा दिखता है. यह इस तरह दिखता है:

25a1d7ef0e49e91e.png

abstract_embeddings वेक्टर फ़ील्ड को अपडेट करना

नीचे दिए गए डीएमएल को चलाकर टेबल में मौजूद पेटेंट ऐब्स्ट्रैक्ट को एम्बेड करके अपडेट करें:

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;

इस क्वेरी में,

  1. उपयोगकर्ता ने यह टेक्स्ट खोजा है: "नैचुरल लैंग्वेज प्रोसेसिंग से जुड़ा नया मशीन लर्निंग मॉडल".
  2. हम इसे एम्बेड करने वाले() तरीके में एम्बेड करने के तरीके में बदल रहे हैं. इसके लिए हम इस मॉडल का इस्तेमाल कर रहे हैं: textembedding-gecko@003.
  3. "<=>", COSINE SameITY दूरी के तरीके का इस्तेमाल करने के बारे में बताता है.
  4. हम एम्बेड करने के तरीके के नतीजे को वेक्टर टाइप में बदल रहे हैं, ताकि इसे डेटाबेस में सेव किए गए वेक्टर के साथ काम किया जा सके.
  5. LIMIT 10 से पता चलता है कि हम खोज के लिए इस्तेमाल हुए टेक्स्ट से सबसे ज़्यादा मिलते-जुलते 10 मैच चुन रहे हैं.

नतीजा यहां दिया गया है:

8e77af965fc787ae.png

जैसा कि आपको अपने नतीजों में दिख रहा है, मिलते-जुलते वीडियो, खोज के लिए इस्तेमाल किए गए टेक्स्ट से काफ़ी मिलते-जुलते हैं.

7. ऐप्लिकेशन को वेब पर उपलब्ध कराना

क्या आप इस ऐप्लिकेशन को वेब पर ले जाने के लिए तैयार हैं? नीचे दिए गए चरणों का पालन करें:

  1. Cloud Shell Editor पर जाएं और एडिटर के सबसे नीचे बाईं ओर (स्टेटस बार) मौजूद, "Cloud Code — साइन इन करें" आइकॉन पर क्लिक करें. अपना मौजूदा Google Cloud प्रोजेक्ट चुनें, जिसमें बिलिंग की सुविधा चालू हो. साथ ही, पक्का करें कि आपने Gemini में भी उसी प्रोजेक्ट में साइन इन किया हो (स्टेटस बार के दाएं कोने में).
  2. Cloud Code आइकॉन पर क्लिक करें और तब तक इंतज़ार करें, जब तक Cloud Code डायलॉग पॉप-अप न हो जाए. 'नया ऐप्लिकेशन' चुनें. इसके बाद, 'नया ऐप्लिकेशन बनाएं' पॉप-अप में, Cloud Functions ऐप्लिकेशन चुनें:

a800ee1eb6cb8a5b.png

नया ऐप्लिकेशन बनाएं पॉप-अप के पेज 2/2 में, Java: Hello World चुनें. इसके बाद, अपनी पसंद की जगह पर अपने प्रोजेक्ट का नाम "alloydb-pgvector" डालें और 'ठीक है' पर क्लिक करें:

5b09446ecf7d4f8d.png

  1. बनने वाले प्रोजेक्ट स्ट्रक्चर में, pom.xml खोजें और उसे रेपो फ़ाइल के कॉन्टेंट से बदलें. इसमें कुछ और डिपेंडेंसी के साथ-साथ ये डिपेंडेंसी भी होनी चाहिए:

2b3a3cdd75a57711.png

  1. 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);
}
  1. अभी-अभी बनाए गए Cloud फ़ंक्शन को डिप्लॉय करने के लिए, Cloud Shell टर्मिनल से यह कमांड चलाएं. इस कमांड का इस्तेमाल करके, पहले उस प्रोजेक्ट फ़ोल्डर पर जाएं जिसमें मौजूद फ़ाइल को खोलना है:
cd alloydb-pgvector

इसके बाद, यह कमांड चलाएं:

gcloud functions deploy patent-search --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http

अहम चरण:

डिप्लॉयमेंट सेट अप करने के बाद, आपको Google Cloud Run फ़ंक्शन कंसोल में फ़ंक्शन दिखने चाहिए. हाल ही में बनाए गए फ़ंक्शन को खोजें और उसे खोलें. इसके बाद, कॉन्फ़िगरेशन में बदलाव करें और इनमें बदलाव करें:

  1. रनटाइम, बिल्ड, कनेक्शन, और सुरक्षा सेटिंग पर जाएं
  2. टाइम आउट को 180 सेकंड तक बढ़ाएं
  3. कनेक्शन टैब पर जाएं:

4e83ec8a339cda08.png

  1. Ingress की सेटिंग में जाकर, पक्का करें कि "सभी ट्रैफ़िक की अनुमति दें" चुना गया हो.
  2. आउटगोइंग ट्रैफ़िक की सेटिंग में, नेटवर्क ड्रॉपडाउन पर क्लिक करें. इसके बाद, "नया वीपीसी कनेक्टर जोड़ें" विकल्प चुनें और पॉप-अप होने वाले डायलॉग बॉक्स में दिए गए निर्देशों का पालन करें:

8126ec78c343f199.png

  1. VPC कनेक्टर को कोई नाम दें. साथ ही, पक्का करें कि क्षेत्र एक ही हो. नेटवर्क की वैल्यू को डिफ़ॉल्ट के तौर पर छोड़ दें और सबनेट को कस्टम आईपी रेंज के तौर पर सेट करें. इसके लिए, 10.8.0.0 या मिलती-जुलती कोई भी आईपी रेंज इस्तेमाल करें.
  2. 'स्केलिंग सेटिंग दिखाएं' को बड़ा करें और पक्का करें कि आपने कॉन्फ़िगरेशन को इन पर सेट किया हो:

7baf980463a86a5c.png

  1. 'बनाएं' पर क्लिक करें. इसके बाद, यह कनेक्टर अब एग्ज़िट सेटिंग में दिखेगा.
  2. नया कनेक्टर चुनें
  3. सभी ट्रैफ़िक को इस 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"}'

नतीजा:

da3dcfac7d024031.png

Cloud Functions की सूची से भी इसकी जांच की जा सकती है. डिप्लॉय किया गया फ़ंक्शन चुनें और "टेस्टिंग" टैब पर जाएं. अनुरोध JSON के लिए, ट्रिगर करने वाले इवेंट सेक्शन को कॉन्फ़िगर करें टेक्स्ट बॉक्स में, यह जानकारी डालें:

{"search": "A new Natural Language Processing related Machine Learning Model"}

'फ़ंक्शन की जांच करें' बटन पर क्लिक करें. इसके बाद, आपको पेज की दाईं ओर नतीजा दिखेगा:

e21f806d661996ff.png

हो गया! यह AlloyDB डेटा पर एम्बेडिंग मॉडल का उपयोग करके समानता वेक्टर खोज को निष्पादित करना आसान है.

9. व्यवस्थित करें

इस पोस्ट में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाएं, इसके लिए यह तरीका अपनाएं:

  1. Google Cloud Console में, मैनेज करें पर जाएं
  2. संसाधन पेज पर जाएं.
  3. प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे मिटाना है. इसके बाद, मिटाएं पर क्लिक करें.
  4. डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए बंद करें पर क्लिक करें.

10. बधाई हो

बधाई हो! आपने AlloyDB, pgvector, और वेक्टर सर्च का इस्तेमाल करके, मिलती-जुलती चीज़ों की खोज की है. AlloyDB, Vertex AI, और वेक्टर सर्च की सुविधाओं को जोड़कर, हमने साहित्य से जुड़ी खोजों को ऐक्सेस करने लायक, असरदार, और ज़रूरत के हिसाब से बनाने में काफ़ी तरक्की की है.